[LyX/master] Add HTMLClass for InsetLayout as well. Layout format change.

Richard Kimberly Heck rikiheck at lyx.org
Tue Dec 6 03:47:13 UTC 2022


commit c50f0b125ddc34b4547fb82e344a90899183fe55
Author: Richard Kimberly Heck <rikiheck at lyx.org>
Date:   Mon Dec 5 23:42:50 2022 -0500

    Add HTMLClass for InsetLayout as well. Layout format change.
---
 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/scripts/layout2layout.py   |    5 ++++-
 src/Layout.cpp                 |    7 +------
 src/Layout.h                   |    2 +-
 src/TextClass.cpp              |    2 +-
 src/insets/InsetCaption.cpp    |    2 +-
 src/insets/InsetLayout.cpp     |   25 +++++++++++++++++++++----
 src/insets/InsetLayout.h       |   10 +++++++++-
 src/insets/InsetText.cpp       |    2 +-
 src/insets/InsetWrap.cpp       |    2 +-
 17 files changed, 52 insertions(+), 29 deletions(-)

diff --git a/lib/layouts/aastex.layout b/lib/layouts/aastex.layout
index 58b8b14..2e34010 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 7453b2a..4535d0c 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 57af913..ad4f5f8 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 9a51d37..669da40 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 d3b258a..ad38b11 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 88ba523..b872b51 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 b1c1c9f..fc7dea8 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 cac502d..33a56a4 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/scripts/layout2layout.py b/lib/scripts/layout2layout.py
index 4add2e5..d923d65 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 = 97
+currentFormat = 98
 
 
 # Incremented to format 4, 6 April 2007, lasgouttes
@@ -328,6 +328,9 @@ currentFormat = 97
 # Incremented to format 97, 4 December 2022 by rikiheck
 # Add HTMLClass
 
+# Incremented to format 98, 5 December 2022 by rikiheck
+# Add HTMLClass for InsetLayout
+
 # Do not forget to document format change in Customization
 # Manual (section "Declaring a new text class").
 
diff --git a/src/Layout.cpp b/src/Layout.cpp
index 88d5539..515226d 100644
--- a/src/Layout.cpp
+++ b/src/Layout.cpp
@@ -1817,12 +1817,6 @@ string const & Layout::htmltag() const
 }
 
 
-string const & Layout::htmlattr() const
-{
-	return htmlattr_;
-}
-
-
 string const & Layout::htmlclass() const
 {
 	// If it's an enumeration or itemize list, then we recalculate the class each
@@ -1844,6 +1838,7 @@ string const & Layout::htmlGetAttrString() const {
 	return htmlfullattrs_;
 }
 
+
 string const & Layout::htmlitemtag() const
 {
 	if (htmlitemtag_.empty())
diff --git a/src/Layout.h b/src/Layout.h
index 98b702f..e837339 100644
--- a/src/Layout.h
+++ b/src/Layout.h
@@ -183,7 +183,7 @@ public:
 	///
 	std::string const & htmltag() const;
 	///
-	std::string const & htmlattr() const;
+	std::string const & htmlattr() const { return htmlattr_; }
 	///
 	std::string const & htmlclass() const;
 	/// Returns a complete attribute string, including class, etc.
diff --git a/src/TextClass.cpp b/src/TextClass.cpp
index d00446e..8973eb0 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 = 97; // rikiheck: HTMLClass
+int const LAYOUT_FORMAT = 98; // rikiheck: HTMLClass for InsetLayout
 
 
 // Layout format for the current lyx file format. Controls which format is
diff --git a/src/insets/InsetCaption.cpp b/src/insets/InsetCaption.cpp
index ad25ee3..e1ace0d 100644
--- a/src/insets/InsetCaption.cpp
+++ b/src/insets/InsetCaption.cpp
@@ -311,7 +311,7 @@ docstring InsetCaption::xhtml(XMLStream & xs, OutputParams const & rp) const
 		return docstring();
 	InsetLayout const & il = getLayout();
 	string const & tag = il.htmltag();
-	string attr = il.htmlattr();
+	string attr = il.htmlGetAttrString();
 	if (!type_.empty()) {
 		string const our_class = "float-caption-" + type_;
 		size_t const loc = attr.find("class='");
diff --git a/src/insets/InsetLayout.cpp b/src/insets/InsetLayout.cpp
index 64258a8..0d1322a 100644
--- a/src/insets/InsetLayout.cpp
+++ b/src/insets/InsetLayout.cpp
@@ -83,6 +83,7 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass,
 		IL_FREESPACING,
 		IL_HTMLTAG,
 		IL_HTMLATTR,
+		IL_HTMLCLASS,
 		IL_HTMLFORCECSS,
 		IL_HTMLINNERTAG,
 		IL_HTMLINNERATTR,
@@ -188,6 +189,7 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass,
 		{ "forceplain", IL_FORCEPLAIN },
 		{ "freespacing", IL_FREESPACING },
 		{ "htmlattr", IL_HTMLATTR },
+		{ "htmlclass", IL_HTMLCLASS },
 		{ "htmlforcecss", IL_HTMLFORCECSS },
 		{ "htmlinnerattr", IL_HTMLINNERATTR},
 		{ "htmlinnertag", IL_HTMLINNERTAG},
@@ -499,6 +501,9 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass,
 		case IL_HTMLATTR:
 			lex >> htmlattr_;
 			break;
+		case IL_HTMLCLASS:
+			lex >> htmlclass_;
+			break;
 		case IL_HTMLFORCECSS:
 			lex >> htmlforcecss_;
 			break;
@@ -653,11 +658,23 @@ string const & InsetLayout::htmltag() const
 }
 
 
-string const & InsetLayout::htmlattr() const
+string const & InsetLayout::htmlclass() const
 {
-	if (htmlattr_.empty())
-		htmlattr_ = "class=\"" + defaultCSSClass() + "\"";
-	return htmlattr_;
+	if (htmlclass_.empty())
+		htmlclass_ = defaultCSSClass();
+	return htmlclass_;
+}
+
+
+std::string const & InsetLayout::htmlGetAttrString() const {
+	if (!htmlfullattrs_.empty())
+		return htmlfullattrs_;
+	htmlfullattrs_ = htmlclass();
+	if (!htmlfullattrs_.empty())
+		htmlfullattrs_ = "class='" + htmlfullattrs_ + "'";
+	if (!htmlattr_.empty())
+		htmlfullattrs_ += " " + htmlattr_;
+	return htmlfullattrs_;
 }
 
 
diff --git a/src/insets/InsetLayout.h b/src/insets/InsetLayout.h
index ed3c9a9..48d5303 100644
--- a/src/insets/InsetLayout.h
+++ b/src/insets/InsetLayout.h
@@ -121,7 +121,11 @@ public:
 	std::string const & htmltag() const;
 	/// Additional attributes for inclusion with the start tag. Default (if
 	/// a tag is provided) is: class="name".
-	std::string const & htmlattr() const;
+	std::string const & htmlattr() const { return htmlattr_; }
+	///
+	std::string const & htmlclass() const;
+	///
+	std::string const & htmlGetAttrString() const;
 	/// Tag for individual paragraphs in the inset. Default is none.
 	std::string const & htmlinnertag() const { return htmlinnertag_; }
 	/// Attributes for that tag. Default (if a tag is provided) is:
@@ -302,6 +306,10 @@ private:
 	///
 	mutable std::string htmlattr_;
 	///
+	mutable std::string htmlclass_;
+	/// cache
+	mutable std::string htmlfullattrs_;
+	///
 	std::string htmlinnertag_;
 	///
 	mutable std::string htmlinnerattr_;
diff --git a/src/insets/InsetText.cpp b/src/insets/InsetText.cpp
index 4cecec8..99324aa 100644
--- a/src/insets/InsetText.cpp
+++ b/src/insets/InsetText.cpp
@@ -868,7 +868,7 @@ docstring InsetText::insetAsXHTML(XMLStream & xs, OutputParams const & rp,
 
 	InsetLayout const & il = getLayout();
 	if (opts & WriteOuterTag)
-		xs << xml::StartTag(il.htmltag(), il.htmlattr());
+		xs << xml::StartTag(il.htmltag(), il.htmlGetAttrString());
 
 	if ((opts & WriteLabel) && !il.counter().empty()) {
 		BufferParams const & bp = buffer().masterBuffer()->params();
diff --git a/src/insets/InsetWrap.cpp b/src/insets/InsetWrap.cpp
index 8987405..69e5b25 100644
--- a/src/insets/InsetWrap.cpp
+++ b/src/insets/InsetWrap.cpp
@@ -219,7 +219,7 @@ docstring InsetWrap::xhtml(XMLStream & xs, OutputParams const & rp) const
 	string const width = len.empty() ? "50%" : len;
 	InsetLayout const & il = getLayout();
 	string const & tag = il.htmltag();
-	string const attr = il.htmlattr() + " style='width:" + width + ";'";
+	string const attr = il.htmlGetAttrString() + " style='width:" + width + ";'";
 	xs << xml::StartTag(tag, attr);
 	docstring const deferred =
 		InsetText::insetAsXHTML(xs, rp, InsetText::WriteInnerTag);


More information about the lyx-cvs mailing list