void InsetTOC::makeTOCEntry(XHTMLStream & xs, Paragraph const & par, OutputParams const & op) const { string const attr = "href='#" + par.magicLabel() + "' class='tocentry'"; xs << html::StartTag("a", attr); // First the label, if there is one docstring const & label = par.params().labelString(); if (!label.empty()) xs << label << " "; // Now the content of the TOC entry, taken from the paragraph itself OutputParams ours = op; ours.for_toc = true; Font const dummy; par.simpleLyXHTMLOnePar(buffer(), xs, ours, dummy); xs << html::EndTag("a") << html::CR(); }
void params2string(Paragraph const & par, string & data) { // A local copy ParagraphParameters params = par.params(); // This needs to be done separately params.labelWidthString(par.getLabelWidthString()); ostringstream os; params.write(os); Layout const & layout = par.layout(); // Is alignment possible os << "\\alignpossible " << layout.alignpossible << '\n'; /// set default alignment os << "\\aligndefault " << layout.align << '\n'; /// paragraph is always in inset. This is redundant. os << "\\ininset " << 1 << '\n'; data = os.str(); }
void writePlaintextParagraph(Buffer const & buf, Paragraph const & par, odocstream & os, OutputParams const & runparams, bool & ref_printed) { int ltype = 0; depth_type ltype_depth = 0; depth_type depth = par.params().depth(); // First write the layout string const tmp = to_utf8(par.layout().name()); if (compare_ascii_no_case(tmp, "itemize") == 0) { ltype = 1; ltype_depth = depth + 1; } else if (compare_ascii_no_case(tmp, "enumerate") == 0) { ltype = 2; ltype_depth = depth + 1; } else if (contains(ascii_lowercase(tmp), "ection")) { ltype = 3; ltype_depth = depth + 1; } else if (contains(ascii_lowercase(tmp), "aragraph")) { ltype = 4; ltype_depth = depth + 1; } else if (compare_ascii_no_case(tmp, "description") == 0) { ltype = 5; ltype_depth = depth + 1; } else if (compare_ascii_no_case(tmp, "abstract") == 0) { ltype = 6; ltype_depth = 0; } else if (compare_ascii_no_case(tmp, "bibliography") == 0) { ltype = 7; ltype_depth = 0; } else { ltype = 0; ltype_depth = 0; } /* the labelwidthstring used in lists */ /* noindent ? */ /* what about the alignment */ // runparams.linelen == 0 is special and means we don't have paragraph breaks string::size_type currlinelen = 0; os << docstring(depth * 2, ' '); currlinelen += depth * 2; //-- // we should probably change to the paragraph language in the // support/gettext.here (if possible) so that strings are output in // the correct language! (20012712 Jug) //-- switch (ltype) { case 0: // Standard case 4: // (Sub)Paragraph case 5: // Description break; case 6: // Abstract if (runparams.linelen > 0) { os << buf.B_("Abstract") << "\n\n"; currlinelen = 0; } else { docstring const abst = buf.B_("Abstract: "); os << abst; currlinelen += abst.length(); } break; case 7: // Bibliography if (!ref_printed) { if (runparams.linelen > 0) { os << buf.B_("References") << "\n\n"; currlinelen = 0; } else { docstring const refs = buf.B_("References: "); os << refs; currlinelen += refs.length(); } ref_printed = true; } break; default: { docstring const label = par.params().labelString(); if (!label.empty()) { os << label << ' '; currlinelen += label.length() + 1; } break; } } if (currlinelen == 0) { pair<int, docstring> p = addDepth(depth, ltype_depth); os << p.second; currlinelen += p.first; } docstring word; for (pos_type i = 0; i < par.size(); ++i) { // deleted characters don't make much sense in plain text output if (par.isDeleted(i)) continue; char_type c = par.getUChar(buf.params(), i); if (par.isInset(i) || c == ' ') { if (runparams.linelen > 0 && currlinelen + word.length() > runparams.linelen) { os << '\n'; pair<int, docstring> p = addDepth(depth, ltype_depth); os << p.second; currlinelen = p.first; } os << word; currlinelen += word.length(); word.erase(); } if (par.isInset(i)) { OutputParams rp = runparams; rp.depth = par.params().depth(); int len = par.getInset(i)->plaintext(os, rp); if (len >= Inset::PLAINTEXT_NEWLINE) currlinelen = len - Inset::PLAINTEXT_NEWLINE; else currlinelen += len; continue; } switch (c) { case ' ': os << ' '; currlinelen++; break; case '\0': LYXERR(Debug::INFO, "writePlaintextFile: NUL char in structure."); break; default: word += c; break; } } // currlinelen may be greater than runparams.linelen! // => check whether word is empty and do nothing in this case if (!word.empty()) { if (runparams.linelen > 0 && currlinelen + word.length() > runparams.linelen) { os << '\n'; pair<int, docstring> p = addDepth(depth, ltype_depth); os << p.second; currlinelen = p.first; } os << word; } }