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 "ParagraphParameters.h"
33 void linuxdocParagraphs(Buffer const & buf,
34 ParagraphList const & paragraphs,
36 OutputParams const & runparams)
39 Paragraph::depth_type depth = 0; // paragraph depth
41 vector<string> environment_stack(5);
43 ParagraphList::iterator pit = const_cast<ParagraphList&>(paragraphs).begin();
44 ParagraphList::iterator pend = const_cast<ParagraphList&>(paragraphs).end();
45 for (; pit != pend; ++pit) {
46 LyXLayout_ptr const & style = pit->layout();
47 // treat <toc> as a special case for compatibility with old code
48 if (pit->isInset(0)) {
49 InsetBase * inset = pit->getInset(0);
50 if (inset->lyxCode() == InsetOld::TOC_CODE) {
51 string const temp = "toc";
52 sgml::openTag(os, depth, false, temp);
57 // environment tag closing
58 for (; depth > pit->params().depth(); --depth) {
59 sgml::closeTag(os, depth, false, environment_stack[depth]);
60 environment_stack[depth].erase();
63 // write opening SGML tags
64 switch (style->latextype) {
66 if (depth == pit->params().depth()
67 && !environment_stack[depth].empty()) {
68 sgml::closeTag(os, depth, false, environment_stack[depth]);
69 environment_stack[depth].erase();
75 sgml::openTag(os, depth, false, style->latexname());
80 //error(ErrorItem(_("Error:"), _("Wrong depth for LatexType Command.\n"), pit->id(), 0, pit->size()));
83 if (!environment_stack[depth].empty()) {
84 sgml::closeTag(os, depth, false, environment_stack[depth]);
88 environment_stack[depth].erase();
89 sgml::openTag(os, depth, false, style->latexname());
92 case LATEX_ENVIRONMENT:
93 case LATEX_ITEM_ENVIRONMENT:
94 case LATEX_BIB_ENVIRONMENT: {
95 string const & latexname = style->latexname();
97 if (depth == pit->params().depth()
98 && environment_stack[depth] != latexname) {
99 sgml::closeTag(os, depth, false,
100 environment_stack[depth]);
101 environment_stack[depth].erase();
103 if (depth < pit->params().depth()) {
104 depth = pit->params().depth();
105 environment_stack[depth].erase();
107 if (environment_stack[depth] != latexname) {
109 sgml::openTag(os, depth, false, "p");
111 sgml::openTag(os, depth, false, latexname);
113 if (environment_stack.size() == depth + 1)
114 environment_stack.push_back("!-- --");
115 environment_stack[depth] = latexname;
118 if (style->latexparam() == "CDATA")
121 if (style->latextype == LATEX_ENVIRONMENT) break;
123 if (style->labeltype == LABEL_MANUAL)
128 sgml::openTag(os, depth + 1, false, item_name);
133 sgml::openTag(os, depth, false, style->latexname());
137 pit->simpleLinuxDocOnePar(buf, os, outerFont(pit, paragraphs),
141 // write closing SGML tags
142 switch (style->latextype) {
145 case LATEX_ENVIRONMENT:
146 case LATEX_ITEM_ENVIRONMENT:
147 case LATEX_BIB_ENVIRONMENT:
148 if (style->latexparam() == "CDATA")
152 sgml::closeTag(os, depth, false, style->latexname());
158 for (int i = depth; i >= 0; --i)
159 sgml::closeTag(os, depth, false, environment_stack[i]);