2 * \file output_linuxdoc.C
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Lars Gullik Bjønnes
9 * Full author contact details are available in file CREDITS.
14 #include "output_linuxdoc.h"
17 #include "bufferparams.h"
18 #include "paragraph.h"
19 #include "paragraph_funcs.h"
20 #include "ParagraphList_fwd.h"
21 #include "ParagraphParameters.h"
34 void linuxdocParagraphs(Buffer const & buf,
35 ParagraphList const & paragraphs,
37 OutputParams const & runparams)
40 Paragraph::depth_type depth = 0; // paragraph depth
42 vector<string> environment_stack(5);
44 ParagraphList::const_iterator pit = paragraphs.begin();
45 ParagraphList::const_iterator pend = paragraphs.end();
46 for (; pit != pend; ++pit) {
47 LyXLayout_ptr const & style = pit->layout();
48 // treat <toc> as a special case for compatibility with old code
49 if (pit->isInset(0)) {
50 InsetBase const * inset = pit->getInset(0);
51 if (inset->lyxCode() == InsetOld::TOC_CODE) {
52 string const temp = "toc";
53 sgml::openTag(os, depth, false, temp);
58 // environment tag closing
59 for (; depth > pit->params().depth(); --depth) {
60 sgml::closeTag(os, depth, false, environment_stack[depth]);
61 environment_stack[depth].erase();
64 // write opening SGML tags
65 switch (style->latextype) {
67 if (depth == pit->params().depth()
68 && !environment_stack[depth].empty()) {
69 sgml::closeTag(os, depth, false, environment_stack[depth]);
70 environment_stack[depth].erase();
76 sgml::openTag(os, depth, false, style->latexname());
81 //error(ErrorItem(_("Error:"), _("Wrong depth for LatexType Command.\n"), pit->id(), 0, pit->size()));
84 if (!environment_stack[depth].empty()) {
85 sgml::closeTag(os, depth, false, environment_stack[depth]);
89 environment_stack[depth].erase();
90 sgml::openTag(os, depth, false, style->latexname());
93 case LATEX_ENVIRONMENT:
94 case LATEX_ITEM_ENVIRONMENT:
95 case LATEX_BIB_ENVIRONMENT: {
96 string const & latexname = style->latexname();
98 if (depth == pit->params().depth()
99 && environment_stack[depth] != latexname) {
100 sgml::closeTag(os, depth, false,
101 environment_stack[depth]);
102 environment_stack[depth].erase();
104 if (depth < pit->params().depth()) {
105 depth = pit->params().depth();
106 environment_stack[depth].erase();
108 if (environment_stack[depth] != latexname) {
110 sgml::openTag(os, depth, false, "p");
112 sgml::openTag(os, depth, false, latexname);
114 if (environment_stack.size() == depth + 1)
115 environment_stack.push_back("!-- --");
116 environment_stack[depth] = latexname;
119 if (style->latexparam() == "CDATA")
122 if (style->latextype == LATEX_ENVIRONMENT) break;
124 if (style->labeltype == LABEL_MANUAL)
129 sgml::openTag(os, depth + 1, false, item_name);
134 sgml::openTag(os, depth, false, style->latexname());
138 pit->simpleLinuxDocOnePar(buf, os,
139 outerFont(pit - paragraphs.begin(), paragraphs),
143 // write closing SGML tags
144 switch (style->latextype) {
147 case LATEX_ENVIRONMENT:
148 case LATEX_ITEM_ENVIRONMENT:
149 case LATEX_BIB_ENVIRONMENT:
150 if (style->latexparam() == "CDATA")
154 sgml::closeTag(os, depth, false, style->latexname());
160 for (int i = depth; i >= 0; --i)
161 sgml::closeTag(os, depth, false, environment_stack[i]);