]> git.lyx.org Git - lyx.git/blobdiff - lib/lyx2lyx/parser_tools.py
Pass parameters by reference (performance)
[lyx.git] / lib / lyx2lyx / parser_tools.py
index 3b1322974e6878e058be8533b7ca8c73c60cca63..4e30f63bf8094b65bbbb1557d62594cc1d5af317 100644 (file)
@@ -19,7 +19,7 @@
 
 
 ''' 
-This modules offer several free functions to help parse lines.
+This module offers several free functions to help parse lines.
 More documentaton is below, but here is a quick guide to what 
 they do. Optional arguments are marked by brackets.
 
@@ -32,11 +32,11 @@ find_token(lines, token, start[, end[, ignorews]]):
   extra whitespace following token itself.
 
 find_token_exact(lines, token, start[, end]):
-  As find_token, but with ignorews True.
+  As find_token, but with ignorews set to True.
 
 find_tokens(lines, tokens, start[, end[, ignorews]]):
   Returns the first line i, start <= i < end, on which
-  oen of the tokens in tokens is found at the beginning. 
+  one of the tokens in tokens is found at the beginning. 
   Returns -1 if not found. 
   If ignorews is (given and) True, then differences
   in whitespace do not count, except that there must be no 
@@ -137,7 +137,6 @@ get_containing_layout(lines, i):
   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):
   Finds the next non-empty line.
 
@@ -426,7 +425,7 @@ def is_in_inset(lines, i, inset):
 def get_containing_inset(lines, i):
   ''' 
   Finds out what kind of inset line i is within. Returns a 
-  list containing (i) what follows \begin_inset on the line 
+  list containing (i) what follows \begin_inset on the line
   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.
   '''
@@ -439,7 +438,10 @@ def get_containing_inset(lines, i):
       if endins > j:
           break
       j = stins - 1
-  
+
+  if endins < i:
+      return False
+
   inset = get_value(lines, "\\begin_inset", stins)
   if inset == "":
       # shouldn't happen
@@ -450,9 +452,10 @@ def get_containing_inset(lines, i):
 def get_containing_layout(lines, i):
   ''' 
   Finds out what kind of layout line i is within. Returns a 
-  list containing (i) what follows \begin_layout on the line 
+  list containing what follows \begin_layout on the line
   on which the layout begins, plus the starting and ending line
-  and the start of the apargraph (after all params).
+  and the start of the paragraph (after all params). I.e, returns:
+    (layoutname, layoutstart, layoutend, startofcontent)
   Returns False on any kind of error.
   '''
   j = i
@@ -464,25 +467,27 @@ def get_containing_layout(lines, i):
       if endlay > i:
           break
       j = stlay - 1
-  
+
+  if endlay < i:
+      return False
+
   lay = get_value(lines, "\\begin_layout", stlay)
   if lay == "":
       # shouldn't happen
       return False
   par_params = ["\\noindent", "\\indent", "\\indent-toggle", "\\leftindent",
-                "\\start_of_appendix", "\\paragraph_spacing single",
-                "\\paragraph_spacing onehalf", "\\paragraph_spacing double",
-                "\\paragraph_spacing other", "\\align", "\\labelwidthstring"]
+                "\\start_of_appendix", "\\paragraph_spacing", "\\align",
+                "\\labelwidthstring"]
   stpar = stlay
   while True:
       stpar += 1
-      if lines[stpar] not in par_params:
+      if lines[stpar].split(' ', 1)[0] not in par_params:
           break
   return (lay, stlay, endlay, stpar)
 
 
 def count_pars_in_inset(lines, i):
-  ''' 
+  '''
   Counts the paragraphs within this inset
   '''
   ins = get_containing_inset(lines, i)
@@ -493,12 +498,12 @@ def count_pars_in_inset(lines, i):
       m = re.match(r'\\begin_layout (.*)', lines[j])
       if m and get_containing_inset(lines, j)[0] == ins[0]:
           pars += 1
-  
+
   return pars
 
 
 def find_end_of_sequence(lines, i):
-  ''' 
+  '''
   Returns the end of a sequence of identical layouts.
   '''
   lay = get_containing_layout(lines, i)