mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 19:07:45 +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"
|
||||
"\\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
|
||||
@ -921,9 +902,6 @@ docstring const LaTeXFeatures::getMacros() const
|
||||
// floats
|
||||
getFloatDefinitions(macros);
|
||||
|
||||
if (mustProvide("refstyle"))
|
||||
macros << lyxref_def << '\n';
|
||||
|
||||
// change tracking
|
||||
if (mustProvide("ct-dvipost"))
|
||||
macros << changetracking_dvipost_def;
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "sgml.h"
|
||||
#include "TocBackend.h"
|
||||
|
||||
#include "support/debug.h"
|
||||
#include "support/docstream.h"
|
||||
#include "support/gettext.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();
|
||||
docstring const ref = getParam("reference");
|
||||
if (cmd != "formatted") {
|
||||
// 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.
|
||||
InsetCommandParams p(REF_CODE, cmd);
|
||||
docstring const ref = getParam("reference");
|
||||
p["reference"] = ref;
|
||||
os << p.getCommand(runparams);
|
||||
os << p.getCommand(rp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// so we're doing a formatted reference.
|
||||
// the command may need to be escaped.
|
||||
InsetCommandParams const & p = params();
|
||||
ParamInfo const & pi = p.info();
|
||||
ParamInfo::ParamData const & pd = pi["reference"];
|
||||
docstring const data =
|
||||
p.prepareCommand(runparams, ref, pd.handling());
|
||||
|
||||
if (!buffer().params().use_refstyle) {
|
||||
os << "\\prettyref{" << data << '}';
|
||||
return 0;
|
||||
}
|
||||
|
||||
os << "\\lyxref{" << data << '}';
|
||||
docstring const data = getEscapedLabel(rp);
|
||||
docstring label;
|
||||
docstring const fcmd = getFormattedCmd(data, label);
|
||||
os << fcmd << '{' << label << '}';
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -235,7 +266,13 @@ void InsetRef::validate(LaTeXFeatures & features) const
|
||||
else if (getCmdName() == "formatted") {
|
||||
if (buffer().params().use_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
|
||||
features.require("prettyref");
|
||||
} else if (getCmdName() == "eqref" && !buffer().params().use_refstyle)
|
||||
|
@ -17,7 +17,6 @@
|
||||
|
||||
namespace lyx {
|
||||
|
||||
|
||||
/// The reference inset
|
||||
class InsetRef : public InsetCommand {
|
||||
public:
|
||||
@ -99,6 +98,12 @@ private:
|
||||
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_;
|
||||
///
|
||||
|
Loading…
Reference in New Issue
Block a user