static void convert_nemo_file (char *file) { GFile *dir; char *uri; gchar *contents; gsize length; xmlDocPtr xml; if (!g_file_get_contents (file, &contents, &length, NULL)) { if (!quiet) { g_print ("failed to load %s\n", file); } return; } uri = get_uri_from_nemo_metafile_name (file); if (uri == NULL) { g_free (contents); return; } dir = g_file_new_for_uri (uri); g_free (uri); xml = xmlParseMemory (contents, length); g_free (contents); if (xml == NULL) { return; } convert_xml_file (xml, dir); xmlFreeDoc (xml); }
void gen_faq_doc( const char *source_dir, const char *dest_dir, ASDocType doc_type ) { ASXMLInterpreterState state; char *faq_dir = NULL ; ASFlagType doc_class_mask = DOC_CLASS_None ; struct direntry **list = NULL; int list_len, i ; faq_dir = make_file_name( source_dir, "FAQ" ); if( !start_doc_file( dest_dir, "afterstep_faq", NULL, doc_type, "afterstep_faq", "AfterStep FAQ", "This document is an ever growing set of questions, statements, ideas and complaints about AfterStep version 2.0", &state, doc_class_mask, DocClass_FAQ ) ) return ; /* BODY *************************************************************************/ set_flags( state.flags, ASXMLI_OrderSections ); list_len = my_scandir ((char*)faq_dir, &list, ignore_dots, NULL); for (i = 0; i < list_len; i++) { if ( !S_ISDIR (list[i]->d_mode) ) convert_xml_file( faq_dir, list[i]->d_name, &state ); free(list[i]); } if( list ) free( list ); /* FOOTER ***********************************************************************/ end_doc_file( &state ); free( faq_dir ); }
void write_options_keywords(const char *source_dir, const char *syntax_dir, SyntaxDef *syntax, ASXMLInterpreterState *state ) { #define MAX_SYNTAX_RECURSION_LEVEL 32 static int syntax_recursion_level = -1; static SyntaxDef* syntax_recursion_stack[MAX_SYNTAX_RECURSION_LEVEL]; int i, max_i = 0 ; TermDef **sorted_list ; while(syntax->terms[max_i].keyword) ++max_i; if( max_i == 0 ) return ; if (syntax_recursion_level+1 >= MAX_SYNTAX_RECURSION_LEVEL) { show_error ("Excessive recursion into nested Syntaxes. Syntax doc path = \"%s\".", syntax->doc_path ); return; } for (i = syntax_recursion_level; i >= 0 ; --i) if (syntax_recursion_stack[i] == syntax) return; ++syntax_recursion_level; syntax_recursion_stack[syntax_recursion_level] = syntax; sorted_list = safecalloc( max_i, sizeof(TermDef*)); for (i = 0; i < max_i; i++) sorted_list[i] = &(syntax->terms[i]) ; qsort(sorted_list, max_i, sizeof(TermDef*), (int (*)())sort_terms_by_alpha ); for (i = 0; i < max_i; i++) { SyntaxDef *sub_syntax = sorted_list[i]->sub_syntax ; if( sub_syntax == pPopupFuncSyntax ) sub_syntax = pFuncSyntax ; if (sub_syntax) gen_syntax_doc( source_dir, state->dest_dir, sub_syntax, state->doc_type ); if( isalnum( sorted_list[i]->keyword[0] ) ) convert_xml_file( syntax_dir, sorted_list[i]->keyword, state ); } free( sorted_list ); syntax_recursion_stack[syntax_recursion_level] = NULL; --syntax_recursion_level; }
void gen_syntax_doc( const char *source_dir, const char *dest_dir, SyntaxDef *syntax, ASDocType doc_type ) { ASXMLInterpreterState state; const char *doc_path = AfterStepName ; char *syntax_dir = NULL ; int i ; ASFlagType doc_class_mask = 0 ; if( syntax ) { if( get_hash_item( ProcessedSyntaxes, AS_HASHABLE(syntax), NULL ) == ASH_Success ) return ; doc_path = syntax->doc_path ; } if( syntax != NULL && syntax->doc_path != NULL && syntax->doc_path[0] != '\0' ) syntax_dir = make_file_name (source_dir, syntax->doc_path); if( syntax_dir == NULL ) syntax_dir = mystrdup( source_dir ); if( doc_type == DocType_PHP ) { int overview_size = 0 ; int tmp ; /* we generate upto 4 files in PHP mode : overview, Base config, MyStyles and Config Options * Overview and Config Options are always present. Others may be ommited if source is missing * If Overview is too small - say < 1024 bytes - it could be bundled with Config Options */ set_flags( doc_class_mask, DOC_CLASS_Overview ); LOCAL_DEBUG_OUT( "Checking what parts to generate ...%s", ""); if( (tmp = check_xml_contents( syntax_dir, MyStylesOptionsEntry )) > 0) set_flags( doc_class_mask, DOC_CLASS_MyStyles ); LOCAL_DEBUG_OUT( "MyStyle size = %d", tmp ); if((tmp = check_xml_contents( syntax_dir, BaseOptionsEntry )) > 0) set_flags( doc_class_mask, DOC_CLASS_BaseConfig ); LOCAL_DEBUG_OUT( "Base size = %d", tmp ); for( i = 0 ; StandardSourceEntries[i] ; ++i ) overview_size += check_xml_contents( syntax_dir, StandardSourceEntries[i] ); if( syntax == NULL ) overview_size += 0 ; LOCAL_DEBUG_OUT( "overview size = %d", overview_size ); if( overview_size > OVERVIEW_SIZE_THRESHOLD ) set_flags( doc_class_mask, DOC_CLASS_Options ); }else doc_class_mask = DOC_CLASS_None ; if( !start_doc_file( dest_dir, doc_path, NULL, doc_type, syntax?syntax->doc_path:NULL, syntax?syntax->display_name:NULL, syntax?syntax->display_purpose:NULL, &state, doc_class_mask, DocClass_Overview ) ) return ; if( doc_type != DocType_PHP ) { /* BODY *************************************************************************/ i = 0 ; if( syntax == NULL ) { convert_xml_file( syntax_dir, StandardSourceEntries[0], &state ); ++i ; convert_xml_file( syntax_dir, StandardOptionsEntry, &state ); } for( ; i < OPENING_PARTS_END ; ++i ) convert_xml_file( syntax_dir, StandardSourceEntries[i], &state ); if( syntax ) { convert_xml_file( syntax_dir, BaseOptionsEntry, &state ); convert_xml_file( syntax_dir, MyStylesOptionsEntry, &state ); } }else { i = 0 ; if( syntax == NULL ) { convert_xml_file( syntax_dir, StandardSourceEntries[0], &state ); ++i ; convert_xml_file( syntax_dir, StandardOptionsEntry, &state ); } for( ; StandardSourceEntries[i] ; ++i ) { if (( convert_xml_file( syntax_dir, StandardSourceEntries[i], &state ) == True) && ( i == 0 ) ) fprintf( state.dest_fp, "<hr>\n" ); } if( get_flags( doc_class_mask, DOC_CLASS_Options ) ) { end_doc_file( &state ); start_doc_file( dest_dir, doc_path, "_options", doc_type, syntax?syntax->doc_path:NULL, syntax?syntax->display_name:NULL, syntax?syntax->display_purpose:NULL, &state, doc_class_mask, DocClass_Options ); fprintf( state.dest_fp, "<UL>\n" ); } } LOCAL_DEBUG_OUT( "starting config_options%s", "" ); if( syntax && state.dest_fp ) { write_options_header( &state ); write_options_keywords(source_dir, syntax_dir, syntax, &state ); write_options_footer( &state ); } LOCAL_DEBUG_OUT( "done with config_options%s", "" ); if( doc_type != DocType_PHP ) { for( i = OPENING_PARTS_END ; StandardSourceEntries[i] ; ++i ) convert_xml_file( syntax_dir, StandardSourceEntries[i], &state ); }else if( state.dest_fp ) { if( state.doc_class == DocClass_Options ) fprintf( state.dest_fp, "</UL>\n" ); if( get_flags( doc_class_mask, DOC_CLASS_BaseConfig ) ) { end_doc_file( &state ); start_doc_file( dest_dir, doc_path, BaseOptionsEntry, doc_type, syntax?syntax->doc_path:NULL, syntax?syntax->display_name:NULL, syntax?syntax->display_purpose:NULL, &state, doc_class_mask, DocClass_BaseConfig ); convert_xml_file( syntax_dir, BaseOptionsEntry, &state ); } if( get_flags( doc_class_mask, DOC_CLASS_MyStyles ) ) { end_doc_file( &state ); start_doc_file( dest_dir, doc_path, MyStylesOptionsEntry, doc_type, syntax?syntax->doc_path:NULL, syntax?syntax->display_name:NULL, syntax?syntax->display_purpose:NULL, &state, doc_class_mask, DocClass_MyStyles ); convert_xml_file( syntax_dir, MyStylesOptionsEntry, &state ); } } /* FOOTER ***********************************************************************/ end_doc_file( &state ); if( syntax ) add_hash_item( ProcessedSyntaxes, AS_HASHABLE(syntax), NULL ); free( syntax_dir ); }