X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Foutput_xhtml.cpp;h=c894f89cef8150d0c88f48b6ae694cf5b8adc66c;hb=e5a91999278253d597ad1e18f322884df4a4c94e;hp=fbd9f4bc1cff713379136140bb0392aa4cd393a8;hpb=8dd436b7dcf27c72b64918861b91c8608c768c92;p=lyx.git diff --git a/src/output_xhtml.cpp b/src/output_xhtml.cpp index fbd9f4bc1c..c894f89cef 100644 --- a/src/output_xhtml.cpp +++ b/src/output_xhtml.cpp @@ -71,7 +71,8 @@ docstring escapeChar(char_type c, XHTMLStream::EscapeSettings e) // escape what needs escaping -docstring htmlize(docstring const & str, XHTMLStream::EscapeSettings e) { +docstring htmlize(docstring const & str, XHTMLStream::EscapeSettings e) +{ odocstringstream d; docstring::const_iterator it = str.begin(); docstring::const_iterator en = str.end(); @@ -109,7 +110,8 @@ string escapeChar(char c, XHTMLStream::EscapeSettings e) // escape what needs escaping -string htmlize(string const & str, XHTMLStream::EscapeSettings e) { +string htmlize(string const & str, XHTMLStream::EscapeSettings e) +{ ostringstream d; string::const_iterator it = str.begin(); string::const_iterator en = str.end(); @@ -125,7 +127,7 @@ string cleanAttr(string const & str) string::const_iterator it = str.begin(); string::const_iterator en = str.end(); for (; it != en; ++it) - newname += isalnum(*it) ? *it : '_'; + newname += isAlnumASCII(*it) ? *it : '_'; return newname; } @@ -283,37 +285,27 @@ void XHTMLStream::startParagraph(bool keep_empty) void XHTMLStream::endParagraph() { - if (!isTagOpen(parsep_tag)) { - // is it pending? - TagStack::const_iterator dit = pending_tags_.begin(); - TagStack::const_iterator const den = pending_tags_.end(); - bool found = false; - for (; dit != den; ++dit) { - if (dit->tag_ == parsep_tag) { - found = true; - break; - } - } - - if (!found) { - writeError("No paragraph separation tag found in endParagraph()."); - return; - } - - // this case is normal. + if (isTagPending(parsep_tag)) { + // this case is normal. it just means we didn't have content, + // so the parsep_tag never got moved onto the tag stack. while (!pending_tags_.empty()) { // clear all pending tags up to and including the parsep tag. // note that we work from the back, because we want to get rid - // of everything that hasnt' been used. + // of everything that hasn't been used. html::StartTag const cur_tag = pending_tags_.back(); string const & tag = cur_tag.tag_; - tag_stack_.pop_back(); + pending_tags_.pop_back(); if (tag == parsep_tag) break; } return; } + if (!isTagOpen(parsep_tag)) { + writeError("No paragraph separation tag found in endParagraph()."); + return; + } + // this case is also normal, if the parsep tag is the last one // on the stack. otherwise, it's an error. while (!tag_stack_.empty()) { @@ -737,7 +729,7 @@ ParagraphList::const_iterator makeParagraphs(Buffer const & buf, // (ii) We didn't open it and html_in_par is true, // but we are in the first par, and there is a next par. ParagraphList::const_iterator nextpar = par; - nextpar++; + ++nextpar; bool const needclose = (opened && (!runparams.html_in_par || nextpar != pend)) || (!opened && runparams.html_in_par && par == pbegin && nextpar != pend); @@ -925,10 +917,10 @@ ParagraphList::const_iterator makeEnvironmentHtml(Buffer const & buf, void makeCommand(Buffer const & buf, - XHTMLStream & xs, - OutputParams const & runparams, - Text const & text, - ParagraphList::const_iterator const & pbegin) + XHTMLStream & xs, + OutputParams const & runparams, + Text const & text, + ParagraphList::const_iterator const & pbegin) { Layout const & style = pbegin->layout(); if (!style.counter.empty()) @@ -938,6 +930,7 @@ void makeCommand(Buffer const & buf, // Label around sectioning number: // FIXME Probably need to account for LABEL_MANUAL + // FIXME Probably also need now to account for labels ABOVE and CENTERED. if (style.labeltype != LABEL_NO_LABEL) { openLabelTag(xs, style); xs << pbegin->params().labelString(); @@ -977,11 +970,15 @@ void xhtmlParagraphs(Text const & text, while (bpit < epit) { ParagraphList::const_iterator par = paragraphs.constIterator(bpit); if (par->params().startOfAppendix()) { - // FIXME: only the counter corresponding to toplevel - // sectioning should be reset - Counters & cnts = buf.masterBuffer()->params().documentClass().counters(); - cnts.reset(); - cnts.appendix(true); + // We want to reset the counter corresponding to toplevel sectioning + Layout const & lay = + buf.masterBuffer()->params().documentClass().getTOCLayout(); + docstring const cnt = lay.counter; + if (!cnt.empty()) { + Counters & cnts = + buf.masterBuffer()->params().documentClass().counters(); + cnts.reset(cnt); + } } Layout const & style = par->layout(); ParagraphList::const_iterator const lastpar = par; @@ -1026,7 +1023,8 @@ void xhtmlParagraphs(Text const & text, } -string alignmentToCSS(LyXAlignment align) { +string alignmentToCSS(LyXAlignment align) +{ switch (align) { case LYX_ALIGN_BLOCK: // we are NOT going to use text-align: justify!!