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
|
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):
|
def lyx2latex(document, lines):
|
||||||
'Convert some LyX stuff into corresponding LaTeX stuff, as best we can.'
|
'Convert some LyX stuff into corresponding LaTeX stuff, as best we can.'
|
||||||
# clean up multiline stuff
|
# clean up multiline stuff
|
||||||
@ -329,73 +394,15 @@ def lyx2latex(document, lines):
|
|||||||
ert_end = 0
|
ert_end = 0
|
||||||
|
|
||||||
for curline in range(len(lines)):
|
for curline in range(len(lines)):
|
||||||
line = lines[curline]
|
line = lines[curline]
|
||||||
if line.startswith("\\begin_inset ERT"):
|
if line.startswith("\\begin_inset ERT"):
|
||||||
# We don't want to replace things inside ERT, so figure out
|
# We don't want to replace things inside ERT, so figure out
|
||||||
# where the end of the inset is.
|
# where the end of the inset is.
|
||||||
ert_end = find_end_of_inset(lines, curline + 1)
|
ert_end = find_end_of_inset(lines, curline + 1)
|
||||||
continue
|
continue
|
||||||
elif line.startswith("\\begin_inset Formula"):
|
inert = ert_end >= curline
|
||||||
line = line[20:]
|
content += lyxline2latex(document, lines[curline], inert)
|
||||||
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
|
|
||||||
|
|
||||||
# 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
|
return content
|
||||||
|
|
||||||
|
|
||||||
@ -1240,7 +1247,9 @@ def revert_inset_info(document):
|
|||||||
if arg[len(arg) - 1] == '"':
|
if arg[len(arg) - 1] == '"':
|
||||||
arg = arg[:len(arg) - 1]
|
arg = arg[:len(arg) - 1]
|
||||||
# \" to straight quote
|
# \" 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"):
|
if document.body[k].startswith("type"):
|
||||||
type = document.body[k][4:].strip().strip('"')
|
type = document.body[k][4:].strip().strip('"')
|
||||||
# I think there is a newline after \\end_inset, which should be removed.
|
# I think there is a newline after \\end_inset, which should be removed.
|
||||||
@ -2220,7 +2229,7 @@ def revert_subfig(document):
|
|||||||
if l == -1:
|
if l == -1:
|
||||||
document.warning("Malformed lyx document: Missing '\\end_inset' (embedded float).")
|
document.warning("Malformed lyx document: Missing '\\end_inset' (embedded float).")
|
||||||
i += 1
|
i += 1
|
||||||
j == -1
|
j = -1
|
||||||
continue # escape to the outer loop
|
continue # escape to the outer loop
|
||||||
m = find_default_layout(document, k + 1, l)
|
m = find_default_layout(document, k + 1, l)
|
||||||
# caption?
|
# caption?
|
||||||
@ -2272,14 +2281,15 @@ def revert_subfig(document):
|
|||||||
continue
|
continue
|
||||||
elif line in document.body[opt:optend]:
|
elif line in document.body[opt:optend]:
|
||||||
continue
|
continue
|
||||||
elif not line.startswith('\\'):
|
else:
|
||||||
caption += line.strip()
|
inert = True
|
||||||
|
caption += lyxline2latex(document, line, inert)
|
||||||
if len(label) > 0:
|
if len(label) > 0:
|
||||||
caption += "\\backslash\nlabel{" + label + "}"
|
caption += "\n\\backslash\nlabel{" + label + "}"
|
||||||
subst = '\\begin_layout Plain Layout\n\\begin_inset ERT\nstatus collapsed\n\n' \
|
subst = '\\begin_layout PlainLayout\n\\begin_inset ERT\nstatus collapsed\n\n' \
|
||||||
'\\begin_layout Plain Layout\n\n}' + alignment_end + \
|
'\\begin_layout PlainLayout\n\n}' + alignment_end + \
|
||||||
'\n\\end_layout\n\n\\end_inset\n\n' \
|
'\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')
|
subst = subst.split('\n')
|
||||||
document.body[l : l+1] = subst
|
document.body[l : l+1] = subst
|
||||||
addedLines = len(subst) - 1
|
addedLines = len(subst) - 1
|
||||||
@ -2290,7 +2300,7 @@ def revert_subfig(document):
|
|||||||
del document.body[k+1:m-1]
|
del document.body[k+1:m-1]
|
||||||
addedLines -= (m - 1 - (k + 1))
|
addedLines -= (m - 1 - (k + 1))
|
||||||
insertion = '\\begin_inset ERT\nstatus collapsed\n\n' \
|
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'
|
'subfloat'
|
||||||
if len(shortcap) > 0:
|
if len(shortcap) > 0:
|
||||||
insertion = insertion + "[" + shortcap + "]"
|
insertion = insertion + "[" + shortcap + "]"
|
||||||
@ -2300,6 +2310,7 @@ def revert_subfig(document):
|
|||||||
insertion = insertion.split('\n')
|
insertion = insertion.split('\n')
|
||||||
document.body[k : k + 1] = insertion
|
document.body[k : k + 1] = insertion
|
||||||
addedLines += len(insertion) - 1
|
addedLines += len(insertion) - 1
|
||||||
|
al = find_token(document.body, '\\align ', k - 1, j + addedLines)
|
||||||
if al != -1:
|
if al != -1:
|
||||||
del document.body[al]
|
del document.body[al]
|
||||||
addedLines -= 1
|
addedLines -= 1
|
||||||
@ -2926,7 +2937,7 @@ def convert_plain_layout(document):
|
|||||||
|
|
||||||
|
|
||||||
def revert_plain_layout(document):
|
def revert_plain_layout(document):
|
||||||
" Convert 'PlainLayout' to 'Plain Layout'"
|
" Revert 'Plain Layout' to 'PlainLayout'"
|
||||||
i = 0
|
i = 0
|
||||||
while True:
|
while True:
|
||||||
i = find_token(document.body, '\\begin_layout Plain Layout', i)
|
i = find_token(document.body, '\\begin_layout Plain Layout', i)
|
||||||
@ -2938,7 +2949,7 @@ def revert_plain_layout(document):
|
|||||||
|
|
||||||
|
|
||||||
def revert_plainlayout(document):
|
def revert_plainlayout(document):
|
||||||
" Convert 'PlainLayout' to 'Plain Layout'"
|
" Revert 'PlainLayout' to 'Standard'"
|
||||||
i = 0
|
i = 0
|
||||||
while True:
|
while True:
|
||||||
i = find_token(document.body, '\\begin_layout PlainLayout', i)
|
i = find_token(document.body, '\\begin_layout PlainLayout', i)
|
||||||
|
@ -128,7 +128,13 @@ What's new
|
|||||||
space.
|
space.
|
||||||
|
|
||||||
- Fix bug when using the characters # and % in hyperlinks that are e.g.
|
- Fix bug when using the characters # and % in hyperlinks that are e.g.
|
||||||
in footnotes (bug 5908).
|
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
|
- Fix LaTeX export of an isolated Japanese character when using
|
||||||
ISO-2022-JP encoding (bug 5802).
|
ISO-2022-JP encoding (bug 5802).
|
||||||
|
Loading…
Reference in New Issue
Block a user