commit bbdff9996fe6dbf246c2d392c87da3bbe19b9895
Author: Georg Baum <[email protected]>
Date:   Wed Dec 11 21:07:59 2013 +0100

    Make sty file parser fit for mdsymbol.sty
    
    Now it is able to generate a lib/symbols section from mdsymbol.sty.

diff --git a/development/tools/generate_symbols_list.py 
b/development/tools/generate_symbols_list.py
index f5049ec..b3bb427 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":

Reply via email to