[prev in list] [next in list] [prev in thread] [next in thread]
List: lyx-cvs
Subject: [LyX/master] InsetIndex: when parsing entries for XHTML, don't impose spaces around ! for subentries
From: Thibaut Cuvelier <tcuvelier () lyx ! org>
Date: 2022-10-31 17:40:11
Message-ID: 20221031174011.7C5812805F5 () lyx ! lyx ! org
[Download RAW message or body]
commit 029d8d58392a8649c68eabc05ef5c801d36632b0
Author: Thibaut Cuvelier <tcuvelier@lyx.org>
Date: Mon Apr 25 03:24:01 2022 +0200
InsetIndex: when parsing entries for XHTML, don't impose spaces around ! for \
subentries.
---
src/insets/InsetIndex.cpp | 64 ++++++++++++++++++++++++++++++--------------
1 files changed, 43 insertions(+), 21 deletions(-)
diff --git a/src/insets/InsetIndex.cpp b/src/insets/InsetIndex.cpp
index 9f8471e..afa25f1 100644
--- a/src/insets/InsetIndex.cpp
+++ b/src/insets/InsetIndex.cpp
@@ -1243,7 +1243,7 @@ struct IndexEntry
/// Builds an entry for the index with the given LaTeX index entry `s` and a \
pointer to the index inset `d`. IndexEntry(docstring const & s, DocIterator const & \
d, bool for_output = false)
- : dit_(d)
+ : dit_(d), output_error_{}
{
extractSubentries(s);
parseItem(main_, for_output);
@@ -1292,8 +1292,49 @@ struct IndexEntry
return dit_;
}
+ /// When parsing this entry, some errors may be found; they are reported as a \
single string. + // It is up to the caller to send this string to LYXERR and the \
output file, as needed. + const docstring & output_error() const
+ {
+ return output_error_;
+ }
+
private:
+ void checkForUnsupportedFeatures(docstring const & entry)
+ {
+ if (entry.find(from_utf8("@\\")) != lyx::docstring::npos) {
+ output_error_ = from_utf8("Unsupported feature: an index entry contains an @\\. "
+ "Complete entry: \"") + entry + from_utf8("\"");
+ }
+ }
+
+ /// Splits the LaTeX entry into subentries.
+ void extractSubentries(docstring const & entry)
+ {
+ if (entry.empty())
+ return;
+
+ size_type const loc_first_bang = entry.find(from_ascii("!"));
+ if (loc_first_bang == string::npos) {
+ // No subentry.
+ main_ = entry;
+ } else {
+ main_ = trim(entry.substr(0, loc_first_bang));
+ size_t const loc_after_first_bang = loc_first_bang + 1;
+
+ size_type const loc_second_bang = entry.find(from_ascii("!"), \
loc_after_first_bang); + if (loc_second_bang == string::npos) {
+ // Only a subentry, no subsubentry.
+ sub_ = trim(entry.substr(loc_after_first_bang));
+ } else {
+ // Subsubentry.
+ sub_ = trim(entry.substr(loc_after_first_bang, loc_second_bang - \
loc_after_first_bang)); + subsub_ = trim(entry.substr(loc_second_bang + 1));
+ }
+ }
+ }
+
void parseItem(docstring & s, bool for_output)
{
// this does not yet check for escaped things
@@ -1309,27 +1350,8 @@ private:
s.erase(loc);
}
- void extractSubentries(docstring const & entry)
- {
- if (entry.empty())
- return;
- size_type const loc = entry.find(from_ascii(" ! "));
- if (loc == string::npos)
- main_ = entry;
- else {
- main_ = trim(entry.substr(0, loc));
- size_t const locend = loc + 3;
- size_type const loc2 = entry.find(from_ascii(" ! "), locend);
- if (loc2 == string::npos) {
- sub_ = trim(entry.substr(locend));
- } else {
- sub_ = trim(entry.substr(locend, loc2 - locend));
- subsub_ = trim(entry.substr(loc2 + 3));
- }
- }
- }
-
private:
+ docstring output_error_;
docstring main_;
docstring sub_;
docstring subsub_;
--
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-cvs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic