static void handle_section(char *s) { char *name,*attr; if(!(name=parse_name(&s))) return; if(*s==','){ s=skip(s+1); attr=s; if(*s!='\"') syntax_error(7); else s++; attr=s; while(*s&&*s!='\"') s++; attr=cnvstr(attr,s-attr); s=skip(s+1); }else{ attr=""; if(!strcmp(name,textname)) attr=textattr; if(!strcmp(name,dataname)) attr=dataattr; if(!strcmp(name,sdataname)) attr=sdataattr; if(!strcmp(name,sdata2name)) attr=sdata2attr; if(!strcmp(name,rodataname)) attr=rodataattr; if(!strcmp(name,bssname)) attr=bssattr; if(!strcmp(name,sbssname)) attr=sbssattr; if(!strcmp(name,tocdname)) attr=tocdattr; } new_section(name,attr,1); switch_section(name,attr); eol(s); }
/* returns current_section or the syntax module's default section, when undefined */ section *default_section(void) { section *sec = current_section; if (!sec && defsectname && defsecttype) { sec = new_section(defsectname,defsecttype,1); switch_section(defsectname,defsecttype); } return sec; }
static void handle_section(char *s) { char *name,*attr; if(*s!='\"'){ name=s; if(!ISIDSTART(*s)){ syntax_error(10); return; } while(ISIDCHAR(*s)) s++; name=cnvstr(name,s-name); s=skip(s); }else{ s++; name=s; while(*s&&*s!='\"') s++; name=cnvstr(name,s-name); s=skip(s+1); } if(*s==','){ s=skip(s+1); attr=s; if(*s!='\"') syntax_error(7); else s++; attr=s; while(*s&&*s!='\"') s++; attr=cnvstr(attr,s-attr); s=skip(s+1); }else attr=""; new_section(name,attr,1); switch_section(name,attr); eol(s); }
id_placeholder* id_state::start_file( unsigned compatibility_version, bool document_root, std::string const& include_doc_id, std::string const& id, value const& title) { // Create new file boost::intrusive_ptr<file_info> parent = current_file; if (document_root) { current_file = new file_info(parent, new doc_info(), compatibility_version); } else { current_file = new file_info(parent, compatibility_version); } // Choose specified id to use. Prefer 'include_doc_id' (the id // specified in an 'include' element) unless backwards compatibility // is required. std::string initial_doc_id; if (document_root || compatibility_version >= 106u || (parent && parent->compatibility_version >= 106u)) { initial_doc_id = !include_doc_id.empty() ? include_doc_id : id; } else { initial_doc_id = !id.empty() ? id : include_doc_id; } // Set variables used for backwards compatible id generation. // They're a bit odd because of old bugs. if (document_root || compatibility_version < 106u) { // Note: this is done for older versions even if docinfo is // otherwise ignored. if (title.check()) current_file->document->last_title_1_1 = title.get_quickbook(); current_file->doc_id_1_1 = !initial_doc_id.empty() ? initial_doc_id : detail::make_identifier(current_file->document->last_title_1_1); } else if (parent) { current_file->doc_id_1_1 = parent->doc_id_1_1; } if (document_root) { if (!initial_doc_id.empty()) { return create_new_section(id, id_category::explicit_section_id); } else if (!title.empty()) { return create_new_section( detail::make_identifier(title.get_quickbook()), id_category::generated_doc); } else if (compatibility_version >= 106u) { return create_new_section("doc", id_category::numbered); } else { return create_new_section("", id_category::generated_doc); } } else { // If an id was set for the file, then switch the current section // with a new section with this id. This will be maintained in // 'end_section' if the current section ends, and then the original // section restored in 'end_file' if (compatibility_version >= 106u && !initial_doc_id.empty()) { switch_section(add_id_to_section(initial_doc_id, id_category::explicit_section_id, boost::intrusive_ptr<section_info>())); } return 0; } }