]> git.lyx.org Git - features.git/commitdiff
Preview formatted references in the work area.
authorRichard Kimberly Heck <rikiheck@lyx.org>
Sat, 29 Jul 2023 18:07:28 +0000 (14:07 -0400)
committerRichard Kimberly Heck <rikiheck@lyx.org>
Fri, 25 Aug 2023 01:24:31 +0000 (21:24 -0400)
Patch from Daniel Ramoeller <d.lyx@web.de>, fixed up by RKH.

lib/lyx2lyx/lyx_2_4.py
src/Buffer.cpp
src/BufferParams.cpp
src/BufferParams.h
src/frontends/qt/GuiDocument.cpp
src/frontends/qt/ui/LaTeXUi.ui
src/insets/InsetRef.cpp
src/insets/InsetRef.h

index ede6e4fae6091e05951909f0e1131ba2921faf18..4cc5fe5bdf5eb11da088ac66d83e75f036a3e386 100644 (file)
@@ -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]],
index e028fa958dd1d5cfd91257cdda006e4150c9429f..732ca7e323f109503f546ec17d0d18fbe24cae59 100644 (file)
@@ -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, /**/);
index 3dad8c69133f06f937f4a567d665b7ec35c3bf14..4c2b615776a7e6d5004822e0a093fb5c309e7e2e 100644 (file)
@@ -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';
index 2a2e0f3087122a2fcb7d156f7e0ad4f1c61d48b0..34b44474aff774cdc9742062038f2724b099c4a4 100644 (file)
@@ -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
index f9fb19b331f6e2c5c15b5d0b1fe58a03108f635a..4d873bda698d1e5ad944388c6c94a0d4afb9ebce 100644 (file)
@@ -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();
index e6f579a7e11395d6cfa5c6e3d86b6f3457a209d4..61d376fa1dcfd334cd65bb88bc6cd0e38c90e8b1 100644 (file)
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>341</width>
+    <width>332</width>
     <height>442</height>
    </rect>
   </property>
    <string/>
   </property>
   <layout class="QGridLayout" name="gridLayout_2">
+   <item row="2" column="0">
+    <widget class="QLabel" name="psdriverL">
+     <property name="text">
+      <string>&amp;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>&amp;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>&amp;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">
       <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">
      </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>&amp;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&amp;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>&amp;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">
       <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">
      </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>&amp;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>&amp;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&amp;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>&amp;Use refstyle (not prettyref) for cross-references</string>
+      <string>Indicate cross-reference output in the work area</string>
      </property>
     </widget>
    </item>
index 277f8e51552da450c53c83644a8d59d6c992deee..fcd28d234659c430a9c54676cf0d0dd420505d51 100644 (file)
@@ -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_);
 }
index 6286652f4de97f5357d15a473827a3aade1a8ff5..09d5e18e344aef9ce502b8ba309099971a1a2005 100644 (file)
@@ -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;