Default CSS for InsetLayout.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@31771 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Richard Heck 2009-10-27 14:33:01 +00:00
parent 4c004e0485
commit e8631bf7ed
2 changed files with 92 additions and 5 deletions

View File

@ -35,6 +35,7 @@ InsetLayout::InsetLayout() :
labelstring_(from_ascii("UNDEFINED")), decoration_(DEFAULT), labelstring_(from_ascii("UNDEFINED")), decoration_(DEFAULT),
latextype_(NOLATEXTYPE), font_(sane_font), latextype_(NOLATEXTYPE), font_(sane_font),
labelfont_(sane_font), bgcolor_(Color_error), labelfont_(sane_font), bgcolor_(Color_error),
htmlforcecss_ (false), htmlisblock_(true),
multipar_(false), custompars_(true), forceplain_(false), multipar_(false), custompars_(true), forceplain_(false),
passthru_(false), needprotect_(false), freespacing_(false), passthru_(false), needprotect_(false), freespacing_(false),
keepempty_(false), forceltr_(false), intoc_(false) keepempty_(false), forceltr_(false), intoc_(false)
@ -84,6 +85,7 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass)
IL_FREESPACING, IL_FREESPACING,
IL_HTMLTAG, IL_HTMLTAG,
IL_HTMLATTR, IL_HTMLATTR,
IL_HTMLFORCECSS,
IL_HTMLINNERTAG, IL_HTMLINNERTAG,
IL_HTMLINNERATTR, IL_HTMLINNERATTR,
IL_HTMLISBLOCK, IL_HTMLISBLOCK,
@ -119,6 +121,7 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass)
{ "forceplain", IL_FORCEPLAIN }, { "forceplain", IL_FORCEPLAIN },
{ "freespacing", IL_FREESPACING }, { "freespacing", IL_FREESPACING },
{ "htmlattr", IL_HTMLATTR }, { "htmlattr", IL_HTMLATTR },
{ "htmlforcecss", IL_HTMLFORCECSS },
{ "htmlinnerattr", IL_HTMLINNERATTR}, { "htmlinnerattr", IL_HTMLINNERATTR},
{ "htmlinnertag", IL_HTMLINNERTAG}, { "htmlinnertag", IL_HTMLINNERTAG},
{ "htmlisblock", IL_HTMLISBLOCK}, { "htmlisblock", IL_HTMLISBLOCK},
@ -285,6 +288,9 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass)
case IL_HTMLATTR: case IL_HTMLATTR:
lex >> htmlattr_; lex >> htmlattr_;
break; break;
case IL_HTMLFORCECSS:
lex >> htmlforcecss_;
break;
case IL_HTMLINNERTAG: case IL_HTMLINNERTAG:
lex >> htmlinnertag_; lex >> htmlinnertag_;
break; break;
@ -345,4 +351,67 @@ InsetLayout::InsetLyXType translateLyXType(std::string const & str)
return InsetLayout::NOLYXTYPE; return InsetLayout::NOLYXTYPE;
} }
string InsetLayout::defaultCSSClass() const
{
if (!defaultcssclass_.empty())
return defaultcssclass_;
docstring d;
docstring::const_iterator it = name().begin();
docstring::const_iterator en = name().end();
for (; it != en; ++it) {
if (!isalpha(*it))
continue;
if (islower(*it))
d += *it;
else
d += support::lowercase(*it);
}
// are there other characters we need to remove?
defaultcssclass_ = to_utf8(d);
return defaultcssclass_;
}
void InsetLayout::makeDefaultCSS() const
{
#ifdef TEX2LYX
// tex2lyx does not have FontInfo::asCSS()
return;
#else
if (!htmldefaultstyle_.empty())
return;
if (!htmltag_.empty()) {
docstring const mainfontCSS = font_.asCSS();
if (!mainfontCSS.empty())
htmldefaultstyle_ =
from_ascii(htmltag() + "." + defaultCSSClass() + " {\n") +
mainfontCSS + from_ascii("\n}\n");
}
/*
At present, we do not have default tags, etc, for the label.
if (labelfont_ == font_)
return;
docstring const labelfontCSS = labelfont_.asCSS();
if (!labelfontCSS.empty())
htmldefaultstyle_ +=
. from_ascii(htmllabeltag() + "." + defaultCSSLabelClass() + " {\n") +
labelfontCSS + from_ascii("\n}\n");
*/
#endif
}
docstring InsetLayout::htmlstyle() const
{
if (!htmlstyle_.empty() && !htmlforcecss_)
return htmlstyle_;
if (htmldefaultstyle_.empty())
makeDefaultCSS();
docstring retval = htmldefaultstyle_;
if (!htmlstyle_.empty())
retval += '\n' + htmlstyle_;
return retval;
}
} //namespace lyx } //namespace lyx

View File

@ -93,7 +93,7 @@ public:
/// ///
std::string const & htmllabel() const { return htmllabel_; } std::string const & htmllabel() const { return htmllabel_; }
/// ///
docstring htmlstyle() const { return htmlstyle_; } docstring htmlstyle() const;
/// ///
docstring htmlpreamble() const { return htmlpreamble_; } docstring htmlpreamble() const { return htmlpreamble_; }
/// ///
@ -118,7 +118,14 @@ public:
bool forceLTR() const { return forceltr_; }; bool forceLTR() const { return forceltr_; };
/// ///
bool isInToc() const { return intoc_; }; bool isInToc() const { return intoc_; };
///
private: private:
///
void makeDefaultCSS() const;
///
std::string defaultCSSClass() const;
///
std::string defaultCSSLabelClass() const { return defaultCSSClass() + "_label"; }
/// ///
docstring name_; docstring name_;
/** /**
@ -147,20 +154,31 @@ private:
docstring counter_; docstring counter_;
/// ///
docstring preamble_; docstring preamble_;
/// The tag enclosing all the material in this inset. /// The tag enclosing all the material in this inset. Default is none.
std::string htmltag_; std::string htmltag_;
/// Additional attributes for inclusion with the start tag. /// Additional attributes for inclusion with the start tag. Default (if
/// a tag is provided) is: class="name".
std::string htmlattr_; std::string htmlattr_;
/// Tag for individual paragraphs in the inset. /// Tag for individual paragraphs in the inset. Default is none.
std::string htmlinnertag_; std::string htmlinnertag_;
/// Attributes for that tag. /// Attributes for that tag. Default (if a tag is provided) is:
/// class="name_inner".
std::string htmlinnerattr_; std::string htmlinnerattr_;
/// A label for this environment, possibly including a reference /// A label for this environment, possibly including a reference
/// to a counter. E.g., for footnote, it might be: /// to a counter. E.g., for footnote, it might be:
/// <span class='notenum'>\arabic{footnote}</span> /// <span class='notenum'>\arabic{footnote}</span>
/// No default.
/// FIXME Could we get this from the layout?
std::string htmllabel_; std::string htmllabel_;
/// CSS associated with this inset. /// CSS associated with this inset.
docstring htmlstyle_; docstring htmlstyle_;
/// Cache for default CSS info for this inset.
mutable docstring htmldefaultstyle_;
///
mutable std::string defaultcssclass_;
/// Whether to force generation of default CSS even if some is given.
/// False by default.
bool htmlforcecss_;
/// Additional material for the header. /// Additional material for the header.
docstring htmlpreamble_; docstring htmlpreamble_;
/// Whether this inset represents a "block" of material, i.e., a set /// Whether this inset represents a "block" of material, i.e., a set