]> git.lyx.org Git - lyx.git/commitdiff
DocBook: implement InsetBox titles.
authorThibaut Cuvelier <tcuvelier@lyx.org>
Fri, 11 Sep 2020 23:52:58 +0000 (01:52 +0200)
committerThibaut Cuvelier <tcuvelier@lyx.org>
Sat, 19 Sep 2020 18:43:41 +0000 (20:43 +0200)
autotests/export/docbook/A0_Poster_Simple.lyx [new file with mode: 0644]
autotests/export/docbook/A0_Poster_Simple.xml [new file with mode: 0644]
src/insets/InsetBox.cpp
src/output_docbook.cpp
src/output_docbook.h

diff --git a/autotests/export/docbook/A0_Poster_Simple.lyx b/autotests/export/docbook/A0_Poster_Simple.lyx
new file mode 100644 (file)
index 0000000..998f210
--- /dev/null
@@ -0,0 +1,192 @@
+#LyX 2.4 created this file. For more info see https://www.lyx.org/
+\lyxformat 598
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass a0poster
+\begin_preamble
+% Adjust padding in boxes
+\setlength\fboxsep{12pt}
+% Added by lyx2lyx
+\setlength{\parskip}{\bigskipamount}
+\setlength{\parindent}{0pt}
+\end_preamble
+\options a0,portrait
+\use_default_options false
+\maintain_unincluded_children no
+\language english
+\language_package default
+\inputencoding utf8
+\fontencoding auto
+\font_roman "palatino" "default"
+\font_sans "default" "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 false
+\papersize default
+\use_geometry true
+\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
+\leftmargin 1cm
+\topmargin 1cm
+\rightmargin 1cm
+\bottommargin 1cm
+\secnumdepth 0
+\tocdepth 0
+\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 empty
+\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 Standard
+\align center
+\begin_inset Box Shadowbox
+position "c"
+hor_pos "c"
+has_inner_box 1
+inner_pos "c"
+use_parbox 1
+use_makebox 0
+width "98col%"
+special "none"
+height "5cm"
+height_special "none"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Plain Layout
+\noindent
+\align center
+
+\series bold
+\noun on
+\begin_inset Flex Most Giant Snippet
+status open
+
+\begin_layout Plain Layout
+\noindent
+
+\series bold
+\noun on
+Poster Heading
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Box Boxed
+position "t"
+hor_pos "c"
+has_inner_box 1
+inner_pos "t"
+use_parbox 0
+use_makebox 0
+width "98col%"
+special "none"
+height "1in"
+height_special "totalheight"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Section
+Summary
+\end_layout
+
+\begin_layout Itemize
+For multiple columns, use the 
+\begin_inset Quotes eld
+\end_inset
+
+Multiple Columns
+\begin_inset Quotes erd
+\end_inset
+
+ module as documented in 
+\family sans
+Help\SpecialChar menuseparator
+Additional Features
+\family default
+.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_body
+\end_document
diff --git a/autotests/export/docbook/A0_Poster_Simple.xml b/autotests/export/docbook/A0_Poster_Simple.xml
new file mode 100644 (file)
index 0000000..3594ffd
--- /dev/null
@@ -0,0 +1,16 @@
+<?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 -->
+<article 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">
+<sidebar role='shadowbox'>
+Poster Heading
+</sidebar>
+<sidebar role='boxed'>
+<title>Summary</title>
+<itemizedlist>
+<listitem>
+<para>For multiple columns, use the &#8220;Multiple Columns&#8221; module as documented in <emphasis role='sans'>Help&#x21D2;Additional Features</emphasis>.</para>
+</listitem>
+</itemizedlist>
+</sidebar>
+</article>
\ No newline at end of file
index db76f537533cc45642c0b6796125555728dae565..d714cf7853f6a9e1d33484231cfbc92bc9bee5fc 100644 (file)
@@ -26,6 +26,7 @@
 #include "LaTeXFeatures.h"
 #include "Lexer.h"
 #include "MetricsInfo.h"
+#include "output_docbook.h"
 #include "output_xhtml.h"
 #include "TexRow.h"
 #include "texstream.h"
@@ -727,7 +728,21 @@ void InsetBox::docbook(XMLStream & xs, OutputParams const & runparams) const
                LYXERR0("Assertion failed: box layout " + getLayout().name() + " missing DocBookWrapperTag.");
        }
 
-       InsetText::docbook(xs, runparams);
+       // If the box starts with a sectioning item, use as box title.
+       auto current_par = paragraphs().begin();
+       if (current_par->layout().category() == from_utf8("Sectioning")) {
+               // Only generate the first paragraph.
+               current_par = makeAny(text(), buffer(), xs, runparams, paragraphs().begin());
+       }
+
+       xs.startDivision(false);
+       // Don't call InsetText::docbook, as this would generate all paragraphs in the inset, not the ones we are
+       // interested in. The best solution would be to call docbookParagraphs with an updated OutputParams object to only
+       // generate paragraphs after the title, but it leads to strange crashes, as if text().paragraphs() then returns
+       // a smaller set of paragrphs.
+       while (current_par != paragraphs().end())
+               current_par = makeAny(text(), buffer(), xs, runparams, current_par);
+       xs.endDivision();
 
        if (!getLayout().docbookwrappertag().empty()) {
                if (!xs.isLastTagCR())
index ee829e5cef6fff7b33d70e01c9d14ef8e5c94042..c8ddc1a0a290bead1dd2d624415b6abcde53a9d1 100644 (file)
@@ -16,6 +16,7 @@
 #include "BufferParams.h"
 #include "Font.h"
 #include "InsetList.h"
+#include "output_docbook.h"
 #include "Paragraph.h"
 #include "ParagraphList.h"
 #include "ParagraphParameters.h"
@@ -347,13 +348,6 @@ void closeParTag(XMLStream & xs, Paragraph const * par, Paragraph const * nextpa
 }
 
 
-ParagraphList::const_iterator makeAny(Text const &,
-                                             Buffer const &,
-                                             XMLStream &,
-                                             OutputParams const &,
-                                             ParagraphList::const_iterator);
-
-
 void makeBibliography(
                Text const & text,
                Buffer const & buf,
@@ -714,35 +708,6 @@ void makeCommand(
 }
 
 
-ParagraphList::const_iterator makeAny(Text const &text,
-                                             Buffer const &buf,
-                                             XMLStream &xs,
-                                             OutputParams const &runparams,
-                                             ParagraphList::const_iterator par)
-{
-       switch (par->layout().latextype) {
-       case LATEX_COMMAND:
-               makeCommand(text, buf, xs, runparams, par);
-               break;
-       case LATEX_ENVIRONMENT:
-               makeEnvironment(text, buf, xs, runparams, par);
-               break;
-       case LATEX_LIST_ENVIRONMENT:
-       case LATEX_ITEM_ENVIRONMENT:
-               // Only case when makeAny() might consume more than one paragraph.
-               return makeListEnvironment(text, buf, xs, runparams, par);
-       case LATEX_PARAGRAPH:
-               makeParagraph(text, buf, xs, runparams, par);
-               break;
-       case LATEX_BIB_ENVIRONMENT:
-               makeBibliography(text, buf, xs, runparams, par);
-               break;
-       }
-       ++par;
-       return par;
-}
-
-
 bool isLayoutSectioning(Layout const & lay)
 {
        return lay.category() == from_utf8("Sectioning");
@@ -862,6 +827,35 @@ DocBookInfoTag getParagraphsWithInfo(ParagraphList const &paragraphs,
 } // end anonymous namespace
 
 
+ParagraphList::const_iterator makeAny(Text const &text,
+                                      Buffer const &buf,
+                                      XMLStream &xs,
+                                      OutputParams const &runparams,
+                                      ParagraphList::const_iterator par)
+{
+       switch (par->layout().latextype) {
+       case LATEX_COMMAND:
+               makeCommand(text, buf, xs, runparams, par);
+               break;
+       case LATEX_ENVIRONMENT:
+               makeEnvironment(text, buf, xs, runparams, par);
+               break;
+       case LATEX_LIST_ENVIRONMENT:
+       case LATEX_ITEM_ENVIRONMENT:
+               // Only case when makeAny() might consume more than one paragraph.
+               return makeListEnvironment(text, buf, xs, runparams, par);
+       case LATEX_PARAGRAPH:
+               makeParagraph(text, buf, xs, runparams, par);
+               break;
+       case LATEX_BIB_ENVIRONMENT:
+               makeBibliography(text, buf, xs, runparams, par);
+               break;
+       }
+       ++par;
+       return par;
+}
+
+
 xml::FontTag docbookStartFontTag(xml::FontTypes type)
 {
        return xml::FontTag(from_utf8(fontToDocBookTag(type)), from_utf8(fontToAttribute(type)), type);
index 4dcc853df28baa340f66e18841c0809fe5cf13ce..401018d6dc769e41d927936eccf6e7d8c988e7fc 100644 (file)
@@ -16,6 +16,7 @@
 #define OUTPUT_DOCBOOK_H
 
 #include "LayoutEnums.h"
+#include "ParagraphList.h"
 
 #include "support/docstream.h"
 #include "support/strfwd.h"
@@ -27,18 +28,23 @@ class Buffer;
 class OutputParams;
 class Text;
 
-///
-std::string const fontToDocBookTag(xml::FontTypes type);
-///
+/// generates an xml::StartTag for the given style
 xml::FontTag docbookStartFontTag(xml::FontTypes type);
-///
+/// generates an xml::EndTag for the given style
 xml::EndFontTag docbookEndFontTag(xml::FontTypes type);
 
-///
-void docbookParagraphs(Text const & text,
-                              Buffer const & buf,
-                       XMLStream & os,
-                              OutputParams const & runparams);
+/// output a series of paragraphs into the XMLStream
+void docbookParagraphs(Text const &,
+                              Buffer const &,
+                       XMLStream &,
+                              OutputParams const &);
+
+/// output a single paragraph into the XMLStream
+ParagraphList::const_iterator makeAny(Text const &,
+                                      Buffer const &,
+                                      XMLStream &,
+                                      OutputParams const &,
+                                      ParagraphList::const_iterator);
 
 } // namespace lyx