# This file is part of lyx2lyx
# -*- coding: utf-8 -*-
-# Copyright (C) 2002-2010 Dekel Tsur <dekel@lyx.org>,
+# Copyright (C) 2002-2011 Dekel Tsur <dekel@lyx.org>,
# José Matos <jamatos@lyx.org>, Richard Heck <rgheck@comcast.net>
#
# This program is free software; you can redistribute it and/or
#
# 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.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
'''
value, if they are present. So use this one for cases
where the value is normally quoted.
+get_option_value(line, option):
+ This assumes we have a line with something like:
+ option="value"
+ and returns value. Returns "" if not found.
+
del_token(lines, token, start[, end]):
Like find_token, but deletes the line if it finds one.
Returns True if a line got deleted, otherwise False.
on line 306.
get_containing_layout(lines, i):
- As get_containing_inset, but for layout.
+ As get_containing_inset, but for layout. Additionally returns the
+ position of real paragraph start (after par params) as 4th value.
find_nonempty_line(lines, start[, end):
'''
+import re
+
# Utilities for one line
def check_token(line, token):
""" check_token(line, token) -> bool
return val.strip('"')
+def get_option_value(line, option):
+ rx = option + '\s*=\s*"([^"]+)"'
+ rx = re.compile(rx)
+ m = rx.search(line)
+ if not m:
+ return ""
+ return m.group(1)
+
+
+def set_option_value(line, option, value):
+ rx = '(' + option + '\s*=\s*")[^"]+"'
+ rx = re.compile(rx)
+ m = rx.search(line)
+ if not m:
+ return line
+ return re.sub(rx, '\g<1>' + value + '"', line)
+
+
def del_token(lines, token, start, end = 0):
""" del_token(lines, token, start, end) -> int
on which the inset begins, plus the starting and ending line.
Returns False on any kind of error or if it isn't in an inset.
'''
- stins = find_token_backwards(lines, i, "\\begin_inset")
- if stins == -1:
- return False
- endins = find_end_of_inset(lines, stins)
- if endins < i:
- return False
+ j = i
+ while True:
+ stins = find_token_backwards(lines, "\\begin_inset", j)
+ if stins == -1:
+ return False
+ endins = find_end_of_inset(lines, stins)
+ if endins > j:
+ break
+ j = stins - 1
+
inset = get_value(lines, "\\begin_inset", stins)
if inset == "":
# shouldn't happen
'''
Finds out what kind of layout line i is within. Returns a
list containing (i) what follows \begin_layout on the the line
- on which the layout begins, plus the starting and ending line.
+ on which the layout begins, plus the starting and ending line
+ and the start of the apargraph (after all params).
Returns False on any kind of error.
'''
- stins = find_token_backwards(lines, i, "\\begin_layout")
- if stins == -1:
- return False
- endins = find_end_of_layout(lines, stins)
- if endins < i:
- return False
- lay = get_value(lines, "\\begin_layout", stins)
+ j = i
+ while True:
+ stlay = find_token_backwards(lines, "\\begin_layout", j)
+ if stlay == -1:
+ return False
+ endlay = find_end_of_layout(lines, stlay)
+ if endlay > i:
+ break
+ j = stlay - 1
+
+ lay = get_value(lines, "\\begin_layout", stlay)
if lay == "":
# shouldn't happen
return False
- return (lay, stins, endins)
+ par_params = ["\\noindent", "\\indent", "\\indent-toggle", "\\leftindent",
+ "\\start_of_appendix", "\\paragraph_spacing single",
+ "\\paragraph_spacing onehalf", "\\paragraph_spacing double",
+ "\\paragraph_spacing other", "\\align", "\\labelwidthstring"]
+ stpar = stlay
+ while True:
+ stpar += 1
+ if lines[stpar] not in par_params:
+ break
+ return (lay, stlay, endlay, stpar)