[LyX/master] DocBook: add inner tags for layouts.
Thibaut Cuvelier
tcuvelier at lyx.org
Mon Sep 20 23:00:20 UTC 2021
commit ffa1b1dcc7f526247ef3fa2f7a3a49dd8605d53f
Author: Thibaut Cuvelier <tcuvelier at lyx.org>
Date: Tue Sep 21 01:21:13 2021 +0200
DocBook: add inner tags for layouts.
This makes it possible to implement LilyPond as prescribed in https://lilypond.org/doc/v2.22/Documentation/usage/docbook.
---
lib/layouts/lilypond.module | 1 +
src/insets/InsetLayout.cpp | 23 +++++++++++++++++++++++
src/insets/InsetLayout.h | 12 ++++++++++++
src/insets/InsetText.cpp | 6 ++++++
4 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/lib/layouts/lilypond.module b/lib/layouts/lilypond.module
index b4978bd..6c98f14 100644
--- a/lib/layouts/lilypond.module
+++ b/lib/layouts/lilypond.module
@@ -45,6 +45,7 @@ InsetLayout "Flex:LilyPond"
LabelFont
Color foreground
EndFont
+ DocBookTag IGNORE
EndArgument
DocBookNotInPara true
DocBookWrapperTag mediaobject
diff --git a/src/insets/InsetLayout.cpp b/src/insets/InsetLayout.cpp
index b6056cd..769a774 100644
--- a/src/insets/InsetLayout.cpp
+++ b/src/insets/InsetLayout.cpp
@@ -107,6 +107,9 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass,
IL_DOCBOOKITEMWRAPPERTAG,
IL_DOCBOOKITEMWRAPPERTAGTYPE,
IL_DOCBOOKITEMWRAPPERATTR,
+ IL_DOCBOOKINNERTAG,
+ IL_DOCBOOKINNERTAGTYPE,
+ IL_DOCBOOKINNERATTR,
IL_DOCBOOKNOFONTINSIDE,
IL_INTOC,
IL_ISTOCCAPTION,
@@ -156,6 +159,9 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass,
{ "docbookargumentbeforemaintag", IL_DOCBOOKARGUMENTBEFOREMAINTAG },
{ "docbookattr", IL_DOCBOOKATTR },
{ "docbookininfo", IL_DOCBOOKININFO },
+ { "docbookinnerattr", IL_DOCBOOKINNERATTR },
+ { "docbookinnertag", IL_DOCBOOKINNERTAG },
+ { "docbookinnertagtype", IL_DOCBOOKINNERTAGTYPE },
{ "docbookitemattr", IL_DOCBOOKITEMATTR },
{ "docbookitemtag", IL_DOCBOOKITEMTAG },
{ "docbookitemtagtype", IL_DOCBOOKITEMTAGTYPE },
@@ -521,6 +527,15 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass,
case IL_DOCBOOKTAGTYPE:
lex >> docbooktagtype_;
break;
+ case IL_DOCBOOKINNERTAG:
+ lex >> docbookinnertag_;
+ break;
+ case IL_DOCBOOKINNERATTR:
+ lex >> docbookinnerattr_;
+ break;
+ case IL_DOCBOOKINNERTAGTYPE:
+ lex >> docbookinnertagtype_;
+ break;
case IL_DOCBOOKININFO:
lex >> docbookininfo_;
break;
@@ -714,6 +729,14 @@ std::string InsetLayout::docbooktagtype() const
}
+std::string InsetLayout::docbookinnertagtype() const
+{
+ if (docbookinnertagtype_ != "block" && docbookinnertagtype_ != "paragraph" && docbookinnertagtype_ != "inline")
+ docbookinnertagtype_ = "block";
+ return docbookinnertagtype_;
+}
+
+
std::string InsetLayout::docbookwrappertagtype() const
{
if (docbookwrappertagtype_ != "block" && docbookwrappertagtype_ != "paragraph" && docbookwrappertagtype_ != "inline")
diff --git a/src/insets/InsetLayout.h b/src/insets/InsetLayout.h
index b48fde7..da003a9 100644
--- a/src/insets/InsetLayout.h
+++ b/src/insets/InsetLayout.h
@@ -156,6 +156,12 @@ public:
///
std::string docbookattr() const { return docbookattr_; }
///
+ std::string docbookinnertag() const { return docbookinnertag_; }
+ ///
+ std::string docbookinnertagtype() const;
+ ///
+ std::string docbookinnerattr() const { return docbookinnerattr_; }
+ ///
std::string const & docbookininfo() const;
///
bool docbooksection() const { return docbooksection_; }
@@ -319,6 +325,12 @@ private:
///
std::string docbookattr_;
///
+ std::string docbookinnertag_;
+ ///
+ mutable std::string docbookinnertagtype_;
+ ///
+ std::string docbookinnerattr_;
+ ///
mutable std::string docbookininfo_;
///
bool docbooknotinpara_ = false;
diff --git a/src/insets/InsetText.cpp b/src/insets/InsetText.cpp
index 95d55b7..635a83f 100644
--- a/src/insets/InsetText.cpp
+++ b/src/insets/InsetText.cpp
@@ -686,6 +686,9 @@ void InsetText::docbook(XMLStream & xs, OutputParams const & rp, XHTMLOptions op
attrs += from_ascii(" xlink:href=\"") + text_.asString() + from_ascii("\"");
xml::openTag(xs, il.docbooktag(), attrs, il.docbooktagtype());
}
+
+ if (!il.docbookinnertag().empty() && il.docbookinnertag() != "NONE" && il.docbookinnertag() != "IGNORE")
+ xml::openTag(xs, il.docbookinnertag(), il.docbookinnerattr(), il.docbookinnertagtype());
}
// - Think about the arguments before the paragraph.
@@ -733,6 +736,9 @@ void InsetText::docbook(XMLStream & xs, OutputParams const & rp, XHTMLOptions op
if (!il.docbookitemwrappertag().empty() && il.docbookitemwrappertag() != "NONE" && il.docbookitemwrappertag() != "IGNORE")
xml::closeTag(xs, il.docbookitemwrappertag(), il.docbookitemwrappertagtype());
+ if (!il.docbookinnertag().empty() && il.docbookinnertag() != "NONE" && il.docbookinnertag() != "IGNORE")
+ xml::closeTag(xs, il.docbookinnertag(), il.docbookinnertagtype());
+
if (!il.docbooktag().empty() && il.docbooktag() != "NONE" && il.docbooktag() != "IGNORE")
xml::closeTag(xs, il.docbooktag(), il.docbooktagtype());
More information about the lyx-cvs
mailing list