mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-13 01:08:45 +00:00
* lyx_1_6.py:
- Fix reversion of aligned tables in subfloats to LyX 1.5 (bug 5918). - Fix reversion of info insets with a backslash to LyX 1.5. - Fix unicode characters > LaTeX macro reversion to LyX 1.5. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_6_X@29422 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
6a9e4ca320
commit
f3622e2a23
@ -322,6 +322,71 @@ def latex2lyx(data):
|
||||
return retval
|
||||
|
||||
|
||||
def lyxline2latex(document, line, inert):
|
||||
'Convert some LyX stuff into corresponding LaTeX stuff line-wise, as best we can.'
|
||||
if line.startswith("\\begin_inset Formula"):
|
||||
line = line[20:]
|
||||
elif line.startswith("\\begin_inset Quotes"):
|
||||
# For now, we do a very basic reversion. Someone who understands
|
||||
# quotes is welcome to fix it up.
|
||||
qtype = line[20:].strip()
|
||||
# lang = qtype[0]
|
||||
side = qtype[1]
|
||||
dbls = qtype[2]
|
||||
if side == "l":
|
||||
if dbls == "d":
|
||||
line = "``"
|
||||
else:
|
||||
line = "`"
|
||||
else:
|
||||
if dbls == "d":
|
||||
line = "''"
|
||||
else:
|
||||
line = "'"
|
||||
elif line.isspace() or \
|
||||
line.startswith("\\begin_layout") or \
|
||||
line.startswith("\\end_layout") or \
|
||||
line.startswith("\\begin_inset") or \
|
||||
line.startswith("\\end_inset") or \
|
||||
line.startswith("\\lang") or \
|
||||
line.strip() == "status collapsed" or \
|
||||
line.strip() == "status open":
|
||||
#skip all that stuff
|
||||
return ""
|
||||
|
||||
# this needs to be added to the preamble because of cases like
|
||||
# \textmu, \textbackslash, etc.
|
||||
add_to_preamble(document, ['% added by lyx2lyx for converted entries',
|
||||
'\\@ifundefined{textmu}',
|
||||
' {\\usepackage{textcomp}}{}'])
|
||||
# a lossless reversion is not possible
|
||||
# try at least to handle some common insets and settings
|
||||
if inert:
|
||||
line = line.replace(r'\backslash', '\\')
|
||||
else:
|
||||
line = line.replace('&', '\\&{}')
|
||||
line = line.replace('#', '\\#{}')
|
||||
line = line.replace('^', '\\^{}')
|
||||
line = line.replace('%', '\\%{}')
|
||||
line = line.replace('_', '\\_{}')
|
||||
line = line.replace('$', '\\${}')
|
||||
|
||||
# Do the LyX text --> LaTeX conversion
|
||||
for rep in unicode_reps:
|
||||
line = line.replace(rep[1], rep[0].replace('\\\\', '\\') + "{}")
|
||||
line = line.replace(r'\backslash', r'\textbackslash{}')
|
||||
line = line.replace(r'\series bold', r'\bfseries{}').replace(r'\series default', r'\mdseries{}')
|
||||
line = line.replace(r'\shape italic', r'\itshape{}').replace(r'\shape smallcaps', r'\scshape{}')
|
||||
line = line.replace(r'\shape slanted', r'\slshape{}').replace(r'\shape default', r'\upshape{}')
|
||||
line = line.replace(r'\emph on', r'\em{}').replace(r'\emph default', r'\em{}')
|
||||
line = line.replace(r'\noun on', r'\scshape{}').replace(r'\noun default', r'\upshape{}')
|
||||
line = line.replace(r'\bar under', r'\underbar{').replace(r'\bar default', r'}')
|
||||
line = line.replace(r'\family sans', r'\sffamily{}').replace(r'\family default', r'\normalfont{}')
|
||||
line = line.replace(r'\family typewriter', r'\ttfamily{}').replace(r'\family roman', r'\rmfamily{}')
|
||||
line = line.replace(r'\InsetSpace ', r'').replace(r'\SpecialChar ', r'')
|
||||
return line
|
||||
|
||||
|
||||
def lyx2latex(document, lines):
|
||||
'Convert some LyX stuff into corresponding LaTeX stuff, as best we can.'
|
||||
# clean up multiline stuff
|
||||
@ -329,73 +394,15 @@ def lyx2latex(document, lines):
|
||||
ert_end = 0
|
||||
|
||||
for curline in range(len(lines)):
|
||||
line = lines[curline]
|
||||
if line.startswith("\\begin_inset ERT"):
|
||||
# We don't want to replace things inside ERT, so figure out
|
||||
# where the end of the inset is.
|
||||
ert_end = find_end_of_inset(lines, curline + 1)
|
||||
continue
|
||||
elif line.startswith("\\begin_inset Formula"):
|
||||
line = line[20:]
|
||||
elif line.startswith("\\begin_inset Quotes"):
|
||||
# For now, we do a very basic reversion. Someone who understands
|
||||
# quotes is welcome to fix it up.
|
||||
qtype = line[20:].strip()
|
||||
# lang = qtype[0]
|
||||
side = qtype[1]
|
||||
dbls = qtype[2]
|
||||
if side == "l":
|
||||
if dbls == "d":
|
||||
line = "``"
|
||||
else:
|
||||
line = "`"
|
||||
else:
|
||||
if dbls == "d":
|
||||
line = "''"
|
||||
else:
|
||||
line = "'"
|
||||
elif line.isspace() or \
|
||||
line.startswith("\\begin_layout") or \
|
||||
line.startswith("\\end_layout") or \
|
||||
line.startswith("\\begin_inset") or \
|
||||
line.startswith("\\end_inset") or \
|
||||
line.startswith("\\lang") or \
|
||||
line.strip() == "status collapsed" or \
|
||||
line.strip() == "status open":
|
||||
#skip all that stuff
|
||||
continue
|
||||
line = lines[curline]
|
||||
if line.startswith("\\begin_inset ERT"):
|
||||
# We don't want to replace things inside ERT, so figure out
|
||||
# where the end of the inset is.
|
||||
ert_end = find_end_of_inset(lines, curline + 1)
|
||||
continue
|
||||
inert = ert_end >= curline
|
||||
content += lyxline2latex(document, lines[curline], inert)
|
||||
|
||||
# this needs to be added to the preamble because of cases like
|
||||
# \textmu, \textbackslash, etc.
|
||||
add_to_preamble(document, ['% added by lyx2lyx for converted index entries',
|
||||
'\\@ifundefined{textmu}',
|
||||
' {\\usepackage{textcomp}}{}'])
|
||||
# a lossless reversion is not possible
|
||||
# try at least to handle some common insets and settings
|
||||
if ert_end >= curline:
|
||||
line = line.replace(r'\backslash', r'\\')
|
||||
else:
|
||||
line = line.replace('&', '\\&{}')
|
||||
line = line.replace('#', '\\#{}')
|
||||
line = line.replace('^', '\\^{}')
|
||||
line = line.replace('%', '\\%{}')
|
||||
line = line.replace('_', '\\_{}')
|
||||
line = line.replace('$', '\\${}')
|
||||
|
||||
# Do the LyX text --> LaTeX conversion
|
||||
for rep in unicode_reps:
|
||||
line = line.replace(rep[1], rep[0] + "{}")
|
||||
line = line.replace(r'\backslash', r'\textbackslash{}')
|
||||
line = line.replace(r'\series bold', r'\bfseries{}').replace(r'\series default', r'\mdseries{}')
|
||||
line = line.replace(r'\shape italic', r'\itshape{}').replace(r'\shape smallcaps', r'\scshape{}')
|
||||
line = line.replace(r'\shape slanted', r'\slshape{}').replace(r'\shape default', r'\upshape{}')
|
||||
line = line.replace(r'\emph on', r'\em{}').replace(r'\emph default', r'\em{}')
|
||||
line = line.replace(r'\noun on', r'\scshape{}').replace(r'\noun default', r'\upshape{}')
|
||||
line = line.replace(r'\bar under', r'\underbar{').replace(r'\bar default', r'}')
|
||||
line = line.replace(r'\family sans', r'\sffamily{}').replace(r'\family default', r'\normalfont{}')
|
||||
line = line.replace(r'\family typewriter', r'\ttfamily{}').replace(r'\family roman', r'\rmfamily{}')
|
||||
line = line.replace(r'\InsetSpace ', r'').replace(r'\SpecialChar ', r'')
|
||||
content += line
|
||||
return content
|
||||
|
||||
|
||||
@ -1240,7 +1247,9 @@ def revert_inset_info(document):
|
||||
if arg[len(arg) - 1] == '"':
|
||||
arg = arg[:len(arg) - 1]
|
||||
# \" to straight quote
|
||||
arg = arg.replace(r'\"','"')
|
||||
arg = arg.replace(r'\"', '"')
|
||||
# \ to \backslash
|
||||
arg = arg.replace(r'\\', "\\backslash\n")
|
||||
if document.body[k].startswith("type"):
|
||||
type = document.body[k][4:].strip().strip('"')
|
||||
# I think there is a newline after \\end_inset, which should be removed.
|
||||
@ -2220,7 +2229,7 @@ def revert_subfig(document):
|
||||
if l == -1:
|
||||
document.warning("Malformed lyx document: Missing '\\end_inset' (embedded float).")
|
||||
i += 1
|
||||
j == -1
|
||||
j = -1
|
||||
continue # escape to the outer loop
|
||||
m = find_default_layout(document, k + 1, l)
|
||||
# caption?
|
||||
@ -2272,14 +2281,15 @@ def revert_subfig(document):
|
||||
continue
|
||||
elif line in document.body[opt:optend]:
|
||||
continue
|
||||
elif not line.startswith('\\'):
|
||||
caption += line.strip()
|
||||
else:
|
||||
inert = True
|
||||
caption += lyxline2latex(document, line, inert)
|
||||
if len(label) > 0:
|
||||
caption += "\\backslash\nlabel{" + label + "}"
|
||||
subst = '\\begin_layout Plain Layout\n\\begin_inset ERT\nstatus collapsed\n\n' \
|
||||
'\\begin_layout Plain Layout\n\n}' + alignment_end + \
|
||||
caption += "\n\\backslash\nlabel{" + label + "}"
|
||||
subst = '\\begin_layout PlainLayout\n\\begin_inset ERT\nstatus collapsed\n\n' \
|
||||
'\\begin_layout PlainLayout\n\n}' + alignment_end + \
|
||||
'\n\\end_layout\n\n\\end_inset\n\n' \
|
||||
'\\end_layout\n\n\\begin_layout Plain Layout\n'
|
||||
'\\end_layout\n\n\\begin_layout PlainLayout\n'
|
||||
subst = subst.split('\n')
|
||||
document.body[l : l+1] = subst
|
||||
addedLines = len(subst) - 1
|
||||
@ -2290,7 +2300,7 @@ def revert_subfig(document):
|
||||
del document.body[k+1:m-1]
|
||||
addedLines -= (m - 1 - (k + 1))
|
||||
insertion = '\\begin_inset ERT\nstatus collapsed\n\n' \
|
||||
'\\begin_layout Plain Layout\n\n' + alignment_beg + '\\backslash\n' \
|
||||
'\\begin_layout PlainLayout\n\n' + alignment_beg + '\n\\backslash\n' \
|
||||
'subfloat'
|
||||
if len(shortcap) > 0:
|
||||
insertion = insertion + "[" + shortcap + "]"
|
||||
@ -2300,6 +2310,7 @@ def revert_subfig(document):
|
||||
insertion = insertion.split('\n')
|
||||
document.body[k : k + 1] = insertion
|
||||
addedLines += len(insertion) - 1
|
||||
al = find_token(document.body, '\\align ', k - 1, j + addedLines)
|
||||
if al != -1:
|
||||
del document.body[al]
|
||||
addedLines -= 1
|
||||
@ -2926,7 +2937,7 @@ def convert_plain_layout(document):
|
||||
|
||||
|
||||
def revert_plain_layout(document):
|
||||
" Convert 'PlainLayout' to 'Plain Layout'"
|
||||
" Revert 'Plain Layout' to 'PlainLayout'"
|
||||
i = 0
|
||||
while True:
|
||||
i = find_token(document.body, '\\begin_layout Plain Layout', i)
|
||||
@ -2938,7 +2949,7 @@ def revert_plain_layout(document):
|
||||
|
||||
|
||||
def revert_plainlayout(document):
|
||||
" Convert 'PlainLayout' to 'Plain Layout'"
|
||||
" Revert 'PlainLayout' to 'Standard'"
|
||||
i = 0
|
||||
while True:
|
||||
i = find_token(document.body, '\\begin_layout PlainLayout', i)
|
||||
|
@ -130,6 +130,12 @@ What's new
|
||||
- Fix bug when using the characters # and % in hyperlinks that are e.g.
|
||||
in footnotes (bug 5908).
|
||||
|
||||
- Fix reversion of aligned tables in subfloats to LyX 1.5 (bug 5918).
|
||||
|
||||
- Fix reversion of info insets with a backslash to LyX 1.5.
|
||||
|
||||
- Fix unicode characters > LaTeX macro reversion to LyX 1.5.
|
||||
|
||||
- Fix LaTeX export of an isolated Japanese character when using
|
||||
ISO-2022-JP encoding (bug 5802).
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user