commit 50f011e062646fbc7354ee4be938dd376769900d Author: Thibaut Cuvelier <tcuvel...@lyx.org> Date: Sat Sep 12 01:52:58 2020 +0200
DocBook: implement InsetBox titles. --- autotests/export/docbook/A0_Poster_Simple.lyx | 192 +++++++++++++++++++++++++ autotests/export/docbook/A0_Poster_Simple.xml | 16 ++ src/insets/InsetBox.cpp | 17 ++- src/output_docbook.cpp | 66 ++++----- src/output_docbook.h | 24 ++-- 5 files changed, 269 insertions(+), 46 deletions(-) diff --git a/autotests/export/docbook/A0_Poster_Simple.lyx b/autotests/export/docbook/A0_Poster_Simple.lyx new file mode 100644 index 0000000..998f210 --- /dev/null +++ b/autotests/export/docbook/A0_Poster_Simple.lyx @@ -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 index 0000000..3594ffd --- /dev/null +++ b/autotests/export/docbook/A0_Poster_Simple.xml @@ -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 “Multiple Columns” module as documented in <emphasis role='sans'>Help⇒Additional Features</emphasis>.</para> +</listitem> +</itemizedlist> +</sidebar> +</article> \ No newline at end of file diff --git a/src/insets/InsetBox.cpp b/src/insets/InsetBox.cpp index db76f53..d714cf7 100644 --- a/src/insets/InsetBox.cpp +++ b/src/insets/InsetBox.cpp @@ -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()) diff --git a/src/output_docbook.cpp b/src/output_docbook.cpp index ee829e5..c8ddc1a 100644 --- a/src/output_docbook.cpp +++ b/src/output_docbook.cpp @@ -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 ¶graphs, } // 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); diff --git a/src/output_docbook.h b/src/output_docbook.h index 4dcc853..401018d 100644 --- a/src/output_docbook.h +++ b/src/output_docbook.h @@ -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 -- lyx-cvs mailing list lyx-cvs@lists.lyx.org http://lists.lyx.org/mailman/listinfo/lyx-cvs