]> git.lyx.org Git - lyx.git/blobdiff - lib/lyx2lyx/parser_tools.py
lyx2lyx: correct placement of (new) local layout
[lyx.git] / lib / lyx2lyx / parser_tools.py
index c53dbfa1abf5ad83c225740babceff269ebda7e9..175db00ac3b21de3bc335204a435261f57aec90a 100644 (file)
@@ -88,6 +88,9 @@ 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.
 
+  Use get_* with the optional argument "delete=True", if you want to
+  get and delete a token.
+
 find_beginning_of(lines, i, start_token, end_token):
   Here, start_token and end_token are meant to be a matching
   pair, like "\\begin_layout" and "\\end_layout". We look for
@@ -226,6 +229,7 @@ def find_tokens(lines, tokens, start=0, end=0, ignorews=False):
     the first element, in lines[start, end].
 
     Return -1 on failure."""
+
     if end == 0 or end > len(lines):
         end = len(lines)
 
@@ -425,25 +429,21 @@ def get_quoted_value(lines, token, start=0, end=0, default="", delete=False):
       return default
     return val.strip('"')
 
-bool_values = {True:  ("true", "1"), 
-               False: ("false", "0")}
+
+bool_values = {"true": True, "1": True,
+               "false": False, "0": False}
 
 def get_bool_value(lines, token, start=0, end=0, default=None, delete=False):
     """ get_bool_value(lines, token, start[[, end], default]) -> string
 
     Find the next line that looks like:
-      token <bool_value>
+      `token` <bool_value>
 
-    Return True if <bool_value> is 1 or "true", False if bool_value
+    Return True if <bool_value> is 1 or "true", False if <bool_value>
     is 0 or "false", else `default`.
     """
-
     val = get_quoted_value(lines, token, start, end, default, delete)
-    if val in bool_values[True]:
-        return True
-    if val in bool_values[False]:
-        return False
-    return default
+    return bool_values.get(val, default)
 
 
 def set_bool_value(lines, token, value, start=0, end=0):
@@ -459,13 +459,11 @@ def set_bool_value(lines, token, value, start=0, end=0):
     oldvalue = get_bool_value(lines, token, i, i+1)
     if oldvalue is value:
         return oldvalue
-    # Use 0/1 or true/false?
+    # set to new value
     if get_quoted_value(lines, token, i, i+1) in ('0', '1'):
-        value_string = bool_values[value][1]
+        lines[i] = "%s %d" % (token, value)
     else:
-        value_string = bool_values[value][0]
-    # set to new value
-    lines[i] = "%s %s" % (token, value_string)
+        lines[i] = "%s %s" % (token, str(value).lower())
 
     return oldvalue
 
@@ -639,12 +637,15 @@ 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 what follows \begin_layout on the line
-  on which the layout begins, plus the starting and ending line
-  and the start of the paragraph (after all params). I.e, returns:
+  Find out what kind of layout line `i` is within.
+  Return a tuple
     (layoutname, layoutstart, layoutend, startofcontent)
-  Returns False on any kind of error.
+  containing
+    * layout style/name,
+    * start line number,
+    * end line number, and
+    * number of first paragraph line (after all params).
+  Return `False` on any kind of error.
   '''
   j = i
   while True:
@@ -659,10 +660,13 @@ def get_containing_layout(lines, i):
   if endlay < i:
       return False
 
-  lay = get_value(lines, "\\begin_layout", stlay)
-  if lay == "":
-      # shouldn't happen
-      return False
+  layoutname = get_value(lines, "\\begin_layout", stlay)
+  if layoutname == "": # layout style missing
+      # TODO: What shall we do in this case?
+      pass
+      # layoutname == "Standard" # use same fallback as the LyX parser:
+      # raise ValueError("Missing layout name on line %d"%stlay) # diagnosis
+      # return False # generic error response
   par_params = ["\\noindent", "\\indent", "\\indent-toggle", "\\leftindent",
                 "\\start_of_appendix", "\\paragraph_spacing", "\\align",
                 "\\labelwidthstring"]
@@ -671,7 +675,7 @@ def get_containing_layout(lines, i):
       stpar += 1
       if lines[stpar].split(' ', 1)[0] not in par_params:
           break
-  return (lay, stlay, endlay, stpar)
+  return (layoutname, stlay, endlay, stpar)
 
 
 def count_pars_in_inset(lines, i):