]> git.lyx.org Git - lyx.git/commitdiff
DocBook: add DocBookSection parameter for styles that define new sections and impleme...
authorThibaut Cuvelier <tcuvelier@lyx.org>
Wed, 21 Oct 2020 12:54:25 +0000 (14:54 +0200)
committerThibaut Cuvelier <tcuvelier@lyx.org>
Fri, 30 Oct 2020 00:59:34 +0000 (01:59 +0100)
For elements that should behave like sections (for now, mostly prefaces).

A second paragraph of PartBacktext can only wreak havok: it should start a section, and nothing else (otherwise, it's a real nightmare to implement).

15 files changed:
autotests/export/docbook/svmono.xml
autotests/export/docbook/svmono_light.lyx [new file with mode: 0644]
autotests/export/docbook/svmono_light.xml [new file with mode: 0644]
lib/layouts/svcommon.inc
lib/layouts/svmono.layout
lib/scripts/layout2layout.py
src/Layout.cpp
src/Layout.h
src/TextClass.cpp
src/insets/InsetArgument.cpp
src/insets/InsetArgument.h
src/insets/InsetInclude.cpp
src/insets/InsetLayout.cpp
src/insets/InsetLayout.h
src/output_docbook.cpp

index c04c7b65838369671048a8b9d8d473d259aa6903..1a82d4c3a955a7186af8bb2e0c5116780fb26990 100644 (file)
@@ -12,6 +12,8 @@
 <dedication>
 <para>A quotation or a dedication<indexterm><primary>dedication</primary></indexterm> at the very beginning of your book.</para>
 </dedication>
+</abstract>
+</info>
 <para>The foreword covers introductory remarks preceding the text of a book that are written by a <emphasis>person other than the author or editor of the book. If applicable, the foreword precedes the preface which is written by the author or editor of the book.</emphasis></para>
 <!-- \vspace{\baselineskip} -->
 
 </listitem>
 </varlistentry>
 </variablelist>
-<variablelist>
-<varlistentry>
-<term>BABI</term>
-<listitem>
-<para>Spelled-out abbreviation and definition</para>
-</listitem>
-</varlistentry>
-<varlistentry>
-<term>CABR</term>
-<listitem>
-<para>Spelled-out abbreviation and definition</para>
-</listitem>
-</varlistentry>
-</variablelist>
-<variablelist>
-<varlistentry>
-<term>CABR</term>
-<listitem>
-<para>Spelled-out abbreviation and definition</para>
-</listitem>
-</varlistentry>
-</variablelist>
-</abstract>
-</info>
 <section>
 <PartBacktext>
  Part title page and, if desired, a short introductory text (maximum one page) on its verso page
diff --git a/autotests/export/docbook/svmono_light.lyx b/autotests/export/docbook/svmono_light.lyx
new file mode 100644 (file)
index 0000000..7f6a67c
--- /dev/null
@@ -0,0 +1,401 @@
+#LyX 2.4 created this file. For more info see https://www.lyx.org/
+\lyxformat 599
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass svmono
+\begin_preamble
+\usepackage{type1cm}
+
+\usepackage{multicol} % used for the two-column index
+\usepackage[bottom]{footmisc} % places footnotes at page bottom
+
+%\makeindex % used for the subject index
+                       % please use the style svind.ist with
+                       % your makeindex program
+\end_preamble
+\options graybox,envcountchap,sectrefs
+\use_default_options false
+\maintain_unincluded_children no
+\language english
+\language_package default
+\inputencoding utf8
+\fontencoding auto
+\font_roman "times" "default"
+\font_sans "helvet" "default"
+\font_typewriter "courier" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_roman_osf false
+\font_sans_osf false
+\font_typewriter_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
+\use_microtype false
+\use_dash_ligatures false
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize default
+\spacing single
+\use_hyperref true
+\pdf_bookmarks true
+\pdf_bookmarksnumbered true
+\pdf_bookmarksopen true
+\pdf_bookmarksopenlevel 1
+\pdf_breaklinks false
+\pdf_pdfborder true
+\pdf_colorlinks false
+\pdf_backref false
+\pdf_pdfusetitle true
+\papersize default
+\use_geometry false
+\use_package amsmath 1
+\use_package amssymb 1
+\use_package cancel 1
+\use_package esint 1
+\use_package mathdots 1
+\use_package mathtools 1
+\use_package mhchem 1
+\use_package stackrel 1
+\use_package stmaryrd 1
+\use_package undertilde 1
+\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 0
+\use_minted 0
+\use_lineno 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\secnumdepth 3
+\tocdepth 2
+\paragraph_separation indent
+\paragraph_indentation default
+\is_math_indent 0
+\math_numbering_side default
+\quotes_style english
+\dynamic_quotes 0
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tablestyle default
+\tracking_changes false
+\output_changes false
+\change_bars false
+\postpone_fragile_content false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\docbook_table_output 0
+\end_header
+
+\begin_body
+
+\begin_layout Author
+Author name(s)
+\end_layout
+
+\begin_layout Title
+Book title
+\end_layout
+
+\begin_layout Front Matter
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Note Note
+status open
+
+\begin_layout Preface
+
+\end_layout
+
+\begin_layout Plain Layout
+A preface
+\begin_inset Index idx
+status open
+
+\begin_layout Plain Layout
+preface
+\end_layout
+
+\end_inset
+
+ is a book's preliminary statement, usually written by the 
+\shape italic
+author or editor
+\shape default
+ of a work, which states its origin, scope, purpose, plan, and intended
+ audience, and which sometimes includes afterthoughts and acknowledgments
+ of assistance.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Main Matter
+
+\end_layout
+
+\begin_layout Standard
+
+\end_layout
+
+\begin_layout PartBacktext
+\noindent
+\begin_inset Argument 1
+status open
+
+\begin_layout Plain Layout
+Part Title
+\end_layout
+
+\end_inset
+
+ Part title page and, if desired, a short introductory text (maximum one
+ page) on its verso page.
+\end_layout
+
+\begin_layout Chapter
+Chapter Heading
+\begin_inset CommandInset label
+LatexCommand label
+name "chap:intro"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Running Chapter
+chapter heading in the running head
+\begin_inset Note Note
+status open
+
+\begin_layout Plain Layout
+optional
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Abstract*
+Each chapter should be preceded by an abstract (10–15 lines long) that summarize
+s the content.
+ The abstract will appear 
+\shape italic
+online
+\shape default
+ at 
+\begin_inset Flex URL
+status collapsed
+
+\begin_layout Plain Layout
+
+www.SpringerLink.com
+\end_layout
+
+\end_inset
+
+ and be available with unrestricted access.
+ This allows unregistered users to read the abstract as a teaser for the
+ complete chapter.
+ As a general rule the abstracts will not appear in the printed version
+ of your book unless it is the style of your particular book or that of
+ the series to which your book belongs.
+\begin_inset Newline newline
+\end_inset
+
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
+
+\backslash
+indent
+\end_layout
+
+\end_inset
+
+ Please use the 'starred' version of the 
+\family typewriter
+abstract
+\family default
+ environment for typesetting the text of the online abstracts.
+ Use the plain 
+\family typewriter
+abstract
+\family default
+ if the abstract is also to appear in the printed version of the book.
+\end_layout
+
+\begin_layout Abstract
+Each chapter should be preceded by an abstract (10–15 lines long) that summarize
+s the content.
+ The abstract will appear 
+\shape italic
+online
+\shape default
+ at 
+\begin_inset Flex URL
+status collapsed
+
+\begin_layout Plain Layout
+
+www.SpringerLink.com
+\end_layout
+
+\end_inset
+
+ and be available with unrestricted access.
+ This allows unregistered users to read the abstract as a teaser for the
+ complete chapter.
+ As a general rule the abstracts will not appear in the printed version
+ of your book unless it is the style of your particular book or that of
+ the series to which your book belongs.
+\begin_inset Newline newline
+\end_inset
+
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
+
+\backslash
+indent
+\end_layout
+
+\end_inset
+
+ Please use the 'starred' version of the 
+\family typewriter
+abstract
+\family default
+ environment for typesetting the text of the online abstracts.
+ Use the plain 
+\family typewriter
+abstract
+\family default
+ if the abstract is also to appear in the printed version of the book.
+\end_layout
+
+\begin_layout Section
+Section Heading
+\begin_inset CommandInset label
+LatexCommand label
+name "sec:Section-Heading"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Running Section
+section heading in the running head
+\begin_inset Note Note
+status open
+
+\begin_layout Plain Layout
+optional
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+bla
+\end_layout
+
+\begin_layout Section
+Section Heading 2
+\begin_inset CommandInset label
+LatexCommand label
+name "sec:Section-Heading-2"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Instead of simply listing headings of different levels we recommend to let
+ every heading be followed by at least a short passage of text.
+\end_layout
+
+\begin_layout Standard
+Use the standard 
+\family sans
+equation
+\family default
+ environment to typeset your equations, e.g.
+\begin_inset Formula 
+\begin{equation}
+a\times b=c\;,
+\end{equation}
+
+\end_inset
+
+ however, for multiline equations we recommend to use the 
+\family sans
+eqnarray
+\family default
+ environment
+\begin_inset Foot
+status open
+
+\begin_layout Plain Layout
+In physics texts please activate the class option 
+\family typewriter
+vecphys
+\family default
+ to depict your vectors in 
+\series bold
+\shape italic
+boldface-italic
+\series default
+ type - as is customary for a wide range of physical subjects.
+\end_layout
+
+\end_inset
+
+.
+\begin_inset Formula 
+\begin{eqnarray}
+a\times b & = & c\nonumber \\
+\vec{a}\cdot\vec{b} & = & c\label{eq:01}
+\end{eqnarray}
+
+\end_inset
+
+
+\end_layout
+
+\end_body
+\end_document
diff --git a/autotests/export/docbook/svmono_light.xml b/autotests/export/docbook/svmono_light.xml
new file mode 100644 (file)
index 0000000..8709b0d
--- /dev/null
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This DocBook file was created by LyX 2.4.0dev
+  See http://www.lyx.org/ for more information -->
+<book xml:lang="en_US" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:xi="http://www.w3.org/2001/XInclude" version="5.2">
+<info>
+<title>Book title</title>
+<author>
+<personname>Author name(s)</personname>
+</author>
+</info>
+<part>
+<!-- par --><title>Part Title</title>
+ Part title page and, if desired, a short introductory text (maximum one page) on its verso page.</part>
+<chapter xml:id="chap.intro">
+<title>Chapter Heading</title>
+</chapter>
+<titleabbrev>chapter heading in the running head</titleabbrev>
+<abstract role='not-printed'>
+<para>Each chapter should be preceded by an abstract (10–15 lines long) that summarizes the content. The abstract will appear <emphasis>online at <link xlink:href="www.SpringerLink.com">www.SpringerLink.com</link> and be available with unrestricted access. This allows unregistered users to read the abstract as a teaser for the complete chapter. As a general rule the abstracts will not appear in the printed version of your book unless it is the style of your particular book or that of the series to which your book belongs.</emphasis><!-- \indent -->
+ Please use the 'starred' version of the <code>abstract</code> environment for typesetting the text of the online abstracts. Use the plain <code>abstract</code> if the abstract is also to appear in the printed version of the book.</para>
+</abstract>
+<abstract>
+<para>Each chapter should be preceded by an abstract (10–15 lines long) that summarizes the content. The abstract will appear <emphasis>online at <link xlink:href="www.SpringerLink.com">www.SpringerLink.com</link> and be available with unrestricted access. This allows unregistered users to read the abstract as a teaser for the complete chapter. As a general rule the abstracts will not appear in the printed version of your book unless it is the style of your particular book or that of the series to which your book belongs.</emphasis><!-- \indent -->
+ Please use the 'starred' version of the <code>abstract</code> environment for typesetting the text of the online abstracts. Use the plain <code>abstract</code> if the abstract is also to appear in the printed version of the book.</para>
+</abstract>
+<section xml:id="sec.Section-Heading">
+<title>Section Heading</title>
+</section>
+<titleabbrev>section heading in the running head</titleabbrev>
+<para>bla</para>
+<section xml:id="sec.Section-Heading-2">
+<title>Section Heading 2</title>
+<para>Instead of simply listing headings of different levels we recommend to let every heading be followed by at least a short passage of text.</para>
+<para>Use the standard <emphasis role='sans'>equation</emphasis> environment to typeset your equations, e.g. 
+<informalequation>
+<alt role='tex'>a\times b=c\;,</alt>
+ <m:math>
+ <m:mrow>
+  <m:mrow><m:mi>a</m:mi><m:mo>&#x00D7;</m:mo><m:mi>b</m:mi><m:mo>=</m:mo><m:mi>c</m:mi><m:mspace width="10px" /><m:mo>,</m:mo>
+  </m:mrow>
+ </m:mrow>
+ </m:math>
+</informalequation>
+ however, for multiline equations we recommend to use the <emphasis role='sans'>eqnarray</emphasis> environment<footnote>
+<para>In physics texts please activate the class option <code>vecphys</code> to depict your vectors in <emphasis role='bold'><emphasis>boldface-italic</emphasis> type - as is customary for a wide range of physical subjects.</emphasis></para>
+</footnote>. 
+<informalequation xml:id="eq.01">
+<alt role='tex'>a\times b &amp; = &amp; c\nonumber \\
+\vec{a}\cdot\vec{b} &amp; = &amp; c\label{eq:01}
+</alt>
+ <m:math>
+ <m:mtable>
+  <m:mtr>
+   <m:mtd>
+    <m:mrow><m:mi>a</m:mi><m:mo>&#x00D7;</m:mo><m:mi>b</m:mi>
+    </m:mrow>
+   </m:mtd>
+   <m:mtd><m:mo>=</m:mo>
+   </m:mtd>
+   <m:mtd><m:mi>c</m:mi>
+   </m:mtd>
+  </m:mtr>
+  <m:mtr>
+   <m:mtd>
+    <m:mrow>
+     <m:mover>
+      <m:mrow><m:mi>a</m:mi>
+      </m:mrow><m:mo stretchy="true">&#x2192;</m:mo>
+     </m:mover><m:mo>&#x22C5;</m:mo>
+     <m:mover>
+      <m:mrow><m:mi>b</m:mi>
+      </m:mrow><m:mo stretchy="true">&#x2192;</m:mo>
+     </m:mover>
+    </m:mrow>
+   </m:mtd>
+   <m:mtd><m:mo>=</m:mo>
+   </m:mtd>
+   <m:mtd><m:mi>c</m:mi>
+   </m:mtd>
+  </m:mtr>
+ </m:mtable>
+ </m:math>
+</informalequation>
+</para>
+</section>
+</book>
\ No newline at end of file
index 426b5e3b84d59aef487e3c23291dfec974b59bb0..669361fa324f9b472c142cf3ee32934db5d30317 100644 (file)
@@ -19,7 +19,7 @@
 # see http://www.springer.com/authors for class files and further instructions
 
 
-Format 85
+Format 86
 PageStyle              Plain
 
 
@@ -147,14 +147,19 @@ Style PartBacktext
        Argument 1
          Mandatory     1
          LabelString   "Part Title"
-         Tooltip       "Title of this part"
+         Tooltip           "Title of this part"
          IsTocCaption  1
+         DocBookTag    title
        EndArgument
        Preamble
          \newenvironment{svmultpartbacktext}[1]{\begin{partbacktext}
          \part{#1}}{\end{partbacktext}}
        EndPreamble
        HTMLTag         h1
+       DocBookTag            NONE
+       DocBookSection        true
+       DocBookSectionTag     part
+       # A second paragraph of PartBacktext can only wreak havok: it should start a section, and nothing else (otherwise, it's a real nightmare to implement). This ought to be enough for now, even though the document cannot be valid.
 End
 
 Style Chapter
@@ -426,12 +431,15 @@ Style Running_Title
        LatexName       titlerunning
        InTitle         1
        LabelString     "Running title:"
+       DocBookTag            titleabbrev
+       DocBookTagType        paragraph
 End
 
 Style Running_Author
        CopyStyle       Running_Title
        LatexName       authorrunning
        LabelString     "Running author:"
+       DocBookTag  NONE # Still TODO
 End
 
 Style Running_Chapter
@@ -440,12 +448,17 @@ Style Running_Chapter
        InTitle         0
        LatexName       chaptermark
        LabelString     "Running chapter:"
+       DocBookTag            titleabbrev
+       DocBookTagType        paragraph
+       DocBookSection        false
 End
 
 Style Running_Section
        CopyStyle       Running_Chapter
        LatexName       sectionmark
        LabelString     "Running section:"
+       DocBookTag            titleabbrev
+       DocBookTagType        paragraph
 End
 
 Style Abstract
@@ -567,12 +580,10 @@ Style Foreword
          Series        Bold
          Size          Huge
        EndFont
-       HTMLTag         h1
-       DocBookTag             para
+       DocBookTag             title
        DocBookTagType         paragraph
-       DocBookWrapperTag      preface
-       DocBookWrapperTagType  block
-       DocBookWrapperMergeWithPrevious    true
+       DocBookSection         true
+       DocBookSectionTag      preface
 End
 
 Style Preface
@@ -587,6 +598,10 @@ Style Preface
        LabelString     "Preface"
        LabelSep        xx
        Align           Left
+       DocBookTag             title
+       DocBookTagType         paragraph
+       DocBookSection         true
+       DocBookSectionTag      preface
 End
 
 Style Acknowledgement
index b5e13a8622d56ace9e6d081de5e2585a63923824..5f855ab3c69536b6c18e86e447950c170da995eb 100644 (file)
@@ -8,10 +8,11 @@
 #  Class and style files and templates are found at:
 #       http://wiki.lyx.org/Examples/Springer
 #
-Format 85
+Format 86
 Input svcommon.inc
 
 TocDepth                2
+DocBookRoot                    book
 
 ClassOptions
        FontSize        10
index 9da2572d50a9fb452a30b266b21da7942948f624..5c6de883a41c0d77440a0e347144e618eb90a39e 100644 (file)
@@ -11,7 +11,7 @@
 # This script will update a .layout file to current format
 
 # The latest layout format is also defined in src/TextClass.cpp
-currentFormat = 85
+currentFormat = 86
 
 
 # Incremented to format 4, 6 April 2007, lasgouttes
@@ -292,6 +292,10 @@ currentFormat = 85
 # Incremented to format 85, 7 October 2020 by tcuvelier
 # New tags DocBookInnerTag, DocBookInnerAttr,
 # DocBookInnerTagType
+
+# Incremented to format 86, 20 October 2020 by tcuvelier
+# New tag DocBookSection.
+
 # Do not forget to document format change in Customization
 # Manual (section "Declaring a new text class").
 
index 942a1e37b9aaec591bfb463a204d0469ef93914b..bfd6863397b493a186f57dce4c0747fc50e7a1ee 100644 (file)
@@ -117,6 +117,7 @@ enum LayoutTags {
        LT_DOCBOOKWRAPPERATTR,
        LT_DOCBOOKWRAPPERTAGTYPE,
        LT_DOCBOOKWRAPPERMERGEWITHPREVIOUS,
+       LT_DOCBOOKSECTION,
        LT_DOCBOOKSECTIONTAG,
        LT_DOCBOOKITEMWRAPPERTAG,
        LT_DOCBOOKITEMWRAPPERATTR,
@@ -190,6 +191,7 @@ Layout::Layout()
        htmltitle_ = false;
        docbookabstract_ = false;
        docbookwrappermergewithprevious_ = false;
+       docbooksection_ = false;
        spellcheck = true;
        forcelocal = 0;
        itemcommand_ = "item";
@@ -253,6 +255,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass,
                { "docbookitemwrapperattr",    LT_DOCBOOKITEMWRAPPERATTR },
                { "docbookitemwrappertag",     LT_DOCBOOKITEMWRAPPERTAG },
                { "docbookitemwrappertagtype", LT_DOCBOOKITEMWRAPPERTAGTYPE },
+               { "docbooksection",            LT_DOCBOOKSECTION },
                { "docbooksectiontag",         LT_DOCBOOKSECTIONTAG },
                { "docbooktag",                LT_DOCBOOKTAG },
                { "docbooktagtype",            LT_DOCBOOKTAGTYPE },
@@ -797,6 +800,10 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass,
                        lex >> docbookwrappermergewithprevious_;
                        break;
 
+               case LT_DOCBOOKSECTION:
+                       lex >> docbooksection_;
+                       break;
+
                case LT_DOCBOOKSECTIONTAG:
                        lex >> docbooksectiontag_;
                        break;
@@ -1261,6 +1268,15 @@ void Layout::readArgument(Lexer & lex, bool validating)
                } else if (tok == "freespacing") {
                        lex.next();
                        arg.free_spacing = lex.getBool();
+               } else if (tok == "docbooktag") {
+                       lex.next();
+                       arg.docbooktag = lex.getDocString();
+               } else if (tok == "docbookattr") {
+                       lex.next();
+                       arg.docbookattr = lex.getDocString();
+               } else if (tok == "docbooktagtype") {
+                       lex.next();
+                       arg.docbooktagtype = lex.getDocString();
                } else {
                        lex.printError("Unknown tag");
                        error = true;
@@ -1672,6 +1688,7 @@ void Layout::write(ostream & os) const
                os << "\tDocBookWrapperAttr " << docbookwrapperattr_ << '\n';
        if(!docbookwrappertagtype_.empty())
                os << "\tDocBookWrapperTagType " << docbookwrappertagtype_ << '\n';
+       os << "\tDocBookSection " << docbooksection_ << '\n';
        if(!docbooksectiontag_.empty())
                os << "\tDocBookSectionTag " << docbooksectiontag_ << '\n';
        if(!docbookitemtag_.empty())
index 63184cd8494deaa89185a6924dcd66a6595452ca..3ea50491f2465a217fb9c98b18ade4bb6df6630e 100644 (file)
@@ -112,6 +112,9 @@ public:
                bool is_toc_caption = false;
                bool free_spacing = false;
                std::string newlinecmd;
+               docstring docbooktag;
+               docstring docbooktagtype;
+               docstring docbookattr;
        };
        ///
        typedef std::map<std::string, latexarg> LaTeXArgMap;
@@ -219,6 +222,8 @@ public:
        ///
        std::string const & docbooksectiontag() const;
        ///
+       bool docbooksection() const { return docbooksection_; }
+       ///
        std::string const & docbookitemwrappertag() const;
        ///
        std::string const & docbookitemwrapperattr() const;
@@ -557,6 +562,8 @@ private:
        /// Outer tag for this section, only if this layout represent a sectionning item, including chapters
        /// (default: section).
        mutable std::string docbooksectiontag_;
+       /// Whether this element should be considered as a section-level element in DocBook.
+       bool docbooksection_;
        /// Whether this tag must/can/can't go into an <info> tag (default: never, as it only makes sense for metadata).
        mutable std::string docbookininfo_;
        /// Wehther this paragraph should be considered as abstract.
index 42169c1b5053c42ec0d755426ccb96c631571409..e162fc6091c4587aa3eb4a0a489e96e240aceb6c 100644 (file)
@@ -59,7 +59,7 @@ namespace lyx {
 // You should also run the development/tools/updatelayouts.py script,
 // to update the format of all of our layout files.
 //
-int const LAYOUT_FORMAT = 85; // tcuvelier: DocBookInnerTag.
+int const LAYOUT_FORMAT = 86; // tcuvelier: DocBookSection.
 
 
 // Layout format for the current lyx file format. Controls which format is
index 2e8d0ba74ca7dddced5967582e1ad54f34534f50..f29ca995a52c56168d32ba88e6606e4ba73faed1 100644 (file)
@@ -27,6 +27,7 @@
 #include "TexRow.h"
 #include "texstream.h"
 #include "TocBackend.h"
+#include "xml.h"
 
 #include "support/convert.h"
 #include "support/debug.h"
@@ -122,6 +123,9 @@ void InsetArgument::updateBuffer(ParIterator const & it, UpdateType utype, bool
                pass_thru_chars_ = (*lait).second.pass_thru_chars;
                newline_cmd_ = (*lait).second.newlinecmd;
                free_spacing_ = (*lait).second.free_spacing;
+               docbooktag_ = (*lait).second.docbooktag;
+               docbooktagtype_ = (*lait).second.docbooktagtype;
+               docbookattr_ = (*lait).second.docbookattr;
                pass_thru_local_ = false;
                if (lait->second.is_toc_caption) {
                        is_toc_caption_ = true;
@@ -307,6 +311,17 @@ InsetLayout::InsetDecoration InsetArgument::decoration() const
 }
 
 
+void InsetArgument::docbook(XMLStream & xs, OutputParams const & rp) const {
+       if (docbooktag_ != from_ascii("NONE")) {
+               // TODO: implement docbooktagtype_.
+               xs << xml::StartTag(docbooktag_, docbookattr_);
+               InsetText::docbook(xs, rp);
+               xs << xml::EndTag(docbooktag_);
+               xs << xml::CR();
+       }
+}
+
+
 void InsetArgument::latexArgument(otexstream & os,
                OutputParams const & runparams_in, docstring const & ldelim,
                docstring const & rdelim, docstring const & presetarg) const
index d77f3ca65e27c1e0ddf8fcc47961a7abf02cd351..d5d54a6a5bc4f52803eaa19a3765bb72f5bd750c 100644 (file)
@@ -54,7 +54,7 @@ public:
        ///
        int plaintext(odocstringstream &, OutputParams const &, size_t) const override { return 0; }
        ///
-       void docbook(XMLStream &, OutputParams const &) const override { return; }
+       void docbook(XMLStream & xs, OutputParams const &) const override;
        ///
        docstring xhtml(XMLStream &, OutputParams const &) const override
                { return docstring(); }
@@ -125,6 +125,12 @@ private:
        std::string caption_of_toc_;
        /// Specific line break macro
        std::string newline_cmd_;
+       /// DocBook tag for this argument, if any (otherwise, NONE).
+       docstring docbooktag_;
+       /// Type of DocBook tag (controls how new lines are inserted around this argument).
+       docstring docbooktagtype_;
+       /// DocBook attributes.
+       docstring docbookattr_;
 
 protected:
        /// \name Protected functions inherited from Inset class
index be9e418d4043a3ce3f648e3dd21350ac51572e24..75a41c318148f7be6483cabaaccdd3869180b526 100644 (file)
@@ -1103,6 +1103,7 @@ void InsetInclude::docbook(XMLStream & xs, OutputParams const & rp) const
                op.par_begin = 0;
                op.par_end = 0;
                op.inInclude = true;
+               op.docbook_in_par = false;
                ibuf->writeDocBookSource(xs.os(), op, Buffer::IncludedFile);
        } else {
                xs << XMLStream::ESCAPE_NONE << "<!-- Included file: ";
index a675cb5e50017981cb4226f898e45e49132ae3e9..56aa16972db47ace6ac2aa3ce0b607e8abefc4fc 100644 (file)
@@ -44,7 +44,8 @@ InsetLayout::InsetLayout() :
        forceownlines_(false), needprotect_(false), needcprotect_(false),
        needmboxprotect_(false), intoc_(false), spellcheck_(true),
        resetsfont_(false), display_(true), forcelocalfontswitch_(false),
-       add_to_toc_(false), is_toc_caption_(false), edit_external_(false)
+       add_to_toc_(false), is_toc_caption_(false), edit_external_(false),
+       docbooksection_(false)
 {
        labelfont_.setColor(Color_error);
 }
@@ -111,6 +112,7 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass,
                IL_DOCBOOKTAG,
                IL_DOCBOOKTAGTYPE,
                IL_DOCBOOKATTR,
+               IL_DOCBOOKSECTION,
                IL_DOCBOOKWRAPPERTAG,
                IL_DOCBOOKWRAPPERTAGTYPE,
                IL_DOCBOOKWRAPPERATTR,
@@ -159,6 +161,7 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass,
                { "decoration", IL_DECORATION },
                { "display", IL_DISPLAY },
                { "docbookattr", IL_DOCBOOKATTR },
+               { "docbooksection", IL_DOCBOOKSECTION },
                { "docbooktag", IL_DOCBOOKTAG },
                { "docbooktagtype", IL_DOCBOOKTAGTYPE },
                { "docbookwrapperattr", IL_DOCBOOKWRAPPERATTR },
@@ -513,6 +516,9 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass,
                case IL_DOCBOOKATTR:
                        lex >> docbookattr_;
                        break;
+               case IL_DOCBOOKSECTION:
+                       lex >> docbooksection_;
+                       break;
                case IL_DOCBOOKWRAPPERTAG:
                        lex >> docbookwrappertag_;
                        break;
index 10c7bae4d6e06a71353688bb6886125ccd1a104b..27b6cc119f46972bacb9da5525344b0e5e49d949 100644 (file)
@@ -154,6 +154,8 @@ public:
        ///
        std::string docbookattr() const { return docbookattr_; }
        ///
+       bool docbooksection() const { return docbooksection_; }
+       ///
        std::string docbookwrappertag() const { return docbookwrappertag_; }
        ///
        std::string docbookwrappertagtype() const { return docbookwrappertagtype_; }
@@ -293,6 +295,8 @@ private:
        ///
        std::string docbookattr_;
        ///
+       bool docbooksection_;
+       ///
        std::string docbookwrappertag_;
        ///
        std::string docbookwrappertagtype_;
index 63cae8a58bb69ae9b42ba0bf604cb8a4fa3110e1..9a93207ae0f8c070022320b70d1f2b5a357d7aac 100644 (file)
@@ -718,7 +718,7 @@ void makeCommand(
 
 bool isLayoutSectioning(Layout const & lay)
 {
-       return lay.category() == from_utf8("Sectioning");
+       return lay.docbooksection() || lay.category() == from_utf8("Sectioning");
 }
 
 
@@ -766,6 +766,12 @@ bool hasOnlyNotes(Paragraph const & par)
                // return false.
                if (!par.isInset(i) || par.getInset(i)->lyxCode() != NOTE_CODE)
                        return false;
+
+       // An empty paragraph may still require some output.
+       if (par.layout().docbooksection())
+               return false;
+
+       // There should be really no content here.
        return true;
 }