From d4ca8d74041094f623cc891a30b4dc537137431c Mon Sep 17 00:00:00 2001 From: Enrico Forestieri Date: Wed, 6 Apr 2016 05:25:27 +0200 Subject: [PATCH] Introduce the latexpar separator. This is the same as the parbreak separator and is represented on screen as the old parbreak. Old parbreak separators are converted to latexpar separators when they are used for introducing blank lines in the latex output rather than for separating environments. Instead, parbreak separators are now represented on screen by a double line. In essence, latexpar and parbreak separators produce the same output but are represented differently on screen. The context menu does not account for latexpar separators and only "true" separators can be turned each into the other one. --- development/FORMAT | 10 +++++ lib/lyx2lyx/LyX.py | 2 +- lib/lyx2lyx/lyx_2_2.py | 44 ++++++++++++++++++- src/LyXAction.cpp | 4 +- src/factory.cpp | 2 + src/insets/InsetSeparator.cpp | 19 +++++++- src/insets/InsetSeparator.h | 5 +-- src/tex2lyx/test/CJK.lyx.lyx | 2 +- src/tex2lyx/test/CJKutf8.lyx.lyx | 2 +- src/tex2lyx/test/DummyDocument.lyx.lyx | 2 +- src/tex2lyx/test/Dummy~Document.lyx.lyx | 2 +- src/tex2lyx/test/XeTeX-polyglossia.lyx.lyx | 2 +- src/tex2lyx/test/algo2e.lyx.lyx | 2 +- .../test/box-color-size-space-align.lyx.lyx | 2 +- src/tex2lyx/test/test-insets-basic.lyx.lyx | 2 +- src/tex2lyx/test/test-insets.lyx.lyx | 2 +- src/tex2lyx/test/test-memoir.lyx.lyx | 2 +- src/tex2lyx/test/test-modules.lyx.lyx | 2 +- .../test/test-refstyle-theorems.lyx.lyx | 2 +- src/tex2lyx/test/test-scr.lyx.lyx | 2 +- src/tex2lyx/test/test-structure.lyx.lyx | 2 +- src/tex2lyx/test/test.lyx.lyx | 2 +- src/tex2lyx/test/verbatim.lyx.lyx | 2 +- src/version.h | 4 +- 24 files changed, 95 insertions(+), 27 deletions(-) diff --git a/development/FORMAT b/development/FORMAT index 9384409b53..01319dff51 100644 --- a/development/FORMAT +++ b/development/FORMAT @@ -11,6 +11,16 @@ adjustments are made to tex2lyx and bugs are fixed in lyx2lyx. ----------------------- +2016-04-05 Enrico Forestieri + * Format incremented to 508 + New kind of Separator inset (latexpar). The old parbreak separator + used specifically to introduce a LaTeX paragraph break in the output + (and thus not as a proper separator) is turned into a latexpar kind. + The only difference with the parbreak kind is the representation + on screen. The new latexpar kind is represented by the same symbol + used previously for the parbreak one, while the latter is now + represented as a double line. + 2016-03-25 Jean-Marc Lasgouttes * Format incremented to 507 Convert caption subtype LongTableNoNumber to Unnumbered diff --git a/lib/lyx2lyx/LyX.py b/lib/lyx2lyx/LyX.py index e7078f148c..66108dca2c 100644 --- a/lib/lyx2lyx/LyX.py +++ b/lib/lyx2lyx/LyX.py @@ -86,7 +86,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,508)), minor_versions("2.2" , 0)) + ("2_2", list(range(475,509)), minor_versions("2.2" , 0)) ] #################################################################### diff --git a/lib/lyx2lyx/lyx_2_2.py b/lib/lyx2lyx/lyx_2_2.py index 04c32ce7aa..37a26be592 100644 --- a/lib/lyx2lyx/lyx_2_2.py +++ b/lib/lyx2lyx/lyx_2_2.py @@ -334,6 +334,46 @@ def revert_separator(document): i = i + 1 +def convert_parbreak(document): + """ + Convert parbreak separators not specifically used to separate + environments to latexpar separators. + """ + parbreakinset = "\\begin_inset Separator parbreak" + i = 0 + while 1: + i = find_token(document.body, parbreakinset, i) + if i == -1: + return + lay = get_containing_layout(document.body, i) + if lay == False: + document.warning("Malformed LyX document: Can't convert separator inset at line " + str(i)) + i += 1 + continue + if lay[0] == "Standard": + # Convert only if not alone in the paragraph + k1 = find_nonempty_line(document.body, lay[1] + 1, i + 1) + k2 = find_nonempty_line(document.body, i + 1, lay[2]) + if (k1 < i) or (k2 > i + 1) or not check_token(document.body[i], parbreakinset): + document.body[i] = document.body[i].replace("parbreak", "latexpar") + else: + document.body[i] = document.body[i].replace("parbreak", "latexpar") + i += 1 + + +def revert_parbreak(document): + """ + Revert latexpar separators to parbreak separators. + """ + i = 0 + while 1: + i = find_token(document.body, "\\begin_inset Separator latexpar", i) + if i == -1: + return + document.body[i] = document.body[i].replace("latexpar", "parbreak") + i += 1 + + def revert_smash(document): " Set amsmath to on if smash commands are used " @@ -2284,10 +2324,12 @@ convert = [ [504, [convert_save_props]], [505, []], [506, [convert_info_tabular_feature]], - [507, [convert_longtable_label]] + [507, [convert_longtable_label]], + [508, [convert_parbreak]] ] revert = [ + [507, [revert_parbreak]], [506, [revert_longtable_label]], [505, [revert_info_tabular_feature]], [504, []], diff --git a/src/LyXAction.cpp b/src/LyXAction.cpp index 1e8390575a..831c3f619c 100644 --- a/src/LyXAction.cpp +++ b/src/LyXAction.cpp @@ -635,9 +635,9 @@ void LyXAction::init() { LFUN_NEWLINE_INSERT, "newline-insert", Noop, Edit }, /*! * \var lyx::FuncCode lyx::LFUN_SEPARATOR_INSERT - * \li Action: Inserts an environment separator or paragraph break. + * \li Action: Inserts an environment separator or latex paragraph break. * \li Syntax: separator-insert [] - * \li Params: : default: plain + * \li Params: : default: plain * \li Origin: ef, 2 May 2014 * \endvar */ diff --git a/src/factory.cpp b/src/factory.cpp index b7320d0143..b8d94336b9 100644 --- a/src/factory.cpp +++ b/src/factory.cpp @@ -107,6 +107,8 @@ Inset * createInsetHelper(Buffer * buf, FuncRequest const & cmd) inp.kind = InsetSeparatorParams::PLAIN; else if (name == "parbreak") inp.kind = InsetSeparatorParams::PARBREAK; + else if (name == "latexpar") + inp.kind = InsetSeparatorParams::LATEXPAR; else { lyxerr << "Wrong argument for LyX function 'separator-insert'." << endl; break; diff --git a/src/insets/InsetSeparator.cpp b/src/insets/InsetSeparator.cpp index b981d2cc5d..a759f1f395 100644 --- a/src/insets/InsetSeparator.cpp +++ b/src/insets/InsetSeparator.cpp @@ -52,6 +52,9 @@ void InsetSeparatorParams::write(ostream & os) const case InsetSeparatorParams::PARBREAK: os << "parbreak"; break; + case InsetSeparatorParams::LATEXPAR: + os << "latexpar"; + break; } } @@ -65,6 +68,8 @@ void InsetSeparatorParams::read(Lexer & lex) kind = InsetSeparatorParams::PLAIN; else if (token == "parbreak") kind = InsetSeparatorParams::PARBREAK; + else if (token == "latexpar") + kind = InsetSeparatorParams::LATEXPAR; else lex.printError("Unknown kind: `$$Token'"); } @@ -139,6 +144,7 @@ void InsetSeparator::latex(otexstream & os, OutputParams const &) const os << breakln << "%\n"; break; case InsetSeparatorParams::PARBREAK: + case InsetSeparatorParams::LATEXPAR: os << breakln << "\n"; break; default: @@ -177,7 +183,7 @@ void InsetSeparator::metrics(MetricsInfo & mi, Dimension & dim) const dim.asc = fm.maxAscent(); dim.des = fm.maxDescent(); dim.wid = fm.width('n'); - if (params_.kind == InsetSeparatorParams::PLAIN) + if (params_.kind != InsetSeparatorParams::LATEXPAR) dim.wid *= 8; } @@ -194,7 +200,7 @@ void InsetSeparator::draw(PainterInfo & pi, int x, int y) const int xp[7]; int yp[7]; - if (params_.kind == InsetSeparatorParams::PLAIN) { + if (params_.kind != InsetSeparatorParams::LATEXPAR) { yp[0] = int(y - 0.500 * asc * 0.75); yp[1] = yp[0]; @@ -202,6 +208,12 @@ void InsetSeparator::draw(PainterInfo & pi, int x, int y) const xp[1] = int(x + wid * 8); pi.pain.lines(xp, yp, 2, ColorName()); + + if (params_.kind == InsetSeparatorParams::PARBREAK) { + yp[0] += 0.25 * asc * 0.75; + yp[1] = yp[0]; + pi.pain.lines(xp, yp, 2, ColorName()); + } } else { yp[0] = int(y - 0.500 * asc * 0.5); yp[1] = int(y - 0.250 * asc * 0.5); @@ -266,6 +278,9 @@ void InsetSeparator::draw(PainterInfo & pi, int x, int y) const string InsetSeparator::contextMenuName() const { + if (params_.kind == InsetSeparatorParams::LATEXPAR) + return string(); + return "context-separator"; } diff --git a/src/insets/InsetSeparator.h b/src/insets/InsetSeparator.h index 2049c222a7..66a0c5515a 100644 --- a/src/insets/InsetSeparator.h +++ b/src/insets/InsetSeparator.h @@ -22,10 +22,9 @@ class InsetSeparatorParams public: /// The different kinds of separators we support enum Kind { - /// PLAIN, - /// - PARBREAK + PARBREAK, + LATEXPAR }; /// InsetSeparatorParams() : kind(PLAIN) {} diff --git a/src/tex2lyx/test/CJK.lyx.lyx b/src/tex2lyx/test/CJK.lyx.lyx index eaee0894f6..97845522f0 100644 --- a/src/tex2lyx/test/CJK.lyx.lyx +++ b/src/tex2lyx/test/CJK.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/tex2lyx/test/CJKutf8.lyx.lyx b/src/tex2lyx/test/CJKutf8.lyx.lyx index d065946b7b..d06868bd93 100644 --- a/src/tex2lyx/test/CJKutf8.lyx.lyx +++ b/src/tex2lyx/test/CJKutf8.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/tex2lyx/test/DummyDocument.lyx.lyx b/src/tex2lyx/test/DummyDocument.lyx.lyx index 583c8e414a..9f96ad64c4 100644 --- a/src/tex2lyx/test/DummyDocument.lyx.lyx +++ b/src/tex2lyx/test/DummyDocument.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/tex2lyx/test/Dummy~Document.lyx.lyx b/src/tex2lyx/test/Dummy~Document.lyx.lyx index 5f1ac1f4df..ccaee94667 100644 --- a/src/tex2lyx/test/Dummy~Document.lyx.lyx +++ b/src/tex2lyx/test/Dummy~Document.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/tex2lyx/test/XeTeX-polyglossia.lyx.lyx b/src/tex2lyx/test/XeTeX-polyglossia.lyx.lyx index eb50ffe2cf..7bc985996d 100644 --- a/src/tex2lyx/test/XeTeX-polyglossia.lyx.lyx +++ b/src/tex2lyx/test/XeTeX-polyglossia.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/tex2lyx/test/algo2e.lyx.lyx b/src/tex2lyx/test/algo2e.lyx.lyx index 7f1de8a1c9..4b3ce67f73 100644 --- a/src/tex2lyx/test/algo2e.lyx.lyx +++ b/src/tex2lyx/test/algo2e.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/tex2lyx/test/box-color-size-space-align.lyx.lyx b/src/tex2lyx/test/box-color-size-space-align.lyx.lyx index 4a572e0d7f..63b4c70f5d 100644 --- a/src/tex2lyx/test/box-color-size-space-align.lyx.lyx +++ b/src/tex2lyx/test/box-color-size-space-align.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/tex2lyx/test/test-insets-basic.lyx.lyx b/src/tex2lyx/test/test-insets-basic.lyx.lyx index 369a4798fc..47be549cc8 100644 --- a/src/tex2lyx/test/test-insets-basic.lyx.lyx +++ b/src/tex2lyx/test/test-insets-basic.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/tex2lyx/test/test-insets.lyx.lyx b/src/tex2lyx/test/test-insets.lyx.lyx index e22b2da361..fbfba6f482 100644 --- a/src/tex2lyx/test/test-insets.lyx.lyx +++ b/src/tex2lyx/test/test-insets.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/tex2lyx/test/test-memoir.lyx.lyx b/src/tex2lyx/test/test-memoir.lyx.lyx index 73bc66a3df..b383241d3b 100644 --- a/src/tex2lyx/test/test-memoir.lyx.lyx +++ b/src/tex2lyx/test/test-memoir.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/tex2lyx/test/test-modules.lyx.lyx b/src/tex2lyx/test/test-modules.lyx.lyx index 3de6556083..54b413f533 100644 --- a/src/tex2lyx/test/test-modules.lyx.lyx +++ b/src/tex2lyx/test/test-modules.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx b/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx index eeae6ffba1..7da0d96024 100644 --- a/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx +++ b/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/tex2lyx/test/test-scr.lyx.lyx b/src/tex2lyx/test/test-scr.lyx.lyx index 6e6688ef4f..9958abe5a6 100644 --- a/src/tex2lyx/test/test-scr.lyx.lyx +++ b/src/tex2lyx/test/test-scr.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/tex2lyx/test/test-structure.lyx.lyx b/src/tex2lyx/test/test-structure.lyx.lyx index db2763ca2b..feff755cd2 100644 --- a/src/tex2lyx/test/test-structure.lyx.lyx +++ b/src/tex2lyx/test/test-structure.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/tex2lyx/test/test.lyx.lyx b/src/tex2lyx/test/test.lyx.lyx index dfc628cfcf..efe77aa7c0 100644 --- a/src/tex2lyx/test/test.lyx.lyx +++ b/src/tex2lyx/test/test.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/tex2lyx/test/verbatim.lyx.lyx b/src/tex2lyx/test/verbatim.lyx.lyx index 6438247dd8..831dc6bf96 100644 --- a/src/tex2lyx/test/verbatim.lyx.lyx +++ b/src/tex2lyx/test/verbatim.lyx.lyx @@ -1,5 +1,5 @@ #LyX file created by tex2lyx 2.2 -\lyxformat 507 +\lyxformat 508 \begin_document \begin_header \save_transient_properties true diff --git a/src/version.h b/src/version.h index a87b5bcd44..757f43f3c1 100644 --- a/src/version.h +++ b/src/version.h @@ -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 507 // lasgouttes: rename LongTableNoNumber to Unnumbered -#define LYX_FORMAT_TEX2LYX 507 +#define LYX_FORMAT_LYX 508 // forenr: convert parbreak to latexpar +#define LYX_FORMAT_TEX2LYX 508 #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX #ifndef _MSC_VER