]> git.lyx.org Git - lyx.git/blobdiff - lib/lyx2lyx/parser_tools.py
Don't use widest label for numerical citations.
[lyx.git] / lib / lyx2lyx / parser_tools.py
index 83cf303225db2c779fd8c3f56147aef3fd728727..3b1322974e6878e058be8533b7ca8c73c60cca63 100644 (file)
@@ -104,6 +104,12 @@ find_end_of_inset(lines, i):
 find_end_of_layout(lines, i):
   Specialization of find_end_of for layouts.
 
+find_end_of_sequence(lines, i):
+  Find the end of the sequence of layouts of the same kind.
+  Considers nesting. If the last paragraph in sequence is nested,
+  the position of the last \end_deeper is returned, else
+  the position of the last \end_layout.
+
 is_in_inset(lines, i, inset):
   Checks if line i is in an inset of the given type.
   If so, returns starting and ending lines. Otherwise, 
@@ -119,7 +125,7 @@ is_in_inset(lines, i, inset):
 
 get_containing_inset(lines, i):
   Finds out what kind of inset line i is within. Returns a 
-  list containing what follows \begin_inset on the the line 
+  list containing 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.
   So get_containing_inset(document.body, i) might return:
@@ -141,6 +147,9 @@ check_token(line, token):
 is_nonempty_line(line):
   Does line contain something besides whitespace?
 
+count_pars_in_inset(lines, i):
+  Counts the paragraphs inside an inset.
+
 '''
 
 import re
@@ -417,7 +426,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 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.
   '''
@@ -441,7 +450,7 @@ 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 the line 
+  list containing (i) 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).
   Returns False on any kind of error.
@@ -470,3 +479,51 @@ def get_containing_layout(lines, i):
       if lines[stpar] 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)
+  if ins == -1:
+      return -1
+  pars = 0
+  for j in range(ins[1], ins[2]):
+      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)
+  if lay == False:
+      return -1
+  layout = lay[0]
+  endlay = lay[2]
+  i = endlay
+  while True:
+      m = re.match(r'\\begin_layout (.*)', lines[i])
+      if m and m.group(1) != layout:
+          return endlay
+      elif lines[i] == "\\begin_deeper":
+          j = find_end_of(lines, i, "\\begin_deeper", "\\end_deeper")
+          if j != -1:
+              i = j
+              endlay = j
+              continue
+      if m and m.group(1) == layout:
+          endlay = find_end_of_layout(lines, i)
+          i = endlay
+          continue
+      if i == len(lines) - 1:
+          break
+      i = i + 1
+
+  return endlay
+