beamer revision, part 1: support for overlay arguments

This commit is contained in:
Juergen Spitzmueller 2012-12-09 11:04:56 +01:00
parent 50f88e256b
commit 30b53ba4a0
5 changed files with 979 additions and 34 deletions

View File

@ -11,6 +11,10 @@ adjustments are made to tex2lyx and bugs are fixed in lyx2lyx.
-----------------------
2012-12-09 Jürgen Spitzmüller <spitz@lyx.org>
* Format incremented to 451: Native support for beamer action/overlay arguments.
\command<overlay> => \begin_inset Argument 1
2012-12-04 Jürgen Spitzmüller <spitz@lyx.org>
* Format incremented to 450: Support for the URW Garamond LaTeX fonts.
- \usepackage{garamondx} > \font_serif garamondx

View File

@ -47,6 +47,7 @@ TitleLaTeXName makebeamertitle
AddToPreamble
% this default might be overridden by plain title style
\newcommand\makebeamertitle{\frame{\maketitle}}%
% (ERT) argument for the TOC
\AtBeginDocument{%
\let\origtableofcontents=\tableofcontents
\def\tableofcontents{\@ifnextchar[{\origtableofcontents}{\gobbletableofcontents}}
@ -84,6 +85,18 @@ Style Itemize
Argument 1
LabelString "Overlay Specifications|S"
Tooltip "Overlay specifications for this list"
LeftDelim [<
RightDelim >]
EndArgument
Argument item:1
LabelString "Custom Item|s"
Tooltip "A customized item string"
EndArgument
Argument item:2
LabelString "Item Overlay Specifications"
Tooltip "Overlay specifications for this item"
LeftDelim <
RightDelim >
EndArgument
NextNoIndent 1
LeftMargin MMN
@ -104,10 +117,22 @@ Style Enumerate
Argument 1
LabelString "Overlay Specifications|S"
Tooltip "Overlay specifications for this list"
LeftDelim [<
RightDelim >]
EndArgument
Argument 2
LabelString "Mini template"
Tooltip "Mini template for this List"
LabelString "Mini Template"
Tooltip "Mini template for this list (see beamer manual for details)"
EndArgument
Argument item:1
LabelString "Custom Item|s"
Tooltip "A customized item string"
EndArgument
Argument item:2
LabelString "Item Overlay Specifications"
Tooltip "Overlay specifications for this item"
LeftDelim <
RightDelim >
EndArgument
NextNoIndent 1
LeftMargin MMN
@ -130,10 +155,18 @@ Style Description
Argument 1
LabelString "Overlay Specifications|S"
Tooltip "Overlay specifications for this list"
LeftDelim [<
RightDelim >]
EndArgument
Argument 2
LabelString "Longest label|s"
Tooltip "The longest label in this list"
Tooltip "The longest label in this list (to determine the indendation width)"
EndArgument
Argument item:1
LabelString "Item Overlay Specifications"
Tooltip "Overlay specifications for this item"
LeftDelim <
RightDelim >
EndArgument
NextNoIndent 1
LeftMargin MM
@ -161,6 +194,12 @@ Style Part
LatexType Command
LatexName part
Argument 1
LabelString "Mode Specification|S"
Tooltip "Specify in which mode (article, presentation etc.) this header appears"
LeftDelim <
RightDelim >
EndArgument
Argument 2
LabelString "Short Title|S"
Tooltip "The part as it appears in the table of contents/running headers"
EndArgument
@ -204,6 +243,12 @@ Style Section
LabelString "Section \arabic{section}"
RefPrefix sec
Argument 1
LabelString "Mode Specification|S"
Tooltip "Specify in which mode (article, presentation etc.) this header appears"
LeftDelim <
RightDelim >
EndArgument
Argument 2
LabelString "Short Title|S"
Tooltip "The section as it appears in the table of contents/running headers"
EndArgument
@ -223,9 +268,16 @@ Style Section*
CopyStyle Section
Category Unnumbered
Margin Static
LatexName lyxframeend{}\section*
LatexName lyxframeend{}\section
LabelType No_Label
ResetArgs 1
Argument 1
LabelString "Mode Specification|S"
Tooltip "Specify in which mode (article, presentation etc.) this header appears"
LeftDelim <
RightDelim >
EndArgument
LaTeXParam *
End
Style Subsection
@ -246,6 +298,12 @@ Style Subsection
LabelString "Subsection \arabic{section}.\arabic{subsection}"
RefPrefix sub
Argument 1
LabelString "Mode Specification|S"
Tooltip "Specify in which mode (article, presentation etc.) this header appears"
LeftDelim <
RightDelim >
EndArgument
Argument 2
LabelString "Short Title|S"
Tooltip "The subsection as it appears in the table of contents/running headers"
EndArgument
@ -265,9 +323,16 @@ Style Subsection*
CopyStyle Subsection
Category Unnumbered
Margin Static
LatexName lyxframeend{}\subsection*
LatexName lyxframeend{}\subsection
LabelType No_Label
ResetArgs 1
Argument 1
LabelString "Mode Specification|S"
Tooltip "Specify in which mode (article, presentation etc.) this header appears"
LeftDelim <
RightDelim >
EndArgument
LaTeXParam *
End
Style Subsubsection
@ -288,6 +353,12 @@ Style Subsubsection
LabelString "Subsubsection \arabic{section}.\arabic{subsection}.\arabic{subsubsection}"
RefPrefix sub
Argument 1
LabelString "Mode Specification|S"
Tooltip "Specify in which mode (article, presentation etc.) this header appears"
LeftDelim <
RightDelim >
EndArgument
Argument 2
LabelString "Short Title|S"
Tooltip "The subsubsection as it appears in the table of contents/running headers"
EndArgument
@ -307,9 +378,16 @@ Style Subsubsection*
CopyStyle Subsubsection
Category Unnumbered
Margin Static
LatexName lyxframeend{}\subsubsection*
LatexName lyxframeend{}\subsubsection
LabelType No_Label
ResetArgs 1
Argument 1
LabelString "Mode Specification|S"
Tooltip "Specify in which mode (article, presentation etc.) this header appears"
LeftDelim <
RightDelim >
EndArgument
LaTeXParam *
End
@ -398,12 +476,20 @@ Style AgainFrame
Category Frames
KeepEmpty 0
LatexType Command
LatexName lyxframeend{}\lyxagainframe
LatexName lyxframeend{}\againframe
Argument 1
LabelString "Overlay Specifications|S"
Tooltip "Overlay specifications for this list"
Tooltip "Overlay specifications for this frame"
LeftDelim <
RightDelim >
EndArgument
Argument 2
LabelString "Default Overlay Specifications"
Tooltip "Default overlay specifications within this frame"
LeftDelim [<
RightDelim >]
EndArgument
Argument 3
LabelString "Frame Options"
Tooltip "Frame options (see beamer manual)"
EndArgument
@ -428,13 +514,6 @@ Style AgainFrame
Series Bold
Size Largest
EndFont
Preamble
\long\def\lyxagainframe#1{\@lyxagainframe#1\@lyxframestop}%
\def\@lyxagainframe{\@ifnextchar<{\@@lyxagainframe}{\@@lyxagainframe<*>}}%
\def\@@lyxagainframe<#1>{\@ifnextchar[{\@@@lyxagainframe<#1>}{\@@@lyxagainframe<#1>[]}}
\long\def\@@@lyxagainframe<#1>[#2]#3\@lyxframestop{%
\againframe<#1>[#2]{#3}}
EndPreamble
End
Style EndFrame
@ -479,6 +558,12 @@ Style FrameSubtitle
Series Bold
Color Blue
EndFont
Argument 1
LabelString "Overlay Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
End
@ -607,6 +692,10 @@ Style Overprint
Family Roman
Color latex
EndFont
Argument 1
LabelString "Overprint Area Width"
Tooltip "The width of the overprint area (default: text width)"
EndArgument
End
Style OverlayArea
@ -628,6 +717,16 @@ Style OverlayArea
Family Roman
Color latex
EndFont
Argument 1
LabelString "Overlay Area Width"
Tooltip "The width of the overlay area"
Mandatory 1
EndArgument
Argument 2
LabelString "Overlay Area Height"
Tooltip "The height of the overlay area"
Mandatory 1
EndArgument
End
Style Uncover
@ -638,7 +737,7 @@ Style Uncover
ParIndent MM
Align Left
LabelType Static
LatexName uncoverenv}%{
LatexName uncoverenv
LabelSep xx
LabelString "Uncovered on slides"
ParSkip 0.5
@ -649,6 +748,12 @@ Style Uncover
Family Roman
Color Latex
EndFont
Argument 1
LabelString "Overlay Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
End
Style Only
@ -659,7 +764,7 @@ Style Only
ParIndent MM
Align Left
LabelType Static
LatexName onlyenv}%{
LatexName onlyenv
LabelSep xx
LabelString "Only on slides"
ParSkip 0.5
@ -670,6 +775,12 @@ Style Only
Family Roman
Color Latex
EndFont
Argument 1
LabelString "Overlay Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
End
@ -950,7 +1061,7 @@ Style Quotation
Category MainText
Margin Static
LatexType Environment
LatexName quotation}%{
LatexName quotation
NextNoIndent 1
LeftMargin MMM
RightMargin MMM
@ -962,13 +1073,19 @@ Style Quotation
ParSep 0
Align Block
AlignPossible Block, Left, Right, Center
Argument 1
LabelString "Overlay Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
End
Style Quote
Category MainText
Margin Static
LatexType Environment
LatexName quote}%{
LatexName quote
NextNoIndent 1
LeftMargin MMM
RightMargin MMM
@ -978,6 +1095,12 @@ Style Quote
Align Block
AlignPossible Block, Left, Right, Center
LabelType No_Label
Argument 1
LabelString "Overlay Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
End
Style Verse
@ -985,7 +1108,7 @@ Style Verse
# In LyX this does not make sense.
Category MainText
LatexType Environment
LatexName verse}%{
LatexName verse
Margin First_Dynamic
NextNoIndent 1
LeftMargin MMMM
@ -997,6 +1120,12 @@ Style Verse
Align Block
AlignPossible Block, Left
LabelType No_Label
Argument 1
LabelString "Overlay Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
End
@ -1013,7 +1142,7 @@ Style Corollary
Align Left
LabelType Static
LabelSep xx
LatexName corollary}%{
LatexName corollary
LabelString "Corollary."
ParSkip 0.5
TopSep 1
@ -1025,23 +1154,33 @@ Style Corollary
Color Blue
Size Large
EndFont
Argument 1
LabelString "Action Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
Argument 2
LabelString "Additional Theorem Text"
Tooltip "Additional text appended to the theorem header"
EndArgument
End
Style Definition
CopyStyle Corollary
LatexName definition}%{
LatexName definition
LabelString "Definition."
End
Style Definitions
CopyStyle Corollary
LatexName definitions}%{
LatexName definitions
LabelString "Definitions."
End
Style Example
CopyStyle Corollary
LatexName example}%{
LatexName example
LabelString "Example."
LabelFont
Series Bold
@ -1051,25 +1190,25 @@ End
Style Examples
CopyStyle Corollary
LatexName examples}%{
LatexName examples
LabelString "Examples."
End
Style Fact
CopyStyle Corollary
LatexName fact}%{
LatexName fact
LabelString "Fact."
End
Style Proof
CopyStyle Corollary
LatexName proof}%{
LatexName proof
LabelString "Proof."
End
Style Theorem
CopyStyle Corollary
LatexName theorem}%{
LatexName theorem
LabelString "Theorem."
End
@ -1154,6 +1293,12 @@ Style NoteItem
Family Roman
Color latex
EndFont
Argument 1
LabelString "Overlay Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
End
@ -1161,6 +1306,22 @@ End
# CHARSTYLES
#
InsetLayout Flex:Emphasize
LyXType charstyle
LabelString Emphasize
LatexType command
LatexName emph
Font
Shape italic
EndFont
Argument 1
LabelString "Action Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
End
InsetLayout Flex:Alert
LyXType charstyle
LabelString Alert
@ -1169,6 +1330,12 @@ InsetLayout Flex:Alert
Font
Color red
EndFont
Argument 1
LabelString "Action Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
End
InsetLayout Flex:Structure
@ -1179,11 +1346,124 @@ InsetLayout Flex:Structure
Font
Color blue
EndFont
Argument 1
LabelString "Action Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
End
InsetLayout Flex:Only
LyXType charstyle
LabelString Only
LatexType command
LatexName only
Font
Color red
EndFont
Argument 1
LabelString "Overlay Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
End
InsetLayout Flex:Uncover
LyXType charstyle
LabelString Uncover
LatexType command
LatexName uncover
Font
Color red
EndFont
Argument 1
LabelString "Overlay Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
End
InsetLayout Flex:Visible
LyXType charstyle
LabelString Visible
LatexType command
LatexName visible
Font
Color red
EndFont
Argument 1
LabelString "Overlay Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
End
InsetLayout Flex:Invisible
LyXType charstyle
LabelString Invisible
LatexType command
LatexName invisible
Font
Color red
EndFont
Argument 1
LabelString "Overlay Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
End
InsetLayout Flex:Alternative
LyXType charstyle
LabelString Alternative
LatexType command
LatexName alt
Font
Color red
EndFont
Argument 1
LabelString "Overlay Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
Argument 2
LabelString "Default Text"
Tooltip "Enter the default text here"
Mandatory 1
EndArgument
End
InsetLayout Flex:Beamer_Note
LyXType custom
LabelString Note
LatexType command
LatexName note
Decoration Classic
Font
Color blue
EndFont
Argument 1
LabelString "Overlay Specification|S"
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
EndArgument
Argument 2
LabelString "Note Options"
Tooltip "Specifiy note options (see beamer manual)"
EndArgument
End
InsetLayout Flex:ArticleMode
LyXType custom
LatexName mode<article>
LatexName mode
LatexParam <article>
LatexType command
Decoration classic
LabelString Article

View File

@ -25,12 +25,12 @@ import sys, os
# Uncomment only what you need to import, please.
from parser_tools import del_token, find_token, find_token_backwards, find_end_of, \
from parser_tools import del_token, find_token, find_token_exact, find_token_backwards, find_end_of, \
find_end_of_inset, find_end_of_layout, find_re, get_option_value, get_containing_layout, \
get_value, get_quoted_value, set_option_value
#from parser_tools import find_token, find_end_of, find_tokens, \
#find_token_exact, find_end_of_inset, find_end_of_layout, \
#find_end_of_inset, find_end_of_layout, \
#is_in_inset, del_token, check_token
from lyx2lyx_tools import add_to_preamble, put_cmd_in_ert, get_ert
@ -1826,6 +1826,663 @@ def revert_garamondx(document):
document.header[i] = "\\font_roman default"
def convert_beamerargs(document):
" Converts beamer arguments to new layout "
beamer_classes = ["beamer", "article-beamer", "scrarticle-beamer"]
if document.textclass not in beamer_classes:
return
shifted_layouts = ["Part", "Section", "Subsection", "Subsubsection"]
list_layouts = ["Itemize", "Enumerate", "Description"]
rx = re.compile(r'^\\begin_inset Argument (\d+)$')
i = 0
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]
layoutname = parent[0]
for p in range(parbeg, parend):
if layoutname in shifted_layouts:
m = rx.match(document.body[p])
if m:
argnr = int(m.group(1))
argnr += 1
document.body[p] = "\\begin_inset Argument %d" % argnr
if layoutname == "AgainFrame":
m = rx.match(document.body[p])
if m:
document.body[p] = "\\begin_inset Argument 3"
if document.body[p + 4] == "\\begin_inset ERT":
if document.body[p + 9].startswith("<"):
# This is an overlay specification
# strip off the <
document.body[p + 9] = document.body[p + 9][1:]
if document.body[p + 9].endswith(">"):
# strip off the >
document.body[p + 9] = document.body[p + 9][:-1]
# Shift this one
document.body[p] = "\\begin_inset Argument 2"
if layoutname in list_layouts:
m = rx.match(document.body[p])
if m:
if m.group(1) == "1":
if document.body[p + 4] == "\\begin_inset ERT":
if document.body[p + 9].startswith("<"):
# This is an overlay specification
# strip off the <
document.body[p + 9] = document.body[p + 9][1:]
if document.body[p + 9].endswith(">"):
# strip off the >
document.body[p + 9] = document.body[p + 9][:-1]
elif layoutname != "Itemize":
# Shift this one
document.body[p] = "\\begin_inset Argument 2"
i = i + 1
def convert_againframe_args(document):
" Converts beamer AgainFrame to new layout "
# FIXME: This currently only works if the arguments are in one single ERT
beamer_classes = ["beamer", "article-beamer", "scrarticle-beamer"]
if document.textclass not in beamer_classes:
return
i = 0
while True:
i = find_token(document.body, "\\begin_layout AgainFrame", i)
if i == -1:
break
j = find_end_of_layout(document.body, i)
if i != -1:
if document.body[i + 1] == "\\begin_inset ERT":
if document.body[i + 6].startswith("[<"):
# This is a default overlay specification
# strip off the [<
document.body[i + 6] = document.body[i + 6][2:]
if document.body[i + 6].endswith(">]"):
# strip off the >]
document.body[i + 6] = document.body[i + 6][:-2]
elif document.body[i + 6].endswith("]"):
# divide the args
tok = document.body[i + 6].find('>][')
if tok != -1:
subst = [document.body[i + 6][:tok],
'\\end_layout', '', '\\end_inset', '', '', '\\begin_inset Argument 3',
'status collapsed', '', '\\begin_layout Plain Layout',
document.body[i + 6][tok + 3:-1]]
document.body[i + 6 : i + 7] = subst
# Convert to ArgInset
document.body[i + 1] = "\\begin_inset Argument 2"
i = j
continue
elif document.body[i + 6].startswith("<"):
# This is an overlay specification
# strip off the <
document.body[i + 6] = document.body[i + 6][1:]
if document.body[i + 6].endswith(">"):
# strip off the >
document.body[i + 6] = document.body[i + 6][:-1]
# Convert to ArgInset
document.body[i + 1] = "\\begin_inset Argument 1"
elif document.body[i + 6].endswith(">]"):
# divide the args
tok = document.body[i + 6].find('>[<')
if tok != -1:
document.body[i + 6 : i + 7] = [document.body[i + 6][:tok],
'\\end_layout', '', '\\end_inset', '', '', '\\begin_inset Argument 2',
'status collapsed', '', '\\begin_layout Plain Layout',
document.body[i + 6][tok + 3:-2]]
# Convert to ArgInset
document.body[i + 1] = "\\begin_inset Argument 1"
elif document.body[i + 6].endswith("]"):
# divide the args
tok = document.body[i + 6].find('>[<')
if tok != -1:
# divide the args
tokk = document.body[i + 6].find('>][')
if tokk != -1:
document.body[i + 6 : i + 7] = [document.body[i + 6][:tok],
'\\end_layout', '', '\\end_inset', '', '', '\\begin_inset Argument 2',
'status collapsed', '', '\\begin_layout Plain Layout',
document.body[i + 6][tok + 3:tokk],
'\\end_layout', '', '\\end_inset', '', '', '\\begin_inset Argument 3',
'status collapsed', '', '\\begin_layout Plain Layout',
document.body[i + 6][tokk + 3:-1]]
else:
tokk = document.body[i + 6].find('>[')
if tokk != -1:
document.warning(document.body[i + 6][tokk + 2:-1])
document.body[i + 6 : i + 7] = [document.body[i + 6][:tokk],
'\\end_layout', '', '\\end_inset', '', '', '\\begin_inset Argument 3',
'status collapsed', '', '\\begin_layout Plain Layout',
document.body[i + 6][tokk + 2:-1]]
# Convert to ArgInset
document.body[i + 1] = "\\begin_inset Argument 1"
i = j
continue
elif document.body[i + 6].startswith("["):
# This is an ERT option
# strip off the [
document.body[i + 6] = document.body[i + 6][1:]
if document.body[i + 6].endswith("]"):
# strip off the ]
document.body[i + 6] = document.body[i + 6][:-1]
# Convert to ArgInset
document.body[i + 1] = "\\begin_inset Argument 3"
i = j
continue
i = j
def convert_corollary_args(document):
" Converts beamer corrolary-style ERT arguments native InsetArgs "
beamer_classes = ["beamer", "article-beamer", "scrarticle-beamer"]
if document.textclass not in beamer_classes:
return
corollary_layouts = ["Corollary", "Definition", "Definitions", "Example", "Examples", "Fact", "Proof", "Theorem"]
for lay in corollary_layouts:
i = 0
while True:
i = find_token_exact(document.body, "\\begin_layout " + lay, i)
if i == -1:
break
j = find_end_of_layout(document.body, i)
if i != -1:
if document.body[i + 1] == "\\begin_inset ERT":
if document.body[i + 6].startswith("<"):
# This is an overlay specification
# strip off the <
document.body[i + 6] = document.body[i + 6][1:]
if document.body[i + 6].endswith(">"):
# strip off the >
document.body[i + 6] = document.body[i + 6][:-1]
elif document.body[i + 6].endswith("]"):
# divide the args
tok = document.body[i + 6].find('>[')
if tok != -1:
subst = [document.body[i + 6][:tok],
'\\end_layout', '', '\\end_inset', '', '', '\\begin_inset Argument 2',
'status collapsed', '', '\\begin_layout Plain Layout',
document.body[i + 6][tok + 2:-1]]
document.body[i + 6 : i + 7] = subst
# Convert to ArgInset
document.body[i + 1] = "\\begin_inset Argument 1"
i = j
continue
elif document.body[i + 6].startswith("["):
# This is an ERT option
# strip off the [
document.body[i + 6] = document.body[i + 6][1:]
if document.body[i + 6].endswith("]"):
# strip off the ]
document.body[i + 6] = document.body[i + 6][:-1]
# Convert to ArgInset
document.body[i + 1] = "\\begin_inset Argument 2"
i = j
continue
i = j
def convert_quote_args(document):
" Converts beamer quote style ERT args to native InsetArgs "
beamer_classes = ["beamer", "article-beamer", "scrarticle-beamer"]
if document.textclass not in beamer_classes:
return
quote_layouts = ["Uncover", "Only", "Quotation", "Quote", "Verse"]
for lay in quote_layouts:
i = 0
while True:
i = find_token(document.body, "\\begin_layout " + lay, i)
if i == -1:
break
j = find_end_of_layout(document.body, i)
if i != -1:
if document.body[i + 1] == "\\begin_inset ERT":
if document.body[i + 6].startswith("<"):
# This is an overlay specification
# strip off the <
document.body[i + 6] = document.body[i + 6][1:]
if document.body[i + 6].endswith(">"):
# strip off the >
document.body[i + 6] = document.body[i + 6][:-1]
# Convert to ArgInset
document.body[i + 1] = "\\begin_inset Argument 1"
i = j
def revert_beamerargs(document):
" Reverts beamer arguments to old layout "
beamer_classes = ["beamer", "article-beamer", "scrarticle-beamer"]
if document.textclass not in beamer_classes:
return
i = 0
list_layouts = ["Itemize", "Enumerate", "Description"]
headings = ["Part", "Section", "Section*", "Subsection", "Subsection*",
"Subsubsection", "Subsubsection*", "FrameSubtitle", "NoteItem"]
quote_layouts = ["Uncover", "Only", "Quotation", "Quote", "Verse"]
corollary_layouts = ["Corollary", "Definition", "Definitions", "Example", "Examples", "Fact", "Proof", "Theorem"]
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]
layoutname = parent[0]
realparend = parend
for p in range(parbeg, parend):
if p >= realparend:
i = realparend
break
if layoutname in headings:
m = rx.match(document.body[p])
if m:
argnr = m.group(1)
if argnr == "1":
# Find containing paragraph layout
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)
argcontent = document.body[beginPlain + 1 : endPlain]
# Adjust range end
realparend = realparend - len(document.body[p : endInset + 1])
# Remove arg inset
del document.body[p : endInset + 1]
if layoutname == "FrameSubtitle":
pre = put_cmd_in_ert("\\" + layoutname.lower() + "<") + argcontent + put_cmd_in_ert(">")
elif layoutname == "NoteItem":
pre = put_cmd_in_ert("\\note<") + argcontent + put_cmd_in_ert(">[item]")
elif layoutname.endswith('*'):
pre = put_cmd_in_ert("\\lyxframeend\\" + layoutname.lower()[:-1] + "<") + argcontent + put_cmd_in_ert(">*")
else:
pre = put_cmd_in_ert("\\lyxframeend\\" + layoutname.lower() + "<") + argcontent + put_cmd_in_ert(">")
secarg = find_token(document.body, "\\begin_inset Argument 2", parbeg, parend)
if secarg != -1:
# Find containing paragraph layout
beginPlain = find_token(document.body, "\\begin_layout Plain Layout", secarg)
endPlain = find_end_of_layout(document.body, beginPlain)
endInset = find_end_of_inset(document.body, secarg)
argcontent = document.body[beginPlain + 1 : endPlain]
# Adjust range end
realparend = realparend - len(document.body[secarg : endInset + 1])
del document.body[secarg : endInset + 1]
pre += put_cmd_in_ert("[") + argcontent + put_cmd_in_ert("]")
pre += put_cmd_in_ert("{")
document.body[parbeg] = "\\begin_layout Standard"
document.body[parbeg + 1 : parbeg + 1] = pre
pe = find_end_of_layout(document.body, parbeg)
post = put_cmd_in_ert("}")
document.body[pe : pe] = post
realparend += len(pre) + len(post)
if layoutname == "AgainFrame":
m = rx.match(document.body[p])
if m:
argnr = m.group(1)
if argnr == "3":
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
realparend = realparend - 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[parbeg + 1:parbeg + 1] = subst
if layoutname == "Overprint":
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
realparend = realparend - 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[parbeg + 1:parbeg + 1] = subst
if layoutname == "OverlayArea":
m = rx.match(document.body[p])
if m:
argnr = m.group(1)
if 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
realparend = realparend - 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[parbeg + 1:parbeg + 1] = subst
if layoutname in list_layouts:
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
realparend = realparend - 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[parbeg + 1:parbeg + 1] = subst
elif 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[parbeg + 1 : parbeg + 1] = 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[parbeg + 1:parbeg + 1] = subst
if layoutname in quote_layouts:
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
realparend = realparend - 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[parbeg + 1:parbeg + 1] = subst
if layoutname in corollary_layouts:
m = rx.match(document.body[p])
if m:
argnr = m.group(1)
if 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
realparend = realparend - 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[parbeg + 1:parbeg + 1] = subst
i = realparend
def revert_beamerargs2(document):
" Reverts beamer arguments to old layout, step 2 "
beamer_classes = ["beamer", "article-beamer", "scrarticle-beamer"]
if document.textclass not in beamer_classes:
return
i = 0
shifted_layouts = ["Part", "Section", "Subsection", "Subsubsection"]
corollary_layouts = ["Corollary", "Definition", "Definitions", "Example", "Examples", "Fact", "Proof", "Theorem"]
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]
layoutname = parent[0]
realparend = parend
for p in range(parbeg, parend):
if p >= realparend:
i = realparend
break
if layoutname in shifted_layouts:
m = rx.match(document.body[p])
if m:
argnr = m.group(1)
if argnr == "2":
document.body[p] = "\\begin_inset Argument 1"
if layoutname in corollary_layouts:
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
realparend = realparend - 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[parbeg + 1:parbeg + 1] = subst
if layoutname == "OverlayArea":
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
realparend = realparend - 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[parbeg + 1:parbeg + 1] = subst
if layoutname == "AgainFrame":
m = rx.match(document.body[p])
if m:
argnr = m.group(1)
if 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
realparend = realparend - 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[parbeg + 1:parbeg + 1] = subst
i = realparend
def revert_beamerargs3(document):
" Reverts beamer arguments to old layout, step 3 "
beamer_classes = ["beamer", "article-beamer", "scrarticle-beamer"]
if document.textclass not in beamer_classes:
return
rx = re.compile(r'^\\begin_inset Argument (\S+)$')
i = 0
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]
layoutname = parent[0]
realparend = parend
for p in range(parbeg, parend):
if p >= realparend:
i = realparend
break
if layoutname == "AgainFrame":
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
realparend = realparend - 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[parbeg + 1:parbeg + 1] = subst
i = realparend
def revert_beamerflex(document):
" Reverts beamer Flex insets "
beamer_classes = ["beamer", "article-beamer", "scrarticle-beamer"]
if document.textclass not in beamer_classes:
return
new_flexes = {"Emphasize" : "\\emph", "Only" : "\\only", "Uncover" : "\\uncover",
"Visible" : "\\visible", "Invisible" : "\\invisible",
"Alternative" : "\\alt", "Beamer_Note" : "\\note"}
old_flexes = {"Alert" : "\\alert", "Structure" : "\\structure"}
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 new_flexes:
pre = put_cmd_in_ert(new_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(">")
arg = find_token(document.body, "\\begin_inset Argument 2", 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
elif flextype in old_flexes:
pre = put_cmd_in_ert(old_flexes[flextype])
arg = find_token(document.body, "\\begin_inset Argument 1", i, z)
if arg == -1:
i += 1
continue
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
##
# Conversion hub
#
@ -1868,10 +2525,12 @@ convert = [
[447, [convert_IEEEtran, convert_AASTeX, convert_AGUTeX, convert_IJMP, convert_SIGPLAN, convert_SIGGRAPH, convert_EuropeCV]],
[448, [convert_literate]],
[449, []],
[450, []]
[450, []],
[451, [convert_beamerargs, convert_againframe_args, convert_corollary_args, convert_quote_args]]
]
revert = [
[450, [revert_beamerargs, revert_beamerargs2, revert_beamerargs3, revert_beamerflex]],
[449, [revert_garamondx, revert_garamondx_newtxmath]],
[448, [revert_itemargs]],
[447, [revert_literate]],

View File

@ -85,6 +85,8 @@ Format LaTeX feature LyX feature
449 \item[<arg>] \begin_inset Argument item:<nr>
450 garamondx.sty, ugm LaTeX font, \font_roman, \font_osf,
[garamondx]{newtxmath} \font_math
451 beamer overlay arguments InsetArgument
\command<arg>, \begin{env}<arg>
General

View File

@ -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 450 // spitz: support for URW Garamond
#define LYX_FORMAT_TEX2LYX 450 // spitz: support for URW Garamond
#define LYX_FORMAT_LYX 451 // spitz: support for overlay args in beamer
#define LYX_FORMAT_TEX2LYX 451 // spitz: support for overlay args in beamer
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
#ifndef _MSC_VER