yml2/yml2c.py
changeset 67 db1b6e9a6bb7
parent 62 00a196f8d14a
equal deleted inserted replaced
66:701c5e980f33 67:db1b6e9a6bb7
    16 
    16 
    17 from yml2.pyPEG import parse, u
    17 from yml2.pyPEG import parse, u
    18 from yml2.yml2 import ymlCStyle, comment, oldSyntax
    18 from yml2.yml2 import ymlCStyle, comment, oldSyntax
    19 import yml2.backend as backend
    19 import yml2.backend as backend
    20 
    20 
    21 YML_DEFAULT_PATH = [os.path.dirname(backend.__file__)]
    21 YML_DEFAULT_PATHS = [os.path.dirname(backend.__file__)]
    22 
    22 
    23 def printInfo(option, opt_str, value, parser):
    23 def printInfo(option, opt_str, value, parser):
    24     sys.stdout.write(__doc__)
    24     sys.stdout.write(__doc__)
    25     sys.exit(0)
    25     sys.exit(0)
    26 
    26 
    30     if type(msg) is bytes:
    30     if type(msg) is bytes:
    31         msg = codecs.encode(msg, sys.stderr.encoding)
    31         msg = codecs.encode(msg, sys.stderr.encoding)
    32     sys.stderr.write(msg)
    32     sys.stderr.write(msg)
    33 
    33 
    34 def main():
    34 def main():
       
    35     dirsepname = {':': 'a colon', ';': 'a semicolon'}.get(os.path.pathsep, "a '%s'" % os.path.pathsep)
    35     optParser = OptionParser()
    36     optParser = OptionParser()
    36     optParser.add_option("-C", "--old-syntax", action="store_true", dest="old_syntax",
    37     optParser.add_option("-C", "--old-syntax", action="store_true", dest="old_syntax",
    37             help="syntax of YML 2 version 1.x (compatibility mode)", default=False)
    38             help="syntax of YML 2 version 1.x (compatibility mode)", default=False)
    38     optParser.add_option("-D", "--emit-linenumbers", action="store_true", dest="emitlinenumbers",
    39     optParser.add_option("-D", "--emit-linenumbers", action="store_true", dest="emitlinenumbers",
    39             help="emit line numbers into the resulting XML for debugging purposes", default=False)
    40             help="emit line numbers into the resulting XML for debugging purposes", default=False)
    40     optParser.add_option("-E", "--encoding", dest="encoding", metavar="ENCODING", default=locale.getdefaultlocale()[1],
    41     optParser.add_option("-E", "--encoding", dest="encoding", metavar="ENCODING", default=locale.getdefaultlocale()[1],
    41             help="encoding of input files (default to locale)")
    42             help="encoding of input files (default to locale)")
    42     optParser.add_option("-I", "--include", dest="includePathText", metavar="INCLUDE_PATH",
    43     optParser.add_option("-I", "--include", dest="includePathText", metavar="INCLUDE_PATH",
    43             help="precede YML_PATH by a colon separated INCLUDE_PATH to search for include files")
    44             help="precede YML_PATH by %s separated INCLUDE_PATH to search for include files" % dirsepname)
    44     optParser.add_option("-m", "--omit-empty-parm-tags", action="store_true", dest="omitemptyparm",
    45     optParser.add_option("-m", "--omit-empty-parm-tags", action="store_true", dest="omitemptyparm",
    45             help="does nothing (only there for compatibility reasons)", default=False)
    46             help="does nothing (only there for compatibility reasons)", default=False)
    46     optParser.add_option("-n", "--normalization", dest="normalization", metavar="NORMALIZATION", default="NFC",
    47     optParser.add_option("-n", "--normalization", dest="normalization", metavar="NORMALIZATION", default="NFC",
    47             help="Unicode normalization (none, NFD, NFKD, NFC, NFKC, FCD, default is NFC)")
    48             help="Unicode normalization (none, NFD, NFKD, NFC, NFKC, FCD, default is NFC)")
    48     optParser.add_option("-o", "--output", dest="outputFile", metavar="FILE",
    49     optParser.add_option("-o", "--output", dest="outputFile", metavar="FILE",
    60 
    61 
    61     backend.encoding = options.encoding
    62     backend.encoding = options.encoding
    62 
    63 
    63     try:
    64     try:
    64         if options.includePathText:
    65         if options.includePathText:
    65             backend.includePath = options.includePathText.split(':')
    66             backend.includePath = options.includePathText.split(os.path.pathsep)
    66 
    67 
    67         dirs = os.environ.get('YML_PATH', '.').split(':') + YML_DEFAULT_PATH
    68         dirs = os.environ.get('YML_PATH', '.').split(os.path.pathsep) + YML_DEFAULT_PATHS
    68         backend.includePath.extend(dirs)
    69         backend.includePath.extend(dirs)
    69 
    70 
    70         files = fileinput.input(args, mode="rU", openhook=fileinput.hook_encoded(options.encoding))
    71         files = fileinput.input(args, mode="rU", openhook=fileinput.hook_encoded(options.encoding))
    71 
    72 
    72         ymlC = ymlCStyle()
    73         ymlC = ymlCStyle()