]> git.lyx.org Git - lyx.git/blobdiff - lib/lyx2lyx/parser_tools.py
Factor out some common code.
[lyx.git] / lib / lyx2lyx / parser_tools.py
index a2fea7af09b0b7429fc9c2331e88e6b22865782c..43ebcd091c3d90625e483bed50fd3a408014ab04 100644 (file)
@@ -1,6 +1,7 @@
 # This file is part of lyx2lyx
 # -*- coding: utf-8 -*-
-# Copyright (C) 2002-2004 Dekel Tsur <dekel@lyx.org>, José Matos <jamatos@lyx.org>
+# Copyright (C) 2002-2010 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
 # modify it under the terms of the GNU General Public License
@@ -16,7 +17,7 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
-" This modules offer several free functions to help parse lines."
+" This modules offer several free functions to help parse lines. "
 
 # Utilities for one line
 def check_token(line, token):
@@ -156,6 +157,27 @@ def get_value(lines, token, start, end = 0, default = ""):
         return default
 
 
+def get_value_string(lines, token, start, end = 0, trim = False, default = ""):
+    """ get_value_string(lines, token, start[[, end], trim, default]) -> string
+
+    Return tokens after token as string, in lines, where
+    token is the first element. When trim is used, the first and last character
+    of the string is trimmed."""
+
+    i = find_token_exact(lines, token, start, end)
+    if i == -1:
+        return default
+    if len(lines[i].split()) > 1:
+        for k in range (0, len(lines[i])):
+            if lines[i][k] == ' ':
+                if trim ==False:
+                    return lines[i][k+1:len(lines[i])]
+                else:
+                    return lines[i][k+2:len(lines[i])-1]
+    else:
+        return default
+
+
 def del_token(lines, token, start, end):
     """ del_token(lines, token, start, end) -> int
 
@@ -210,3 +232,28 @@ def find_nonempty_line(lines, start, end = 0):
         if is_nonempty_line(lines[i]):
             return i
     return -1
+
+
+def find_end_of_inset(lines, i):
+    " Find end of inset, where lines[i] is included."
+    return find_end_of(lines, i, "\\begin_inset", "\\end_inset")
+
+
+def find_end_of_layout(lines, i):
+    " Find end of layout, where lines[i] is included."
+    return find_end_of(lines, i, "\\begin_layout", "\\end_layout")
+
+
+# checks if line i is in the inset e.g., "\\begin_inset CommandInset ref"
+# if so, returns starting and ending lines
+# otherwise, returns (-1, -1)
+def get_containing_inset(lines, i, inset):
+    defval = (-1, -1)
+    stins = find_token_backwards(lines, inset, i)
+    if stins == -1:
+      return defval
+    endins = find_end_of_inset(lines, stins)
+    # note that this includes the notfound case.
+    if endins < i:
+      return defval
+    return (stins, endins)