//------------------------------------------------------------------ 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); } }
//------------------------------------------------------------------ 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(); } }
//------------------------------------------------------------------ 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); } } } }
void dehydrator::dehydrate_element(const intermediate_model& im, const element& e, const std::string& meta_type, std::ostream& s) const { formatters::utility_formatter uf(s); uf.insert_quoted("name"); s << " : "; dehydrate_name(e.name(), s); s << comma_space; uf.insert_quoted("meta_type"); s << ": "; uf.insert_quoted(meta_type); if (!e.documentation().empty()) { s << comma_space; uf.insert_quoted("documentation"); s << " : "; uf.insert_quoted(tidy_up_string(e.documentation())); } if (!e.stereotypes().empty()) { s << comma_space; uf.insert_quoted("stereotypes"); s << " : [ "; bool is_first(true); for (const auto& stereotype : e.stereotypes()) { if (!is_first) s << comma_space; uf.insert_quoted(stereotype); is_first = false; } s << " ] "; } dehydrate_annotations(im, e.name().id(), s); }
//------------------------------------------------------------------ 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; } }
//------------------------------------------------------------------ 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); } }
//------------------------------------------------------------------ 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); } }
//------------------------------------------------------------------ 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); } }