mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-29 13:04:58 +00:00
Change the way we output formatted references under refstyle to avoid
some problems with the previous \\lyxref macro. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@35882 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
f6b76a4f50
commit
1fbddcb149
@ -256,25 +256,6 @@ static docstring const ogonek_def = from_ascii(
|
|||||||
" \\mathchar\"0\\hexnumber@\\symtipasymb0C}{#2}}\n"
|
" \\mathchar\"0\\hexnumber@\\symtipasymb0C}{#2}}\n"
|
||||||
"\\newcommand{\\ogonek}[1]{\\mathpalette\\doogonek{#1}}\n");
|
"\\newcommand{\\ogonek}[1]{\\mathpalette\\doogonek{#1}}\n");
|
||||||
|
|
||||||
static docstring const lyxref_def = from_ascii(
|
|
||||||
"\\makeatletter\n"
|
|
||||||
"\\def\\lyxref#1{\\@lyxref#1:@@@@@:}\n"
|
|
||||||
"\\def\\@lyxref#1:#2:{%\n"
|
|
||||||
"\\ifthenelse{\\equal{#2}{@@@@@}}%\n"
|
|
||||||
" {\\ref{#1}}%\n"
|
|
||||||
" {\\@@lyxref#1:#2:}%\n"
|
|
||||||
"}\n"
|
|
||||||
"\\def\\@@lyxref#1:#2:@@@@@:{%\n"
|
|
||||||
" \\RS@ifundefined{#1ref}%\n"
|
|
||||||
" {\\ref{#1:#2}}%\n"
|
|
||||||
" {\\RS@nameuse{#1ref}{#2}}%\n"
|
|
||||||
"}\n"
|
|
||||||
"\\RS@ifundefined{\thmref}\n"
|
|
||||||
" {\\def\\RSthmtxt{theorem~}\\newref{thm}{name = \\RSthmtxt}}\n"
|
|
||||||
" {}\n"
|
|
||||||
"\\makeatother\n"
|
|
||||||
);
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// LaTeXFeatures
|
// LaTeXFeatures
|
||||||
@ -921,9 +902,6 @@ docstring const LaTeXFeatures::getMacros() const
|
|||||||
// floats
|
// floats
|
||||||
getFloatDefinitions(macros);
|
getFloatDefinitions(macros);
|
||||||
|
|
||||||
if (mustProvide("refstyle"))
|
|
||||||
macros << lyxref_def << '\n';
|
|
||||||
|
|
||||||
// change tracking
|
// change tracking
|
||||||
if (mustProvide("ct-dvipost"))
|
if (mustProvide("ct-dvipost"))
|
||||||
macros << changetracking_dvipost_def;
|
macros << changetracking_dvipost_def;
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "sgml.h"
|
#include "sgml.h"
|
||||||
#include "TocBackend.h"
|
#include "TocBackend.h"
|
||||||
|
|
||||||
|
#include "support/debug.h"
|
||||||
#include "support/docstream.h"
|
#include "support/docstream.h"
|
||||||
#include "support/gettext.h"
|
#include "support/gettext.h"
|
||||||
#include "support/lstrings.h"
|
#include "support/lstrings.h"
|
||||||
@ -69,33 +70,63 @@ ParamInfo const & InsetRef::findInfo(string const & /* cmdName */)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int InsetRef::latex(odocstream & os, OutputParams const & runparams) const
|
// for refstyle, given pfx:suffix, we want to return "\\pfxcmd"
|
||||||
|
// and put "suffix" into label
|
||||||
|
docstring InsetRef::getFormattedCmd(
|
||||||
|
docstring const & ref, docstring & label) const
|
||||||
|
{
|
||||||
|
static docstring const defcmd = from_ascii("\\ref");
|
||||||
|
if (!buffer().params().use_refstyle)
|
||||||
|
return from_ascii("\\prettyref");
|
||||||
|
|
||||||
|
docstring prefix;
|
||||||
|
label = split(ref, prefix, ':');
|
||||||
|
if (prefix.empty()) {
|
||||||
|
LYXERR0("Label `" << label << "' contains no prefix.");
|
||||||
|
return defcmd;
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure the prefix is legal for a latex command
|
||||||
|
int const len = prefix.size();
|
||||||
|
for (int i = 0; i < len; i++) {
|
||||||
|
if (!isalpha(prefix[i])) {
|
||||||
|
LYXERR0("Prefix `" << prefix << "' contains non-letters.");
|
||||||
|
// restore the label
|
||||||
|
label = ref;
|
||||||
|
return defcmd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return from_ascii("\\") + prefix + from_ascii("ref");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
docstring InsetRef::getEscapedLabel(OutputParams const & rp) const
|
||||||
|
{
|
||||||
|
InsetCommandParams const & p = params();
|
||||||
|
ParamInfo const & pi = p.info();
|
||||||
|
ParamInfo::ParamData const & pd = pi["reference"];
|
||||||
|
return p.prepareCommand(rp, getParam("reference"), pd.handling());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int InsetRef::latex(odocstream & os, OutputParams const & rp) const
|
||||||
{
|
{
|
||||||
string const cmd = getCmdName();
|
string const cmd = getCmdName();
|
||||||
docstring const ref = getParam("reference");
|
|
||||||
if (cmd != "formatted") {
|
if (cmd != "formatted") {
|
||||||
// We don't want to output p_["name"], since that is only used
|
// We don't want to output p_["name"], since that is only used
|
||||||
// in docbook. So we construct new params, without it, and use that.
|
// in docbook. So we construct new params, without it, and use that.
|
||||||
InsetCommandParams p(REF_CODE, cmd);
|
InsetCommandParams p(REF_CODE, cmd);
|
||||||
|
docstring const ref = getParam("reference");
|
||||||
p["reference"] = ref;
|
p["reference"] = ref;
|
||||||
os << p.getCommand(runparams);
|
os << p.getCommand(rp);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// so we're doing a formatted reference.
|
// so we're doing a formatted reference.
|
||||||
// the command may need to be escaped.
|
docstring const data = getEscapedLabel(rp);
|
||||||
InsetCommandParams const & p = params();
|
docstring label;
|
||||||
ParamInfo const & pi = p.info();
|
docstring const fcmd = getFormattedCmd(data, label);
|
||||||
ParamInfo::ParamData const & pd = pi["reference"];
|
os << fcmd << '{' << label << '}';
|
||||||
docstring const data =
|
|
||||||
p.prepareCommand(runparams, ref, pd.handling());
|
|
||||||
|
|
||||||
if (!buffer().params().use_refstyle) {
|
|
||||||
os << "\\prettyref{" << data << '}';
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
os << "\\lyxref{" << data << '}';
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,7 +266,13 @@ void InsetRef::validate(LaTeXFeatures & features) const
|
|||||||
else if (getCmdName() == "formatted") {
|
else if (getCmdName() == "formatted") {
|
||||||
if (buffer().params().use_refstyle) {
|
if (buffer().params().use_refstyle) {
|
||||||
features.require("refstyle");
|
features.require("refstyle");
|
||||||
features.require("ifthen");
|
docstring const data = getEscapedLabel(features.runparams());
|
||||||
|
docstring label;
|
||||||
|
string const fcmd = to_utf8(getFormattedCmd(data, label));
|
||||||
|
if (fcmd != "\\ref") {
|
||||||
|
string lcmd = "\\providecommand" + fcmd + "[1]{\\ref{#1}}";
|
||||||
|
features.addPreambleSnippet(lcmd);
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
features.require("prettyref");
|
features.require("prettyref");
|
||||||
} else if (getCmdName() == "eqref" && !buffer().params().use_refstyle)
|
} else if (getCmdName() == "eqref" && !buffer().params().use_refstyle)
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
|
|
||||||
namespace lyx {
|
namespace lyx {
|
||||||
|
|
||||||
|
|
||||||
/// The reference inset
|
/// The reference inset
|
||||||
class InsetRef : public InsetCommand {
|
class InsetRef : public InsetCommand {
|
||||||
public:
|
public:
|
||||||
@ -99,6 +98,12 @@ private:
|
|||||||
Inset * clone() const { return new InsetRef(*this); }
|
Inset * clone() const { return new InsetRef(*this); }
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
/// \return the label with things that need to be escaped escaped
|
||||||
|
docstring getEscapedLabel(OutputParams const &) const;
|
||||||
|
/// \return the command for a formatted reference to ref
|
||||||
|
/// \param label gets what follows the prefix, for refstyle
|
||||||
|
docstring getFormattedCmd(docstring const & ref, docstring & label) const;
|
||||||
|
|
||||||
///
|
///
|
||||||
mutable docstring screen_label_;
|
mutable docstring screen_label_;
|
||||||
///
|
///
|
||||||
|
Loading…
Reference in New Issue
Block a user