From eabe77839bd1e348f3fa728d758ecdc779921da1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uwe=20St=C3=B6hr?= Date: Sat, 16 Feb 2013 01:02:32 +0100 Subject: [PATCH] moderncv.layout: update to modernCV 1.3 - this new modernCV version fixes the annoying linebreak bug I was suffering so long, it moreover adds 2 new features - lyx2lyx/lyx_2_1.py: updated to revert the new features --- lib/examples/modernCV.lyx | 233 ++++++++++++++++++++++++++++++------ lib/layouts/moderncv.layout | 110 ++++++++++++----- lib/lyx2lyx/lyx_2_1.py | 118 +++++++++++++----- 3 files changed, 363 insertions(+), 98 deletions(-) diff --git a/lib/examples/modernCV.lyx b/lib/examples/modernCV.lyx index a3f990b49a..6d162eac2c 100644 --- a/lib/examples/modernCV.lyx +++ b/lib/examples/modernCV.lyx @@ -1,5 +1,5 @@ #LyX 2.1 created this file. For more info see http://www.lyx.org/ -\lyxformat 459 +\lyxformat 462 \begin_document \begin_header \textclass moderncv @@ -139,6 +139,22 @@ required, possible colors are 'blue' (default), 'orange', 'green', 'red', \end_inset +\end_layout + +\begin_layout PDF Page Mode +UseOutlines +\begin_inset Note Note +status collapsed + +\begin_layout Plain Layout +optional, controls how the PDF will be shown; use either 'UseNone' (only + the document), 'UseThumbs' (show thumbnails), 'UseOutlines' (show bookmarks) + or 'FullScreen' (open in fullscreen mode). +\end_layout + +\end_inset + + \end_layout \begin_layout FirstName @@ -151,6 +167,16 @@ Testman \begin_layout Title Curriculum Vitae +\begin_inset Note Note +status collapsed + +\begin_layout Plain Layout +optional +\end_layout + +\end_inset + + \end_layout \begin_layout Standard @@ -171,42 +197,41 @@ The following personal entries are optional. status open \begin_layout Plain Layout -Teststreet 17 +Teststreet +\begin_inset space ~ +\end_inset + +17 \end_layout \end_inset -03333 Nicecity -- Switzerland + +\begin_inset Argument 2 +status open + +\begin_layout Plain Layout +03333 +\begin_inset space ~ +\end_inset + +Nicecity +\end_layout + +\end_inset + +Switzerland \begin_inset Note Note status collapsed \begin_layout Plain Layout - -\series bold -Note: -\series default - Only when you use the +the optional lines are only important for the styles \emph on classic \emph default - theme, you can add a line break with: -\begin_inset ERT -status collapsed - -\begin_layout Plain Layout - - -\backslash -protect -\backslash - -\backslash - -\end_layout - -\end_inset - - + and +\emph on +oldstyle \end_layout \end_inset @@ -960,15 +985,41 @@ subsection item \end_layout \begin_layout Section -Section with your own content +Section with a column \end_layout -\begin_layout CloseSection +\begin_layout Columns +\begin_inset Flex Column +status open + +\begin_layout Plain Layout +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +0.5 +\end_layout + +\end_inset + + \begin_inset Note Note status collapsed \begin_layout Plain Layout -This ends the section formatting. +the optional width is a number in the range 0 - 1 and specifies the fraction + of the line length; if no width is given all available width is used for + the column +\end_layout + +\end_inset + + +\begin_inset Argument 2 +status open + +\begin_layout Plain Layout +header 1 \end_layout \end_inset @@ -976,10 +1027,95 @@ This ends the section formatting. \end_layout +\begin_layout Itemize +Everything can be the content +\end_layout + +\begin_layout Plain Layout +\noindent +\begin_inset Tabular + + + + + +\begin_inset Text + +\begin_layout Plain Layout +even a table +\end_layout + +\end_inset + + + + +\end_inset + + +\begin_inset Note Note +status open + +\begin_layout Plain Layout + +\series bold +Note: +\series default + paragraph alignments are not allowed, so e. +\begin_inset space \thinspace{} +\end_inset + +g. +\begin_inset space \space{} +\end_inset + +centering the table is not possible +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\begin_inset Flex Column +status open + +\begin_layout Plain Layout +\begin_inset Argument 2 +status open + +\begin_layout Plain Layout +header 2 +\end_layout + +\end_inset + +the second column +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Section with your own content +\end_layout + \begin_layout Standard Your content here, inside an unformatted environment. - You can use here e.g. - mathematics + You can use here e. +\begin_inset space \thinspace{} +\end_inset + +g. +\begin_inset space \space{} +\end_inset + +mathematics \begin_inset Formula \[ E=mc^{2} @@ -992,7 +1128,7 @@ put some table or figure, etc. \begin_layout EmptySection \begin_inset Note Note -status collapsed +status open \begin_layout Plain Layout Creates a section without a section heading. @@ -1001,6 +1137,16 @@ Creates a section without a section heading. \end_inset +\begin_inset Note Note +status collapsed + +\begin_layout Plain Layout +Keep entries with green labels empty! +\end_layout + +\end_inset + + \end_layout \begin_layout Item @@ -1016,10 +1162,6 @@ Now Back to moderncv layout, without making a new section \end_layout -\begin_layout CloseSection - -\end_layout - \begin_layout Standard You can use bibitems: \end_layout @@ -1208,6 +1350,16 @@ generates the letter title; must be behind the letter closing and the enclosing \end_inset +\begin_inset Note Note +status collapsed + +\begin_layout Plain Layout +Keep entries with green labels empty! +\end_layout + +\end_inset + + \end_layout \begin_layout Standard @@ -1268,6 +1420,15 @@ e=\lim_{n\to\infty}\left(1+\frac{1}{n}\right)^{n} \end_layout \begin_layout MakeLetterClosing +\begin_inset Note Note +status collapsed + +\begin_layout Plain Layout +Keep entries with green labels empty! +\end_layout + +\end_inset + \end_layout diff --git a/lib/layouts/moderncv.layout b/lib/layouts/moderncv.layout index e7c2619872..c3d53b2309 100644 --- a/lib/layouts/moderncv.layout +++ b/lib/layouts/moderncv.layout @@ -1,7 +1,7 @@ #% Do not delete the line below; configure depends on this # \DeclareLaTeXClass[moderncv,color.sty,fancyhdr.sty,hyperref.sty,ifpdf.sty,marvosym.sty,suffix.sty]{Modern CV} # \DeclareCategory{Curricula Vitae} -# textclass definition file for modernCV 1.2.1 +# textclass definition file for modernCV 1.3.0 # Author : Uwe Stöhr (uwestoehr@web.de) @@ -55,6 +55,12 @@ Style CVColor LabelString "CV Color Scheme:" End +Style PDF_Page_Mode + CopyStyle CVStyle + LatexName renewcommand{\pdfpagemode} + LabelString "PDF Page Mode:" +End + Style FirstName LatexType command LatexName firstname @@ -103,9 +109,16 @@ Style Address BottomSep 0.3 TopSep 0 Argument 1 - Mandatory 1 - AutoInsert 1 - LabelString "Street" + LeftDelim { + RightDelim } + LabelString "Line 1" + Tooltip "Optional address line" + EndArgument + Argument 2 + LeftDelim { + RightDelim } + LabelString "Line 2" + Tooltip "Optional address line" EndArgument End @@ -193,6 +206,18 @@ Style Section TocLevel 1 End +Style EmptySection + CopyStyle Section + LatexType Command + LatexName emptysection{} + KeepEmpty 1 + LabelType Static + LabelString "Empty Section" + LabelFont + Color Green + EndFont +End + Style Subsection CopyStyle Section LatexName subsection @@ -206,6 +231,52 @@ Style Subsection TocLevel 2 End +Style CloseSection + ObsoletedBy Standard +End + +Style Columns + Margin Static + LatexType Environment + LatexName cvcolumns + NextNoIndent 1 + LeftMargin M + RightMargin M + ParSkip 0.4 + BottomSep 0.5 + ParSep 0.7 + Align Block + LabelType Centered + LabelString "Columns:" + LabelBottomSep 0.5 + LabelFont + Series Bold + Color Blue + EndFont + TocLevel 1 +End + +InsetLayout Flex:Column + LyxType custom + LatexType Command + LaTeXName cvcolumn + Argument 1 + LabelString "Width" + Tooltip "Optional width" + EndArgument + Argument 2 + Mandatory 1 + AutoInsert 1 + LabelString "Header" + Tooltip "Header content" + EndArgument + LabelString "Column" + LabelFont + Series Bold + Color Blue + EndFont +End + Style Entry Margin Dynamic LatexType Command @@ -353,44 +424,25 @@ Style Computer ObsoletedBy DoubleItem End -Style EmptySection - Margin Dynamic - LatexType Command - LatexName emptysection{} - KeepEmpty 1 - ParSkip 0.4 - Align Block - LabelSep xx - LabelType Static - LabelString "Empty Section" - LabelFont - Series Bold - Color Green - EndFont -End - -Style CloseSection - CopyStyle EmptySection - LatexName closesection{} - LabelString "Close Section" -End - Style MakeCVtitle CopyStyle EmptySection LatexName makecvtitle{} LabelString "Make CV Title" - Category Title + Category FrontMatter + LabelFont + Size Small + EndFont End Style MakeLetterTitle - CopyStyle EmptySection + CopyStyle MakeCVtitle LatexName makelettertitle{} LabelString "Make Letter Title" Category Letter End Style MakeLetterClosing - CopyStyle EmptySection + CopyStyle MakeCVtitle LatexName makeletterclosing{} LabelString "Close Letter" Category Letter diff --git a/lib/lyx2lyx/lyx_2_1.py b/lib/lyx2lyx/lyx_2_1.py index 1d159d94dc..6c0b9c837f 100644 --- a/lib/lyx2lyx/lyx_2_1.py +++ b/lib/lyx2lyx/lyx_2_1.py @@ -1423,19 +1423,24 @@ def revert_latexargs(document): i = realparbeg + 1 + len(subst) -def revert_Argument_to_TeX_brace(document, line, n, nmax, environment): +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, LineOfBeginLayout, StartArgument, EndArgument, isEnvironment) - LineOfBeginLayout is the line of the \begin_layout statement + 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 id for a LaTeX environment + 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 @@ -1449,12 +1454,20 @@ def revert_Argument_to_TeX_brace(document, line, n, nmax, environment): k = beginInset + 1 l = endInset + 1 if environment == False: - document.body[endInset - 2 : endInset + 1] = put_cmd_in_ert("}{") - del(document.body[lineArg : beginPlain + 1]) + 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 = n + 1 + return wasOpt def convert_TeX_brace_to_Argument(document, line, n, nmax, inset, environment): @@ -1586,17 +1599,17 @@ def revert_IEEEtran(document): if i != -1: i = find_token(document.body, "\\begin_layout Page headings", i) if i != -1: - revert_Argument_to_TeX_brace(document, i, 1, 1, False) + revert_Argument_to_TeX_brace(document, i, 0, 1, 1, False, False) i = i + 1 if i2 != -1: i2 = find_token(document.body, "\\begin_inset Flex Paragraph Start", i2) if i2 != -1: - revert_Argument_to_TeX_brace(document, i2, 1, 1, False) + revert_Argument_to_TeX_brace(document, i2, 0, 1, 1, False, False) i2 = i2 + 1 if j != -1: j = find_token(document.body, "\\begin_layout Biography without photo", j) if j != -1: - revert_Argument_to_TeX_brace(document, j, 1, 1, True) + revert_Argument_to_TeX_brace(document, j, 0, 1, 1, True, False) j = j + 1 if k != -1: k = find_token(document.body, "\\begin_layout Biography", k) @@ -1606,7 +1619,7 @@ def revert_IEEEtran(document): continue if k != -1: # start with the second argument, therefore 2 - revert_Argument_to_TeX_brace(document, k, 2, 2, True) + revert_Argument_to_TeX_brace(document, k, 0, 2, 2, True, False) k = k + 1 if i == -1 and i2 == -1 and j == -1 and k == -1: return @@ -1676,7 +1689,7 @@ def revert_AASTeX(document): if i != -1: i = find_token(document.body, "\\begin_layout Altaffilation", i) if i != -1: - revert_Argument_to_TeX_brace(document, i, 1, 1, False) + revert_Argument_to_TeX_brace(document, i, 0, 1, 1, False, False) i = i + 1 if i == -1: return @@ -1704,7 +1717,7 @@ def revert_AGUTeX(document): if i != -1: i = find_token(document.body, "\\begin_layout Author affiliation", i) if i != -1: - revert_Argument_to_TeX_brace(document, i, 1, 1, False) + revert_Argument_to_TeX_brace(document, i, 0, 1, 1, False, False) i = i + 1 if i == -1: return @@ -1732,7 +1745,7 @@ def revert_IJMP(document): if i != -1: i = find_token(document.body, "\\begin_layout MarkBoth", i) if i != -1: - revert_Argument_to_TeX_brace(document, i, 1, 1, False) + revert_Argument_to_TeX_brace(document, i, 0, 1, 1, False, False) i = i + 1 if i == -1: return @@ -1761,12 +1774,12 @@ def revert_SIGPLAN(document): if i != -1: i = find_token(document.body, "\\begin_layout Conference", i) if i != -1: - revert_Argument_to_TeX_brace(document, i, 1, 1, False) + revert_Argument_to_TeX_brace(document, i, 0, 1, 1, False, False) i = i + 1 if j != -1: j = find_token(document.body, "\\begin_layout Author", j) if j != -1: - revert_Argument_to_TeX_brace(document, j, 1, 2, False) + revert_Argument_to_TeX_brace(document, j, 0, 1, 2, False, False) j = j + 1 if i == -1 and j == -1: return @@ -1800,7 +1813,7 @@ def revert_SIGGRAPH(document): if i != -1: i = find_token(document.body, "\\begin_inset Flex CRcat", i) if i != -1: - revert_Argument_to_TeX_brace(document, i, 1, 3, False) + revert_Argument_to_TeX_brace(document, i, 0, 1, 3, False, False) i = i + 1 if i == -1: return @@ -1831,22 +1844,22 @@ def revert_EuropeCV(document): if i != -1: i = find_token(document.body, "\\begin_layout Item", i) if i != -1: - revert_Argument_to_TeX_brace(document, i, 2, 2, False) + revert_Argument_to_TeX_brace(document, i, 0, 2, 2, False, False) i = i + 1 if j != -1: j = find_token(document.body, "\\begin_layout BulletedItem", j) if j != -1: - revert_Argument_to_TeX_brace(document, j, 2, 2, False) + revert_Argument_to_TeX_brace(document, j, 0, 2, 2, False, False) j = j + 1 if k != -1: k = find_token(document.body, "\\begin_layout Language", k) if k != -1: - revert_Argument_to_TeX_brace(document, k, 2, 6, False) + revert_Argument_to_TeX_brace(document, k, 0, 2, 6, False, False) k = k + 1 if m != -1: m = find_token(document.body, "\\begin_layout LastLanguage", m) if m != -1: - revert_Argument_to_TeX_brace(document, m, 2, 6, False) + revert_Argument_to_TeX_brace(document, m, 0, 2, 6, False, False) m = m + 1 if i == -1 and j == -1 and k == -1 and m == -1: return @@ -1887,40 +1900,79 @@ def convert_EuropeCV(document): def revert_ModernCV(document): " Reverts InsetArguments of modernCV to TeX-code " if document.textclass == "moderncv": - i = 0 j = 0 k = 0 m = 0 o = 0 while True: - if i != -1: - i = find_token(document.body, "\\begin_layout DoubleItem", i) - if i != -1: - revert_Argument_to_TeX_brace(document, i, 1, 3, False) - i = i + 1 if j != -1: j = find_token(document.body, "\\begin_layout Entry", j) if j != -1: - revert_Argument_to_TeX_brace(document, j, 1, 5, False) + revert_Argument_to_TeX_brace(document, j, 0, 1, 5, False, False) j = j + 1 if k != -1: k = find_token(document.body, "\\begin_layout Item", k) if k != -1: - revert_Argument_to_TeX_brace(document, k, 1, 1, False) + revert_Argument_to_TeX_brace(document, k, 0, 1, 1, False, False) k = k + 1 if m != -1: m = find_token(document.body, "\\begin_layout ItemWithComment", m) if m != -1: - revert_Argument_to_TeX_brace(document, m, 1, 2, False) + revert_Argument_to_TeX_brace(document, m, 0, 1, 2, False, False) document.body[m] = document.body[m].replace("\\begin_layout ItemWithComment", "\\begin_layout Language") m = m + 1 if o != -1: o = find_token(document.body, "\\begin_layout DoubleItem", o) if o != -1: - revert_Argument_to_TeX_brace(document, o, 1, 3, False) + revert_Argument_to_TeX_brace(document, o, 0, 1, 3, False, False) document.body[o] = document.body[o].replace("\\begin_layout DoubleItem", "\\begin_layout Computer") o = o + 1 - if i == -1 and j == -1 and k == -1 and m == -1 and o == -1: + if j == -1 and k == -1 and m == -1 and o == -1: + return + + +def revert_ModernCV_2(document): + " Reverts the Flex:Column inset of modernCV to TeX-code " + if document.textclass == "moderncv": + flex = 0 + flexEnd = -1 + while True: + if flex != -1: + flex = find_token(document.body, "\\begin_inset Flex Column", flex) + if flex != -1: + flexEnd = find_end_of_inset(document.body, flex) + wasOpt = revert_Argument_to_TeX_brace(document, flex, flexEnd, 1, 1, False, True) + revert_Argument_to_TeX_brace(document, flex, 0, 2, 2, False, False) + flexEnd = find_end_of_inset(document.body, flex) + if wasOpt == True: + document.body[flex + 0 : flex + 4] = put_cmd_in_ert("\\cvcolumn") + else: + document.body[flex + 0 : flex + 4] = put_cmd_in_ert("\\cvcolumn{") + document.body[flexEnd + 4 : flexEnd + 7] = put_cmd_in_ert("}") + flex = flex + 1 + if flex == -1: + return flexEnd + + +def revert_ModernCV_3(document): + " Reverts the Column style of modernCV to TeX-code " + if document.textclass == "moderncv": + # revert the layouts + revert_ModernCV(document) + p = 0 + # get the position of the end of the last column inset + LastFlexEnd = revert_ModernCV_2(document) + while True: + if p != -1: + p = find_token(document.body, "\\begin_layout Columns", p) + if p != -1: + pEnd = find_end_of_layout(document.body, p) + document.body[p] = document.body[p].replace("\\begin_layout Columns", "\\begin_layout Standard") + if LastFlexEnd != -1: + document.body[p + 1 : p + 1] = put_cmd_in_ert("\\begin{cvcolumns}") + document.body[LastFlexEnd + 24 : LastFlexEnd + 24] = put_cmd_in_ert("\\end{cvcolumns}") + p = p + 1 + if p == -1: return @@ -1966,7 +2018,7 @@ def revert_Initials(document): i = find_token(document.body, "\\begin_layout Initial", i) if i != -1: # first arg (optional) and second arg (first mandatory) are supported in LyX 2.0.x - revert_Argument_to_TeX_brace(document, i, 3, 3, False) + revert_Argument_to_TeX_brace(document, i, 0, 3, 3, False, False) i = i + 1 if i == -1: return @@ -3666,7 +3718,7 @@ revert = [ [449, [revert_garamondx, revert_garamondx_newtxmath]], [448, [revert_itemargs]], [447, [revert_literate]], - [446, [revert_IEEEtran, revert_IEEEtran_2, revert_AASTeX, revert_AGUTeX, revert_IJMP, revert_SIGPLAN, revert_SIGGRAPH, revert_EuropeCV, revert_Initials, revert_ModernCV]], + [446, [revert_IEEEtran, revert_IEEEtran_2, revert_AASTeX, revert_AGUTeX, revert_IJMP, revert_SIGPLAN, revert_SIGGRAPH, revert_EuropeCV, revert_Initials, revert_ModernCV_3]], [445, [revert_latexargs]], [444, [revert_uop]], [443, [revert_biolinum]],