]> git.lyx.org Git - lyx.git/commitdiff
jss.layout: support for more layouts
authorUwe Stöhr <uwestoehr@lyx.org>
Sun, 24 May 2015 01:34:36 +0000 (03:34 +0200)
committerUwe Stöhr <uwestoehr@lyx.org>
Sun, 24 May 2015 01:34:36 +0000 (03:34 +0200)
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

development/FORMAT
lib/layouts/jss.layout
lib/lyx2lyx/LyX.py
lib/lyx2lyx/lyx_2_2.py
src/version.h

index dca3aa5a91a4e4b81b8c479dc943eeb15e48604d..fb2088b95852c04ce922e79f6a15dc4754f2a0bd 100644 (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
@@ -22,7 +25,7 @@ adjustments are made to tex2lyx and bugs are fixed in lyx2lyx.
          New box parameters:
          - framcolor
          - backgroundcolor
-  
+
 2015-05-14 Uwe Stöhr <uwestoehr@web.de>
        * Format incremented to 491: support for xcolor's default colors
          No new parameter, the \color parameter can now also have these values:
index 94a4f4d8a40074c0e1712b7aa5d3c63e198717ed..476b3ad04733d479d9b690dfe14c8bc27e8cf8eb 100644 (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
index 181d2ddbfba1c83758183d11d07546484079688c..15ad32c4f41a5987233c235b49e2a5000eb71798 100644 (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))
                   ]
 
 ####################################################################
index cceabbe4d19997c6c1b87669d2fcdb428d727300..18f4838581d22ce9dacd870d1626be8486902710 100644 (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]],
index 6b80b599dcff84a8980e159517846323ee3df803..9746f1b693b71ff54f25b3c7e42c7a152dcf2a5c 100644 (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