]> git.lyx.org Git - lyx.git/blobdiff - lib/lyx2lyx/unicode_symbols.py
AEA.lyx: update to address latest AEA version
[lyx.git] / lib / lyx2lyx / unicode_symbols.py
index 9171c180ef559a8891bd8304f199daa7463f6e70..f24f3a918710390d5d744b35e272e923899cfcf6 100644 (file)
@@ -31,30 +31,36 @@ def read_unicodesymbols():
     pathname = os.path.abspath(os.path.dirname(sys.argv[0]))
     fp = open(os.path.join(pathname.strip('lyx2lyx'), 'unicodesymbols'))
     spec_chars = []
-    # Two backslashes, followed by some non-word character, and then a character
+    # A backslash, followed by some non-word character, and then a character
     # in brackets. The idea is to check for constructs like: \"{u}, which is how
     # they are written in the unicodesymbols file; but they can also be written
     # as: \"u or even \" u.
-    r = re.compile(r'\\\\(\W)\{(\w)\}')
+    # The two backslashes in the string literal are needed to specify a literal
+    # backslash in the regex. Without r prefix, these would be four backslashes.
+    r = re.compile(r'\\(\W)\{(\w)\}')
     for line in fp.readlines():
         if line[0] != '#' and line.strip() != "":
+            # Note: backslashes in the string literals with r prefix are not escaped,
+            #       so one backslash in the source file equals one backslash in memory.
+            #       Without r prefix backslahses are escaped, so two backslashes in the
+            #       source file equal one backslash in memory.
             line=line.replace(' "',' ') # remove all quotation marks with spaces before
             line=line.replace('" ',' ') # remove all quotation marks with spaces after
-            line=line.replace(r'\"','"') # replace \" by " (for characters with diaeresis)
+            line=line.replace(r'\"','"') # unescape "
+            line=line.replace(r'\\','\\') # unescape \
             try:
                 [ucs4,command,dead] = line.split(None,2)
                 if command[0:1] != "\\":
                     continue
+                if (line.find("notermination=text") < 0 and
+                    line.find("notermination=both") < 0 and command[-1] != "}"):
+                    command = command + "{}"
                 spec_chars.append([command, unichr(eval(ucs4))])
             except:
                 continue
             m = r.match(command)
             if m != None:
-                command = "\\\\"
-                # If the character is a double-quote, then we need to escape it, too,
-                # since it is done that way in the LyX file.
-                if m.group(1) == "\"":
-                    command += "\\"
+                command = "\\"
                 commandbl = command
                 command += m.group(1) + m.group(2)
                 commandbl += m.group(1) + ' ' + m.group(2)