X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Foutput_xhtml.cpp;h=44d94e3e14b8e7274a8771887a2349d915112b02;hb=4594b1425b484138fcae28996f460312d810b8d5;hp=b4bf21bef2e5015c78f2993aac800809846a7a68;hpb=37a9bbebff2063a43140175f8bcf975abb414dfc;p=lyx.git diff --git a/src/output_xhtml.cpp b/src/output_xhtml.cpp index b4bf21bef2..44d94e3e14 100644 --- a/src/output_xhtml.cpp +++ b/src/output_xhtml.cpp @@ -65,10 +65,15 @@ docstring escapeChar(char_type c) } +// FIXME do something here. +docstring htmlize(docstring const & str) { + return str; +} + // FIXME This needs to be protected somehow. static vector taglist; -bool openTag(odocstream & os, string tag, string attr) +bool openTag(odocstream & os, string const & tag, string const & attr) { if (tag.empty()) return false; @@ -78,15 +83,13 @@ bool openTag(odocstream & os, string tag, string attr) if (tag == "p") if (find(taglist.begin(), taglist.end(), "p") != taglist.end()) return false; - if (!attr.empty()) - attr = ' ' + attr; - os << from_ascii("<" + tag + attr + ">"); + os << from_ascii("<" + tag + (attr.empty() ? "" : " " + attr) + ">"); taglist.push_back(tag); return true; } -bool closeTag(odocstream & os, string tag) +bool closeTag(odocstream & os, string const & tag) { if (tag.empty()) return false; @@ -196,26 +199,50 @@ ParagraphList::const_iterator makeParagraphs(Buffer const & buf, ParagraphList::const_iterator par = pbegin; for (; par != pend; ++par) { Layout const & lay = par->layout(); + if (!lay.counter.empty()) + buf.params().documentClass().counters().step(lay.counter); + // FIXME We should see if there's a label to be output and + // do something with it. if (par != pbegin) os << '\n'; bool const opened = openTag(os, lay); - par->simpleLyXHTMLOnePar(buf, os, runparams, + docstring const deferred = par->simpleLyXHTMLOnePar(buf, os, runparams, outerFont(distance(paragraphs.begin(), par), paragraphs)); - if (opened) + if (opened) { closeTag(os, lay); - os << '\n'; + os << '\n'; + } + if (!deferred.empty()) + os << deferred << '\n'; } return pend; } +ParagraphList::const_iterator makeBibliography(Buffer const & buf, + odocstream & os, + OutputParams const & runparams, + ParagraphList const & paragraphs, + ParagraphList::const_iterator const & pbegin, + ParagraphList::const_iterator const & pend) +{ + os << "

" + << pbegin->layout().labelstring() + << "

\n" + << "
\n"; + makeParagraphs(buf, os, runparams, paragraphs, pbegin, pend); + os << "
"; + return pend; +} + + ParagraphList::const_iterator makeEnvironment(Buffer const & buf, odocstream & os, OutputParams const & runparams, ParagraphList const & paragraphs, ParagraphList::const_iterator const & pbegin, - ParagraphList::const_iterator const & pend) { - + ParagraphList::const_iterator const & pend) +{ ParagraphList::const_iterator par = pbegin; Layout const & bstyle = par->layout(); depth_type const origdepth = pbegin->params().depth(); @@ -229,6 +256,8 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf, while (par != pend) { Layout const & style = par->layout(); + if (!style.counter.empty()) + buf.params().documentClass().counters().step(style.counter); ParagraphList::const_iterator send; // this will be positive, if we want to skip the initial word // (if it's been taken for the label). @@ -236,54 +265,63 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf, switch (style.latextype) { case LATEX_ENVIRONMENT: - // case LATEX_LIST_ENVIRONMENT?? + case LATEX_LIST_ENVIRONMENT: case LATEX_ITEM_ENVIRONMENT: { // There are two possiblities in this case. // One is that we are still in the environment in which we // started---which we will be if the depth is the same. if (par->params().depth() == origdepth) { + Layout const & cstyle = par->layout(); if (lastlay != 0) { closeItemTag(os, *lastlay); lastlay = 0; } - Layout const & cstyle = par->layout(); + bool const labelfirst = cstyle.htmllabelfirst(); + bool item_tag_opened = false; + if (!labelfirst) + item_tag_opened = openItemTag(os, cstyle); if (cstyle.labeltype == LABEL_MANUAL) { bool const label_tag_opened = openLabelTag(os, cstyle); sep = par->firstWordLyXHTML(os, runparams); if (label_tag_opened) closeLabelTag(os, cstyle); os << '\n'; - } else if (style.latextype == LATEX_ENVIRONMENT + } + // FIXME Why did I put that first condition?? + else if (style.latextype == LATEX_ENVIRONMENT && style.labeltype != LABEL_NO_LABEL) { bool const label_tag_opened = openLabelTag(os, cstyle); - if (!style.counter.empty()) - buf.params().documentClass().counters().step(cstyle.counter); os << pbegin->expandLabel(style, buf.params(), false); if (label_tag_opened) closeLabelTag(os, cstyle); os << '\n'; } - - bool const item_tag_opened = openItemTag(os, cstyle); + if (labelfirst) + item_tag_opened = openItemTag(os, cstyle); + else + os << ""; par->simpleLyXHTMLOnePar(buf, os, runparams, outerFont(distance(paragraphs.begin(), par), paragraphs), sep); + if (!labelfirst) + os << ""; ++par; - // We may not want to close the tag yet, in particular, - if (item_tag_opened - // if we're not at the end... - && par != pend + if (item_tag_opened) { + // We may not want to close the tag yet, in particular, + // if we're not at the end... + if (par != pend // and are doing items... - && style.latextype == LATEX_ITEM_ENVIRONMENT - // and if the depth has changed... - && par->params().depth() != origdepth) { - // then we'll save this layout for later, and close it when - // we get another item. + && style.latextype == LATEX_ITEM_ENVIRONMENT + // and if the depth has changed... + && par->params().depth() != origdepth) { + // then we'll save this layout for later, and close it when + // we get another item. lastlay = &cstyle; - } else { - closeItemTag(os, cstyle); // FIXME + } else { + closeItemTag(os, cstyle); + } os << '\n'; } - } + } // The other possibility is that the depth has increased, in which // case we need to recurse. else { @@ -296,9 +334,15 @@ ParagraphList::const_iterator makeEnvironment(Buffer const & buf, send = searchParagraph(par, pend); par = makeParagraphs(buf, os, runparams, paragraphs, par, send); break; - // FIXME + // Shouldn't happen case LATEX_BIB_ENVIRONMENT: + send = par; + ++send; + par = makeParagraphs(buf, os, runparams, paragraphs, par, send); + break; + // Shouldn't happen case LATEX_COMMAND: + ++par; break; } } @@ -319,14 +363,15 @@ void makeCommand(Buffer const & buf, ParagraphList::const_iterator const & pbegin) { Layout const & style = pbegin->layout(); + if (!style.counter.empty()) + buf.params().documentClass().counters().step(style.counter); bool const main_tag_opened = openTag(os, style); // Label around sectioning number: + // FIXME Probably need to account for LABEL_MANUAL if (style.labeltype != LABEL_NO_LABEL) { bool const label_tag_opened = openLabelTag(os, style); - if (!style.counter.empty()) - buf.params().documentClass().counters().step(style.counter); os << pbegin->expandLabel(style, buf.params(), false); if (label_tag_opened) closeLabelTag(os, style); @@ -338,6 +383,7 @@ void makeCommand(Buffer const & buf, outerFont(distance(paragraphs.begin(), pbegin), paragraphs)); if (main_tag_opened) closeTag(os, style); + os << '\n'; } } // end anonymous namespace @@ -365,19 +411,23 @@ void xhtmlParagraphs(ParagraphList const & paragraphs, break; } case LATEX_ENVIRONMENT: + case LATEX_LIST_ENVIRONMENT: case LATEX_ITEM_ENVIRONMENT: { send = searchEnvironment(par, pend); - par = makeEnvironment(buf, os, runparams, paragraphs, par,send); + par = makeEnvironment(buf, os, runparams, paragraphs, par, send); + break; + } + case LATEX_BIB_ENVIRONMENT: { + send = searchEnvironment(par, pend); + par = makeBibliography(buf, os, runparams, paragraphs, par, send); break; } case LATEX_PARAGRAPH: send = searchParagraph(par, pend); - par = makeParagraphs(buf, os, runparams, paragraphs, par,send); - break; - default: + par = makeParagraphs(buf, os, runparams, paragraphs, par, send); break; } - os << '\n'; + // FIXME?? // makeEnvironment may process more than one paragraphs and bypass pend if (distance(lastpar, par) >= distance(lastpar, pend)) break;