DocBook: implement InsetBox titles.

This commit is contained in:
Thibaut Cuvelier 2020-09-12 01:52:58 +02:00
parent 3711a38b9c
commit 50f011e062
5 changed files with 269 additions and 46 deletions

View File

@ -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

View File

@ -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>

View 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())

View 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);

View 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