mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 21:21:32 +00:00
02d37932d0
Use the command as defined by Babel. This allows us to use the (more advanced) Babel command if provided instead of rolling our own. I add a dummy file format change in case it turns out we need to do something here for old documents (e.g. with user preamble definitions)
209 lines
7.2 KiB
Python
209 lines
7.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
# This file is part of lyx2lyx
|
|
# Copyright (C) 2018 The LyX team
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
""" Convert files to the file format generated by lyx 2.4"""
|
|
|
|
import re, string
|
|
import unicodedata
|
|
import sys, os
|
|
|
|
# Uncomment only what you need to import, please.
|
|
|
|
from parser_tools import (find_end_of_inset, find_end_of_layout, find_token, get_bool_value, get_value)
|
|
# del_token, del_value, del_complete_lines,
|
|
# find_complete_lines, find_end_of,
|
|
# find_re, find_substring, find_token_backwards,
|
|
# get_containing_inset, get_containing_layout, get_value,
|
|
# get_quoted_value, is_in_inset, set_bool_value
|
|
# find_tokens, find_token_exact, check_token, get_option_value
|
|
|
|
from lyx2lyx_tools import (put_cmd_in_ert, add_to_preamble)
|
|
# revert_font_attrs, insert_to_preamble, latex_length
|
|
# get_ert, lyx2latex, lyx2verbatim, length_in_bp, convert_info_insets
|
|
# revert_flex_inset, hex2ratio, str2bool
|
|
|
|
####################################################################
|
|
# Private helper functions
|
|
|
|
|
|
|
|
###############################################################################
|
|
###
|
|
### Conversion and reversion routines
|
|
###
|
|
###############################################################################
|
|
|
|
|
|
def convert_lst_literalparam(document):
|
|
" Add param literal to include inset "
|
|
|
|
i = 0
|
|
while True:
|
|
i = find_token(document.body, '\\begin_inset CommandInset include', i)
|
|
if i == -1:
|
|
break
|
|
j = find_end_of_inset(document.body, i)
|
|
if j == -1:
|
|
document.warning("Malformed LyX document: Can't find end of command inset at line %d" % i)
|
|
i += 1
|
|
continue
|
|
while i < j and document.body[i].strip() != '':
|
|
i += 1
|
|
document.body.insert(i, "literal \"true\"")
|
|
|
|
|
|
def revert_lst_literalparam(document):
|
|
" Remove param literal from include inset "
|
|
|
|
i = 0
|
|
while True:
|
|
i = find_token(document.body, '\\begin_inset CommandInset include', i)
|
|
if i == -1:
|
|
break
|
|
j = find_end_of_inset(document.body, i)
|
|
if j == -1:
|
|
document.warning("Malformed LyX document: Can't find end of include inset at line %d" % i)
|
|
i += 1
|
|
continue
|
|
k = find_token(document.body, 'literal', i, j)
|
|
if k == -1:
|
|
i += 1
|
|
continue
|
|
del document.body[k]
|
|
|
|
|
|
def revert_paratype(document):
|
|
" Revert ParaType font definitions to LaTeX "
|
|
|
|
if find_token(document.header, "\\use_non_tex_fonts false", 0) != -1:
|
|
preamble = ""
|
|
i1 = find_token(document.header, "\\font_roman \"PTSerif-TLF\"", 0)
|
|
i2 = find_token(document.header, "\\font_sans \"default\"", 0)
|
|
i3 = find_token(document.header, "\\font_typewriter \"default\"", 0)
|
|
j = find_token(document.header, "\\font_sans \"PTSans-TLF\"", 0)
|
|
sfval = get_value(document.header, "\\font_sf_scale", 0)
|
|
# cutoff " 100"
|
|
sfval = sfval[:-4]
|
|
sfoption = ""
|
|
if sfval != "100":
|
|
sfoption = "scaled=" + format(float(sfval) / 100, '.2f')
|
|
k = find_token(document.header, "\\font_typewriter \"PTMono-TLF\"", 0)
|
|
ttval = get_value(document.header, "\\font_tt_scale", 0)
|
|
# cutoff " 100"
|
|
ttval = ttval[:-4]
|
|
ttoption = ""
|
|
if ttval != "100":
|
|
ttoption = "scaled=" + format(float(ttval) / 100, '.2f')
|
|
if i1 != -1 and i2 != -1 and i3!= -1:
|
|
add_to_preamble(document, ["\\usepackage{paratype}"])
|
|
else:
|
|
if i1!= -1:
|
|
add_to_preamble(document, ["\\usepackage{PTSerif}"])
|
|
document.header[i1] = document.header[i1].replace("PTSerif-TLF", "default")
|
|
if j!= -1:
|
|
if sfoption != "":
|
|
add_to_preamble(document, ["\\usepackage[" + sfoption + "]{PTSans}"])
|
|
else:
|
|
add_to_preamble(document, ["\\usepackage{PTSans}"])
|
|
document.header[j] = document.header[j].replace("PTSans-TLF", "default")
|
|
if k!= -1:
|
|
if ttoption != "":
|
|
add_to_preamble(document, ["\\usepackage[" + ttoption + "]{PTMono}"])
|
|
else:
|
|
add_to_preamble(document, ["\\usepackage{PTMono}"])
|
|
document.header[k] = document.header[k].replace("PTMono-TLF", "default")
|
|
|
|
|
|
def revert_xcharter(document):
|
|
" Revert XCharter font definitions to LaTeX "
|
|
|
|
i = find_token(document.header, "\\font_roman \"xcharter\"", 0)
|
|
if i == -1:
|
|
return
|
|
|
|
# replace unsupported font setting
|
|
document.header[i] = document.header[i].replace("xcharter", "default")
|
|
# no need for preamble code with system fonts
|
|
if get_bool_value(document.header, "\\use_non_tex_fonts"):
|
|
return
|
|
|
|
# transfer old style figures setting to package options
|
|
j = find_token(document.header, "\\font_osf true")
|
|
if j != -1:
|
|
options = "[osf]"
|
|
document.header[j] = "\\font_osf false"
|
|
else:
|
|
options = ""
|
|
if i != -1:
|
|
add_to_preamble(document, ["\\usepackage%s{XCharter}"%options])
|
|
|
|
|
|
def revert_lscape(document):
|
|
" Reverts the landscape environment (Landscape module) to TeX-code "
|
|
|
|
if not "landscape" in document.get_module_list():
|
|
return
|
|
|
|
i = 0
|
|
while True:
|
|
i = find_token(document.body, "\\begin_inset Flex Landscape", i)
|
|
if i == -1:
|
|
return
|
|
j = find_end_of_inset(document.body, i)
|
|
if j == -1:
|
|
document.warning("Malformed LyX document: Can't find end of Landscape inset")
|
|
i += 1
|
|
continue
|
|
|
|
if document.body[i] == "\\begin_inset Flex Landscape (Floating)":
|
|
document.body[j - 2 : j + 1] = put_cmd_in_ert("\\end{landscape}}")
|
|
document.body[i : i + 4] = put_cmd_in_ert("\\afterpage{\\begin{landscape}")
|
|
add_to_preamble(document, ["\\usepackage{afterpage}"])
|
|
else:
|
|
document.body[j - 2 : j + 1] = put_cmd_in_ert("\\end{landscape}")
|
|
document.body[i : i + 4] = put_cmd_in_ert("\\begin{landscape}")
|
|
|
|
add_to_preamble(document, ["\\usepackage{pdflscape}"])
|
|
# no need to reset i
|
|
|
|
|
|
##
|
|
# Conversion hub
|
|
#
|
|
|
|
supported_versions = ["2.4.0", "2.4"]
|
|
convert = [
|
|
[545, [convert_lst_literalparam]],
|
|
[546, []],
|
|
[547, []],
|
|
[548, []],
|
|
[549, []]
|
|
]
|
|
|
|
revert = [
|
|
[548, []],# dummy format change
|
|
[547, [revert_lscape]],
|
|
[546, [revert_xcharter]],
|
|
[545, [revert_paratype]],
|
|
[544, [revert_lst_literalparam]]
|
|
]
|
|
|
|
|
|
if __name__ == "__main__":
|
|
pass
|