559 | | if not os.path.exists(settings.JING_PATH): |
560 | | raise Exception, "%s not found!" % settings.JING_PATH |
561 | | p = os.popen('%s -c %s %s' % (settings.JING_PATH, self.schema_path, filename)) |
562 | | errors = [line.strip() for line in p.readlines()] |
563 | | p.close() |
564 | | os.unlink(filename) |
565 | | display_errors = [] |
566 | | lines = field_data.split('\n') |
567 | | for error in errors: |
568 | | ignored, line, level, message = error.split(':', 3) |
569 | | # Scrape the Jing error messages to reword them more nicely. |
570 | | m = re.search(r'Expected "(.*?)" to terminate element starting on line (\d+)', message) |
571 | | if m: |
572 | | display_errors.append(_('Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "%(start)s".)') % \ |
573 | | {'tag':m.group(1).replace('/', ''), 'line':m.group(2), 'start':lines[int(m.group(2)) - 1][:30]}) |
574 | | continue |
575 | | if message.strip() == 'text not allowed here': |
576 | | display_errors.append(_('Some text starting on line %(line)s is not allowed in that context. (Line starts with "%(start)s".)') % \ |
577 | | {'line':line, 'start':lines[int(line) - 1][:30]}) |
578 | | continue |
579 | | m = re.search(r'\s*attribute "(.*?)" not allowed at this point; ignored', message) |
580 | | if m: |
581 | | display_errors.append(_('"%(attr)s" on line %(line)s is an invalid attribute. (Line starts with "%(start)s".)') % \ |
582 | | {'attr':m.group(1), 'line':line, 'start':lines[int(line) - 1][:30]}) |
583 | | continue |
584 | | m = re.search(r'\s*unknown element "(.*?)"', message) |
585 | | if m: |
586 | | display_errors.append(_('"<%(tag)s>" on line %(line)s is an invalid tag. (Line starts with "%(start)s".)') % \ |
587 | | {'tag':m.group(1), 'line':line, 'start':lines[int(line) - 1][:30]}) |
588 | | continue |
589 | | if message.strip() == 'required attributes missing': |
590 | | display_errors.append(_('A tag on line %(line)s is missing one or more required attributes. (Line starts with "%(start)s".)') % \ |
591 | | {'line':line, 'start':lines[int(line) - 1][:30]}) |
592 | | continue |
593 | | m = re.search(r'\s*bad value for attribute "(.*?)"', message) |
594 | | if m: |
595 | | display_errors.append(_('The "%(attr)s" attribute on line %(line)s has an invalid value. (Line starts with "%(start)s".)') % \ |
596 | | {'attr':m.group(1), 'line':line, 'start':lines[int(line) - 1][:30]}) |
597 | | continue |
598 | | # Failing all those checks, use the default error message. |
599 | | display_error = 'Line %s: %s [%s]' % (line, message, level.strip()) |
600 | | display_errors.append(display_error) |
| 559 | if os.path.exists(settings.JING_PATH): |
| 560 | p = os.popen('%s -c %s %s' % (settings.JING_PATH, self.schema_path, filename)) |
| 561 | errors = [line.strip() for line in p.readlines()] |
| 562 | p.close() |
| 563 | os.unlink(filename) |
| 564 | display_errors = [] |
| 565 | lines = field_data.split('\n') |
| 566 | for error in errors: |
| 567 | ignored, line, level, message = error.split(':', 3) |
| 568 | # Scrape the Jing error messages to reword them more nicely. |
| 569 | m = re.search(r'Expected "(.*?)" to terminate element starting on line (\d+)', message) |
| 570 | if m: |
| 571 | display_errors.append(_('Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "%(start)s".)') % \ |
| 572 | {'tag':m.group(1).replace('/', ''), 'line':m.group(2), 'start':lines[int(m.group(2)) - 1][:30]}) |
| 573 | continue |
| 574 | if message.strip() == 'text not allowed here': |
| 575 | display_errors.append(_('Some text starting on line %(line)s is not allowed in that context. (Line starts with "%(start)s".)') % \ |
| 576 | {'line':line, 'start':lines[int(line) - 1][:30]}) |
| 577 | continue |
| 578 | m = re.search(r'\s*attribute "(.*?)" not allowed at this point; ignored', message) |
| 579 | if m: |
| 580 | display_errors.append(_('"%(attr)s" on line %(line)s is an invalid attribute. (Line starts with "%(start)s".)') % \ |
| 581 | {'attr':m.group(1), 'line':line, 'start':lines[int(line) - 1][:30]}) |
| 582 | continue |
| 583 | m = re.search(r'\s*unknown element "(.*?)"', message) |
| 584 | if m: |
| 585 | display_errors.append(_('"<%(tag)s>" on line %(line)s is an invalid tag. (Line starts with "%(start)s".)') % \ |
| 586 | {'tag':m.group(1), 'line':line, 'start':lines[int(line) - 1][:30]}) |
| 587 | continue |
| 588 | if message.strip() == 'required attributes missing': |
| 589 | display_errors.append(_('A tag on line %(line)s is missing one or more required attributes. (Line starts with "%(start)s".)') % \ |
| 590 | {'line':line, 'start':lines[int(line) - 1][:30]}) |
| 591 | continue |
| 592 | m = re.search(r'\s*bad value for attribute "(.*?)"', message) |
| 593 | if m: |
| 594 | display_errors.append(_('The "%(attr)s" attribute on line %(line)s has an invalid value. (Line starts with "%(start)s".)') % \ |
| 595 | {'attr':m.group(1), 'line':line, 'start':lines[int(line) - 1][:30]}) |
| 596 | continue |
| 597 | # Failing all those checks, use the default error message. |
| 598 | display_error = 'Line %s: %s [%s]' % (line, message, level.strip()) |
| 599 | display_errors.append(display_error) |
| 600 | elif os.path.exists(settings.RNV_PATH): |
| 601 | p = os.popen('%s -q %s %s 2>&1' % (settings.RNV_PATH, self.schema_path, filename)) |
| 602 | errors = [line.strip() for line in p.readlines()] |
| 603 | p.close() |
| 604 | os.unlink(filename) |
| 605 | display_errors = [] |
| 606 | lines = field_data.split('\n') |
| 607 | for error in errors: |
| 608 | fname, line, col, message = error.split(':', 3) |
| 609 | start = lines[int(line) - 1][:max(int(col) + 10, 30)] |
| 610 | display_error = 'Line %s:%s - %s (Line starts with "%s")' % (line, col, message, start) |
| 611 | display_errors.append(display_error) |
| 612 | else: |
| 613 | raise Exception, "Neither %s nor %s found!" % (settings.JING_PATH, settings.RNV_PATH) |