From 3ab2798b6eab820f7b35d283edf2a4a41201957e Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Mon, 18 Mar 2013 13:36:56 +0100 Subject: [PATCH] Powerdot updates * Powerdot now also uses the native overlay item arguments * a list option argument is finally available * \pause natively supported (like in beamer) * support for \onslide (via InsetFlex) * support for \twocolumn File format change. --- development/FORMAT | 8 ++ lib/layouts/powerdot.layout | 162 +++++++++++++++++++++++++++-- lib/lyx2lyx/lyx_2_1.py | 202 +++++++++++++++++++++++++++++++++++- src/tex2lyx/TODO.txt | 8 ++ src/version.h | 4 +- 5 files changed, 373 insertions(+), 11 deletions(-) diff --git a/development/FORMAT b/development/FORMAT index ae42c5d851..79a23228f1 100644 --- a/development/FORMAT +++ b/development/FORMAT @@ -11,6 +11,14 @@ adjustments are made to tex2lyx and bugs are fixed in lyx2lyx. ----------------------- +2013-03-17 Jürgen Spitzmüller + * Format incremented to 466: Powerdot updates. + - Support for item arguments ([...], <...>) + - Support for list option + - Support for Pause layout (like in beamer) + - Support for twocolumn layout + - Support for \onslide, \onslide* and \onslide+ via fle inset. + 2013-03-16 Jürgen Spitzmüller * Format incremented to 465: Convert old beamer frames to new ones. The layouts BeginFrame, BeginPlainFrame and EndFrame are now not diff --git a/lib/layouts/powerdot.layout b/lib/layouts/powerdot.layout index e75d8b0c1a..bfe295ae3e 100644 --- a/lib/layouts/powerdot.layout +++ b/lib/layouts/powerdot.layout @@ -3,7 +3,7 @@ # \DeclareCategory{Presentations} # PowerDot textclass definition file. # Created: 29-Aug-05 by Mael Hilléreau -# Last modified: 20-May-06 by Uwe Stöhr +# Modified: 20-May-06 by Uwe Stöhr, 18-Mar-2013 Jürgen Spitzmüller Format 45 @@ -40,7 +40,7 @@ End # Title style definition ### Style Title - Category FrontMatter + Category TitleSlide Margin Static LatexType Command InTitle 1 @@ -64,7 +64,7 @@ End # Author style definition ### Style Author - Category FrontMatter + Category TitleSlide Margin Static LatexType Command InTitle 1 @@ -86,6 +86,7 @@ End # Date style definition ### Style Date + Category TitleSlide Margin Dynamic LatexType Command InTitle 1 @@ -121,6 +122,7 @@ End # Slide styles definition ### Style Slide + Category Slides TocLevel 3 Margin Static LatexType Command @@ -146,6 +148,7 @@ Style Slide End Style EndSlide + Category Slides KeepEmpty 1 LatexType Command LatexName lyxend @@ -199,6 +202,7 @@ End # Note style definition ### Style Note + Category Slides Margin Static LatexType Command LatexName lyxend\lyxnote @@ -237,13 +241,17 @@ Style Section Color Blue EndFont LabelStringAppendix "\Alph{section}" + Argument 1 + LabelString "Section Option" + Tooltip "Optional arguments to the section command (see powerdot manual)" + EndArgument End ### # Itemize styles definition ### Style Itemize - Category List + Category Lists Margin Static LatexType Item_Environment LatexName itemize @@ -257,18 +265,41 @@ Style Itemize Align Block AlignPossible Block, Left LabelType Itemize + Argument 1 + LabelString "Itemize Type" + Tooltip "Itemize type spezification (see powerdot manual)" + EndArgument + Argument 2 + LabelString "Itemize Options" + Tooltip "Optional arguments for this list (see enumitem manual)" + EndArgument + Argument item:1 + LabelString "Custom Item|s" + Tooltip "A customized item string" + EndArgument + Argument item:2 + MenuString "Item Overlay Specifications" + LabelString "On Slide" + Tooltip "Overlay specifications for this item" + LeftDelim < + RightDelim > + EndArgument End Style ItemizeType1 CopyStyle Itemize - LatexParam [type=1] + Argument 1 + LabelString "Itemize Type" + Tooltip "Itemize type spezification (see powerdot manual)" + DefaultArg "type=1" + EndArgument End ### # Enumerate styles definition ### Style Enumerate - Category List + Category Lists Margin Static LatexType Item_Environment LatexName enumerate @@ -284,11 +315,34 @@ Style Enumerate AlignPossible Block, Left LabelType Enumerate RefPrefix enu + Argument 1 + LabelString "Enumerate Type" + Tooltip "Enumerate type spezification (see powerdot manual)" + EndArgument + Argument 2 + LabelString "Enumerate Options" + Tooltip "Optional arguments for this list (see enumitem manual)" + EndArgument + Argument item:1 + LabelString "Custom Item|s" + Tooltip "A customized item string" + EndArgument + Argument item:2 + MenuString "Item Overlay Specifications" + LabelString "On Slide" + Tooltip "Overlay specifications for this item" + LeftDelim < + RightDelim > + EndArgument End Style EnumerateType1 - CopyStyle Enumerate - LatexParam [type=1] + CopyStyle Enumerate + Argument 1 + LabelString "Enumerate Type" + Tooltip "Enumerate type spezification (see powerdot manual)" + DefaultArg "type=1" + EndArgument End ### @@ -317,6 +371,7 @@ End # Quotation style definition ### Style Quotation + Category MainText Margin Static LatexType Environment LatexName quotation @@ -337,6 +392,7 @@ End # Quote style definition ### Style Quote + Category MainText Margin Static LatexType Environment LatexName quote @@ -357,6 +413,7 @@ End Style Verse # LaTeX type is first dynamic because of LaTeX implementation. # In LyX this does not make sense. + Category MainText LatexType Environment LatexName verse Margin First_Dynamic @@ -372,6 +429,65 @@ Style Verse LabelType No_Label End +### +# Twocolumn style definition +### +Style Twocolumn + Category MainText + LatexType command + LatexName twocolumn + Margin First_Dynamic + NextNoIndent 1 + ParSkip 0.4 + TopSep 0.7 + BottomSep 0.7 + ParSep 0.5 + Align Block + AlignPossible Block, Left, Right, Center + LabelType No_Label + Argument 1 + LabelString "Column Options" + Tooltip "Twocolumn options (see powerdot manual)" + EndArgument + Argument 2 + LabelString "Left Column" + Tooltip "Enter the text of the left column here (right column in main paragraph)" + Mandatory 1 + AutoInsert 1 + EndArgument +End + +### +# Overlay style definitions +### +Style Pause + Category Overlays + KeepEmpty 1 + LatexType Command + LatexName pause + Margin First_Dynamic + Argument 1 + LabelString "Pause number" + Tooltip "Number of slide where the context below the pause gets visible" + EndArgument + NextNoIndent 1 + ParSkip 0 + TopSep 0 + BottomSep 0.25 + ParSep 0 + Align Center + LabelType Static + LabelBottomSep 0 + LeftMargin MMMMM + LabelString "_ _ _ _ _ _ _ _ _ _ _ _ _ _" + LabelFont + Family typewriter + Series Medium + Size Normal + Color latex + EndFont +End + ### # Caption style definition ### @@ -443,3 +559,33 @@ End Counter algorithm End + +### +# Charstyle definitions +### + +InsetLayout Flex:onslide + LyXType charstyle + LabelString "Visible" + LatexType command + LatexName onslide + Argument 1 + LabelString "On Slides" + MenuString "Overlay Specification|S" + Tooltip "Specify the overlay settings (see powerdot manual)" + Mandatory 1 + DefaultArg "1-" + EndArgument +End + +InsetLayout Flex:onslide+ + CopyStyle Flex:onslide + LatexName onslide+ + LabelString "Uncover" +End + +InsetLayout Flex:onslide* + CopyStyle Flex:onslide + LatexName onslide* + LabelString "Only" +End diff --git a/lib/lyx2lyx/lyx_2_1.py b/lib/lyx2lyx/lyx_2_1.py index 97fcca76ef..fce5b43a15 100644 --- a/lib/lyx2lyx/lyx_2_1.py +++ b/lib/lyx2lyx/lyx_2_1.py @@ -3831,6 +3831,204 @@ def remove_endframes(document): del document.body[i : j + 1] +def revert_powerdot_flexes(document): + " Reverts powerdot flex insets " + + if document.textclass != "powerdot": + return + + flexes = {"onslide" : "\\onslide", + "onslide*" : "\\onslide*", + "onslide+" : "\\onslide+"} + rx = re.compile(r'^\\begin_inset Flex (.+)$') + + i = 0 + while True: + i = find_token(document.body, "\\begin_inset Flex", i) + if i == -1: + return + m = rx.match(document.body[i]) + if m: + flextype = m.group(1) + z = find_end_of_inset(document.body, i) + if z == -1: + document.warning("Can't find end of Flex " + flextype + " inset.") + i += 1 + continue + if flextype in flexes: + pre = put_cmd_in_ert(flexes[flextype]) + arg = find_token(document.body, "\\begin_inset Argument 1", i, z) + if arg != -1: + argend = find_end_of_inset(document.body, arg) + if argend == -1: + document.warning("Can't find end of Argument!") + i += 1 + continue + # Find containing paragraph layout + beginPlain = find_token(document.body, "\\begin_layout Plain Layout", arg) + endPlain = find_end_of_layout(document.body, beginPlain) + argcontent = document.body[beginPlain + 1 : endPlain] + # Adjust range end + z = z - len(document.body[arg : argend + 1]) + # Remove arg inset + del document.body[arg : argend + 1] + pre += put_cmd_in_ert("{") + argcontent + put_cmd_in_ert("}") + pre += put_cmd_in_ert("{") + beginPlain = find_token(document.body, "\\begin_layout Plain Layout", i) + endPlain = find_end_of_layout(document.body, beginPlain) + # Adjust range end + z = z - len(document.body[i : beginPlain + 1]) + z += len(pre) + document.body[i : beginPlain + 1] = pre + post = put_cmd_in_ert("}") + document.body[z - 2 : z + 1] = post + i += 1 + + +def revert_powerdot_pause(document): + " Reverts powerdot pause layout to ERT " + + if document.textclass != "powerdot": + return + + i = 0 + while True: + i = find_token(document.body, "\\begin_layout Pause", i) + if i == -1: + return + j = find_end_of_layout(document.body, i) + if j == -1: + document.warning("Malformed lyx document: Can't find end of Pause layout") + i = i + 1 + continue + endlay = j + subst = ["\\begin_layout Standard"] + put_cmd_in_ert("\\pause") + for p in range(i, j): + if p >= endlay: + break + arg = find_token(document.body, "\\begin_inset Argument 1", i, j) + if arg != -1: + beginPlain = find_token(document.body, "\\begin_layout Plain Layout", p) + endPlain = find_end_of_layout(document.body, beginPlain) + endInset = find_end_of_inset(document.body, p) + content = document.body[beginPlain + 1 : endPlain] + # Adjust range end + endlay = endlay - len(document.body[p : endInset + 1]) + # Remove arg inset + del document.body[p : endInset + 1] + subst += put_cmd_in_ert("[") + content + put_cmd_in_ert("]") + + document.body[i : i + 1] = subst + i = endlay + + +def revert_powerdot_itemargs(document): + " Reverts powerdot item arguments to ERT " + + if document.textclass != "powerdot": + return + + i = 0 + list_layouts = ["Itemize", "ItemizeType1", "Enumerate", "EnumerateType1"] + rx = re.compile(r'^\\begin_inset Argument (\S+)$') + + while True: + i = find_token(document.body, "\\begin_inset Argument", i) + if i == -1: + return + # Find containing paragraph layout + parent = get_containing_layout(document.body, i) + if parent == False: + document.warning("Malformed lyx document: Can't find parent paragraph layout") + i = i + 1 + continue + parbeg = parent[1] + parend = parent[2] + realparbeg = parent[3] + layoutname = parent[0] + realparend = parend + for p in range(parbeg, parend): + if p >= realparend: + i = realparend + break + if layoutname in list_layouts: + m = rx.match(document.body[p]) + if m: + argnr = m.group(1) + if argnr == "item:1": + j = find_end_of_inset(document.body, i) + # Find containing paragraph layout + beginPlain = find_token(document.body, "\\begin_layout Plain Layout", i) + endPlain = find_end_of_layout(document.body, beginPlain) + content = document.body[beginPlain + 1 : endPlain] + del document.body[i:j+1] + subst = put_cmd_in_ert("[") + content + put_cmd_in_ert("]") + document.body[realparbeg : realparbeg] = subst + elif argnr == "item:2": + j = find_end_of_inset(document.body, i) + # Find containing paragraph layout + beginPlain = find_token(document.body, "\\begin_layout Plain Layout", i) + endPlain = find_end_of_layout(document.body, beginPlain) + content = document.body[beginPlain + 1 : endPlain] + del document.body[i:j+1] + subst = put_cmd_in_ert("<") + content + put_cmd_in_ert(">") + document.body[realparbeg : realparbeg] = subst + + i = realparend + + +def revert_powerdot_columns(document): + " Reverts powerdot twocolumn to TeX-code " + if document.textclass != "powerdot": + return + + rx = re.compile(r'^\\begin_inset Argument (\S+)$') + i = 0 + while True: + i = find_token(document.body, "\\begin_layout Twocolumn", i) + if i == -1: + return + j = find_end_of_layout(document.body, i) + if j == -1: + document.warning("Malformed lyx document: Can't find end of Twocolumn layout") + i = i + 1 + continue + endlay = j + document.body[j : j] = put_cmd_in_ert("}") + document.body[j : j] + endlay += len(put_cmd_in_ert("}")) + subst = ["\\begin_layout Standard"] + put_cmd_in_ert("\\twocolumn") + for p in range(i, j): + if p >= endlay: + break + m = rx.match(document.body[p]) + if m: + argnr = m.group(1) + if argnr == "1": + beginPlain = find_token(document.body, "\\begin_layout Plain Layout", p) + endPlain = find_end_of_layout(document.body, beginPlain) + endInset = find_end_of_inset(document.body, p) + content = document.body[beginPlain + 1 : endPlain] + # Adjust range end + endlay = endlay - len(document.body[p : endInset + 1]) + # Remove arg inset + del document.body[p : endInset + 1] + subst += put_cmd_in_ert("[") + content + put_cmd_in_ert("]") + elif argnr == "2": + beginPlain = find_token(document.body, "\\begin_layout Plain Layout", p) + endPlain = find_end_of_layout(document.body, beginPlain) + endInset = find_end_of_inset(document.body, p) + content = document.body[beginPlain + 1 : endPlain] + # Adjust range end + endlay = endlay - len(document.body[p : endInset + 1]) + # Remove arg inset + del document.body[p : endInset + 1] + subst += put_cmd_in_ert("{") + content + put_cmd_in_ert("}") + + subst += put_cmd_in_ert("{") + document.body[i : i + 1] = subst + i = endlay + + ## # Conversion hub # @@ -3888,10 +4086,12 @@ convert = [ [462, []], [463, [convert_encodings]], [464, [convert_use_cancel]], - [465, [convert_lyxframes, remove_endframes]] + [465, [convert_lyxframes, remove_endframes]], + [466, []] ] revert = [ + [465, [revert_powerdot_flexes, revert_powerdot_pause, revert_powerdot_itemargs, revert_powerdot_columns]], [464, []], [463, [revert_use_cancel]], [462, [revert_encodings]], diff --git a/src/tex2lyx/TODO.txt b/src/tex2lyx/TODO.txt index 481a139a1b..1aa13fe726 100644 --- a/src/tex2lyx/TODO.txt +++ b/src/tex2lyx/TODO.txt @@ -89,6 +89,14 @@ Format LaTeX feature LyX feature \font_sf_scale 463 465 +466 Powerdot updates: + \pause[] layout Pause + \onslide{}{} InsetFlex, InsetArgument + \onslide*{}{} InsetFlex, InsetArgument + \onslide+{}{} InsetFlex, InsetArgument + \twocolumn[]{}{} Layout Twocolumn, InsetArgument + \item[]<> InsetArgument + \begin{enumerate|itemize|...}[] InsetArgument General diff --git a/src/version.h b/src/version.h index 0c1e051100..beafab344f 100644 --- a/src/version.h +++ b/src/version.h @@ -30,8 +30,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 465 // spitz: new beamer frames -#define LYX_FORMAT_TEX2LYX 465 // spitz: new beamer frames +#define LYX_FORMAT_LYX 466 // spitz: powerdot updates +#define LYX_FORMAT_TEX2LYX 466 // spitz: powerdot updates #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX #ifndef _MSC_VER -- 2.39.2