Ejemplo n.º 1
0
    //------------------------------------------------------------------
    void table_structurizer::start_element(const element& e)
    {
        if(m_skip_element) return;

//        if(m_cfg.keyword_exists(keyword_formatless_elements, e.name(), e.name_len()))
        if(m_cfg.is_solid_element(e.name(), e.name_len()))
        {
            element_serializer s(m_result, e);
            m_skip_element = &e;
            return;
        }

        if(str_cmp(e.name(), e.name_len(), keyword_ssv_table) == 0)
        {
            process_ssv_table(e);
            m_skip_element = &e;
        }
        else
        if(str_cmp(e.name(), e.name_len(), keyword_vbar_table) == 0)
        {
            process_vbar_table(e);
            m_skip_element = &e;
        }
        else
        if(str_cmp(e.name(), e.name_len(), keyword_eln_table) == 0)
        {
            process_eln_table(e);
            m_skip_element = &e;
        }
        else
        {
            m_result.add_element_header(e);
        }
    }
Ejemplo n.º 2
0
 //------------------------------------------------------------------
 void index_storage::end_element(const element& e)
 {
     if(str_cmp(e.name(), e.name_len(), keyword_dir) == 0)
     {
         if(m_path.size()) m_path.pop_back();
     }
     else
     if(str_cmp(e.name(), e.name_len(), keyword_file) == 0)
     {
         m_file_name.erase();
         m_file_ext.erase();
     }
 }
Ejemplo n.º 3
0
    //------------------------------------------------------------------
    void structure_processor::end_element(const element& e)
    {
        const string_type* p;
        if(e.name_len())
        {
            m_result.add_element_footer(e);

            p = m_cfg.find(e.name(), e.name_len(), keyword_close_suffix);
            m_result.add(p);
            m_result.add(close_brace);
        }
        else
        {
            p = m_cfg.find(keyword_page_close.name);
            m_result.add(p);
        }
    }
Ejemplo n.º 4
0
 //------------------------------------------------------------------
 void code_colorer::start_element(const element& e)
 {
     if(e.name_len())
     {
         if(m_coloring_element == 0)
         {
             if(m_cfg.keyword_exists(keyword_code, e.name(), e.name_len()) ||
                str_cmp(e.name(), e.name_len(), keyword_code) == 0 ||
                str_cmp(e.name(), e.name_len(), keyword_m) == 0)
             {
                 m_coloring_element = &e;
                 color_code(e);
             }
             else
             {
                 m_result.add_element_header(e);
             }
         }
     }
 }
Ejemplo n.º 5
0
    //------------------------------------------------------------------
    void structure_processor::start_element(const element& e)
    {
        const string_type* p;
        if(e.name_len())
        {
            m_result.add_element_header(e);

            p = m_cfg.find(e.name(), e.name_len(), keyword_open_suffix);
            m_result.add(p);

            m_result.add(backslash);
            m_result.add(keyword_cntn.name, keyword_cntn.len);
            m_result.add(open_brace);
        }
        else
        {
            p = m_cfg.find(keyword_page_open.name);
            m_result.add(p);
        }
    }
Ejemplo n.º 6
0
 //------------------------------------------------------------------
 void table_content_extractor::start_element(const element& e)
 {
     if(m_skip_element) return;
 
     if(str_cmp(e.name(), e.name_len(), keyword_th) == 0)
     {
         element_serializer(m_header, e, false);
         m_skip_element = &e;
     }
     else
     if(str_cmp(e.name(), e.name_len(), keyword_al) == 0)
     {
         content_storage st;
         element_serializer(st, e, false);
         const char_type* str = st.text();
         while(*str)
         {
             char_type c = *str++;
             if(c == open_angle ||
                c == close_angle ||
                c == vbar ||
                c == minus)
             {
                 m_align.push_back(c);
             }
         }
         m_skip_element = &e;
     }
     else
     {
         if(m_level)
         {
             m_table.add_element_header(e);
         }
         ++m_level;
     }
 }
Ejemplo n.º 7
0
 //------------------------------------------------------------------
 void code_colorer::end_element(const element& e)
 {
     if(e.name_len())
     {
         if(m_coloring_element == 0)
         {
             m_result.add(close_brace);
         }
         else
         {
             if(m_coloring_element == &e)
             {
                 m_coloring_element = 0;
             }
         }
     }
 }
Ejemplo n.º 8
0
    //------------------------------------------------------------------
    void code_colorer::color_code(const element& e)
    {
        m_language.assign(e.name(), e.name_len());

        m_block_comments   = m_cfg.strlist(string_type(e.name(), e.name_len()), 
                                           keyword_block_comments_suffix);

        m_line_comments    = m_cfg.strlist(string_type(e.name(), e.name_len()), 
                                           keyword_line_comments_suffix);

        m_string_quotation = m_cfg.strlist(string_type(e.name(), e.name_len()), 
                                           keyword_strings_suffix);

        m_string_mask      = m_cfg.strlist(string_type(e.name(), e.name_len()), 
                                           keyword_string_mask_suffix);

        m_operators        = m_cfg.strlist(string_type(e.name(), e.name_len()), 
                                           keyword_operators_suffix);

        replace_strlist_keysym(m_block_comments);
        replace_strlist_keysym(m_line_comments);
        replace_strlist_keysym(m_string_quotation);
        replace_strlist_keysym(m_string_mask);
        replace_strlist_keysym(m_operators);
        
        m_identifier_charset.clear();
        add_to_identifier_charset(keyword_kw1_suffix);
        add_to_identifier_charset(keyword_kw2_suffix);
        add_to_identifier_charset(keyword_kw3_suffix);
        add_to_identifier_charset(keyword_kw4_suffix);

        m_operator_charset.clear();

        unsigned i;
        for(i = 0; i < m_operators.size(); ++i)
        {
            const string_type& str = m_operators[i];
            for(unsigned j = 0; j < str.length(); j++)
            {
                char_type c = str[j];
                if(!is_alnum(c))
                {
                    m_operator_charset.insert(replace_keysym(c));
                }
            }
        }

        content_storage code;
        element_serializer ser(code, e, false, false);
        code.replace_text_keysym();
        m_result.add(backslash);
        if(str_cmp(m_language, keyword_m) == 0)
        {
            m_result.add(keyword_m.name, keyword_m.len);
            m_result.add(open_brace);
            m_result.add(code.text());
            m_result.add(close_brace);
        }
        else
        if(str_cmp(m_language, keyword_code) == 0)
        {
            m_result.add(keyword_code.name, keyword_code.len);
            if(e.attr_len())
            {
                m_result.add(open_bracket);
                m_result.add(e.attr(), e.attr_len());
                m_result.add(close_bracket);
            }
            m_result.add(open_brace);
            m_result.add(code.text());
            m_result.add(close_brace);
        }
        else
        {
            m_result.add(keyword_code.name, keyword_code.len);
            if(e.attr_len())
            {
                m_result.add(open_bracket);
                m_result.add(e.attr(), e.attr_len());
                m_result.add(close_bracket);
            }
            m_result.add(open_brace);
            color_code(code.text());
            m_result.add(close_brace);
        }
    }
Ejemplo n.º 9
0
    //------------------------------------------------------------------
    void index_storage::start_element(const element& e)
    {
        string_type ts;
        index_element ie;

        if(str_cmp(e.name(), e.name_len(), keyword_dir) == 0)
        {
            parse_and_find_attr_content(e.attr(), e.attr_len(), ts);
            clean_and_trim_string(ts);
            if(ts.empty())
            {
                e.throw_exception(e.name(), "index_storage: \\dir: No directory name");
            }
            trim_ending_slashes(ts);
            m_path.push_back(ts);
        }
        else
        if(str_cmp(e.name(), e.name_len(), keyword_file) == 0)
        {
            parse_and_find_attr_content(e.attr(), e.attr_len(), ts);
            clean_and_trim_string(ts);
            if(ts.empty())
            {
                e.throw_exception(e.name(), "index_storage: \\file: No file name");
            }
            m_file_name = ts;
           
            if(parse_and_find_attr_variable(e.attr(), e.attr_len(), keyword_ext, ts))
            {
                clean_and_trim_string(ts);
                m_file_ext = ts;
            }
            ie.category.assign(keyword_file.name, keyword_file.len);
            ie.anchor.assign(m_file_name);
            ie.comment.erase();
            ie.comment.assign(m_file_name);
            make_full_path(ie.full_path);
            m_data.push_back(ie);
        }
        else
        if(str_cmp(e.name(), e.name_len(), keyword_title) == 0)
        {
            if(m_file_name.empty())
            {
                e.throw_exception(e.name(), "index_storage: \\title: Illegal outside of \\file");
            }
            extract_element_content(e, ts);
            ie.category.assign(keyword_title.name, keyword_title.len);
            ie.anchor.assign(m_file_name);
            ie.comment.assign(ts);
            make_full_path(ie.full_path);
            m_data.push_back(ie);
        }
        else
        if(str_cmp(e.name(), e.name_len(), keyword_label) == 0)
        {
            if(m_file_name.empty())
            {
                e.throw_exception(e.name(), "index_storage: \\title: Illegal outside of \\file");
            }

            if(parse_and_find_attr_variable(e.attr(), e.attr_len(), keyword_category, ts))
            {
                clean_and_trim_string(ts);
                if(ts.empty())
                {
                    e.throw_exception(e.name(), "index_storage: \\label: No 'category' attribute");
                }
                ie.category.assign(ts);
            }

            if(parse_and_find_attr_variable(e.attr(), e.attr_len(), keyword_anchor, ts))
            {
                clean_and_trim_string(ts);
                if(ts.empty())
                {
                    e.throw_exception(e.name(), "index_storage: \\label: No 'anchor' attribute");
                }
                ie.anchor.assign(ts);
            }
            extract_element_content(e, ts);
            ie.comment.assign(ts);
            make_full_path(ie.full_path);
            m_data.push_back(ie);
        }
    }