From 90f6eb01a4ac09d56591e0ed8a342ad6f6163796 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Thu, 4 Aug 2016 11:42:06 +0200 Subject: [PATCH] Include all [scr]article styles in beamer article layouts. File format change. On format reversion, we need to put some extra code in the local layout that emulates the 2.3 behavior. Simply Input'ing the respective layouts is unfortunately not enough, due to the insertion order. See #9977 --- lib/layouts/article-beamer.layout | 1 + lib/layouts/scrarticle-beamer.layout | 1 + lib/lyx2lyx/lyx_2_3.py | 91 +++++++++++++++++++++++++++- src/version.h | 4 +- 4 files changed, 92 insertions(+), 5 deletions(-) diff --git a/lib/layouts/article-beamer.layout b/lib/layouts/article-beamer.layout index 7550b00021..4460c1435f 100644 --- a/lib/layouts/article-beamer.layout +++ b/lib/layouts/article-beamer.layout @@ -6,6 +6,7 @@ Format 60 # Includes +Input article.layout Input beamer.layout # override settings inherited from beamer.layout (Paul Rubin ) diff --git a/lib/layouts/scrarticle-beamer.layout b/lib/layouts/scrarticle-beamer.layout index 47f53ede23..d9937c639b 100644 --- a/lib/layouts/scrarticle-beamer.layout +++ b/lib/layouts/scrarticle-beamer.layout @@ -6,6 +6,7 @@ Format 60 # Includes +Input scrartcl.layout Input beamer.layout # override settings inherited from beamer.layout diff --git a/lib/lyx2lyx/lyx_2_3.py b/lib/lyx2lyx/lyx_2_3.py index 37386a3865..001c1cb287 100644 --- a/lib/lyx2lyx/lyx_2_3.py +++ b/lib/lyx2lyx/lyx_2_3.py @@ -25,7 +25,7 @@ import sys, os # Uncomment only what you need to import, please. -#from parser_tools import find_token, find_end_of, find_tokens, \ +from parser_tools import find_end_of#, find_token, find_tokens, \ # find_token_exact, find_end_of_inset, find_end_of_layout, \ # find_token_backwards, is_in_inset, get_value, get_quoted_value, \ # del_token, check_token, get_option_value, get_bool_value @@ -176,7 +176,90 @@ def revert_ibranches(document): # these are the old lines telling us color, etc. lines += document.header[i+2 : j+1] document.header[i:i] = lines - + + +def revert_beamer_article_styles(document): + " Include (scr)article styles in beamer article " + + beamer_articles = ["article-beamer", "scrarticle-beamer"] + if document.textclass not in beamer_articles: + return + + inclusion = "article.layout" + if document.textclass == "scrarticle-beamer": + inclusion = "scrartcl.layout" + + while True: + i = find_token(document.header, "\\begin_local_layout", 0) + if i == -1: + k = find_token(document.header, "\\language", 0) + if k == -1: + # this should not happen + document.warning("Malformed LyX document! No \\language header found!") + break + document.header[k-1 : k-1] = ["\\begin_local_layout", "\\end_local_layout"] + i = find_token(document.header, "\\begin_local_layout", 0) + if i != -1: + j = find_end_of(document.header, i, "\\begin_local_layout", "\\end_local_layout") + if j == -1: + # this should not happen + break + + document.header[i+1 : i+1] = ["### Inserted by lyx2lyx (more [scr]article styles) ###", + "Input " + inclusion, + "Input beamer.layout", + "Provides geometry 0", + "Provides hyperref 0", + "DefaultFont", + " Family Roman", + " Series Medium", + " Shape Up", + " Size Normal", + " Color None", + "EndFont", + "Preamble", + " \\usepackage{beamerarticle,pgf}", + " % this default might be overridden by plain title style", + " \\newcommand\makebeamertitle{\\frame{\\maketitle}}%", + " \\AtBeginDocument{", + " \\let\\origtableofcontents=\\tableofcontents", + " \\def\\tableofcontents{\\@ifnextchar[{\\origtableofcontents}{\\gobbletableofcontents}}", + " \\def\\gobbletableofcontents#1{\\origtableofcontents}", + " }", + "EndPreamble", + "### End of insertion by lyx2lyx (more [scr]article styles) ###"] + return + + +def convert_beamer_article_styles(document): + " Remove included (scr)article styles in beamer article " + + beamer_articles = ["article-beamer", "scrarticle-beamer"] + if document.textclass not in beamer_articles: + return + + while True: + i = find_token(document.header, "\\begin_local_layout", 0) + if i == -1: + return + + j = find_end_of(document.header, i, "\\begin_local_layout", "\\end_local_layout") + if j == -1: + # this should not happen + break + + k = find_token(document.header, "### Inserted by lyx2lyx (more [scr]article styles) ###", i, j) + if k != -1: + l = find_token(document.header, "### End of insertion by lyx2lyx (more [scr]article styles) ###", i, j) + if l == -1: + # this should not happen + document.warning("End of lyx2lyx local layout insertion not found!") + break + + document.header[k : l + 1] = [] + + return + ## # Conversion hub @@ -186,10 +269,12 @@ supported_versions = ["2.3.0", "2.3"] convert = [ [509, [convert_microtype]], [510, [convert_dateinset]], - [511, [convert_ibranches]] + [511, [convert_ibranches]], + [512, [convert_beamer_article_styles]] ] revert = [ + [511, [revert_beamer_article_styles]], [510, [revert_ibranches]], [509, []], [508, [revert_microtype]] diff --git a/src/version.h b/src/version.h index 0a3b493008..561f3ec56a 100644 --- a/src/version.h +++ b/src/version.h @@ -32,8 +32,8 @@ extern char const * const lyx_version_info; // Do not remove the comment below, so we get merge conflict in // independent branches. Instead add your own. -#define LYX_FORMAT_LYX 511 // rgh: inverted branches -#define LYX_FORMAT_TEX2LYX 511 +#define LYX_FORMAT_LYX 512 // spitz: beamer article extension +#define LYX_FORMAT_TEX2LYX 512 #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX #ifndef _MSC_VER