]> git.lyx.org Git - features.git/commitdiff
Removed the bitset use in buffer.C.
authorJosé Matox <jamatos@lyx.org>
Fri, 23 Mar 2001 08:37:44 +0000 (08:37 +0000)
committerJosé Matox <jamatos@lyx.org>
Fri, 23 Mar 2001 08:37:44 +0000 (08:37 +0000)
Code clean in docbook export code.
Added docbook export to insetfloat.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@1811 a592a061-630c-0410-9148-cb99ea01b6c8

src/ChangeLog
src/buffer.C
src/insets/ChangeLog
src/insets/insetfloat.C
src/insets/insetfloat.h

index 2dc64eb6fc83cf5ae00f74a1220096f3289d296b..06064a5292152ae244386a3b68c7ff2a286f0e38 100644 (file)
@@ -1,3 +1,13 @@
+2001-03-23  José Abílio Matos  <jamatos@fep.up.pt>
+
+       * buffer.C: removed bitset usage.
+       PAR_TAG moved to an anonymous name space.
+       (tag_name): new funtion, also in the anonymous namespace.
+       (SimpleLinuxDocOnePar): replaced all the references to bitset by PAR_TAG.
+       (makeDocBookFile): clean code. Completed transition from string arrays
+       to string vectors.
+       (SimpleDocBookOnePar): code clean.
+
 2001-03-23  Lars Gullik Bjønnes  <larsbj@trylle.birdstep.com>
 
        * tabular.C: add some comments.
index b388f2d9e4c93c9e115a8272cc944f14ccbcdf80..bf7326b89556db3c9d3fe85cd880b4eef5dec82b 100644 (file)
@@ -18,7 +18,7 @@
 #include <iomanip>
 #include <map>
 #include <stack>
-#include <bitset>
+#include <list>
 
 #include <cstdlib>
 #include <cmath>
@@ -114,7 +114,6 @@ using std::map;
 using std::max;
 using std::set;
 using std::stack;
-using std::bitset;
 using std::list;
 
 // all these externs should eventually be removed.
@@ -2805,9 +2804,49 @@ void linux_doc_line_break(ostream & os, string::size_type & colcount,
        }
 }
 
+enum PAR_TAG {
+       NONE=0,
+       TT = 1,
+       SF = 2,
+       BF = 4,
+       IT = 8,
+       SL = 16,
+       EM = 32
+};
+
+
+string tag_name(PAR_TAG const & pt) {
+       switch (pt) {
+       case NONE: return "!-- --"; break;
+       case TT: return "tt"; break;
+       case SF: return "sf"; break;
+       case BF: return "bf"; break;
+       case IT: return "it"; break;
+       case SL: return "sl"; break;
+       case EM: return "em"; break;
+       }
+       return "";
+}
+
+
+inline
+void operator|=(PAR_TAG & p1, PAR_TAG const & p2)
+{
+        p1 = static_cast<PAR_TAG>(p1 | p2);
+}
+
+
+inline
+void reset(PAR_TAG & p1, PAR_TAG const & p2)
+{
+       p1 = static_cast<PAR_TAG>( p1 & ~p2);
+}
+
 } // namespace anon
 
 
+
+
 // Handle internal paragraph parsing -- layout already processed.
 void Buffer::SimpleLinuxDocOnePar(ostream & os,
                                  LyXParagraph * par, int /*depth*/)
@@ -2832,33 +2871,22 @@ void Buffer::SimpleLinuxDocOnePar(ostream & os,
        LyXFont::FONT_SHAPE  shape_type  = LyXFont::UP_SHAPE;
        bool is_em = false;
 
-       enum PAR_TAG {
-               TT =0,
-               SF,
-               BF,
-               IT,
-               SL,
-               EM,
-               LAST
-       };
-       char const * tag_name[] = {"tt","sf","bf","it","sl","em"};
-
-       stack<int> tag_state;
+       stack < PAR_TAG > tag_state;
        // parsing main loop
        for (LyXParagraph::size_type i = 0; i < par->size(); ++i) {
 
-               bitset<LAST> tag_close;
-               list<int> tag_open;
+               PAR_TAG tag_close = NONE;
+               list < PAR_TAG > tag_open;
 
                LyXFont const font = par->getFont(params, i);
 
                if (font_old.family() != font.family()) {
                        switch (family_type) {
                        case LyXFont::SANS_FAMILY:
-                               tag_close.set(SF);
+                               tag_close |= SF;
                                break;
                        case LyXFont::TYPEWRITER_FAMILY:
-                               tag_close.set(TT);
+                               tag_close |= TT;
                                break;
                        default:
                                break;
@@ -2881,7 +2909,7 @@ void Buffer::SimpleLinuxDocOnePar(ostream & os,
                if (font_old.series() != font.series()) {
                        switch (series_type) {
                        case LyXFont::BOLD_SERIES:
-                               tag_close.set(BF);
+                               tag_close |= BF;
                                break;
                        default:
                                break;
@@ -2902,10 +2930,10 @@ void Buffer::SimpleLinuxDocOnePar(ostream & os,
                if (font_old.shape() != font.shape()) {
                        switch (shape_type) {
                        case LyXFont::ITALIC_SHAPE:
-                               tag_close.set(IT);
+                               tag_close |= IT;
                                break;
                        case LyXFont::SLANTED_SHAPE:
-                               tag_close.set(SL);
+                               tag_close |= SL;
                                break;
                        default:
                                break;
@@ -2929,33 +2957,34 @@ void Buffer::SimpleLinuxDocOnePar(ostream & os,
                        if (font.emph() == LyXFont::ON) {
                                tag_open.push_back(EM);
                                is_em = true;
-                       } else if (is_em) {
-                               tag_close.set(EM);
+                       }
+                       else if (is_em) {
+                               tag_close |= EM;
                                is_em = false;
                        }
                }
 
-               list<int> temp;
-               while (!tag_state.empty() && tag_close.any()) {
-                       int k = tag_state.top();
+               list < PAR_TAG > temp;
+               while(!tag_state.empty() && tag_close ) {
+                       PAR_TAG k =  tag_state.top();
                        tag_state.pop();
-                       os << "</" << tag_name[k] << ">";
-                       if (tag_close[k])
-                               tag_close.reset(k);
+                       os << "</" << tag_name(k) << ">";
+                       if (tag_close & k)
+                               reset(tag_close,k);
                        else
                                temp.push_back(k);
                }
 
-               for (list<int>::const_iterator j = temp.begin();
+               for(list< PAR_TAG >::const_iterator j = temp.begin();
                    j != temp.end(); ++j) {
                        tag_state.push(*j);
-                       os << "<" << tag_name[*j] << ">";
+                       os << "<" << tag_name(*j) << ">";
                }
 
-               for (list<int>::const_iterator j = tag_open.begin();
+               for(list< PAR_TAG >::const_iterator j = tag_open.begin();
                    j != tag_open.end(); ++j) {
                        tag_state.push(*j);
-                       os << "<" << tag_name[*j] << ">";
+                       os << "<" << tag_name(*j) << ">";
                }
 
                char c = par->GetChar(i);
@@ -2997,7 +3026,7 @@ void Buffer::SimpleLinuxDocOnePar(ostream & os,
        }
 
        while (!tag_state.empty()) {
-               os << "</" << tag_name[tag_state.top()] << ">";
+               os << "</" << tag_name(tag_state.top()) << ">";
                tag_state.pop();
        }
 
@@ -3022,47 +3051,26 @@ void Buffer::LinuxDocError(LyXParagraph * par, int pos,
 
 void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
 {
+       ofstream ofs(fname.c_str());
+       if (!ofs) {
+               WriteAlert(_("LYX_ERROR:"), _("Cannot write file"), fname);
+               return;
+       }
+
        LyXParagraph * par = paragraph;
 
        niceFile = nice; // this will be used by Insetincludes.
 
-       string top_element = textclasslist.LatexnameOfClass(params.textclass);
-
-       vector <string> environment_stack;
-       vector <string> environment_inner;
-       vector <string> command_stack;
-
-       bool command_flag = false;
-       int command_depth = 0;
-       int command_base = 0;
-       int cmd_depth = 0;
-
-        string item_name;
-       string command_name;
-       string c_depth;
-       string c_params;
-       string tmps;
-
-       int depth = 0; // paragraph depth
         LyXTextClass const & tclass =
                textclasslist.TextClass(params.textclass);
 
        LaTeXFeatures features(params, tclass.numLayouts());
        validate(features);
-
-       //if (nice)
-       tex_code_break_column = lyxrc.ascii_linelen;
-       //else
-       //tex_code_break_column = 0;
-
-       ofstream ofs(fname.c_str());
-       if (!ofs) {
-               WriteAlert(_("LYX_ERROR:"), _("Cannot write file"), fname);
-               return;
-       }
    
        texrow.reset();
 
+       string top_element= textclasslist.LatexnameOfClass(params.textclass);
+
        if (!only_body) {
                string sgml_includedfiles=features.getIncludedFiles(fname);
 
@@ -3090,8 +3098,20 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
        ofs << "<!-- DocBook file was created by " << LYX_DOCVERSION 
            << "\n  See http://www.lyx.org/ for more information -->\n";
 
+       vector <string> environment_stack(10);
+       vector <string> environment_inner(10);
+       vector <string> command_stack(10);
+
+       bool command_flag= false;
+       int command_depth= 0, command_base= 0, cmd_depth= 0;
+       int depth = 0; // paragraph depth
+
+        string item_name, command_name;
+
        while (par) {
+               string sgmlparam, c_depth, c_params;
                int desc_on = 0; // description mode
+
                LyXLayout const & style =
                        textclasslist.Style(params.textclass,
                                            par->layout);
@@ -3146,24 +3166,19 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                        
                        command_name = style.latexname();
                        
-                       tmps = style.latexparam();
-                       c_params = split(tmps, c_depth,'|');
+                       sgmlparam = style.latexparam();
+                       c_params = split(sgmlparam, c_depth,'|');
                        
                        cmd_depth= lyx::atoi(c_depth);
                        
                        if (command_flag) {
                                if (cmd_depth<command_base) {
-                                       for (int j = command_depth;
-                                           j >= command_base; --j)
-                                               if (!command_stack[j].empty())
-                                                       sgmlCloseTag(ofs, j, command_stack[j]);
+                                       for (int j = command_depth; j >= command_base; --j)
+                                               sgmlCloseTag(ofs, j, command_stack[j]);
                                        command_depth= command_base= cmd_depth;
                                } else if (cmd_depth <= command_depth) {
-                                       for (int j = command_depth;
-                                           j >= cmd_depth; --j)
-
-                                               if (!command_stack[j].empty())
-                                                       sgmlCloseTag(ofs, j, command_stack[j]);
+                                       for (int j = command_depth; j >= cmd_depth; --j)
+                                               sgmlCloseTag(ofs, j, command_stack[j]);
                                        command_depth= cmd_depth;
                                } else
                                        command_depth= cmd_depth;
@@ -3171,6 +3186,8 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                                command_depth = command_base = cmd_depth;
                                command_flag = true;
                        }
+                       if (command_stack.size() == command_depth +1)
+                               command_stack.push_back("");
                        command_stack[command_depth]= command_name;
 
                        // treat label as a special case for
@@ -3202,6 +3219,10 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                        }
 
                        if (environment_stack[depth] != style.latexname()) {
+                               if(environment_stack.size() == depth+1) {
+                                       environment_stack.push_back("!-- --");
+                                       environment_inner.push_back("!-- --");
+                               }
                                environment_stack[depth] = style.latexname();
                                environment_inner[depth] = "!-- --";
                                sgmlOpenTag(ofs, depth + command_depth,
@@ -3342,28 +3363,20 @@ void Buffer::SimpleDocBookOnePar(ostream & os, string & extra,
        LyXLayout const & style = textclasslist.Style(params.textclass,
                                                      par->GetLayout());
 
-       LyXParagraph::size_type main_body;
-       if (style.labeltype != LABEL_MANUAL)
-               main_body = 0;
-       else
-               main_body = par->BeginningOfMainBody();
+       LyXFont font_old = style.labeltype == LABEL_MANUAL ? style.labelfont : style.font;
 
-       // gets paragraph main font
-       LyXFont font1 = main_body > 0 ? style.labelfont : style.font;
-       
        int char_line_count = depth;
        if (!style.free_spacing)
-               for (int j = 0; j < depth; ++j)
-                       os << ' ';
+               os << string(depth,' ');
 
        // parsing main loop
        for (LyXParagraph::size_type i = 0;
             i < par->size(); ++i) {
-               LyXFont font2 = par->getFont(params, i);
+               LyXFont font = par->getFont(params, i);
 
                // handle <emphasis> tag
-               if (font1.emph() != font2.emph()) {
-                       if (font2.emph() == LyXFont::ON) {
+               if (font_old.emph() != font.emph()) {
+                       if (font.emph() == LyXFont::ON) {
                                os << "<emphasis>";
                                emph_flag = true;
                        }else if(i) {
@@ -3400,7 +3413,7 @@ void Buffer::SimpleDocBookOnePar(ostream & os, string & extra,
                                else
                                        os << tmp_out;
                        }
-               } else if (font2.latex() == LyXFont::ON) {
+               } else if (font.latex() == LyXFont::ON) {
                        // "TeX"-Mode on ==> SGML-Mode on.
                        if (c != '\0')
                                os << c;
@@ -3423,23 +3436,17 @@ void Buffer::SimpleDocBookOnePar(ostream & os, string & extra,
                                os << sgml_string;
                        }
                }
-               font1 = font2;
+               font_old = font;
        }
 
-       // needed if there is an optional argument but no contents
-       if (main_body > 0 && main_body == par->size()) {
-               font1 = style.font;
-       }
        if (emph_flag) {
                os << "</emphasis>";
        }
        
        // resets description flag correctly
-       switch (desc_on){
-       case 1:
+       if (desc_on == 1) {
                // <term> not closed...
                os << "</term>";
-               break;
        }
        os << '\n';
 }
index 04656d5ba253b597c78bc2fc0818a403c9762820..8e232300f42168c7dcc173860ce99c3f778d626a 100644 (file)
@@ -1,3 +1,8 @@
+2001-03-23  José Abílio Matos  <jamatos@fep.up.pt>
+
+       * insetfloat.h
+       * insetfloat.C (DocBook): docbook export code.
+
 2001-03-22  Juergen Vigna  <jug@sad.it>
 
        * insetminipage.C (getMaxWidth): added function to set the drawing
index 83ce80f592454f993766e245bc6fa74750ae22ff..253be2d0b2bb86a95743de0b63455578fbdcef7f 100644 (file)
@@ -183,6 +183,16 @@ int InsetFloat::Latex(Buffer const * buf,
 }
 
 
+int InsetFloat::DocBook(Buffer const * buf, ostream & os) const
+{
+       os << "<" << floatType_ << ">";
+       int const i = inset->DocBook(buf, os);
+       os << "</" << floatType_ << ">";
+
+       return i;
+}
+
+
 bool InsetFloat::InsertInsetAllowed(Inset * in) const
 {
        if ((in->LyxCode() == Inset::FOOT_CODE) ||
index 74e37eb461dfe6eae298a0202c078de1a5200e49..63fcf57dd84eceeaa44a03c24e2d083719d65b6c 100644 (file)
@@ -40,6 +40,8 @@ public:
        ///
        int Latex(Buffer const *, std::ostream &, bool fragile, bool fp) const;
        ///
+       int DocBook(Buffer const *, std::ostream &) const;
+       ///
        string const EditMessage() const;
        ///
        bool InsertInsetAllowed(Inset * inset) const;