commit d89a48483e390664cf894909afa62092deaeac5b
Author: Juergen Spitzmueller <[email protected]>
Date:   Fri Jan 6 14:40:25 2023 +0100

    Add missing revert routine to lyx_2_0.py
---
 lib/lyx2lyx/lyx_2_0.py |   84 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 82 insertions(+), 2 deletions(-)

diff --git a/lib/lyx2lyx/lyx_2_0.py b/lib/lyx2lyx/lyx_2_0.py
index c302f8e..3f87e40 100644
--- a/lib/lyx2lyx/lyx_2_0.py
+++ b/lib/lyx2lyx/lyx_2_0.py
@@ -1997,7 +1997,7 @@ chapters = ("amsbook", "book", "docbook-book", "elsart", 
"extbook", "extreport",
     "svmult", "tbook", "treport", "tufte-book")
 
 def convert_bibtex_clearpage(document):
-  " insert a clear(double)page bibliographystyle if bibtotoc option is used "
+  " insert a clear(double)page before bibliographystyle if bibtotoc option is 
used "
 
   if document.textclass not in chapters:
     return
@@ -2062,6 +2062,86 @@ def convert_bibtex_clearpage(document):
     j = k + len(subst)
 
 
+def revert_bibtex_clearpage(document):
+  " remove clear(double)page before bibliographystyle if bibtotoc option is 
used "
+
+  if document.textclass not in chapters:
+    return
+
+  i = find_token(document.header, '\\papersides', 0)
+  sides = 0
+  if i == -1:
+    document.warning("Malformed LyX document: Can't find papersides 
definition.")
+    document.warning("Assuming single sided.")
+    sides = 1
+  else:
+    val = get_value(document.header, "\\papersides", i)
+    try:
+      sides = int(val)
+    except:
+      pass
+    if sides != 1 and sides != 2:
+      document.warning("Invalid papersides value: " + val)
+      document.warning("Assuming single sided.")
+      sides = 1
+
+  j = 0
+  while True:
+    j = find_token(document.body, "\\begin_inset CommandInset bibtex", j)
+    if j == -1:
+      return
+
+    k = find_end_of_inset(document.body, j)
+    if k == -1:
+      document.warning("Can't find end of Bibliography inset at line " + 
str(j))
+      j += 1
+      continue
+
+    # only act if there is the option "bibtotoc"
+    val = get_value(document.body, 'options', j, k)
+    if not val:
+      document.warning("Can't find options for bibliography inset at line " + 
str(j))
+      j = k
+      continue
+
+    if val.find("bibtotoc") == -1:
+      j = k
+      continue
+
+    # we had inserted \\clear[double]page right before the paragraph that
+    # this bibliography thing is in. Remove this. The older format has the
+    # respective command hardcoded.
+    lay = find_token_backwards(document.body, "\\begin_layout", j)
+    if lay == -1:
+      document.warning("Can't find layout containing bibliography inset at 
line " + str(j))
+      j = k
+      continue
+    # Find the layout before this.
+    lay = find_token_backwards(document.body, "\\begin_layout", lay-1)
+    if lay == -1:
+      document.warning("Can't find layout before bibliography inset at line " 
+ str(j))
+      j = k
+      continue
+
+    if sides == 1:
+      cmd = "clearpage"
+    else:
+      cmd = "cleardoublepage"
+
+    if document.body[lay] != "\\begin_layout Standard" or document.body[lay+1] 
!= "\\begin_inset Newpage " + cmd:
+        j = k
+        continue
+    layend = find_end_of_layout(document.body, lay)
+    if layend == -1:
+      document.warning("Can't find end of layout containg newpage inset at 
line " + str(layend))
+      j += 1
+      continue
+
+    del document.body[lay:layend+1]
+    j = lay
+
+
+
 def check_passthru(document):
   tc = document.textclass
   ok = (tc == "literate-article" or tc == "literate-book" or tc == 
"literate-report")
@@ -2554,7 +2634,7 @@ revert =  [[412, [revert_html_css_as_file]],
            [404, []],
            [403, [revert_refstyle]],
            [402, [revert_flexnames]],
-           [401, []],
+           [401, [revert_bibtex_clearpage]],
            [400, [revert_diagram]],
            [399, [revert_rule]],
            [398, [revert_mathdots]],
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to