[LyX/master] Introduce HTMLClass tag, to make it easier to give these.

Richard Kimberly Heck rikiheck at lyx.org
Sun Dec 4 17:41:08 UTC 2022


commit 69a6c41b9417c0f069f4eeae2b0f2e932ee39be4
Author: Richard Kimberly Heck <rikiheck at lyx.org>
Date:   Sun Dec 4 13:27:19 2022 -0500

    Introduce HTMLClass tag, to make it easier to give these.
---
 lib/layouts/aastex.layout      |    2 +-
 lib/layouts/aguplus.inc        |    2 +-
 lib/layouts/apa.layout         |    2 +-
 lib/layouts/apax.inc           |    2 +-
 lib/layouts/bicaption.module   |    2 +-
 lib/layouts/logicalmkup.module |    2 +-
 lib/layouts/scrclass.inc       |    4 ++--
 lib/layouts/stdinsets.inc      |    8 ++++----
 lib/layouts/stdlists.inc       |    1 -
 lib/layouts/stdlyxlist.inc     |    2 +-
 lib/scripts/layout2layout.py   |    7 +++++--
 src/Layout.cpp                 |   35 +++++++++++++++++++++++++++++++----
 src/Layout.h                   |   14 +++++++++++---
 src/TextClass.cpp              |    2 +-
 src/insets/InsetIndex.cpp      |    2 +-
 src/output_xhtml.cpp           |    8 ++++----
 16 files changed, 66 insertions(+), 29 deletions(-)

diff --git a/lib/layouts/aastex.layout b/lib/layouts/aastex.layout
index 52933dc..6551e2f 100644
--- a/lib/layouts/aastex.layout
+++ b/lib/layouts/aastex.layout
@@ -619,7 +619,7 @@ InsetLayout Caption:FigCaption
 			margin: 1ex;
 		}
 	EndHTMLStyle
-	HTMLAttr "class='float-caption float-caption-figcaption'"
+	HTMLClass "float-caption float-caption-figcaption"
 End
 
 
diff --git a/lib/layouts/aguplus.inc b/lib/layouts/aguplus.inc
index 1d7ceb5..f21aa55 100644
--- a/lib/layouts/aguplus.inc
+++ b/lib/layouts/aguplus.inc
@@ -222,7 +222,7 @@ InsetLayout Caption:Table
 			margin: 1ex;
 		}
 	EndHTMLStyle
-	HTMLAttr "class='float-caption float-caption-table'"
+	HTMLClass "float-caption float-caption-table"
 End
 
 
diff --git a/lib/layouts/apa.layout b/lib/layouts/apa.layout
index 5ddd1f8..bed15f6 100644
--- a/lib/layouts/apa.layout
+++ b/lib/layouts/apa.layout
@@ -300,7 +300,7 @@ InsetLayout Caption:Centered
 			margin: 1ex;
 		}
 	EndHTMLStyle
-	HTMLAttr "class='float-caption float-caption-centered'"
+	HTMLClass "float-caption float-caption-centered"
 End
 
 
diff --git a/lib/layouts/apax.inc b/lib/layouts/apax.inc
index 8981e36..321dd08 100644
--- a/lib/layouts/apax.inc
+++ b/lib/layouts/apax.inc
@@ -399,7 +399,7 @@ InsetLayout Caption:Centered
 			margin: 1ex;
 		}
 	EndHTMLStyle
-	HTMLAttr "class='float-caption float-caption-centered'"
+	HTMLClass "float-caption float-caption-centered"
 End
 
 
diff --git a/lib/layouts/bicaption.module b/lib/layouts/bicaption.module
index 12c4f25..fc2c105 100644
--- a/lib/layouts/bicaption.module
+++ b/lib/layouts/bicaption.module
@@ -62,5 +62,5 @@ InsetLayout Caption:Bicaption
 	   margin: 1ex;
 	  }
 	EndHTMLStyle
-	HTMLAttr "class='float-caption float-caption-bicaption'"
+	HTMLClass "float-caption float-caption-bicaption"
 End
diff --git a/lib/layouts/logicalmkup.module b/lib/layouts/logicalmkup.module
index 78d1009..7c56aed 100644
--- a/lib/layouts/logicalmkup.module
+++ b/lib/layouts/logicalmkup.module
@@ -19,7 +19,7 @@ InsetLayout Flex:Noun
 	Requires              noun
 	InToc                 true
 	HTMLTag               span
-	HTMLAttr              class='noun'
+	HTMLClass             noun
 	HTMLStyle
 		span.noun {
 			font-family: sans-serif;
diff --git a/lib/layouts/scrclass.inc b/lib/layouts/scrclass.inc
index c437c0e..5127ab5 100644
--- a/lib/layouts/scrclass.inc
+++ b/lib/layouts/scrclass.inc
@@ -335,7 +335,7 @@ InsetLayout Caption:Above
 			margin: 1ex;
 		}
 	EndHTMLStyle
-	HTMLAttr "class='float-caption float-caption-above'"
+	HTMLClass "float-caption float-caption-above"
 End
 
 
@@ -360,7 +360,7 @@ InsetLayout Caption:Below
 			margin: 1ex;
 		}
 	EndHTMLStyle
-	HTMLAttr "class='float-caption float-caption-below'"
+	HTMLClass "float-caption float-caption-below"
 End
 
 
diff --git a/lib/layouts/stdinsets.inc b/lib/layouts/stdinsets.inc
index b102ceb..57f05af 100644
--- a/lib/layouts/stdinsets.inc
+++ b/lib/layouts/stdinsets.inc
@@ -666,7 +666,7 @@ InsetLayout Info:menu
 	Font
 	  Family              sans
 	EndFont
-	HTMLAttr              "class='info menu'"
+	HTMLClass             "info menu'"
 	HTMLStyle
 		span.menu { font-family: sans-serif; }
 	EndHTMLStyle
@@ -685,7 +685,7 @@ InsetLayout Info:shortcut
 	Font
 	  Family              sans
 	EndFont
-	HTMLAttr              "class='info shortcut'"
+	HTMLCLass             "info shortcut"
 	HTMLStyle
 		span.shortcut { font-family: sans-serif; }
 	EndHTMLStyle
@@ -706,7 +706,7 @@ InsetLayout Info:shortcuts
 	Font
 	  Family              sans
 	EndFont
-	HTMLAttr              "class='info shortcut'"
+	HTMLClass             "info shortcut"
 	HTMLStyle
 		span.shortcuts { font-family: sans-serif; }
 	EndHTMLStyle
@@ -737,7 +737,7 @@ InsetLayout Caption:Standard
 			margin: 1ex;
 		}
 	EndHTMLStyle
-	HTMLAttr "class='float-caption float-caption-standard'"
+	HTMLClass "float-caption float-caption-standard"
 End
 
 
diff --git a/lib/layouts/stdlists.inc b/lib/layouts/stdlists.inc
index 1a50878..d4a7d92 100644
--- a/lib/layouts/stdlists.inc
+++ b/lib/layouts/stdlists.inc
@@ -116,7 +116,6 @@ Style Description
 	  Series              Bold
 	EndFont
 	HTMLTag               dl
-	HTMLAttr              class='description'
 	HTMLItem              dd
 	HTMLLabel             dt
 	HTMLLabelFirst        1
diff --git a/lib/layouts/stdlyxlist.inc b/lib/layouts/stdlyxlist.inc
index 064c357..c3ea8ed 100644
--- a/lib/layouts/stdlyxlist.inc
+++ b/lib/layouts/stdlyxlist.inc
@@ -29,7 +29,7 @@ Style Labeling
 		EndFont
 	EndArgument
 	HTMLTag               ol
-	HTMLAttr              class='lyxlist'
+	HTMLClass             lyxlist
 	HTMLItem              li
 	HTMLLabel             span
 	HTMLLabelAttr         class='lyxlist'
diff --git a/lib/scripts/layout2layout.py b/lib/scripts/layout2layout.py
index 144cb35..4add2e5 100644
--- a/lib/scripts/layout2layout.py
+++ b/lib/scripts/layout2layout.py
@@ -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 = 96
+currentFormat = 97
 
 
 # Incremented to format 4, 6 April 2007, lasgouttes
@@ -325,6 +325,9 @@ currentFormat = 96
 # Incremented to format 96, 4 December 2022 by rikiheck
 # Add HTMLInToc
 
+# Incremented to format 97, 4 December 2022 by rikiheck
+# Add HTMLClass
+
 # Do not forget to document format change in Customization
 # Manual (section "Declaring a new text class").
 
@@ -575,7 +578,7 @@ def convert(lines, end_format):
                 i += 1
             continue
 
-        if 87 <= format <= 96:
+        if 87 <= format <= 97:
             # nothing to do.
             i += 1
             continue
diff --git a/src/Layout.cpp b/src/Layout.cpp
index f782c12..7578d15 100644
--- a/src/Layout.cpp
+++ b/src/Layout.cpp
@@ -94,6 +94,7 @@ enum LayoutTags {
 	LT_ITEMTAG,
 	LT_HTMLTAG,
 	LT_HTMLATTR,
+	LT_HTMLCLASS,
 	LT_HTMLITEM,
 	LT_HTMLITEMATTR,
 	LT_HTMLLABEL,
@@ -271,6 +272,7 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass,
 		{ "forcelocal",     LT_FORCELOCAL },
 		{ "freespacing",    LT_FREE_SPACING },
 		{ "htmlattr",       LT_HTMLATTR },
+		{ "htmlclass",      LT_HTMLCLASS },
 		{ "htmlforcecss",   LT_HTMLFORCECSS },
 		{ "htmlintoc",      LT_HTMLINTOC },
 		{ "htmlitem",       LT_HTMLITEM },
@@ -718,6 +720,10 @@ bool Layout::readIgnoreForcelocal(Lexer & lex, TextClass const & tclass,
 			lex >> htmlattr_;
 			break;
 
+		case LT_HTMLCLASS:
+			lex >> htmlclass_;
+			break;
+
 		case LT_HTMLITEM:
 			lex >> htmlitemtag_;
 			break;
@@ -1668,6 +1674,10 @@ void Layout::write(ostream & os) const
 		os << "\tHTMLTag " << htmltag_ << '\n';
 	if (!htmlattr_.empty())
 		os << "\tHTMLAttr " << htmlattr_ << '\n';
+	if (!htmlclass_.empty())
+		os << "\tHTMLClass " << htmlclass_ << '\n';
+	if (!htmlintoc_)
+		os << "\tHTMLInToc " << htmlintoc_ << '\n';
 	if (!htmlitemtag_.empty())
 		os << "\tHTMLItem " << htmlitemtag_ << '\n';
 	if (!htmlitemattr_.empty())
@@ -1809,14 +1819,31 @@ string const & Layout::htmltag() const
 
 string const & Layout::htmlattr() const
 {
-	// If it's an enumeration, then we recalculate the class each time through
-	// unless it has been given explicitly
-	if (htmlattr_.empty() && labeltype != LABEL_ENUMERATE)
-		htmlattr_ = "class=\"" + defaultCSSClass() + "\"";
 	return htmlattr_;
 }
 
 
+string const & Layout::htmlclass() const
+{
+	// If it's an enumeration, then we recalculate the class each time through
+	// unless it has been given explicitly. So we do nothing here.
+	if (htmlclass_.empty() && labeltype != LABEL_ENUMERATE)
+		htmlclass_ = defaultCSSClass();
+	return htmlclass_;
+}
+
+
+string const & Layout::htmlGetAttrString() const {
+	if (!htmlfullattrs_.empty())
+		return htmlfullattrs_;
+	htmlfullattrs_ = htmlclass();
+	if (!htmlfullattrs_.empty())
+		htmlfullattrs_ = "class='" + htmlfullattrs_ + "'";
+	if (!htmlattr_.empty())
+		htmlfullattrs_ += " " + htmlattr_;
+	return htmlfullattrs_;
+}
+
 string const & Layout::htmlitemtag() const
 {
 	if (htmlitemtag_.empty())
diff --git a/src/Layout.h b/src/Layout.h
index dd64bce..98b702f 100644
--- a/src/Layout.h
+++ b/src/Layout.h
@@ -185,6 +185,10 @@ public:
 	///
 	std::string const & htmlattr() const;
 	///
+	std::string const & htmlclass() const;
+	/// Returns a complete attribute string, including class, etc.
+	std::string const & htmlGetAttrString() const;
+	///
 	std::string const & htmlitemtag() const;
 	///
 	std::string const & htmlitemattr() const;
@@ -491,9 +495,13 @@ private:
 	///
 	/// Defaults to "div".
 	mutable std::string htmltag_;
-	/// Additional attributes for inclusion with the start tag. Defaults
-	/// to: class="layoutname".
-	mutable std::string htmlattr_;
+	/// Additional attributes for inclusion with the start tag.
+	/// Note that the CSS class is handled separately.
+	std::string htmlattr_;
+	/// The CSS class to use. Calculated from the layout name if not given.
+	mutable std::string htmlclass_;
+	/// cached
+	mutable std::string htmlfullattrs_;
 	/// Tag for individual paragraphs in an environment. In lists, this
 	/// would be something like "li". But it also needs to be set for
 	/// quotation, e.g., since the paragraphs in a quote need to be
diff --git a/src/TextClass.cpp b/src/TextClass.cpp
index b387ce1..d00446e 100644
--- a/src/TextClass.cpp
+++ b/src/TextClass.cpp
@@ -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 = 96; // rikiheck: HTMLInToc
+int const LAYOUT_FORMAT = 97; // rikiheck: HTMLClass
 
 
 // Layout format for the current lyx file format. Controls which format is
diff --git a/src/insets/InsetIndex.cpp b/src/insets/InsetIndex.cpp
index f40ba03..a6fcae7 100644
--- a/src/insets/InsetIndex.cpp
+++ b/src/insets/InsetIndex.cpp
@@ -1890,7 +1890,7 @@ docstring InsetPrintIndex::xhtml(XMLStream &, OutputParams const & op) const
 
 	xs << xml::StartTag("div", tocattr);
 	xs << xml::CR();
-	xs << xml::StartTag(lay.htmltag(), lay.htmlattr());
+	xs << xml::StartTag(lay.htmltag(), lay.htmlGetAttrString());
 	xs << translateIfPossible(indexName, op.local_font->language()->lang());
 	xs << xml::EndTag(lay.htmltag());
 	xs << xml::CR();
diff --git a/src/output_xhtml.cpp b/src/output_xhtml.cpp
index 3fb292e..0c4bdb9 100644
--- a/src/output_xhtml.cpp
+++ b/src/output_xhtml.cpp
@@ -159,7 +159,7 @@ namespace {
 inline void openParTag(XMLStream & xs, Layout const & lay,
                        std::string const & parlabel)
 {
-	string attrs = lay.htmlattr();
+	string attrs = lay.htmlGetAttrString();
 	if (!parlabel.empty())
 		attrs += " id='" + parlabel + "'";
 	xs << xml::ParTag(lay.htmltag(), attrs);
@@ -185,7 +185,7 @@ void openParTag(XMLStream & xs, Layout const & lay,
 		openParTag(xs, lay, parlabel);
 		return;
 	}
-	string attrs = lay.htmlattr() + " style='text-align: " + align + ";'";
+	string attrs = lay.htmlGetAttrString() + " style='text-align: " + align + ";'";
 	if (!parlabel.empty())
 		attrs += " id='" + parlabel + "'";
 	xs << xml::ParTag(lay.htmltag(), attrs);
@@ -225,7 +225,7 @@ void openItemTag(XMLStream & xs, Layout const & lay,
 		openItemTag(xs, lay);
 		return;
 	}
-	string attrs = lay.htmlattr() + " style='text-align: " + align + ";'";
+	string attrs = lay.htmlGetAttrString() + " style='text-align: " + align + ";'";
 	xs << xml::StartTag(lay.htmlitemtag(), attrs);
 }
 
@@ -408,7 +408,7 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf,
 	depth_type const origdepth = pbegin->params().depth();
 
 	// open tag for this environment
-	if (bstyle.labeltype == LABEL_ENUMERATE && bstyle.htmlattr().empty()) {
+	if (bstyle.labeltype == LABEL_ENUMERATE && bstyle.htmlclass().empty()) {
 		// In this case, we have to calculate the CSS class ourselves, each time
 		// through
 		// FIXME We assume in these cases that the standard enumeration counter


More information about the lyx-cvs mailing list