//------------------------------------------------------------------ void table_structurizer::process_table_header(const element& e) { m_result.add(backslash); m_result.add(keyword_table.name, keyword_table.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(lf); if(m_header.length()) { m_result.add(backslash); m_result.add(keyword_trh.name, keyword_trh.len); m_result.add(open_brace); parse_double_vbar(m_header.text(), m_header.length(), &keyword_th); m_result.add(close_brace); } }
//------------------------------------------------------------------ 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); } }
//------------------------------------------------------------------ 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); } }