1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
#!/usr/bin/env python3
# encoding: utf-8
"""
ParserException.py
Created by Graham Dennis on 2007-10-14.
Copyright (c) 2007-2012, Graham Dennis
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
import sys
import textwrap
def indentMessageWithPrefix(prefix, msg):
textWrapper = textwrap.TextWrapper(subsequent_indent=' '*len(prefix))
msgLines = msg.split('\n\n')
result = [textWrapper.fill(prefix + msgLines[0])]
textWrapper.initial_indent = ' '*len(prefix)
result.extend([textWrapper.fill(line) for line in msgLines[1:]])
return '\n'.join(result)
def error_missing_python_library(library_name, xmlElement = None):
raise ParserException(xmlElement, "This script requires the python package '%s' which is not installed. Please install it to run this script." % library_name)
class ParserException(Exception):
def __init__(self, element, msg):
self.msg = indentMessageWithPrefix('ERROR: ', msg)
self.element = element
self.lineNumber = self.columnNumber = None
if self.element:
self.lineNumber = self.element.getUserData('lineNumber')
self.columnNumber = self.element.getUserData('columnNumber')
warningsGiven = set()
def parserWarning(element, msg):
try:
lineNumber, columnNumber = element
except (TypeError, ValueError) as err:
lineNumber = element.getUserData('lineNumber')
columnNumber = element.getUserData('columnNumber')
if (lineNumber, columnNumber, msg) in warningsGiven: return
warningsGiven.add((lineNumber, columnNumber, msg))
sys.stderr.write(indentMessageWithPrefix('WARNING: ', msg))
sys.stderr.write(" At line %(lineNumber)i, column %(columnNumber)i" % locals())
# print >> sys.stderr, " In element: " + element.userUnderstandableXPath()
|