Introduce a RefPrefix tag for Style, InsetLayout, and Float, that

indicates what prefix to use when constructing formatted references.
Documentation to follow.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@33784 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Richard Heck 2010-03-17 12:23:24 +00:00
parent 317192fa1f
commit 4cd5bcefe9
12 changed files with 83 additions and 39 deletions

View File

@ -16,6 +16,7 @@ Float
ListName "List of Tables"
NeedsFloatPkg false
ListCommand listoftables
RefPrefix tab
End
@ -29,6 +30,7 @@ Float
ListName "List of Figures"
NeedsFloatPkg false
ListCommand listoffigures
RefPrefix fig
End
@ -41,4 +43,5 @@ Float
Style ruled
ListName "List of Algorithms"
NeedsFloatPkg true
RefPrefix alg
End

View File

@ -97,6 +97,7 @@ InsetLayout Foot
Size Small
EndFont
MultiPar true
RefPrefix fn
HTMLLabel \arabic{footnote}
HTMLInnerTag div
HTMLStyle
@ -223,6 +224,7 @@ InsetLayout Listings
KeepEmpty true
FreeSpacing true
ForceLTR true
RefPrefix lst
End
InsetLayout Branch
@ -292,6 +294,7 @@ InsetLayout Wrap
Size Small
EndFont
MultiPar true
RefPrefix wrap
HTMLStyle
div.wrap {
float: right;

View File

@ -26,6 +26,7 @@ Style Part
BottomSep 4
ParSep 0.8
Align Center
RefPrefix part
Alignpossible Center
Font
Series Bold
@ -53,6 +54,7 @@ Style Chapter
ParSep 0.8
Align Block
OptionalArgs 1
RefPrefix cha
Font
Series Bold
Size Huge
@ -78,6 +80,7 @@ Style Section
ParSep 0.7
Align Block
OptionalArgs 1
RefPrefix sec
Font
Series Bold
Size Larger
@ -98,6 +101,7 @@ Style Subsection
Series Bold
Size Large
EndFont
RefPrefix sub
HTMLTag h3
End
@ -113,6 +117,7 @@ Style Subsubsection
Series Bold
Size Normal
EndFont
RefPrefix sub
HTMLTag h4
End
@ -124,6 +129,7 @@ Style Paragraph
LatexName paragraph
TopSep 0.4
BottomSep 0
RefPrefix par
End
@ -134,6 +140,7 @@ Style Subparagraph
LatexName subparagraph
NextNoIndent 0
LeftMargin MM
RefPrefix subp
End
Input numarticle.inc

View File

@ -88,6 +88,9 @@ import os, re, string, sys
# Changed LaTeXBuiltin tag to NeedsFloatPkg and
# added new tag ListCommand.
# Incremented to format 25, 12 March 2010 by rgh
# Added RefPrefix tag for layouts and floats.
# Do not forget to document format change in Customization
# Manual (section "Declaring a new text class").
@ -95,7 +98,7 @@ import os, re, string, sys
# development/tools/updatelayouts.sh script to update all
# layout files to the new format.
currentFormat = 24
currentFormat = 25
def usage(prog_name):
@ -266,6 +269,11 @@ def convert(lines):
while i < len(lines) and not re_EndBabelPreamble.match(lines[i]):
i += 1
continue
# Only new features
if format == 24:
i += 1
continue
if format == 23:
match = re_Float.match(lines[i])

View File

@ -31,12 +31,13 @@ Floating::Floating(string const & type, string const & placement,
string const & ext, string const & within,
string const & style, string const & name,
string const & listName, std::string const & listCmd,
string const & refPrefix,
string const & htmlTag, string const & htmlAttrib,
string const & htmlStyle, bool needsfloat)
: floattype_(type), placement_(placement), ext_(ext), within_(within),
style_(style), name_(name), listname_(listName), listcommand_(listCmd),
needsfloatpkg_(needsfloat), html_tag_(htmlTag), html_attrib_(htmlAttrib),
html_style_(htmlStyle)
refprefix_(refPrefix), needsfloatpkg_(needsfloat), html_tag_(htmlTag),
html_attrib_(htmlAttrib), html_style_(htmlStyle)
{}

View File

@ -32,6 +32,7 @@ public:
std::string const & ext, std::string const & within,
std::string const & style, std::string const & name,
std::string const & listName, std::string const & listCmd,
std::string const & refPrefix,
std::string const & htmlType, std::string const & htmlClass,
std::string const & htmlStyle, bool builtin = false);
///
@ -52,6 +53,8 @@ public:
/// if needsFloatPkg() is false. note that this should not contain
/// the leading "\".
std::string const & listCommand() const { return listcommand_; }
/// prefix to use for formatted references to such floats
std::string const & refPrefix() const { return refprefix_; }
///
bool needsFloatPkg() const { return needsfloatpkg_; }
/// style information, for preamble
@ -80,6 +83,8 @@ private:
///
std::string listcommand_;
///
std::string refprefix_;
///
bool needsfloatpkg_;
///
mutable std::string html_tag_;

View File

@ -105,6 +105,7 @@ enum LayoutTags {
LT_INPREAMBLE,
LT_HTMLTITLE,
LT_SPELLCHECK,
LT_REFPREFIX,
LT_INTITLE // keep this last!
};
@ -212,6 +213,7 @@ bool Layout::read(Lexer & lex, TextClass const & tclass)
{ "parskip", LT_PARSKIP },
{ "passthru", LT_PASS_THRU },
{ "preamble", LT_PREAMBLE },
{ "refprefix", LT_REFPREFIX },
{ "requires", LT_REQUIRES },
{ "rightmargin", LT_RIGHTMARGIN },
{ "spacing", LT_SPACING },
@ -497,6 +499,10 @@ bool Layout::read(Lexer & lex, TextClass const & tclass)
requires_.insert(req.begin(), req.end());
break;
}
case LT_REFPREFIX:
lex >> refprefix;
break;
case LT_HTMLTAG:
lex >> htmltag_;

View File

@ -245,6 +245,8 @@ public:
int optionalargs;
/// Which counter to step
docstring counter;
/// Prefix to use when creating labels
docstring refprefix;
/// Depth of XML command
int commanddepth;

View File

@ -1864,40 +1864,32 @@ docstring Text::getPossibleLabel(Cursor const & cur) const
}
}
if (layout->latextype != LATEX_PARAGRAPH)
name = from_ascii(layout->latexname());
name = layout->refprefix;
// for captions, we just take the caption type
Inset * caption_inset = cur.innerInsetOfType(CAPTION_CODE);
if (caption_inset)
name = from_ascii(static_cast<InsetCaption *>(caption_inset)->type());
// If none of the above worked, we'll see if we're inside various
// types of insets and take our abbreviation from them.
if (name.empty()) {
InsetCode const codes[] = {
FLOAT_CODE,
WRAP_CODE,
FOOT_CODE
};
for (unsigned int i = 0; i < (sizeof codes / sizeof codes[0]); ++i) {
Inset * float_inset = cur.innerInsetOfType(codes[i]);
if (float_inset) {
name = float_inset->name();
break;
}
if (caption_inset) {
string const & ftype = static_cast<InsetCaption *>(caption_inset)->type();
FloatList const & fl = cur.buffer()->params().documentClass().floats();
if (fl.typeExist(ftype)) {
Floating const & flt = fl.getType(ftype);
name = from_utf8(flt.refPrefix());
}
if (name.empty())
name = from_utf8(ftype.substr(0,3));
}
// Create a correct prefix for prettyref
if (name == "theorem")
name = from_ascii("thm");
else if (name == "Foot")
name = from_ascii("fn");
else if (name == "listing")
name = from_ascii("lst");
// If none of the above worked, see if the inset knows.
if (name.empty()) {
InsetLayout const & il = cur.inset().getLayout();
name = il.refprefix();
}
if (!name.empty())
text = name.substr(0, 3) + ':' + text;
// FIXME
// we should allow customization of the separator or else change it
// once we have refstyle
text = name + ':' + text;
return text;
}

View File

@ -66,7 +66,7 @@ private:
};
// Keep the changes documented in the Customization manual.
int const FORMAT = 24;
int const FORMAT = 25;
bool layout2layout(FileName const & filename, FileName const & tempfile)
@ -861,6 +861,7 @@ void TextClass::readFloat(Lexer & lexrc)
FT_HTMLATTR,
FT_HTMLTAG,
FT_LISTCOMMAND,
FT_REFPREFIX,
FT_END
};
@ -876,6 +877,7 @@ void TextClass::readFloat(Lexer & lexrc)
{ "needsfloatpkg", FT_NEEDSFLOAT },
{ "numberwithin", FT_WITHIN },
{ "placement", FT_PLACEMENT },
{ "refprefix", FT_REFPREFIX },
{ "style", FT_STYLE },
{ "type", FT_TYPE }
};
@ -886,10 +888,11 @@ void TextClass::readFloat(Lexer & lexrc)
string htmlattr;
string htmlstyle;
string htmltag;
string listName;
string listCommand;
string listname;
string listcommand;
string name;
string placement;
string refprefix;
string style;
string type;
string within;
@ -915,9 +918,10 @@ void TextClass::readFloat(Lexer & lexrc)
within = fl.within();
style = fl.style();
name = fl.name();
listName = fl.listName();
listname = fl.listName();
needsfloat = fl.needsFloatPkg();
listCommand = fl.listCommand();
listcommand = fl.listCommand();
refprefix = fl.refPrefix();
}
break;
case FT_NAME:
@ -944,11 +948,15 @@ void TextClass::readFloat(Lexer & lexrc)
break;
case FT_LISTCOMMAND:
lexrc.next();
listCommand = lexrc.getString();
listcommand = lexrc.getString();
break;
case FT_REFPREFIX:
lexrc.next();
refprefix = lexrc.getString();
break;
case FT_LISTNAME:
lexrc.next();
listName = lexrc.getString();
listname = lexrc.getString();
break;
case FT_NEEDSFLOAT:
lexrc.next();
@ -974,13 +982,13 @@ void TextClass::readFloat(Lexer & lexrc)
// Here we have a full float if getout == true
if (getout) {
if (!needsfloat && listCommand.empty())
if (!needsfloat && listcommand.empty())
LYXERR0("The layout does not provide a list command " <<
"for the builtin float `" << type << "'. LyX will " <<
"not be able to produce a float list.");
Floating fl(type, placement, ext, within, style, name,
listName, listCommand, htmltag, htmlattr, htmlstyle,
needsfloat);
listname, listcommand, refprefix,
htmltag, htmlattr, htmlstyle, needsfloat);
floatlist_.newFloat(fl);
// each float has its own counter
counters_.newCounter(from_ascii(type), from_ascii(within),

View File

@ -106,6 +106,7 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass)
IL_PREAMBLE,
IL_REQUIRES,
IL_SPELLCHECK,
IL_REFPREFIX,
IL_END
};
@ -143,6 +144,7 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass)
{ "needprotect", IL_NEEDPROTECT },
{ "passthru", IL_PASSTHRU },
{ "preamble", IL_PREAMBLE },
{ "refprefix", IL_REFPREFIX },
{ "requires", IL_REQUIRES },
{ "spellcheck", IL_SPELLCHECK }
};
@ -290,6 +292,9 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass)
case IL_PREAMBLE:
preamble_ = from_utf8(lex.getLongString("EndPreamble"));
break;
case IL_REFPREFIX:
lex >> refprefix_;
break;
case IL_HTMLTAG:
lex >> htmltag_;
break;

View File

@ -84,6 +84,8 @@ public:
docstring preamble() const { return preamble_; }
///
docstring counter() const { return counter_; }
///
docstring refprefix() const { return refprefix_; }
/// The tag enclosing all the material in this inset. Default is "span".
std::string const & htmltag() const;
/// Additional attributes for inclusion with the start tag. Default (if
@ -176,6 +178,8 @@ private:
///
docstring preamble_;
///
docstring refprefix_;
///
mutable std::string htmltag_;
///
mutable std::string htmlattr_;