Új hozzászólás Aktív témák

  • Forest_roby

    őstag

    Hi! ha ráérnétek ránéznétek erre a kódrészletre: /elég nagy/

    void
    on_save_xml_button_clicked (GtkButton *button,
    gpointer user_data)
    {

    g_message(''%s(): start: '', __func__);



    //az xml dokument elõállításához

    xmlDocPtr document;

    xmlNodePtr styles;

    xmlNodePtr style;

    xmlNodePtr text;

    xmlNodePtr property;

    GtkWidget *window;

    GtkTextView *text_view;

    GtkTextBuffer *text_buffer;

    GtkTextIter start_line;

    GtkTextIter end_line;

    gchar *the_text;

    GSList *activ_tags;
    GSList *p;

    gchar *name;

    gchar *font;




    //file keresõ ablakhoz

    GtkWidget *save_file;

    gchar *file_name;

    int response;



    //fájl név

    window = GTK_WIDGET(lookup_widget(GTK_WIDGET(button), ''myeditor_window''));

    file_name = (gchar*)g_object_get_data(G_OBJECT(window),''file_name'');

    if (file_name == NULL){

    save_file = gtk_file_chooser_dialog_new(''Save file'', NULL,

    GTK_FILE_CHOOSER_ACTION_SAVE,

    GTK_STOCK_SAVE, GTK_RESPONSE_OK,

    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,

    NULL);

    response = gtk_dialog_run(GTK_DIALOG(save_file));

    if (response == GTK_RESPONSE_OK){

    file_name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(save_file));

    g_object_set_data(G_OBJECT(window), ''file_name'', file_name);

    g_message(''%s(): file name is: %s'', __func__, file_name);

    }else if (response == GTK_RESPONSE_CANCEL){

    gtk_widget_destroy(save_file);

    return;

    }

    gtk_widget_destroy(save_file);

    }

    //fájl név megvan



    //xml dokumentum elõállítása

    document = xmlNewDoc(''1.0''); //új dokumentum a memóriában

    document -> children = xmlNewDocNode(document, NULL, ''doc'', NULL); //gyökérelem létrehozása

    styles = xmlNewChild(document -> children, NULL, ''styles'', NULL); //stílusok

    text = xmlNewChild(document -> children, NULL, ''text'', NULL); //szöveg - tulajdonságokkal



    text_view = GTK_TEXT_VIEW(lookup_widget(window, ''myeditor_textview''));

    text_buffer = gtk_text_view_get_buffer(text_view);

    gtk_text_buffer_get_start_iter(text_buffer, &start_line);

    end_line = start_line;


    gint counter = 1;

    while (!gtk_text_iter_is_end(&end_line)){

    gtk_text_iter_forward_to_line_end(&end_line);

    the_text = gtk_text_buffer_get_text(text_buffer, &start_line, &end_line, TRUE);







    /*if (activ_tags != NULL){

    g_object_get(G_OBJECT(g_slist_nth_data(activ_tags, 0)), ''name'', &name, NULL);

    g_object_get(G_OBJECT(g_slist_nth_data(activ_tags, 0)), ''font'', &font, NULL);

    }else{

    name = ''Default'';

    font = ''Arial Normal 8'';

    }

    //stílus

    style = xmlNewChild(styles, NULL, ''style'', NULL);

    xmlSetProp(style, ''name'', name);

    xmlSetProp(style, ''font'', font);

    //szöveg

    property = xmlNewChild(text, NULL, ''proporty'', the_text);

    xmlSetProp(property, ''style'', name);*/





    /*******************************************************************************************/


    activ_tags = gtk_text_iter_get_tags(&start_line);
    gchar *n;
    n=g_strdup_printf(''%d. style'', counter);
    counter=counter+1;
    style = xmlNewChild(styles, NULL, ''style'', NULL);
    xmlSetProp(style, ''name'', n);

    g_message(''ITT VAN! n:%s counter: %d'', n, counter);
    for(p = gtk_text_iter_get_tags(&start_line); p != NULL; p = g_slist_next(p))
    {
    gchar *name;
    g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''name'', &name, NULL);
    //g_message(''Tag neve: %s'', name);

    if( strncmp(name, ''justify'', 7) == 0){
    gchar *m;
    m=g_strdup_printf(''%s'',name);
    m = &m[8];
    //g_message(''\t\tjustification:\t\t%s'', m);

    xmlSetProp(style, ''justification'', m);

    //g_free(m);

    }else if( strncmp(name, ''foreground:'', 11) == 0){
    gchar *m;
    m=g_strdup_printf(''%s'',name);
    m = &m[12];
    //g_message(''\t\tforeground:\t\t%s'', m);

    xmlSetProp(style, ''foreground'', m);

    //g_free(m);

    }else if( strncmp(name, ''background:'', 11) == 0){
    gchar *m;
    m=g_strdup_printf(''%s'',name);
    m = &m[12];
    //g_message(''\t\tbackground:\t\t%s'', m);

    xmlSetProp(style, ''background'', m);

    //g_free(m);

    }else if( strncmp(name, ''indent:'', 7) == 0){
    gint *ind;
    g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''indent'', &ind, NULL);
    //g_message(''\t\tindent:\t\t\t%d'', ind);

    xmlSetProp(style, ''indent'', ind);

    }else if( strncmp(name, ''own:'', 4) == 0){
    gchar *font;
    gint *left_margin;
    gint *right_margin;
    gint *pixels_above_lines;
    gint *pixels_below_lines;
    gint *pixels_inside_wrap;
    g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''font'', &font, NULL);
    g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''left-margin'', &left_margin, NULL);
    g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''right-margin'', &right_margin, NULL);
    g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''pixels-above-lines'', &pixels_above_lines, NULL);
    g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''pixels-below-lines'', &pixels_below_lines, NULL);
    g_object_get(G_OBJECT(g_slist_nth_data(p, 0)), ''pixels-inside-wrap'', &pixels_inside_wrap, NULL);
    //g_message(''\t\tfont:\t\t\t%s'', font);
    xmlSetProp(style, ''font'', font);

    //g_message(''\t\tleft-margin:\t\t%d'', left_margin);
    xmlSetProp(style, ''left-margin'', left_margin);

    //g_message(''\t\tright-margin:\t\t%d'', right_margin);
    xmlSetProp(style, ''right-margin'', right_margin);

    //g_message(''\t\tpixels-above-lines:\t%d'', pixels_above_lines);
    xmlSetProp(style, ''pixels-above-lines'', pixels_above_lines);

    //g_message(''\t\tpixels-below-lines:\t%d'', pixels_below_lines);
    xmlSetProp(style, ''pixels-below-lines'', pixels_below_lines);

    //g_message(''\t\tpixels-inside-wrap:\t%d'', pixels_inside_wrap);
    xmlSetProp(style, ''pixels-inside-wrap'', pixels_inside_wrap);


    }else{
    g_message(''HA EZT AZ ÜZIT MEGLÁTOD, AKKOR VMI BAJ VAN!'');
    g_message(''name: %s'', name);
    }




    }
    /************************************************************************************/

    //szöveg

    property = xmlNewChild(text, NULL, ''proporty'', the_text);

    xmlSetProp(property, ''style'', n);
    g_free(n);
    gtk_text_iter_forward_line(&start_line);

    }








    //xml dokumentum elõállítása - befejezve



    //fájlba mentés

    if (!xmlSaveFormatFileEnc(file_name, document, ''UTF-8'', 1)){//memóriában levó állomány mentése

    g_error(''Error saving document: %m'');

    }

    //fájlba mentés - befejezve

    }


    Gomblenyomásra a szövegszerkesztőben lévő szöveg bekezdésenkénti ( soronkénti ) lementését végzi xml formátumba ( bekezdésenként léptet a stylusok miatt *minden bekezdéshez társít 1db stylust -nincs stylus átlapolódás bekezdéseken belül ill között. ).

    Eléggé nagy a kód és nehezen találom meg a hibákat. Van amikor jól műxik, van amikor rosszúl és van amikor fagy -eléggé rendszertelenűl. Valszeg változó felszabadítási problémákból elég sok lesz, nem tom.

    Légyszi segítsetek a hibákat kiszűrni, akinek kell a progi tesztelés miatt msn -en át tudom küldeni. ( linux alatt írtam )

    Előre is köszi!

    Forest

Új hozzászólás Aktív témák