jss.layout: support for more layouts

Since lyX 2.0 we support to use the in_preamble tag. This allows to support more commands. For an unknown reason I forgot the jss.layout when I updated the other layouts once.

Fileformat change
This commit is contained in:
Uwe Stöhr 2015-05-24 03:34:36 +02:00
parent 7c48bb0208
commit e6c225d582
5 changed files with 469 additions and 7 deletions

View File

@ -11,6 +11,9 @@ adjustments are made to tex2lyx and bugs are fixed in lyx2lyx.
-----------------------
2015-05-24 Uwe Stöhr <uwestoehr@web.de>
* Format incremented to 494: support more layouts in jss.layout
No new parameters.
2015-05-17 Georg Baum <Georg.Baum@post.rwth-aachen.de>
* Format incremented to 493

View File

@ -1,12 +1,14 @@
#% Do not delete the line below; configure depends on this
# \DeclareLaTeXClass[jss,ae.sty,color.sty,fancyvrb.sty,hyperref.sty,natbib.sty,upquote.sty]{Journal of Statistical Software (JSS)}
# \DeclareLaTeXClass[jss,ae.sty,color.sty,fancyvrb.sty,hyperref.sty,natbib.sty,upquote.sty]{Journal of Statistical Software (JSS) version 2}
# \DeclareCategory{Articles}
# Journal of Statistical Software (JSS) article textclass definition file
# Author: Andreas Karlsson <andreas.karlsson@ltv.se>
# Phil Chalmers <rphilip.chalmers@gmail.com>
# Uwe Stöhr <uwestoehr@lyx.org>
# License: GNU GPL version 2 or later
# JSS LaTeX files can be downloaded from http://www.jstatsoft.org/downloads/JSSstyle.zip
Format 54
Format 49
# Read the definitions from article.layout
Input article.layout
@ -17,3 +19,194 @@ Input article.layout
AddToPreamble
%\usepackage{Sweave}
EndPreamble
Style Title
InPreamble 1
Font
Size Huge
EndFont
End
Style "Plain Title"
CopyStyle Title
LatexName Plaintitle
End
Style Author
InPreamble 1
End
Style "Plain Author"
CopyStyle Author
LatexName Plainauthor
End
Style Abstract
Category FrontMatter
LatexName Abstract
LatexType Command
InTitle 1
InPreamble 1
Margin Dynamic
LeftMargin MMNMM
ParSkip 0.4
BottomSep 1.5
TopSep 1.5
ParSep 1.5
TopSep 0.8
BottomSep 0.8
AlignPossible Block, Left, Right, Center
Labeltype Centered
LabelString "Abstract"
Labelsep M
LabelFont
Series Bold
EndFont
End
Style Address
CopyStyle Abstract
LatexName Address
Labeltype Above
LabelString "Affiliation:"
Margin Static
LeftMargin M
Labelsep M
LabelFont
Size normal
EndFont
End
Style Keywords
CopyStyle Abstract
LatexName Keywords
Font
Size Small
EndFont
Margin Dynamic
LeftMargin MMN
RightMargin MMN
Align Block
NextNoIndent 1
BottomSep 0.5
ParSkip 0.4
Labeltype Static
LabelString "Keywords:"
LabelFont
Shape Italic
EndFont
End
Style "Plain Keywords"
CopyStyle Keywords
LatexName Plainkeywords
LabelString "Plain Keywords:"
End
Style "Short Title"
CopyStyle Keywords
LatexName Shorttitle
LabelString "Short Title:"
End
InsetLayout "Flex:pkg"
LyxType custom
LabelString pkg
LatexType command
LatexName pkg
Font
Color foreground
Size Small
Family Roman
Shape Up
Series Medium
Misc No_Emph
Misc No_Noun
Misc No_Bar
Series Bold
EndFont
LabelFont
Color latex
Size Small
EndFont
InToc true
HTMLTag pkg
ResetsFont true
spellcheck false
End
InsetLayout "Flex:proglang"
CopyStyle "Flex:pkg"
LabelString proglang
LatexName proglang
Font
Family Typewriter
Series Medium
EndFont
LabelFont
Color latex
Size Small
EndFont
HTMLTag proglang
End
InsetLayout "Flex:code"
CopyStyle "Flex:proglang"
LabelString code
LatexName code
HTMLTag code
End
InsetLayout "Flex:E-mail"
CopyStyle "Flex:URL"
LabelString E-mail
LatexName email
HTMLTag email
End
Style "Code Chunk"
Category MainText
LatexType Environment
LatexName CodeChunk
NextNoIndent 1
ParbreakIsNewline 1
FreeSpacing 1
PassThru 1
KeepEmpty 1
NewLine 0
TopSep 0.7
BottomSep 0.7
Align Block
AlignPossible Block
Labeltype Above
LabelString "Code Chunk"
Font
Family Typewriter
EndFont
LabelFont
Series Bold
Color Green
EndFont
HTMLTag <pre></pre>
HTMLItem p
End
Style "Standard Code"
CopyStyle "Code Chunk"
LatexName Code
LabelString "Code"
TopSep 0
BottomSep 0
End
Style "Code Input"
CopyStyle "Standard Code"
LatexName CodeInput
LabelString "Code Input"
End
Style "Code Output"
CopyStyle "Standard Code"
LatexName CodeOutput
LabelString "Code Output"
End

View File

@ -85,7 +85,7 @@ format_relation = [("0_06", [200], minor_versions("0.6" , 4)),
("1_6", list(range(277,346)), minor_versions("1.6" , 10)),
("2_0", list(range(346,414)), minor_versions("2.0" , 8)),
("2_1", list(range(414,475)), minor_versions("2.1" , 0)),
("2_2", list(range(475,494)), minor_versions("2.2" , 0))
("2_2", list(range(475,495)), minor_versions("2.2" , 0))
]
####################################################################

View File

@ -1160,6 +1160,270 @@ def revert_mathmulticol(document):
i = j
def revert_Argument_to_TeX_brace(document, line, endline, n, nmax, environment, opt):
'''
Reverts an InsetArgument to TeX-code
usage:
revert_Argument_to_TeX_brace(document, LineOfBegin, LineOfEnd, StartArgument, EndArgument, isEnvironment, isOpt)
LineOfBegin is the line of the \begin_layout or \begin_inset statement
LineOfEnd is the line of the \end_layout or \end_inset statement, if "0" is given, the end of the file is used instead
StartArgument is the number of the first argument that needs to be converted
EndArgument is the number of the last argument that needs to be converted or the last defined one
isEnvironment must be true, if the layout is for a LaTeX environment
isOpt must be true, if the argument is an optional one
'''
lineArg = 0
wasOpt = False
while lineArg != -1 and n < nmax + 1:
lineArg = find_token(document.body, "\\begin_inset Argument " + str(n), line)
if lineArg > endline and endline != 0:
return wasOpt
if lineArg != -1:
beginPlain = find_token(document.body, "\\begin_layout Plain Layout", lineArg)
# we have to assure that no other inset is in the Argument
beginInset = find_token(document.body, "\\begin_inset", beginPlain)
endInset = find_token(document.body, "\\end_inset", beginPlain)
k = beginPlain + 1
l = k
while beginInset < endInset and beginInset != -1:
beginInset = find_token(document.body, "\\begin_inset", k)
endInset = find_token(document.body, "\\end_inset", l)
k = beginInset + 1
l = endInset + 1
if environment == False:
if opt == False:
document.body[endInset - 2 : endInset + 1] = put_cmd_in_ert("}{")
del(document.body[lineArg : beginPlain + 1])
wasOpt = False
else:
document.body[endInset - 2 : endInset + 1] = put_cmd_in_ert("]")
document.body[lineArg : beginPlain + 1] = put_cmd_in_ert("[")
wasOpt = True
else:
document.body[endInset - 2 : endInset + 1] = put_cmd_in_ert("}")
document.body[lineArg : beginPlain + 1] = put_cmd_in_ert("{")
wasOpt = False
n += 1
return wasOpt
def revert_jss(document):
" Reverts JSS In_Preamble commands to ERT in preamble "
if document.textclass != "jss":
return
h = 0
m = 0
j = 0
k = 0
n = 0
while True:
# at first revert the inset layouts because they can be part of the In_Preamble layouts
while m != -1 or j != -1 or h != -1 or k != -1 or n != -1:
# \pkg
if h != -1:
h = find_token(document.body, "\\begin_inset Flex pkg", h)
if h != -1:
endh = find_end_of_inset(document.body, h)
document.body[endh - 2 : endh + 1] = put_cmd_in_ert("}")
document.body[h : h + 4] = put_cmd_in_ert("\\pkg{")
h = h + 5
# \proglang
if m != -1:
m = find_token(document.body, "\\begin_inset Flex proglang", m)
if m != -1:
endm = find_end_of_inset(document.body, m)
document.body[endm - 2 : endm + 1] = put_cmd_in_ert("}")
document.body[m : m + 4] = put_cmd_in_ert("\\proglang{")
m = m + 5
# \code
if j != -1:
j = find_token(document.body, "\\begin_inset Flex code", j)
if j != -1:
endj = find_end_of_inset(document.body, j)
document.body[endj - 2 : endj + 1] = put_cmd_in_ert("}")
document.body[j : j + 4] = put_cmd_in_ert("\\code{")
j = j + 5
# \email
if k != -1:
k = find_token(document.body, "\\begin_inset Flex E-mail", k)
if k != -1:
endk = find_end_of_inset(document.body, k)
document.body[endk - 2 : endk + 1] = put_cmd_in_ert("}")
document.body[k : k + 4] = put_cmd_in_ert("\\email{")
k = k + 5
# \url
if n != -1:
n = find_token(document.body, "\\begin_inset Flex URL", n)
if n != -1:
endn = find_end_of_inset(document.body, n)
document.body[endn - 2 : endn + 1] = put_cmd_in_ert("}")
document.body[n : n + 4] = put_cmd_in_ert("\\url{")
n = n + 5
# now revert the In_Preamble layouts
# \title
i = find_token(document.body, "\\begin_layout Title", 0)
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 Title layout")
i += 1
continue
content = lyx2latex(document, document.body[i:j + 1])
add_to_preamble(document, ["\\title{" + content + "}"])
del document.body[i:j + 1]
# \author
i = find_token(document.body, "\\begin_layout Author", 0)
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 Author layout")
i += 1
continue
content = lyx2latex(document, document.body[i:j + 1])
add_to_preamble(document, ["\\author{" + content + "}"])
del document.body[i:j + 1]
# \Plainauthor
i = find_token(document.body, "\\begin_layout Plain Author", 0)
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 Plain Author layout")
i += 1
continue
content = lyx2latex(document, document.body[i:j + 1])
add_to_preamble(document, ["\\Plainauthor{" + content + "}"])
del document.body[i:j + 1]
# \Plaintitle
i = find_token(document.body, "\\begin_layout Plain Title", 0)
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 Plain Title layout")
i += 1
continue
content = lyx2latex(document, document.body[i:j + 1])
add_to_preamble(document, ["\\Plaintitle{" + content + "}"])
del document.body[i:j + 1]
# \Shorttitle
i = find_token(document.body, "\\begin_layout Short Title", 0)
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 Short Title layout")
i += 1
continue
content = lyx2latex(document, document.body[i:j + 1])
add_to_preamble(document, ["\\Shorttitle{" + content + "}"])
del document.body[i:j + 1]
# \Abstract
i = find_token(document.body, "\\begin_layout Abstract", 0)
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 Abstract layout")
i += 1
continue
content = lyx2latex(document, document.body[i:j + 1])
add_to_preamble(document, ["\\Abstract{" + content + "}"])
del document.body[i:j + 1]
# \Keywords
i = find_token(document.body, "\\begin_layout Keywords", 0)
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 Keywords layout")
i += 1
continue
content = lyx2latex(document, document.body[i:j + 1])
add_to_preamble(document, ["\\Keywords{" + content + "}"])
del document.body[i:j + 1]
# \Plainkeywords
i = find_token(document.body, "\\begin_layout Plain Keywords", 0)
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 Plain Keywords layout")
i += 1
continue
content = lyx2latex(document, document.body[i:j + 1])
add_to_preamble(document, ["\\Plainkeywords{" + content + "}"])
del document.body[i:j + 1]
# \Address
i = find_token(document.body, "\\begin_layout Address", 0)
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 Address layout")
i += 1
continue
content = lyx2latex(document, document.body[i:j + 1])
add_to_preamble(document, ["\\Address{" + content + "}"])
del document.body[i:j + 1]
# finally handle the code layouts
h = 0
m = 0
j = 0
k = 0
while m != -1 or j != -1 or h != -1 or k != -1:
# \CodeChunk
if h != -1:
h = find_token(document.body, "\\begin_layout Code Chunk", h)
if h != -1:
endh = find_end_of_layout(document.body, h)
begindeeper = find_token(document.body, "\\begin_deeper", h)
enddeeper = find_token(document.body, "\\end_deeper", h)
document.body[enddeeper + 1 : enddeeper] = ["\\end_layout"]
document.body[enddeeper : enddeeper + 1] = put_cmd_in_ert("\\end{CodeChunk}")
del document.body[begindeeper]
document.body[h : h + 3] = put_cmd_in_ert("\\begin{CodeChunk}")
document.body[h - 1 : h] = ["\\begin_layout Standard"]
h = h + 1
# \Code
if m != -1:
m = find_token(document.body, "\\begin_layout Standard Code", m)
if m != -1:
endm = find_end_of_layout(document.body, m)
document.body[endm : endm + 1] = ["\\end_layout", "", "\\begin_layout Standard"]
document.body[endm + 3 : endm + 4] = put_cmd_in_ert("\\end{Code}")
document.body[endm + 13 : endm + 13] = ["\\end_layout", "", "\\begin_layout Standard"]
document.body[m + 1 : m] = ["\\end_layout", "", "\\begin_layout Standard"]
document.body[m : m + 1] = put_cmd_in_ert("\\begin{Code}")
m = m + 1
# \CodeInput
if j != -1:
j = find_token(document.body, "\\begin_layout Code Input", j)
if j != -1:
endj = find_end_of_layout(document.body, j)
document.body[endj : endj + 1] = ["\\end_layout", "", "\\begin_layout Standard"]
document.body[endj + 3 : endj + 4] = put_cmd_in_ert("\\end{CodeInput}")
document.body[endj + 13 : endj + 13] = ["\\end_layout", "", "\\begin_layout Standard"]
document.body[j + 1 : j] = ["\\end_layout", "", "\\begin_layout Standard"]
document.body[j : j + 1] = put_cmd_in_ert("\\begin{CodeInput}")
j = j + 1
# \CodeOutput
if k != -1:
k = find_token(document.body, "\\begin_layout Code Output", k)
if k != -1:
endk = find_end_of_layout(document.body, k)
document.body[endk : endj + 1] = ["\\end_layout", "", "\\begin_layout Standard"]
document.body[endk + 3 : endk + 4] = put_cmd_in_ert("\\end{CodeOutput}")
document.body[endk + 13 : endk + 13] = ["\\end_layout", "", "\\begin_layout Standard"]
document.body[k + 1 : k] = ["\\end_layout", "", "\\begin_layout Standard"]
document.body[k : k + 1] = put_cmd_in_ert("\\begin{CodeOutput}")
k = k + 1
##
# Conversion hub
#
@ -1187,10 +1451,12 @@ convert = [
[490, [convert_origin]],
[491, []],
[492, [convert_colorbox]],
[493, []]
[493, []],
[494, []]
]
revert = [
[493, [revert_jss]],
[492, [revert_mathmulticol]],
[491, [revert_colorbox]],
[490, [revert_textcolor]],

View File

@ -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 493 // gb math multicolumn
#define LYX_FORMAT_TEX2LYX 493
#define LYX_FORMAT_LYX 494 // uwestoehr jss layout changes
#define LYX_FORMAT_TEX2LYX 494
#if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
#ifndef _MSC_VER