InsetListings: lyx2lyx for caption and label

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18328 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Bo Peng 2007-05-15 01:38:48 +00:00
parent 2260a558da
commit 49cb2e69e7

View File

@ -1427,6 +1427,27 @@ lstinline[language=Delphi]{var i = 10;}
\end_layout \end_layout
\end_inset \end_inset
There can be an caption inset in this inset
\begin_layout Standard
\begin_inset Caption
\begin_layout Standard
before label
\begin_inset LatexCommand label
name "lst:caption"
\end_inset
after label
\end_layout
\end_inset
\end_layout
''' '''
i = 0 i = 0
while True: while True:
@ -1443,7 +1464,6 @@ lstinline[language=Delphi]{var i = 10;}
inline = 'false' inline = 'false'
params = '' params = ''
status = 'open' status = 'open'
inlinecode = ''
# first three lines # first three lines
for line in range(i + 1, i + 4): for line in range(i + 1, i + 4):
if document.body[line].startswith('inline'): if document.body[line].startswith('inline'):
@ -1453,13 +1473,50 @@ lstinline[language=Delphi]{var i = 10;}
if document.body[line].startswith('status'): if document.body[line].startswith('status'):
status = document.body[line].split()[1].strip() status = document.body[line].split()[1].strip()
k = line + 1 k = line + 1
# looking for the oneline code for lstinline # caption?
for line in range(i + 2, j + 1): caption = ''
if document.body[line].startswith(r'\end_layout'): label = ''
inlinecode = document.body[line - 1] cap = find_token(document.body, '\\begin_inset Caption', i)
if cap != -1:
cap_end = find_end_of_inset(document.body, cap + 1)
if cap_end == -1:
# this should not happen
break break
# label?
lbl = find_token(document.body, '\\begin_inset LatexCommand label', cap + 1)
if lbl != -1:
lbl_end = find_end_of_inset(document.body, lbl + 1)
if lbl_end == -1:
# this should not happen
break
else:
lbl = cap_end
lbl_end = cap_end
for line in document.body[lbl : lbl_end + 1]:
if line.startswith('name '):
label = line.split()[1].strip('"')
break
for line in document.body[cap : lbl ] + document.body[lbl_end + 1 : cap_end + 1]:
if not line.startswith('\\'):
caption += line.strip()
k = cap_end + 1
inlinecode = ''
# looking for the oneline code for lstinline
inlinecode = document.body[find_end_of_layout(document.body,
find_token(document.body, '\\begin_layout Standard', i + 1) +1 ) - 1]
if len(caption) > 0:
if len(params) == 0:
params = 'caption={%s}' % caption
else:
params += ',caption={%s}' % caption
if len(label) > 0:
if len(params) == 0:
params = 'label={%s}' % label
else:
params += ',label={%s}' % label
if len(params) > 0: if len(params) > 0:
params = '[%s]' % params params = '[%s]' % params
params = params.replace('\\', '\\backslash\n')
if inline == 'true': if inline == 'true':
document.body[i:(j+1)] = [r'\begin_inset ERT', document.body[i:(j+1)] = [r'\begin_inset ERT',
'status %s' % status, 'status %s' % status,
@ -1526,8 +1583,11 @@ lstinputlisting{file}[opt]
if j == -1: if j == -1:
# this should not happen # this should not happen
break break
# find command line # find command line lstinputlisting{file}[options]
cmd = document.body[i].split()[2] cmd, file, option = '', '', ''
if re.match(r'\\(lstinputlisting){([.\w]*)}(.*)', document.body[i].split()[2]):
cmd, file, option = re.match(r'\\(lstinputlisting){([.\w]*)}(.*)', document.body[i].split()[2]).groups()
option = option.replace('\\', '\\backslash\n')
document.body[i : j + 1] = [r'\begin_inset ERT', document.body[i : j + 1] = [r'\begin_inset ERT',
'status open', 'status open',
'', '',
@ -1535,7 +1595,7 @@ lstinputlisting{file}[opt]
'', '',
'', '',
r'\backslash', r'\backslash',
'%s' % cmd[1:], '%s%s{%s}' % (cmd, option, file),
r'\end_layout', r'\end_layout',
'', '',
r'\end_inset'] r'\end_inset']