]> git.lyx.org Git - lyx.git/blobdiff - development/tools/generate_symbols_images.py
updatedocs.py now updates templates and examples
[lyx.git] / development / tools / generate_symbols_images.py
index 1ba21f88592718ddb505a386eaa4c99bd6fbb5e9..e04962e4e07bb124828bc71814a4fb481e446b51 100644 (file)
@@ -38,31 +38,75 @@ def getlist(lyxexe, lyxfile):
     cmd = "%s %s -dbg mathed -x lyx-quit" % (lyxexe, lyxfile)
     proc = subprocess.Popen(cmd, shell=True, stderr=subprocess.PIPE)
     (stdout, stderr) = proc.communicate()
-    regexp = re.compile(r'.*: read symbol \'(\S+)\s+inset:\s+(\S+)')
+    regexp = re.compile(r'.*: read symbol \'(\S+)\s+inset:\s+(\S+)\s+draw:\s+(\S*)\s+extra:\s+(\S+)')
     # These insets are more complex than simply symbols, so the images need to
     # be created manually
-    skipinsets = ['big', 'font', 'matrix', 'mbox', 'oldfont', 'ref', 'space']
-    symbols = []
+    skipinsets = ['big', 'font', 'lyxblacktext', 'matrix', 'mbox', 'oldfont', \
+                  'ref', 'split', 'space', 'style']
+    mathsymbols = []
+    textsymbols = []
     for line in stderr.split('\n'):
         m = regexp.match(line)
         if m:
             inset = m.group(2)
             if not inset in skipinsets:
-                symbols.append(m.group(1))
-    return symbols
+                if m.group(4) == 'textmode':
+                    textsymbols.append(m.group(1))
+                else:
+                    mathsymbols.append(m.group(1))
+    return (mathsymbols, textsymbols)
+
+
+def getreplacements(filename):
+    replacements = {}
+    replacements['|'] = 'vert'
+    replacements['/'] = 'slash'
+    replacements['\\'] = 'backslash'
+    replacements['*'] = 'ast'
+    replacements['AA'] = 'textrm_AA'
+    replacements['O'] = 'textrm_O'
+    cppfile = open(filename, 'rt')
+    regexp = re.compile(r'.*"([^"]+)",\s*"([^"]+)"')
+    found = False
+    for line in cppfile.readlines():
+        if found:
+            m = regexp.match(line)
+            if m:
+                replacements[m.group(1)] = m.group(2)
+            else:
+                return replacements
+        elif line.find('PngMap sorted_png_map') == 0:
+            found = True
+
+
+def gettoolbaritems(filename):
+    items = []
+    uifile = open(filename, 'rt')
+    regexp = re.compile(r'.*Item "([^"\[]+)(\[\[[^\]]+\]\])?"\s*"math-insert\s+([^"]+)"')
+    for line in uifile.readlines():
+        m = regexp.match(line)
+        if m:
+            if '\\' + m.group(1) == m.group(3):
+                items.append(m.group(1))
+    return items
+
+
+def getmakefileentries(filename):
+    items = []
+    makefile = open(filename, 'rt')
+    regexp = re.compile(r'.*images/math/(.+)\.png')
+    for line in makefile.readlines():
+        m = regexp.match(line)
+        if m:
+            items.append(m.group(1))
+    return items
 
 
-def createimage(name, path, template, lyxexe, tempdir):
+def createimage(name, path, template, lyxexe, tempdir, math, replacements, toolbaritems, makefileentries):
     """ Create the image file for symbol name in path. """
 
-    if name == '|':
-        filename = 'vert'
-    elif name == '/':
-        filename = 'slash'
-    elif name == '\\':
-        filename = 'backslash'
-    elif name == '*':
-        filename = 'ast'
+    if name in replacements.keys():
+        filename = replacements[name]
     elif name.startswith('lyx'):
         print 'Skipping ' + name
         return
@@ -74,13 +118,26 @@ def createimage(name, path, template, lyxexe, tempdir):
                 return
         filename = name
     pngname = os.path.join(path, filename + '.png')
+    if name in toolbaritems:
+        if filename in makefileentries:
+            suffix = ' (found in toolbar and makefile)'
+        else:
+            suffix = ' (found in only in toolbar)'
+    else:
+        if filename in makefileentries:
+            suffix = ' (found only in makefile)'
+        else:
+            suffix = ' (not found)'
     if os.path.exists(pngname):
-        print 'Skipping ' + name
+        print 'Skipping ' + name + suffix
         return
-    print 'Generating ' + name
+    print 'Generating ' + name + suffix
     lyxname = os.path.join(tempdir, filename)
     lyxfile = open(lyxname + '.lyx', 'wt')
-    lyxfile.write(template.replace('$a$', '$\\' + name + '$'))
+    if math:
+        lyxfile.write(template.replace('$a$', '$\\' + name + '$'))
+    else:
+        lyxfile.write(template.replace('$a$', '$\\text{\\' + name + '}$'))
     lyxfile.close()
     cmd = "%s %s.lyx -e dvi" % (lyxexe, lyxname)
     proc = subprocess.Popen(cmd, shell=True)
@@ -120,14 +177,22 @@ def main(argv):
 
     if len(argv) == 3:
         (base, ext) = os.path.splitext(argv[0])
-        symbols = getlist(argv[1], base)
+        (mathsymbols, textsymbols) = getlist(argv[1], base)
+        cppfile = os.path.join(os.path.dirname(base), '../../src/frontends/qt4/GuiApplication.cpp')
+        replacements = getreplacements(cppfile)
+        uifile = os.path.join(os.path.dirname(base), '../../lib/ui/stdtoolbars.inc')
+        toolbaritems = gettoolbaritems(uifile)
+        makefile = os.path.join(os.path.dirname(base), '../../lib/Makefile.am')
+        makefileentries = getmakefileentries(makefile)
         lyxtemplate = base + '.lyx'
         templatefile = open(base + '.lyx', 'rt')
         template = templatefile.read()
         templatefile.close()
         tempdir = tempfile.mkdtemp()
-        for i in symbols:
-            createimage(i, argv[2], template, argv[1], tempdir)
+        for i in mathsymbols:
+            createimage(i, argv[2], template, argv[1], tempdir, True, replacements, toolbaritems, makefileentries)
+        for i in textsymbols:
+            createimage(i, argv[2], template, argv[1], tempdir, False, replacements, toolbaritems, makefileentries)
         shutil.rmtree(tempdir)
     else:
         error(usage(argv[0]))