Am Samstag, 17. Juni 2006 18:55 schrieb Juergen Spitzmueller:
> I intend to shove this into trunk on Monday unless I get objections.

I found some minor problems in lyx2lyx. A corrected version can be found 
in l.diff.

I also implemented quick and dirty gtk support and fixed some copy/paste 
errors (see x.diff, contains everything in src/frontends, but does not 
contain the new files). I also put the default font families in a common 
place, this makes the code simpler and avoids repetition. Finally I used 
lyx::support::findToken where appropriate, this does also save some 
lines.

Is there a reason why the sc and tt scales are integers? If that is not a 
LaTeX restriction I would like floating point values instead.

Finally you need to update development/FORMAT.


Georg

Index: lib/lyx2lyx/LyX.py
===================================================================
--- lib/lyx2lyx/LyX.py	(Revision 14137)
+++ lib/lyx2lyx/LyX.py	(Arbeitskopie)
@@ -48,8 +48,8 @@ format_relation = [("0_10",  [210], ["0.
                    ("1_1_6fix3", [218], ["1.1.6fix3","1.1.6fix4","1.1"]),
                    ("1_2", [220], ["1.2.0","1.2.1","1.2.3","1.2.4","1.2"]),
                    ("1_3", [221], ["1.3.0","1.3.1","1.3.2","1.3.3","1.3.4","1.3.5","1.3.6","1.3"]),
-                   ("1_4", range(222,245), ["1.4.0", "1.4.1", "1.4.2svn"]),
-                   ("1_5",  [245,246], ["1.5.0svn"])]
+                   ("1_4", range(222,246), ["1.4.0", "1.4.1", "1.4.2svn"]),
+                   ("1_5", range(246,248), ["1.5.0svn"])]
 
 
 def formats_list():
@@ -484,7 +484,14 @@ class NewFile(LyX_Base):
             "\\textclass article",
             "\\language english",
             "\\inputencoding auto",
-            "\\fontscheme default",
+            "\\font_roman default",
+            "\\font_sans default",
+            "\\font_typewriter default",
+            "\\font_default_family default",
+            "\\font_sc false",
+            "\\font_osf false",
+            "\\font_sf_scale 100",
+            "\\font_tt_scale 100",
             "\\graphics default",
             "\\paperfontsize default",
             "\\papersize default",
Index: lib/lyx2lyx/lyx_1_5.py
===================================================================
--- lib/lyx2lyx/lyx_1_5.py	(Revision 14137)
+++ lib/lyx2lyx/lyx_1_5.py	(Arbeitskopie)
@@ -16,7 +16,7 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
-from parser_tools import find_tokens
+from parser_tools import find_token_exact, find_tokens, get_value
 
 ##
 #  Notes: Framed/Shaded
@@ -32,12 +32,153 @@ def revert_framed(file):
         file.body[i] = "\\begin_inset Note"
         i = i + 1
 
+
+##
+#  Fonts
+#
+
+roman_fonts      = {'default' : 'default', 'ae'       : 'ae',
+                    'times'   : 'times',   'palatino' : 'palatino',
+                    'helvet'  : 'default', 'avant'    : 'default',
+                    'newcent' : 'newcent', 'bookman'  : 'bookman',
+                    'pslatex' : 'times'}
+sans_fonts       = {'default' : 'default', 'ae'       : 'default',
+                    'times'   : 'default', 'palatino' : 'default',
+                    'helvet'  : 'helvet',  'avant'    : 'avant',
+                    'newcent' : 'default', 'bookman'  : 'default',
+                    'pslatex' : 'helvet'}
+typewriter_fonts = {'default' : 'default', 'ae'       : 'default',
+                    'times'   : 'default', 'palatino' : 'default',
+                    'helvet'  : 'default', 'avant'    : 'default',
+                    'newcent' : 'default', 'bookman'  : 'default',
+                    'pslatex' : 'courier'}
+
+def convert_font_settings(file):
+    i = 0
+    i = find_token_exact(file.header, "\\fontscheme", i)
+    if i == -1:
+        file.warning("Malformed LyX file: Missing `\\fontscheme'.")
+        return
+    font_scheme = get_value(file.header, "\\fontscheme", i, i + 1)
+    if font_scheme == '':
+        file.warning("Malformed LyX file: Empty `\\fontscheme'.")
+        font_scheme = 'default'
+    if not font_scheme in roman_fonts.keys():
+        file.warning("Malformed LyX file: Unknown `\\fontscheme' `%s'." % font_scheme)
+        font_scheme = 'default'
+    file.header[i:i+1] = ['\\font_roman %s' % roman_fonts[font_scheme],
+                          '\\font_sans %s' % sans_fonts[font_scheme],
+                          '\\font_typewriter %s' % typewriter_fonts[font_scheme],
+                          '\\font_default_family default',
+                          '\\font_sc false',
+                          '\\font_osf false',
+                          '\\font_sf_scale 100',
+                          '\\font_tt_scale 100']
+
+
+def revert_font_settings(file):
+    i = 0
+    insert_line = -1
+    fonts = {'roman' : 'default', 'sans' : 'default', 'typewriter' : 'default'}
+    for family in 'roman', 'sans', 'typewriter':
+        name = '\\font_%s' % family
+        i = find_token_exact(file.header, name, i)
+        if i == -1:
+            file.warning("Malformed LyX file: Missing `%s'." % name)
+            i = 0
+        else:
+            if (insert_line < 0):
+                insert_line = i
+            fonts[family] = get_value(file.header, name, i, i + 1)
+            del file.header[i]
+    i = find_token_exact(file.header, '\\font_default_family', i)
+    if i == -1:
+        file.warning("Malformed LyX file: Missing `\\font_default_family'.")
+        font_default_family = 'default'
+    else:
+        font_default_family = get_value(file.header, "\\font_default_family", i, i + 1)
+        del file.header[i]
+    i = find_token_exact(file.header, '\\font_sc', i)
+    if i == -1:
+        file.warning("Malformed LyX file: Missing `\\font_sc'.")
+        font_sc = 'false'
+    else:
+        font_sc = get_value(file.header, '\\font_sc', i, i + 1)
+        del file.header[i]
+    if font_sc != 'false':
+        file.warning("Conversion of '\\font_sc' not yet implemented.")
+    i = find_token_exact(file.header, '\\font_osf', i)
+    if i == -1:
+        file.warning("Malformed LyX file: Missing `\\font_osf'.")
+        font_osf = 'false'
+    else:
+        font_osf = get_value(file.header, '\\font_osf', i, i + 1)
+        del file.header[i]
+    i = find_token_exact(file.header, '\\font_sf_scale', i)
+    if i == -1:
+        file.warning("Malformed LyX file: Missing `\\font_sf_scale'.")
+        font_sf_scale = '100'
+    else:
+        font_sf_scale = get_value(file.header, '\\font_sf_scale', i, i + 1)
+        del file.header[i]
+    if font_sf_scale != '100':
+        file.warning("Conversion of '\\font_sf_scale' not yet implemented.")
+    i = find_token_exact(file.header, '\\font_tt_scale', i)
+    if i == -1:
+        file.warning("Malformed LyX file: Missing `\\font_tt_scale'.")
+        font_tt_scale = '100'
+    else:
+        font_tt_scale = get_value(file.header, '\\font_tt_scale', i, i + 1)
+        del file.header[i]
+    if font_tt_scale != '100':
+        file.warning("Conversion of '\\font_tt_scale' not yet implemented.")
+    for font_scheme in roman_fonts.keys():
+        if (roman_fonts[font_scheme] == fonts['roman'] and
+            sans_fonts[font_scheme] == fonts['sans'] and
+            typewriter_fonts[font_scheme] == fonts['typewriter']):
+            file.header.insert(insert_line, '\\fontscheme %s' % font_scheme)
+            if font_default_family != 'default':
+                file.preamble.append('\\renewcommand{\\familydefault}{\\%s}' % font_default_family)
+	    if font_osf == 'true':
+                file.warning("Ignoring `\\font_osf = true'")
+	    return
+    font_scheme = 'default'
+    file.header.insert(insert_line, '\\fontscheme %s' % font_scheme)
+    if fonts['roman'] == 'cmr':
+        file.preamble.append('\\renewcommand{\\rmdefault}{cmr}')
+        if font_osf == 'true':
+            file.preamble.append('\\usepackage{eco}')
+            font_osf = 'false'
+    for font in 'lmodern', 'charter', 'utopia', 'beraserif', 'ccfonts', 'chancery':
+        if fonts['roman'] == font:
+            file.preamble.append('\\usepackage{%s}' % font)
+    for font in 'cmss', 'lmss', 'cmbr':
+        if fonts['sans'] == font:
+            file.preamble.append('\\renewcommand{\\sfdefault}{%s}' % font)
+    for font in 'berasans':
+        if fonts['sans'] == font:
+            file.preamble.append('\\usepackage{%s}' % font)
+    for font in 'cmtt', 'lmtt', 'cmtl':
+        if fonts['typewriter'] == font:
+            file.preamble.append('\\renewcommand{\\ttdefault}{%s}' % font)
+    for font in 'courier', 'beramono', 'luximono':
+        if fonts['typewriter'] == font:
+            file.preamble.append('\\usepackage{%s}' % font)
+    if font_default_family != 'default':
+        file.preamble.append('\\renewcommand{\\familydefault}{\\%s}' % font_default_family)
+    if font_osf == 'true':
+        file.warning("Ignoring `\\font_osf = true'")
+
+
 ##
 # Conversion hub
 #
 
-convert = [[246, []]]
-revert  = [[245, [revert_framed]]]
+convert = [[246, []],
+           [247, [convert_font_settings]]]
+
+revert  = [[246, [revert_font_settings]],
+           [245, [revert_framed]]]
 
 if __name__ == "__main__":
     pass

Attachment: x.diff.gz
Description: GNU Zip compressed data

Reply via email to