hi, towards bug http://bugzilla.lyx.org/show_bug.cgi?id=5340
to sum up: hyperref manual incorrectly states, that \backref is boolean while in fact its string with false/section/pages/slides args. this way our tex output \backref=true won't work. we need to support these plus "pages" arg collides/compensates \pagebackref, so lets get rid of it. mustfix for 1.6.0 pavel
diff --git a/lib/lyx2lyx/lyx_1_6.py b/lib/lyx2lyx/lyx_1_6.py index 3b98896..1bcb395 100644 --- a/lib/lyx2lyx/lyx_1_6.py +++ b/lib/lyx2lyx/lyx_1_6.py @@ -2971,6 +2971,19 @@ def convert_default_options(document): document.header.insert(i, '\\use_default_options false') +def revert_backref_options(document): + ' Remove pageref additional options ' + i = find_token(document.header, "\\pdf_pageref", 0) + if i != -1: + del document.header[i] + + +def convert_backref_options(document): + ' We have lost pagebackref option in favor of pageref ' + i = find_token(document.header, "\\pdf_pagebackref", 0) + if i != -1: + del document.header[i] + ## # Conversion hub # @@ -3042,10 +3055,12 @@ convert = [[277, [fix_wrong_tables]], [340, [add_plain_layout]], [341, []], [342, []], - [343, [convert_default_options]] + [343, [convert_default_options]], + [344, [convert_backref_options]] ] -revert = [[342, [revert_default_options]], +revert = [[343, [revert_backref_options]], + [342, [revert_default_options]], [341, [revert_mongolian]], [340, [revert_tabulators, revert_tabsize]], [339, []], diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 2e60e5c..51f4ebf 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -115,7 +115,9 @@ namespace os = support::os; namespace { -int const LYX_FORMAT = 343; +// Do not remove the comment below, so we get merge conflict in +// in independent branches. +int const LYX_FORMAT = 344; // ps: backref typedef map<string, bool> DepClean; typedef map<docstring, pair<InsetLabel const *, Buffer::References> > RefCache; diff --git a/src/PDFOptions.cpp b/src/PDFOptions.cpp index 644f26e..f26688d 100644 --- a/src/PDFOptions.cpp +++ b/src/PDFOptions.cpp @@ -47,7 +47,6 @@ bool PDFOptions::empty() const && pdfborder == x.pdfborder && colorlinks == x.colorlinks && backref == x.backref - && pagebackref == x.pagebackref && pdfusetitle == x.pdfusetitle; } @@ -76,8 +75,7 @@ void PDFOptions::writeFile(ostream & os) const os << "\\pdf_breaklinks " << convert<string>(breaklinks) << '\n'; os << "\\pdf_pdfborder " << convert<string>(pdfborder) << '\n'; os << "\\pdf_colorlinks " << convert<string>(colorlinks) << '\n'; - os << "\\pdf_backref " << convert<string>(backref) << '\n'; - os << "\\pdf_pagebackref " << convert<string>(pagebackref) << '\n'; + os << "\\pdf_backref " << backref << '\n'; os << "\\pdf_pdfusetitle " << convert<string>(pdfusetitle) << '\n'; if (!pagemode.empty()) @@ -116,8 +114,9 @@ void PDFOptions::writeLaTeX(odocstream & os, bool hyperref_already_provided) con opt += (pdfborder ?'0':'1'); opt += "},"; - opt += "backref=" + convert<string>(backref) + ','; - opt += "pagebackref=" + convert<string>(pagebackref) + ','; + string tmp = backref == "true" ? "" : "=" + backref; + opt += "backref" + tmp + ','; + opt += "\n "; opt += "colorlinks=" + convert<string>(colorlinks) + ','; if (!pagemode.empty()) @@ -194,8 +193,6 @@ string PDFOptions::readToken(Lexer &lex, string const & token) lex >> colorlinks; } else if (token == "\\pdf_backref") { lex >> backref; - } else if (token == "\\pdf_pagebackref") { - lex >> pagebackref; } else if (token == "\\pdf_pdfusetitle") { lex >> pdfusetitle; } else if (token == "\\pdf_pagemode") { @@ -231,8 +228,7 @@ void PDFOptions::clear() breaklinks = false; pdfborder = false; colorlinks = false; - backref = false; - pagebackref = false; + backref = "false"; pagemode.clear(); quoted_options.clear(); pdfusetitle = true; //in contrast with hyperref diff --git a/src/PDFOptions.h b/src/PDFOptions.h index 2fa661a..e1d9c96 100644 --- a/src/PDFOptions.h +++ b/src/PDFOptions.h @@ -96,18 +96,14 @@ public: bool colorlinks; /** * Adds backlink text to the end of each item in the bibliography, - * as a list of section numbers. + * as a list of section/slide/page numbers. * This can only work properly if there is a blank line after each * \bibitem. - * backref boolean false - */ - bool backref; - /** - * Adds backlink text to the end of each item in the bibliography, - * as a list of page numbers. - * pagebackref boolean false + * backref string empty, "false", "section", "slide", "pages" + * + * Internally we use true/false/section/slide/pages. See also bug 5340. */ - bool pagebackref; + std::string backref; /** * Determines how the file is opening in Acrobat; * the possibilities are None, UseThumbs (show thumbnails), UseOutlines diff --git a/src/frontends/qt4/GuiDocument.cpp b/src/frontends/qt4/GuiDocument.cpp index dcc118d..db6b531 100644 --- a/src/frontends/qt4/GuiDocument.cpp +++ b/src/frontends/qt4/GuiDocument.cpp @@ -134,6 +134,18 @@ char const * tex_fonts_monospaced_gui[] = }; +char const * backref_opts[] = +{ + "false", "true", "section", "slide", "pages", "" +}; + + +char const * backref_opts_gui[] = +{ + N_("Off"), N_("On"), N_("Section"), N_("Slide"), N_("Pages"), "" +}; + + vector<pair<string, QString> > pagestyles; @@ -989,16 +1001,17 @@ GuiDocument::GuiDocument(GuiView & lv) this, SLOT(change_adaptor())); connect(pdfSupportModule->colorlinksCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); - connect(pdfSupportModule->backrefCB, SIGNAL(toggled(bool)), + connect(pdfSupportModule->backrefCO, SIGNAL(activated(int)), this, SLOT(change_adaptor())); connect(pdfSupportModule->pdfusetitleCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); - connect(pdfSupportModule->pagebackrefCB, SIGNAL(toggled(bool)), - this, SLOT(change_adaptor())); connect(pdfSupportModule->fullscreenCB, SIGNAL(toggled(bool)), this, SLOT(change_adaptor())); connect(pdfSupportModule->optionsLE, SIGNAL(textChanged(QString)), this, SLOT(change_adaptor())); + + for (int i = 0; backref_opts[i][0]; ++i) + pdfSupportModule->backrefCO->addItem(qt_(backref_opts_gui[i])); // float floatModule = new FloatPlacement; @@ -1802,8 +1815,8 @@ void GuiDocument::apply(BufferParams & params) pdf.pdfborder = pdfSupportModule->pdfborderCB->isChecked(); pdf.pdfusetitle = pdfSupportModule->pdfusetitleCB->isChecked(); pdf.colorlinks = pdfSupportModule->colorlinksCB->isChecked(); - pdf.backref = pdfSupportModule->backrefCB->isChecked(); - pdf.pagebackref = pdfSupportModule->pagebackrefCB->isChecked(); + pdf.backref = + backref_opts[pdfSupportModule->backrefCO->currentIndex()]; if (pdfSupportModule->fullscreenCB->isChecked()) pdf.pagemode = pdf.pagemode_fullscreen; else @@ -2135,8 +2148,11 @@ void GuiDocument::paramsToDialog(BufferParams const & params) pdfSupportModule->pdfborderCB->setChecked(pdf.pdfborder); pdfSupportModule->pdfusetitleCB->setChecked(pdf.pdfusetitle); pdfSupportModule->colorlinksCB->setChecked(pdf.colorlinks); - pdfSupportModule->backrefCB->setChecked(pdf.backref); - pdfSupportModule->pagebackrefCB->setChecked(pdf.pagebackref); + + n = findToken(backref_opts, pdf.backref); + if (n >= 0) + pdfSupportModule->backrefCO->setCurrentIndex(n); + pdfSupportModule->fullscreenCB->setChecked (pdf.pagemode == pdf.pagemode_fullscreen); diff --git a/src/frontends/qt4/ui/PDFSupportUi.ui b/src/frontends/qt4/ui/PDFSupportUi.ui index f8e75aa..40567bf 100644 --- a/src/frontends/qt4/ui/PDFSupportUi.ui +++ b/src/frontends/qt4/ui/PDFSupportUi.ui @@ -5,8 +5,8 @@ <rect> <x>0</x> <y>0</y> - <width>420</width> - <height>411</height> + <width>437</width> + <height>400</height> </rect> </property> <property name="windowTitle" > @@ -64,7 +64,7 @@ <property name="orientation" > <enum>Qt::Vertical</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>40</height> @@ -77,7 +77,7 @@ <property name="orientation" > <enum>Qt::Horizontal</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>181</width> <height>41</height> @@ -87,12 +87,12 @@ </item> <item row="1" column="0" > <layout class="QVBoxLayout" > - <property name="margin" > - <number>0</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="margin" > + <number>0</number> + </property> <item> <widget class="QCheckBox" name="pdfusetitleCB" > <property name="toolTip" > @@ -200,7 +200,7 @@ <property name="orientation" > <enum>Qt::Vertical</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>40</height> @@ -210,12 +210,12 @@ </item> <item row="0" column="0" > <layout class="QVBoxLayout" > - <property name="margin" > - <number>0</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="margin" > + <number>0</number> + </property> <item> <widget class="QCheckBox" name="breaklinksCB" > <property name="toolTip" > @@ -244,24 +244,20 @@ </widget> </item> <item> - <widget class="QCheckBox" name="backrefCB" > + <widget class="QLabel" name="label" > <property name="toolTip" > - <string>Adds "backlink" text to the end of each item in the bibliography</string> + <string>Bibliographical backreferences</string> </property> <property name="text" > - <string>B&ibliographical backreferences</string> + <string>B&ackreferences:</string> + </property> + <property name="buddy" > + <cstring>backrefCO</cstring> </property> </widget> </item> <item> - <widget class="QCheckBox" name="pagebackrefCB" > - <property name="toolTip" > - <string>Adds "backlink" text to the end of each item in the bibliography</string> - </property> - <property name="text" > - <string>Backreference by pa&ge number</string> - </property> - </widget> + <widget class="QComboBox" name="backrefCO" /> </item> </layout> </item> @@ -270,7 +266,7 @@ <property name="orientation" > <enum>Qt::Horizontal</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>151</width> <height>20</height> @@ -321,12 +317,12 @@ </item> <item row="2" column="0" > <layout class="QHBoxLayout" > - <property name="margin" > - <number>0</number> - </property> <property name="spacing" > <number>6</number> </property> + <property name="margin" > + <number>0</number> + </property> <item> <widget class="QLabel" name="bookmarksopenlevelLA" > <property name="text" > @@ -358,7 +354,7 @@ <property name="orientation" > <enum>Qt::Horizontal</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>40</width> <height>20</height> @@ -374,7 +370,7 @@ <property name="orientation" > <enum>Qt::Vertical</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>20</width> <height>40</height> @@ -410,9 +406,7 @@ <item row="0" column="0" > <widget class="QLineEdit" name="optionsLE" > <property name="sizePolicy" > - <sizepolicy> - <hsizetype>7</hsizetype> - <vsizetype>0</vsizetype> + <sizepolicy vsizetype="Fixed" hsizetype="Expanding" > <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -433,7 +427,7 @@ <property name="orientation" > <enum>Qt::Vertical</enum> </property> - <property name="sizeHint" > + <property name="sizeHint" stdset="0" > <size> <width>402</width> <height>16</height>