mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 18:08:10 +00:00
Introduce a "formatted counter" for use with formatted reference during
XHTML output. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@33113 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
f1b8f4d059
commit
c2ac70552c
@ -78,6 +78,9 @@ import os, re, string, sys
|
|||||||
# Incremented to format 21, 12 January 2010 by rgh
|
# Incremented to format 21, 12 January 2010 by rgh
|
||||||
# Added HTMLTocLayout and HTMLTitle tags.
|
# Added HTMLTocLayout and HTMLTitle tags.
|
||||||
|
|
||||||
|
# Incremented to format 22, 20 January 2010 by rgh
|
||||||
|
# Added HTMLFormat tag to Counters.
|
||||||
|
|
||||||
# Do not forget to document format change in Customization
|
# Do not forget to document format change in Customization
|
||||||
# Manual (section "Declaring a new text class").
|
# Manual (section "Declaring a new text class").
|
||||||
|
|
||||||
@ -85,7 +88,7 @@ import os, re, string, sys
|
|||||||
# development/tools/updatelayouts.sh script to update all
|
# development/tools/updatelayouts.sh script to update all
|
||||||
# layout files to the new format.
|
# layout files to the new format.
|
||||||
|
|
||||||
currentFormat = 21
|
currentFormat = 22
|
||||||
|
|
||||||
|
|
||||||
def usage(prog_name):
|
def usage(prog_name):
|
||||||
@ -254,7 +257,7 @@ def convert(lines):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
# This just involved new features, not any changes to old ones
|
# This just involved new features, not any changes to old ones
|
||||||
if format >= 14 and format <= 20:
|
if format >= 14 and format <= 21:
|
||||||
i += 1
|
i += 1
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ def ui_l10n(input_files, output, base):
|
|||||||
def layouts_l10n(input_files, output, base):
|
def layouts_l10n(input_files, output, base):
|
||||||
'''Generate pot file from lib/layouts/*.{layout,inc,module}'''
|
'''Generate pot file from lib/layouts/*.{layout,inc,module}'''
|
||||||
out = open(output, 'w')
|
out = open(output, 'w')
|
||||||
Style = re.compile(r'^Style\s+(.*)')
|
Style = re.compile(r'^Style\s+(.*)', re.IGNORECASE)
|
||||||
# include ???LabelString???, but exclude comment lines
|
# include ???LabelString???, but exclude comment lines
|
||||||
LabelString = re.compile(r'^[^#]*LabelString\S*\s+(.*)')
|
LabelString = re.compile(r'^[^#]*LabelString\S*\s+(.*)')
|
||||||
GuiName = re.compile(r'\s*GuiName\s+(.*)')
|
GuiName = re.compile(r'\s*GuiName\s+(.*)')
|
||||||
@ -91,6 +91,7 @@ def layouts_l10n(input_files, output, base):
|
|||||||
I18nPreamble = re.compile(r'\s*(Lang)|(Babel)Preamble\s*$')
|
I18nPreamble = re.compile(r'\s*(Lang)|(Babel)Preamble\s*$')
|
||||||
EndI18nPreamble = re.compile(r'\s*End(Lang)|(Babel)Preamble\s*$')
|
EndI18nPreamble = re.compile(r'\s*End(Lang)|(Babel)Preamble\s*$')
|
||||||
I18nString = re.compile(r'_\(([^\)]+)\)')
|
I18nString = re.compile(r'_\(([^\)]+)\)')
|
||||||
|
CounterFormat = re.compile(r'\s*PrettyFormat\s+(.*)')
|
||||||
|
|
||||||
for src in input_files:
|
for src in input_files:
|
||||||
readingDescription = False
|
readingDescription = False
|
||||||
@ -173,6 +174,11 @@ def layouts_l10n(input_files, output, base):
|
|||||||
string = res.group(1)
|
string = res.group(1)
|
||||||
writeString(out, src, base, lineno, string)
|
writeString(out, src, base, lineno, string)
|
||||||
continue
|
continue
|
||||||
|
res = CounterFormat.search(line)
|
||||||
|
if res != None:
|
||||||
|
string = res.group(1)
|
||||||
|
writeString(out, src, base, lineno, string)
|
||||||
|
continue
|
||||||
out.close()
|
out.close()
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,6 +52,7 @@ bool Counter::read(Lexer & lex)
|
|||||||
CT_WITHIN = 1,
|
CT_WITHIN = 1,
|
||||||
CT_LABELSTRING,
|
CT_LABELSTRING,
|
||||||
CT_LABELSTRING_APPENDIX,
|
CT_LABELSTRING_APPENDIX,
|
||||||
|
CT_PRETTYFORMAT,
|
||||||
CT_END
|
CT_END
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -59,6 +60,7 @@ bool Counter::read(Lexer & lex)
|
|||||||
{ "end", CT_END },
|
{ "end", CT_END },
|
||||||
{ "labelstring", CT_LABELSTRING },
|
{ "labelstring", CT_LABELSTRING },
|
||||||
{ "labelstringappendix", CT_LABELSTRING_APPENDIX },
|
{ "labelstringappendix", CT_LABELSTRING_APPENDIX },
|
||||||
|
{ "prettyformat", CT_PRETTYFORMAT },
|
||||||
{ "within", CT_WITHIN }
|
{ "within", CT_WITHIN }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -81,6 +83,10 @@ bool Counter::read(Lexer & lex)
|
|||||||
if (master_ == "none")
|
if (master_ == "none")
|
||||||
master_.erase();
|
master_.erase();
|
||||||
break;
|
break;
|
||||||
|
case CT_PRETTYFORMAT:
|
||||||
|
lex.next();
|
||||||
|
prettyformat_ = lex.getDocString();
|
||||||
|
break;
|
||||||
case CT_LABELSTRING:
|
case CT_LABELSTRING:
|
||||||
lex.next();
|
lex.next();
|
||||||
labelstring_ = lex.getDocString();
|
labelstring_ = lex.getDocString();
|
||||||
@ -539,6 +545,22 @@ docstring Counters::counterLabel(docstring const & format,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
docstring Counters::prettyCounter(docstring const & counter,
|
||||||
|
string const & lang) const
|
||||||
|
{
|
||||||
|
CounterList::const_iterator it = counterList_.find(counter);
|
||||||
|
if (it == counterList_.end())
|
||||||
|
return from_ascii("??");
|
||||||
|
Counter const & ctr = it->second;
|
||||||
|
docstring const & format = ctr.prettyFormat();
|
||||||
|
if (format.empty()) {
|
||||||
|
docstring cntrname = translateIfPossible(counter, lang);
|
||||||
|
return cntrname + " " + theCounter(counter, lang);
|
||||||
|
}
|
||||||
|
return counterLabel(format, lang);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
docstring Counters::currentCounter() const
|
docstring Counters::currentCounter() const
|
||||||
{
|
{
|
||||||
LASSERT(!counter_stack_.empty(), /* */);
|
LASSERT(!counter_stack_.empty(), /* */);
|
||||||
|
@ -57,6 +57,10 @@ public:
|
|||||||
* want the version shown in an appendix.
|
* want the version shown in an appendix.
|
||||||
*/
|
*/
|
||||||
docstring const & labelString(bool in_appendix) const;
|
docstring const & labelString(bool in_appendix) const;
|
||||||
|
/// Similar, but used for formatted references in XHTML output.
|
||||||
|
/// E.g., for a section counter it might be "section \thesection"
|
||||||
|
docstring const & prettyFormat() const { return prettyformat_; }
|
||||||
|
|
||||||
/// Returns a map of LaTeX-like strings to format the counter.
|
/// Returns a map of LaTeX-like strings to format the counter.
|
||||||
/** For each language, the string is similar to what one gets
|
/** For each language, the string is similar to what one gets
|
||||||
* in LaTeX when using "\the<counter>". The \c in_appendix
|
* in LaTeX when using "\the<counter>". The \c in_appendix
|
||||||
@ -79,6 +83,8 @@ private:
|
|||||||
docstring labelstring_;
|
docstring labelstring_;
|
||||||
/// The same as labelstring_, but in appendices.
|
/// The same as labelstring_, but in appendices.
|
||||||
docstring labelstringappendix_;
|
docstring labelstringappendix_;
|
||||||
|
/// Similar, but used for formatted references in XHTML output
|
||||||
|
docstring prettyformat_;
|
||||||
/// Cache of the labelstring with \\the<counter> expressions expanded,
|
/// Cache of the labelstring with \\the<counter> expressions expanded,
|
||||||
/// indexed by language
|
/// indexed by language
|
||||||
mutable StringMap flatlabelstring_;
|
mutable StringMap flatlabelstring_;
|
||||||
@ -138,6 +144,10 @@ public:
|
|||||||
*/
|
*/
|
||||||
docstring counterLabel(docstring const & format,
|
docstring counterLabel(docstring const & format,
|
||||||
std::string const & lang) const;
|
std::string const & lang) const;
|
||||||
|
/// returns a formatted version of the counter, using the
|
||||||
|
/// format given by Counter::prettyFormat().
|
||||||
|
docstring prettyCounter(docstring const & cntr,
|
||||||
|
std::string const & lang) const;
|
||||||
/// Are we in appendix?
|
/// Are we in appendix?
|
||||||
bool appendix() const { return appendix_; }
|
bool appendix() const { return appendix_; }
|
||||||
/// Set the state variable indicating whether we are in appendix.
|
/// Set the state variable indicating whether we are in appendix.
|
||||||
|
@ -66,7 +66,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Keep the changes documented in the Customization manual.
|
// Keep the changes documented in the Customization manual.
|
||||||
int const FORMAT = 21;
|
int const FORMAT = 22;
|
||||||
|
|
||||||
|
|
||||||
bool layout2layout(FileName const & filename, FileName const & tempfile)
|
bool layout2layout(FileName const & filename, FileName const & tempfile)
|
||||||
|
@ -125,10 +125,13 @@ void InsetLabel::updateLabels(ParIterator const & par, UpdateType utype)
|
|||||||
buffer().masterBuffer()->params().documentClass().counters();
|
buffer().masterBuffer()->params().documentClass().counters();
|
||||||
active_counter_ = cnts.currentCounter();
|
active_counter_ = cnts.currentCounter();
|
||||||
Language const * lang = par->getParLanguage(buffer().params());
|
Language const * lang = par->getParLanguage(buffer().params());
|
||||||
if (lang && !active_counter_.empty())
|
if (lang && !active_counter_.empty()) {
|
||||||
counter_value_ = cnts.theCounter(active_counter_, lang->code());
|
counter_value_ = cnts.theCounter(active_counter_, lang->code());
|
||||||
else
|
pretty_counter_ = cnts.prettyCounter(active_counter_, lang->code());
|
||||||
counter_value_ = _("(unknown)");
|
} else {
|
||||||
|
counter_value_ = from_ascii("??");
|
||||||
|
pretty_counter_ = from_ascii("??");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,6 +66,8 @@ public:
|
|||||||
docstring const & activeCounter() const { return active_counter_; }
|
docstring const & activeCounter() const { return active_counter_; }
|
||||||
///
|
///
|
||||||
docstring const & counterValue() const { return counter_value_; }
|
docstring const & counterValue() const { return counter_value_; }
|
||||||
|
///
|
||||||
|
docstring const & prettyCounter() const { return pretty_counter_; }
|
||||||
protected:
|
protected:
|
||||||
///
|
///
|
||||||
void doDispatch(Cursor & cur, FuncRequest & cmd);
|
void doDispatch(Cursor & cur, FuncRequest & cmd);
|
||||||
@ -78,6 +80,8 @@ private:
|
|||||||
docstring active_counter_;
|
docstring active_counter_;
|
||||||
///
|
///
|
||||||
docstring counter_value_;
|
docstring counter_value_;
|
||||||
|
///
|
||||||
|
docstring pretty_counter_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -126,20 +126,19 @@ docstring InsetRef::xhtml(XHTMLStream & xs, OutputParams const &) const
|
|||||||
|
|
||||||
if (il && !il->counterValue().empty()) {
|
if (il && !il->counterValue().empty()) {
|
||||||
// Try to construct a label from the InsetLabel we reference.
|
// Try to construct a label from the InsetLabel we reference.
|
||||||
docstring const & cntr = il->activeCounter();
|
|
||||||
docstring const & value = il->counterValue();
|
docstring const & value = il->counterValue();
|
||||||
if (cmd == "ref")
|
if (cmd == "ref")
|
||||||
display_string = value;
|
display_string = value;
|
||||||
else if (cmd == "vref")
|
else if (cmd == "vref")
|
||||||
display_string = bformat(from_ascii("%1$s on page ##"), value);
|
// 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")
|
||||||
display_string = _("on page ##");
|
// normally would be "on page #", but we have no pages
|
||||||
|
display_string = _("elsewhere");
|
||||||
else if (cmd == "eqref")
|
else if (cmd == "eqref")
|
||||||
display_string = bformat(from_ascii("equation (%1$s)"), value);
|
display_string = bformat(from_ascii("equation (%1$s)"), value);
|
||||||
else { // "prettyref"
|
else { // "prettyref"
|
||||||
docstring cntrname = translateIfPossible(cntr);
|
display_string = il->prettyCounter();
|
||||||
// FIXME Use the label string, if we have it. Otherwise, do this.
|
|
||||||
display_string = bformat(from_ascii("%1$s %2$s"), cntrname, value);
|
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
display_string = ref;
|
display_string = ref;
|
||||||
|
Loading…
Reference in New Issue
Block a user