Am Donnerstag, 15. Juni 2006 12:19 schrieb Juergen Spitzmueller:

> It's included in the attached, updated patch.
> (it crashes on startup, because of the unknown file format)

Not here. How can this be reproduced?
Attached is the lyx2lyx conversion. It works for the default case, please 
test it with special settings and/or send me test files.

> P.S.: If you have an idea about changing the default font from within 
> bufferparams, I'd be most grateful. ATM I'm lost there.

You mean to change the default screen font family? I am not sure whether 
that is possible at all.

When implementing the lyx2lyx conversion I saw how the options string is 
used. Since it can not contain arbitrary options I think it is better if 
you replace it with too booleans for sc and osf. That woulkd correspond 
to the checkboxes in thew GUI, and you would not need to translate 
between booleans and the string all over.


Georg
Index: lib/lyx2lyx/LyX.py
===================================================================
--- lib/lyx2lyx/LyX.py	(Revision 14116)
+++ 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():
Index: lib/lyx2lyx/lyx_1_5.py
===================================================================
--- lib/lyx2lyx/lyx_1_5.py	(Revision 14116)
+++ 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,119 @@ 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' : 'default'}
+typewriter_fonts = {'default' : 'default', 'ae'       : 'default',
+                    'times'   : 'default', 'palatino' : 'default',
+                    'helvet'  : 'default', 'avant'    : 'default',
+                    'newcent' : 'default', 'bookman'  : 'default',
+                    'pslatex' : 'default'}
+
+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']
+
+
+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]
+    # font_options is optional
+    i = find_token_exact(file.header, '\\font_options', i)
+    if i == -1:
+        font_options = ''
+    else:
+        font_options = get_value(file.header, "\\font_options", i, i + 1)
+        del file.header[i]
+    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':
+                preamble.append('\\renewcommand{\\familydefault}{\\%s}' % font_default_family)
+            if font_options != '':
+                file.warning("Ignoring `\\font_options' `%s'." % font_options)
+	    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_options == 'osf':
+            file.preamble.append('\\usepackage{eco}')
+        font_options = ''
+    for font in 'lmodern', 'charter', 'utopia', '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 'cmtt', 'lmtt', 'cmtl':
+        if fonts['typewriter'] == font:
+            file.preamble.append('\\renewcommand{\\ttdefault}{%s}' % font)
+    for font in 'courier', 'luximono':
+        if fonts['typewriter'] == font:
+            file.preamble.append('\\usepackage{%s}' % font)
+    if font_default_family != 'default':
+        preamble.append('\\renewcommand{\\familydefault}{\\%s}' % font_default_family)
+    if font_options != '':
+        file.warning("Ignoring `\\font_options' `%s'." % font_options)
+
+
 ##
 # 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

Reply via email to