From bbdff9996fe6dbf246c2d392c87da3bbe19b9895 Mon Sep 17 00:00:00 2001 From: Georg Baum Date: Wed, 11 Dec 2013 21:07:59 +0100 Subject: [PATCH] Make sty file parser fit for mdsymbol.sty Now it is able to generate a lib/symbols section from mdsymbol.sty. --- development/tools/generate_symbols_list.py | 50 ++++++++++++++++++---- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/development/tools/generate_symbols_list.py b/development/tools/generate_symbols_list.py index f5049ec418..b3bb4278b8 100644 --- a/development/tools/generate_symbols_list.py +++ b/development/tools/generate_symbols_list.py @@ -25,6 +25,7 @@ def process(file): package, ext = os.path.splitext(os.path.basename(file)) if ext != ".sty": package = '' + mdsymbolcode = 0 n = len(lines) for i in xrange(n): @@ -44,19 +45,33 @@ def process(file): if mo != None: font_names[mo.group(1)] = mo.group(3) - mo = re.match(r'.*\\DeclareMath(Symbol|Delimiter)\s*\{?\\(\w*?)\}?\s*\{?\\(.*?)\}?\s*\{(.*?)\}\s*\{([\'"]?)(.*?)\}.*', line) + mo = re.match(r'^\s*\\mdsy\@DeclareSymbolFont\s*\{(.*?)\}\s*\{(.*?)\}\s*\{(.*?)\}.*', line) + if mo != None: + font_names[mo.group(1)] = mo.group(3) + + # \mdsy@setslot resets the counter for \mdsy@DeclareSymbol + mo = re.match(r'^\s*\\mdsy\@setslot\s*\{(.*?)\}.*', line) + if mo != None: + mdsymbolcode = int(mo.group(1)) + + # \mdsy@nextslot increments the counter for \mdsy@DeclareSymbol + mo = re.match(r'^\s*\\mdsy\@nextslot.*', line) + if mo != None: + mdsymbolcode = mdsymbolcode + 1 + + mo = re.match(r'.*\\(\\mdsy\@)?DeclareMath(Symbol|Delimiter)\s*\{?\\(\w*?)\}?\s*\{?\\(.*?)\}?\s*\{(.*?)\}\s*\{([\'"]?)(.*?)\}.*', line) code = -1 try: if mo != None: - symbol = mo.group(2) - type = mo.group(3) - font = mo.group(4) - if mo.group(5) == '': - code = int(mo.group(6)) - elif mo.group(5) == '"': - code = int(mo.group(6), 16) + symbol = mo.group(3) + type = mo.group(4) + font = mo.group(5) + if mo.group(6) == '': + code = int(mo.group(7)) + elif mo.group(6) == '"': + code = int(mo.group(7), 16) else: - code = int(mo.group(6), 8) + code = int(mo.group(7), 8) else: mo = re.match(r'.*\\edef\\(\w*?)\{.*?\{\\hexnumber@\\sym(.*?)\}(.*?)\}', line) if mo != None: @@ -67,6 +82,23 @@ def process(file): except ValueError: code = -1 + if mo == None: + mo = re.match(r'^\s*\\mdsy\@DeclareSymbol\s*\{(.*?)\}\s*\{(.*?)\}\s*\{\\(.*?)\}.*', line) + if mo != None: + symbol = mo.group(1) + type = mo.group(3) + font = mo.group(2) + code = mdsymbolcode + mdsymbolcode = mdsymbolcode + 1 + + if mo == None: + mo = re.match(r'^\s*\\mdsy\@DeclareAlias\s*\{(.*?)\}\s*\{(.*?)\}\s*\{\\(.*?)\}.*', line) + if mo != None: + symbol = mo.group(1) + type = mo.group(3) + font = mo.group(2) + code = mdsymbolcode - 1 + if mo != None and symbol not in ignore_list: mo2 = re.match(r'\s*\\def\\(.*?)\{', next_line) if mo2 != None and symbol == mo2.group(1)+"op": -- 2.39.5