[LyX/master] Preview formatted references in the work area.
Richard Kimberly Heck
rikiheck at lyx.org
Fri Aug 25 00:12:13 UTC 2023
commit 2ad57dcb6b9b54b6d0aa43b4729c3ea480f6d51c
Author: Richard Kimberly Heck <rikiheck at lyx.org>
Date: Sat Jul 29 14:07:28 2023 -0400
Preview formatted references in the work area.
Patch from Daniel Ramoeller <d.lyx at web.de>, fixed up by RKH.
---
lib/lyx2lyx/lyx_2_4.py | 15 ++-
src/Buffer.cpp | 4 +
src/BufferParams.cpp | 4 +
src/BufferParams.h | 2 +
src/frontends/qt/GuiDocument.cpp | 4 +
src/frontends/qt/ui/LaTeXUi.ui | 227 +++++++++++++++++++-------------------
src/insets/InsetRef.cpp | 36 ++++--
src/insets/InsetRef.h | 4 +
8 files changed, 166 insertions(+), 130 deletions(-)
diff --git a/lib/lyx2lyx/lyx_2_4.py b/lib/lyx2lyx/lyx_2_4.py
index ede6e4f..4cc5fe5 100644
--- a/lib/lyx2lyx/lyx_2_4.py
+++ b/lib/lyx2lyx/lyx_2_4.py
@@ -5548,6 +5548,12 @@ def revert_hequotes(document):
document.body[i] = "\\begin_inset Quotes pld"
+def revert_formatted_refs(document):
+ i = find_token(document.header, "\\use_formatted_ref", 0)
+ if i != -1:
+ del document.header[i]
+
+
##
# Conversion hub
#
@@ -5627,11 +5633,14 @@ convert = [
[615, [convert_acknowledgment,convert_ack_theorems]],
[616, [convert_empty_macro]],
[617, [convert_cov_options]],
- [618, []]
+ [618, []],
+ [619, []]
]
-revert = [[617, [revert_hequotes]],
- [616, [revert_expreambles,revert_exarg2,revert_linggloss2,revert_cov_options]],
+
+revert = [[618, [revert_formatted_refs]],
+ [617, [revert_hequotes]],
+ [616, [revert_expreambles,revert_exarg2,revert_linggloss2,revert_cov_options]],
[615, [revert_empty_macro]],
[614, [revert_ack_theorems,revert_acknowledgment]],
[613, [revert_hyper_other]],
diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index e028fa9..732ca7e 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -5342,6 +5342,10 @@ void Buffer::Impl::setLabel(ParIterator & it, UpdateType utype) const
void Buffer::updateBuffer(ParIterator & parit, UpdateType utype, bool const deleted) const
{
+ // if fomatted references are shown in workarea update buffer accordingly
+ if (params().use_formatted_ref)
+ utype = OutputUpdate;
+
pushIncludedBuffer(this);
// LASSERT: Is it safe to continue here, or should we just return?
LASSERT(parit.pit() == 0, /**/);
diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp
index 3dad8c6..4c2b615 100644
--- a/src/BufferParams.cpp
+++ b/src/BufferParams.cpp
@@ -488,6 +488,7 @@ BufferParams::BufferParams()
shell_escape = false;
output_sync = false;
use_refstyle = true;
+ use_formatted_ref = false;
use_minted = false;
use_lineno = false;
@@ -1205,6 +1206,8 @@ string BufferParams::readToken(Lexer & lex, string const & token,
lex >> output_sync_macro;
} else if (token == "\\use_refstyle") {
lex >> use_refstyle;
+ } else if (token == "\\use_formatted_ref") {
+ lex >> use_formatted_ref;
} else if (token == "\\use_minted") {
lex >> use_minted;
} else if (token == "\\use_lineno") {
@@ -1433,6 +1436,7 @@ void BufferParams::writeFile(ostream & os, Buffer const * buf) const
<< "\n\\suppress_date " << convert<string>(suppress_date)
<< "\n\\justification " << convert<string>(justification)
<< "\n\\use_refstyle " << use_refstyle
+ << "\n\\use_formatted_ref " << use_formatted_ref
<< "\n\\use_minted " << use_minted
<< "\n\\use_lineno " << use_lineno
<< '\n';
diff --git a/src/BufferParams.h b/src/BufferParams.h
index 2a2e0f3..34b4447 100644
--- a/src/BufferParams.h
+++ b/src/BufferParams.h
@@ -606,6 +606,8 @@ public:
std::string output_sync_macro;
/// use refstyle? or prettyref?
bool use_refstyle;
+ /// use formatted references in the workarea?
+ bool use_formatted_ref;
/// use minted? or listings?
bool use_minted;
//output line numbering
diff --git a/src/frontends/qt/GuiDocument.cpp b/src/frontends/qt/GuiDocument.cpp
index f9fb19b..4d873bd 100644
--- a/src/frontends/qt/GuiDocument.cpp
+++ b/src/frontends/qt/GuiDocument.cpp
@@ -1626,6 +1626,8 @@ GuiDocument::GuiDocument(GuiView & lv)
this, SLOT(change_adaptor()));
connect(latexModule->refstyleCB, SIGNAL(clicked()),
this, SLOT(change_adaptor()));
+ connect(latexModule->refFormattedCB, SIGNAL(clicked()),
+ this, SLOT(change_adaptor()));
latexModule->optionsLE->setValidator(new NoNewLineValidator(
latexModule->optionsLE));
@@ -3563,6 +3565,7 @@ void GuiDocument::applyView()
// date
bp_.suppress_date = latexModule->suppressDateCB->isChecked();
bp_.use_refstyle = latexModule->refstyleCB->isChecked();
+ bp_.use_formatted_ref = latexModule->refFormattedCB->isChecked();
// biblio
string const engine =
@@ -4067,6 +4070,7 @@ void GuiDocument::paramsToDialog()
// date
latexModule->suppressDateCB->setChecked(bp_.suppress_date);
latexModule->refstyleCB->setChecked(bp_.use_refstyle);
+ latexModule->refFormattedCB->setChecked(bp_.use_formatted_ref);
// biblio
string const cite_engine = bp_.citeEngine();
diff --git a/src/frontends/qt/ui/LaTeXUi.ui b/src/frontends/qt/ui/LaTeXUi.ui
index e6f579a..61d376f 100644
--- a/src/frontends/qt/ui/LaTeXUi.ui
+++ b/src/frontends/qt/ui/LaTeXUi.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>341</width>
+ <width>332</width>
<height>442</height>
</rect>
</property>
@@ -14,6 +14,72 @@
<string/>
</property>
<layout class="QGridLayout" name="gridLayout_2">
+ <item row="2" column="0">
+ <widget class="QLabel" name="psdriverL">
+ <property name="text">
+ <string>&Graphics driver:</string>
+ </property>
+ <property name="buddy">
+ <cstring>psdriverCO</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="QComboBox" name="psdriverCO">
+ <property name="duplicatesEnabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0" colspan="4">
+ <widget class="QCheckBox" name="refstyleCB">
+ <property name="text">
+ <string>&Use refstyle (not prettyref) for cross-references</string>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="1">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>2</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="4" column="0" colspan="4">
+ <widget class="QCheckBox" name="suppressDateCB">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&Suppress default date on front page</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="3">
+ <spacer name="horizontalSpacer_1">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>261</width>
+ <height>22</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
<item row="0" column="0" colspan="4">
<widget class="QGroupBox" name="groupBox">
<property name="title">
@@ -23,12 +89,6 @@
<bool>true</bool>
</property>
<layout class="QGridLayout">
- <property name="margin">
- <number>9</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
<item row="0" column="0">
<widget class="lyx::frontend::CategorizedCombo" name="classCO">
<property name="maxVisibleItems">
@@ -55,81 +115,6 @@
</layout>
</widget>
</item>
- <item row="1" column="0" colspan="4">
- <widget class="QGroupBox" name="optionsGB">
- <property name="title">
- <string>Class Options</string>
- </property>
- <property name="flat">
- <bool>true</bool>
- </property>
- <layout class="QGridLayout" name="gridLayout_1">
- <item row="0" column="0">
- <widget class="QCheckBox" name="defaultOptionsCB">
- <property name="toolTip">
- <string>Enable to use the options that are predefined in the layout file</string>
- </property>
- <property name="text">
- <string>&Predefined:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="defaultOptionsLE">
- <property name="toolTip">
- <string>The options that are predefined in the layout file. Click to the left to select/deselect.</string>
- </property>
- <property name="readOnly">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="optionsL">
- <property name="text">
- <string>Cus&tom:</string>
- </property>
- <property name="buddy">
- <cstring>optionsLE</cstring>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="optionsLE"/>
- </item>
- </layout>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="psdriverL">
- <property name="text">
- <string>&Graphics driver:</string>
- </property>
- <property name="buddy">
- <cstring>psdriverCO</cstring>
- </property>
- </widget>
- </item>
- <item row="2" column="2">
- <widget class="QComboBox" name="psdriverCO">
- <property name="duplicatesEnabled">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="2" column="3">
- <spacer name="horizontalSpacer_1">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>261</width>
- <height>22</height>
- </size>
- </property>
- </spacer>
- </item>
<item row="3" column="0" colspan="4">
<widget class="QGroupBox" name="childDocGB">
<property name="toolTip">
@@ -148,12 +133,6 @@
<bool>true</bool>
</property>
<layout class="QGridLayout">
- <property name="margin">
- <number>9</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
<item row="0" column="0">
<widget class="QLabel" name="childDocLA">
<property name="text">
@@ -181,39 +160,55 @@
</layout>
</widget>
</item>
- <item row="4" column="0" colspan="4">
- <widget class="QCheckBox" name="suppressDateCB">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
+ <item row="1" column="0" colspan="4">
+ <widget class="QGroupBox" name="optionsGB">
+ <property name="title">
+ <string>Class Options</string>
</property>
- <property name="text">
- <string>&Suppress default date on front page</string>
+ <property name="flat">
+ <bool>true</bool>
</property>
+ <layout class="QGridLayout" name="gridLayout_1">
+ <item row="0" column="0">
+ <widget class="QCheckBox" name="defaultOptionsCB">
+ <property name="toolTip">
+ <string>Enable to use the options that are predefined in the layout file</string>
+ </property>
+ <property name="text">
+ <string>&Predefined:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="defaultOptionsLE">
+ <property name="toolTip">
+ <string>The options that are predefined in the layout file. Click to the left to select/deselect.</string>
+ </property>
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="optionsL">
+ <property name="text">
+ <string>Cus&tom:</string>
+ </property>
+ <property name="buddy">
+ <cstring>optionsLE</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="optionsLE"/>
+ </item>
+ </layout>
</widget>
</item>
- <item row="6" column="1">
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>2</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="5" column="0" colspan="4">
- <widget class="QCheckBox" name="refstyleCB">
+ <item row="6" column="0" colspan="4">
+ <widget class="QCheckBox" name="refFormattedCB">
<property name="text">
- <string>&Use refstyle (not prettyref) for cross-references</string>
+ <string>Indicate cross-reference output in the work area</string>
</property>
</widget>
</item>
diff --git a/src/insets/InsetRef.cpp b/src/insets/InsetRef.cpp
index 277f8e5..fcd28d2 100644
--- a/src/insets/InsetRef.cpp
+++ b/src/insets/InsetRef.cpp
@@ -382,11 +382,11 @@ void InsetRef::docbook(XMLStream & xs, OutputParams const &) const
}
-docstring InsetRef::xhtml(XMLStream & xs, OutputParams const & op) const
+docstring InsetRef::displayString(docstring const & ref, string const & cmd,
+ string const & language) const
+
{
- docstring const & ref = getParam("reference");
InsetLabel const * il = buffer().insetLabel(ref, true);
- string const & cmd = params().getCmdName();
docstring display_string;
if (il && !il->counterValue().empty()) {
@@ -397,11 +397,11 @@ docstring InsetRef::xhtml(XMLStream & xs, OutputParams const & op) const
else if (cmd == "vref")
// normally, would be "ref on page #", but we have no pages
display_string = value;
- else if (cmd == "pageref" || cmd == "vpageref")
+ else if (cmd == "pageref" || cmd == "vpageref") {
// normally would be "on page #", but we have no pages.
- display_string = translateIfPossible(from_ascii("elsewhere"),
- op.local_font->language()->lang());
- else if (cmd == "eqref")
+ display_string =
+ translateIfPossible(from_ascii("elsewhere"), language);
+ } else if (cmd == "eqref")
display_string = '(' + value + ')';
else if (cmd == "formatted") {
display_string = il->formattedCounter();
@@ -418,14 +418,21 @@ docstring InsetRef::xhtml(XMLStream & xs, OutputParams const & op) const
// in that section. So this is not trivial.
display_string = il->prettyCounter();
} else
- display_string = ref;
+ display_string = ref;
+ return display_string;
+}
+
+docstring InsetRef::xhtml(XMLStream & xs, OutputParams const & op) const
+ {
+ docstring const & ref = getParam("reference");
+ string const & cmd = params().getCmdName();
// FIXME What we'd really like to do is to be able to output some
// appropriate sort of text here. But to do that, we need to associate
// some sort of counter with the label, and we don't have that yet.
docstring const attr = "href=\"#" + xml::cleanAttr(ref) + '"';
xs << xml::StartTag("a", to_utf8(attr));
- xs << display_string;
+ xs << displayString(ref, cmd, op.local_font->language()->lang());;
xs << xml::EndTag("a");
return docstring();
}
@@ -520,14 +527,21 @@ void InsetRef::updateBuffer(ParIterator const & it, UpdateType, bool const /*del
label += getParam("name");
}
+ bool const use_formatted_ref = buffer().params().use_formatted_ref;
unsigned int const maxLabelChars = 24;
- if (label.size() > maxLabelChars) {
+ // Show label in tooltip when formatted references are shown in the work
+ // area or it is too long
+ if (use_formatted_ref || label.size() > maxLabelChars) {
tooltip_ = label;
support::truncateWithEllipsis(label, maxLabelChars);
} else
tooltip_ = from_ascii("");
- screen_label_ = label;
+ if (use_formatted_ref && cmd != "pageref" && cmd != "vpageref"
+ && cmd != "vref" && cmd != "labelonly")
+ screen_label_ = displayString(ref, cmd);
+ else
+ screen_label_ = label;
broken_ = false;
setBroken(broken_);
}
diff --git a/src/insets/InsetRef.h b/src/insets/InsetRef.h
index 6286652..09d5e18 100644
--- a/src/insets/InsetRef.h
+++ b/src/insets/InsetRef.h
@@ -117,6 +117,10 @@ private:
docstring screenLabel() const override;
//@}
+ ///
+ docstring displayString(docstring const & ref, std::string const & cmd,
+ std::string const & language = std::string()) const;
+
/// \return the label with things that need to be escaped escaped
docstring getEscapedLabel(OutputParams const &) const;
More information about the lyx-cvs
mailing list