diff options
| author | Michael R Sweet <michael.r.sweet@gmail.com> | 2000-04-24 18:22:50 +0000 |
|---|---|---|
| committer | Michael R Sweet <michael.r.sweet@gmail.com> | 2000-04-24 18:22:50 +0000 |
| commit | 8ff6d1daf49861b28bafc9e905ff9dcd910653be (patch) | |
| tree | 34d788d13090ec2ac8a586af3e443de928ad37f1 /fluid | |
| parent | cd914369a657d7806dfd86b1fe7e3535f43d779b (diff) | |
FLUID changes to support GNU gettext and POSIX catgets under FLTK 1.0;
will work on changes for 2.0 later this week...
(please let me know what you think...)
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.0@1082 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'fluid')
| -rw-r--r-- | fluid/Fl_Menu_Type.cxx | 29 | ||||
| -rw-r--r-- | fluid/Fl_Type.h | 5 | ||||
| -rw-r--r-- | fluid/Fl_Widget_Type.cxx | 27 | ||||
| -rw-r--r-- | fluid/Fl_Window_Type.cxx | 79 | ||||
| -rw-r--r-- | fluid/alignment_panel.cxx | 77 | ||||
| -rw-r--r-- | fluid/alignment_panel.fl | 68 | ||||
| -rw-r--r-- | fluid/alignment_panel.h | 9 | ||||
| -rw-r--r-- | fluid/code.cxx | 91 | ||||
| -rw-r--r-- | fluid/file.cxx | 55 | ||||
| -rw-r--r-- | fluid/fluid.cxx | 33 |
10 files changed, 431 insertions, 42 deletions
diff --git a/fluid/Fl_Menu_Type.cxx b/fluid/Fl_Menu_Type.cxx index cdf4c4946..f3bfa8ab4 100644 --- a/fluid/Fl_Menu_Type.cxx +++ b/fluid/Fl_Menu_Type.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_Menu_Type.cxx,v 1.16.2.5 2000/02/05 09:20:45 bill Exp $" +// "$Id: Fl_Menu_Type.cxx,v 1.16.2.6 2000/04/24 18:22:47 mike Exp $" // // Menu item code for the Fast Light Tool Kit (FLTK). // @@ -31,6 +31,7 @@ #include <FL/Fl.H> #include "Fl_Widget_Type.h" +#include "alignment_panel.h" #include <FL/fl_message.H> #include <FL/Fl_Menu_.H> #include <FL/Fl_Button.H> @@ -46,6 +47,12 @@ Fl_Menu_Item menu_item_type_menu[] = { extern int reading_file; extern int force_parent; +extern int msgnum; +extern int i18n_type; +extern const char* i18n_include; +extern const char* i18n_function; +extern const char* i18n_file; +extern const char* i18n_set; static char submenuflag; @@ -209,7 +216,23 @@ int Fl_Menu_Item_Type::flags() { void Fl_Menu_Item_Type::write_item() { write_c(" {"); if (image) write_c("0"); - else if (label()) write_cstring(label()); + else if (label()) { + switch (i18n_type) { + case 0 : /* None */ + write_cstring(label()); + break; + case 1 : /* GNU gettext */ + write_c("%s(", i18n_function); + write_cstring(label()); + write_c(")"); + break; + case 2 : /* POSIX catgets */ + write_c("catgets(%s,%s,%d,", i18n_file, i18n_set, msgnum ++); + write_cstring(label()); + write_c(")"); + break; + } + } else write_c("\"\""); if (((Fl_Button*)o)->shortcut()) write_c(", 0x%x, ", ((Fl_Button*)o)->shortcut()); @@ -439,5 +462,5 @@ void shortcut_in_cb(Shortcut_Button* i, void* v) { } // -// End of "$Id: Fl_Menu_Type.cxx,v 1.16.2.5 2000/02/05 09:20:45 bill Exp $". +// End of "$Id: Fl_Menu_Type.cxx,v 1.16.2.6 2000/04/24 18:22:47 mike Exp $". // diff --git a/fluid/Fl_Type.h b/fluid/Fl_Type.h index 1aa63951f..605414f5e 100644 --- a/fluid/Fl_Type.h +++ b/fluid/Fl_Type.h @@ -1,5 +1,5 @@ // -// "$Id: Fl_Type.h,v 1.5.2.6 2000/02/05 09:20:46 bill Exp $" +// "$Id: Fl_Type.h,v 1.5.2.7 2000/04/24 18:22:47 mike Exp $" // // Widget type header file for the Fast Light Tool Kit (FLTK). // @@ -499,6 +499,7 @@ void write_word(const char *); void write_string(const char *,...); int write_file(const char *, int selected_only = 0); int write_code(const char *cfile, const char *hfile); +int write_strings(const char *sfile); int write_declare(const char *, ...); int is_id(char); @@ -528,5 +529,5 @@ int storestring(const char *n, const char * & p, int nostrip=0); extern int include_H_from_C; // -// End of "$Id: Fl_Type.h,v 1.5.2.6 2000/02/05 09:20:46 bill Exp $". +// End of "$Id: Fl_Type.h,v 1.5.2.7 2000/04/24 18:22:47 mike Exp $". // diff --git a/fluid/Fl_Widget_Type.cxx b/fluid/Fl_Widget_Type.cxx index bc1a985f6..6ffcb8d70 100644 --- a/fluid/Fl_Widget_Type.cxx +++ b/fluid/Fl_Widget_Type.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_Widget_Type.cxx,v 1.15.2.10 2000/03/06 14:45:54 mike Exp $" +// "$Id: Fl_Widget_Type.cxx,v 1.15.2.11 2000/04/24 18:22:48 mike Exp $" // // Widget type code for the Fast Light Tool Kit (FLTK). // @@ -27,6 +27,7 @@ #include <FL/Fl_Group.H> #include <FL/Fl_Input.H> #include "Fl_Widget_Type.h" +#include "alignment_panel.h" #include <FL/fl_message.H> #include <FL/Fl_Slider.H> #include <FL/Fl_Window.H> @@ -45,6 +46,12 @@ extern int reading_file; int force_parent; extern int gridx; extern int gridy; +extern int msgnum; +extern int i18n_type; +extern const char* i18n_include; +extern const char* i18n_function; +extern const char* i18n_file; +extern const char* i18n_set; int Fl_Widget_Type::is_widget() const {return 1;} @@ -1333,7 +1340,21 @@ void Fl_Widget_Type::write_code1() { } if (!image && label() && *label()) { write_c(", "); - write_cstring(label()); + switch (i18n_type) { + case 0 : /* None */ + write_cstring(label()); + break; + case 1 : /* GNU gettext */ + write_c("%s(", i18n_function); + write_cstring(label()); + write_c(")"); + break; + case 2 : /* POSIX catgets */ + write_c("catgets(%s,%s,%d,", i18n_file, i18n_set, msgnum ++); + write_cstring(label()); + write_c(")"); + break; + } } write_c(");\n"); indentation += 2; @@ -1747,5 +1768,5 @@ int Fl_Widget_Type::read_fdesign(const char* name, const char* value) { } // -// End of "$Id: Fl_Widget_Type.cxx,v 1.15.2.10 2000/03/06 14:45:54 mike Exp $". +// End of "$Id: Fl_Widget_Type.cxx,v 1.15.2.11 2000/04/24 18:22:48 mike Exp $". // diff --git a/fluid/Fl_Window_Type.cxx b/fluid/Fl_Window_Type.cxx index 5c6ed9d2c..29c3186d5 100644 --- a/fluid/Fl_Window_Type.cxx +++ b/fluid/Fl_Window_Type.cxx @@ -1,5 +1,5 @@ // -// "$Id: Fl_Window_Type.cxx,v 1.13.2.3 1999/09/10 16:40:17 bill Exp $" +// "$Id: Fl_Window_Type.cxx,v 1.13.2.4 2000/04/24 18:22:49 mike Exp $" // // Window type code for the Fast Light Tool Kit (FLTK). // @@ -43,6 +43,12 @@ int gridy = 5; int snap = 3; int include_H_from_C = 1; +extern int i18n_type; +extern const char* i18n_include; +extern const char* i18n_function; +extern const char* i18n_file; +extern const char* i18n_set; +extern int modflag; void alignment_cb(Fl_Input *i, long v) { int n = atoi(i->value()); @@ -52,6 +58,50 @@ void alignment_cb(Fl_Input *i, long v) { case 2: gridy = n; break; case 3: snap = n; break; } + modflag = 1; +} + +void i18n_type_cb(Fl_Choice *c, void *) { + switch (i18n_type = c->value()) { + case 0 : /* None */ + i18n_include_input->hide(); + i18n_file_input->hide(); + i18n_set_input->hide(); + i18n_function_input->hide(); + break; + case 1 : /* GNU gettext */ + i18n_include_input->value("<libintl.h>"); + i18n_function_input->value("gettext"); + i18n_include_input->show(); + i18n_file_input->hide(); + i18n_set_input->hide(); + i18n_function_input->show(); + break; + case 2 : /* POSIX cat */ + i18n_include_input->value("<nl_types.h>"); + i18n_file_input->value("i18n_file"); + i18n_set_input->value("1"); + i18n_include_input->show(); + i18n_file_input->show(); + i18n_set_input->show(); + i18n_function_input->hide(); + break; + } + + modflag = 1; +} + +void i18n_text_cb(Fl_Input *i, void *) { + if (i == i18n_function_input) + i18n_function = i->value(); + else if (i == i18n_file_input) + i18n_file = i->value(); + else if (i == i18n_set_input) + i18n_set = i->value(); + else if (i == i18n_include_input) + i18n_include = i->value(); + + modflag = 1; } extern const char* header_file_name; @@ -66,6 +116,31 @@ void show_alignment_cb(Fl_Widget *, void *) { sprintf(buf,"%d",gridx); horizontal_input->value(buf); sprintf(buf,"%d",gridy); vertical_input->value(buf); sprintf(buf,"%d",snap); snap_input->value(buf); + i18n_type_chooser->value(i18n_type); + i18n_function_input->value(i18n_function); + i18n_file_input->value(i18n_file); + i18n_set_input->value(i18n_set); + i18n_include_input->value(i18n_include); + switch (i18n_type) { + case 0 : /* None */ + i18n_include_input->hide(); + i18n_file_input->hide(); + i18n_set_input->hide(); + i18n_function_input->hide(); + break; + case 1 : /* GNU gettext */ + i18n_include_input->show(); + i18n_file_input->hide(); + i18n_set_input->hide(); + i18n_function_input->show(); + break; + case 2 : /* POSIX cat */ + i18n_include_input->show(); + i18n_file_input->show(); + i18n_set_input->show(); + i18n_function_input->hide(); + break; + } alignment_window->show(); } @@ -672,5 +747,5 @@ int Fl_Window_Type::read_fdesign(const char* name, const char* value) { } // -// End of "$Id: Fl_Window_Type.cxx,v 1.13.2.3 1999/09/10 16:40:17 bill Exp $". +// End of "$Id: Fl_Window_Type.cxx,v 1.13.2.4 2000/04/24 18:22:49 mike Exp $". // diff --git a/fluid/alignment_panel.cxx b/fluid/alignment_panel.cxx index fc9da9f62..94095961c 100644 --- a/fluid/alignment_panel.cxx +++ b/fluid/alignment_panel.cxx @@ -20,62 +20,117 @@ Fl_Input *code_file_input=(Fl_Input *)0; Fl_Light_Button *include_H_from_C_button=(Fl_Light_Button *)0; +Fl_Choice *i18n_type_chooser=(Fl_Choice *)0; + +Fl_Menu_Item menu_i18n_type_chooser[] = { + {"None", 0, 0, 0, 0, 0, 0, 14, 0}, + {"GNU gettext", 0, 0, 0, 0, 0, 0, 14, 0}, + {"POSIX catgets", 0, 0, 0, 0, 0, 0, 14, 0}, + {0} +}; + +Fl_Input *i18n_include_input=(Fl_Input *)0; + +Fl_Input *i18n_file_input=(Fl_Input *)0; + +Fl_Input *i18n_set_input=(Fl_Input *)0; + +Fl_Input *i18n_function_input=(Fl_Input *)0; + Fl_Window* make_alignment_window() { Fl_Window* w; - { Fl_Window* o = alignment_window = new Fl_Window(210, 320, "Preferences"); + { Fl_Window* o = alignment_window = new Fl_Window(365, 340, "Preferences"); w = o; - { Fl_Box* o = new Fl_Box(10, 25, 190, 100, "Alignment:"); + { Fl_Box* o = new Fl_Box(10, 25, 130, 130, "Alignment:"); o->box(FL_ENGRAVED_FRAME); o->labelsize(12); o->align(FL_ALIGN_TOP_LEFT); } - { Fl_Input* o = horizontal_input = new Fl_Input(90, 35, 100, 20, "Horizontal:"); + { Fl_Input* o = horizontal_input = new Fl_Input(90, 35, 40, 20, "Horizontal:"); o->type(2); o->box(FL_THIN_DOWN_BOX); o->callback((Fl_Callback*)alignment_cb, (void*)(1)); o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY); } - { Fl_Input* o = vertical_input = new Fl_Input(90, 65, 100, 20, "Vertical:"); + { Fl_Input* o = vertical_input = new Fl_Input(90, 65, 40, 20, "Vertical:"); o->type(2); o->box(FL_THIN_DOWN_BOX); o->callback((Fl_Callback*)alignment_cb, (void*)(2)); o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY); } - { Fl_Input* o = snap_input = new Fl_Input(90, 95, 100, 20, "Snap:"); + { Fl_Input* o = snap_input = new Fl_Input(90, 95, 40, 20, "Snap:"); o->type(2); o->box(FL_THIN_DOWN_BOX); o->callback((Fl_Callback*)alignment_cb, (void*)(3)); o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY); } - { Fl_Button* o = new Fl_Button(140, 285, 60, 25, "Close"); + { Fl_Button* o = new Fl_Button(295, 305, 60, 25, "Close"); o->callback((Fl_Callback*)cb_Close); } - { Fl_Box* o = new Fl_Box(10, 145, 190, 130, "Output File Names:"); + { Fl_Box* o = new Fl_Box(10, 175, 345, 120, "Output File Names:"); o->box(FL_ENGRAVED_FRAME); o->labelsize(12); o->align(FL_ALIGN_TOP_LEFT); } - { Fl_Box* o = new Fl_Box(20, 155, 170, 30, "Use \"name.ext\" to set name or just \".ext\" to set only extension."); + { Fl_Box* o = new Fl_Box(20, 185, 325, 15, "Use \"name.ext\" to set name or just \".ext\" to set only extension."); o->labelsize(10); o->align(132|FL_ALIGN_INSIDE); } - { Fl_Input* o = header_file_input = new Fl_Input(100, 185, 90, 20, "Header File:"); + { Fl_Input* o = header_file_input = new Fl_Input(100, 205, 245, 20, "Header File:"); o->box(FL_THIN_DOWN_BOX); + o->textfont(4); o->callback((Fl_Callback*)header_input_cb, (void*)(1)); o->when(FL_WHEN_CHANGED); } - { Fl_Input* o = code_file_input = new Fl_Input(100, 215, 90, 20, "Code File:"); + { Fl_Input* o = code_file_input = new Fl_Input(100, 235, 245, 20, "Code File:"); o->box(FL_THIN_DOWN_BOX); + o->textfont(4); o->callback((Fl_Callback*)code_input_cb, (void*)(1)); o->when(FL_WHEN_CHANGED); } - { Fl_Light_Button* o = include_H_from_C_button = new Fl_Light_Button(20, 245, 170, 20, "Include Header from Code"); + { Fl_Light_Button* o = include_H_from_C_button = new Fl_Light_Button(100, 265, 170, 20, "Include Header from Code"); o->value(1); o->labelsize(12); o->callback((Fl_Callback*)include_H_from_C_button_cb); } + { Fl_Box* o = new Fl_Box(150, 25, 205, 130, "Internationalization:"); + o->box(FL_ENGRAVED_FRAME); + o->labelsize(12); + o->align(FL_ALIGN_TOP_LEFT); + } + { Fl_Choice* o = i18n_type_chooser = new Fl_Choice(220, 35, 125, 20, "Use:"); + o->box(FL_THIN_UP_BOX); + o->callback((Fl_Callback*)i18n_type_cb); + o->menu(menu_i18n_type_chooser); + } + { Fl_Input* o = i18n_include_input = new Fl_Input(220, 65, 125, 20, "#include:"); + o->box(FL_THIN_DOWN_BOX); + o->textfont(4); + o->callback((Fl_Callback*)i18n_text_cb); + o->hide(); + } + { Fl_Input* o = i18n_file_input = new Fl_Input(220, 95, 125, 20, "File:"); + o->box(FL_THIN_DOWN_BOX); + o->textfont(4); + o->callback((Fl_Callback*)i18n_text_cb); + o->hide(); + } + { Fl_Input* o = i18n_set_input = new Fl_Input(220, 125, 125, 20, "Set:"); + o->type(2); + o->box(FL_THIN_DOWN_BOX); + o->textfont(4); + o->callback((Fl_Callback*)i18n_text_cb); + o->hide(); + } + { Fl_Input* o = i18n_function_input = new Fl_Input(220, 95, 125, 20, "Function:"); + o->box(FL_THIN_DOWN_BOX); + o->textfont(4); + o->callback((Fl_Callback*)i18n_text_cb); + o->hide(); + } o->set_modal(); o->end(); } return w; } +extern void i18n_cb(Fl_Choice *,void *); diff --git a/fluid/alignment_panel.fl b/fluid/alignment_panel.fl index 15ec80b96..978589d03 100644 --- a/fluid/alignment_panel.fl +++ b/fluid/alignment_panel.fl @@ -8,63 +8,107 @@ snap 3 Function {make_alignment_window()} {open } { Fl_Window alignment_window { - label Preferences open selected - xywh {658 262 210 320} modal visible + label Preferences open + xywh {473 284 365 340} hide modal } { Fl_Box {} { label {Alignment:} - xywh {10 25 190 100} box ENGRAVED_FRAME labelsize 12 align 5 + xywh {10 25 130 130} box ENGRAVED_FRAME labelsize 12 align 5 } Fl_Input horizontal_input { label {Horizontal:} user_data 1 user_data_type long callback alignment_cb - xywh {90 35 100 20} type Int box THIN_DOWN_BOX + xywh {90 35 40 20} type Int box THIN_DOWN_BOX code0 {o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);} } Fl_Input vertical_input { label {Vertical:} user_data 2 user_data_type long callback alignment_cb - xywh {90 65 100 20} type Int box THIN_DOWN_BOX + xywh {90 65 40 20} type Int box THIN_DOWN_BOX code0 {o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);} } Fl_Input snap_input { label {Snap:} user_data 3 user_data_type long callback alignment_cb - xywh {90 95 100 20} type Int box THIN_DOWN_BOX + xywh {90 95 40 20} type Int box THIN_DOWN_BOX code0 {o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);} } Fl_Button {} { label Close callback {alignment_window->hide();} - xywh {140 285 60 25} + xywh {295 305 60 25} } Fl_Box {} { label {Output File Names:} - xywh {10 145 190 130} box ENGRAVED_FRAME labelsize 12 align 5 + xywh {10 175 345 120} box ENGRAVED_FRAME labelsize 12 align 5 } Fl_Box {} { label {Use "name.ext" to set name or just ".ext" to set only extension.} - xywh {20 155 170 30} labelsize 10 align 148 + xywh {20 185 325 15} labelsize 10 align 148 } Fl_Input header_file_input { label {Header File:} user_data 1 user_data_type {void*} callback header_input_cb - xywh {100 185 90 20} box THIN_DOWN_BOX when 1 + xywh {100 205 245 20} box THIN_DOWN_BOX when 1 textfont 4 } Fl_Input code_file_input { label {Code File:} user_data 1 user_data_type {void*} callback code_input_cb - xywh {100 215 90 20} box THIN_DOWN_BOX when 1 + xywh {100 235 245 20} box THIN_DOWN_BOX when 1 textfont 4 } Fl_Light_Button include_H_from_C_button { label {Include Header from Code} callback include_H_from_C_button_cb - xywh {20 245 170 20} value 1 labelsize 12 + xywh {100 265 170 20} value 1 labelsize 12 + } + Fl_Box {} { + label {Internationalization:} + xywh {150 25 205 130} box ENGRAVED_FRAME labelsize 12 align 5 + } + Fl_Choice i18n_type_chooser { + label {Use:} + callback i18n_type_cb open + xywh {220 35 125 20} box THIN_UP_BOX + } { + menuitem {} { + label None + xywh {0 0 100 20} + } + menuitem {} { + label {GNU gettext} + xywh {0 0 100 20} + } + menuitem {} { + label {POSIX catgets} + xywh {0 0 100 20} + } + } + Fl_Input i18n_include_input { + label {\#include:} + callback i18n_text_cb selected + xywh {220 65 125 20} box THIN_DOWN_BOX textfont 4 hide + } + Fl_Input i18n_file_input { + label {File:} + callback i18n_text_cb + xywh {220 95 125 20} box THIN_DOWN_BOX textfont 4 hide + } + Fl_Input i18n_set_input { + label {Set:} + callback i18n_text_cb + xywh {220 125 125 20} type Int box THIN_DOWN_BOX textfont 4 hide + } + Fl_Input i18n_function_input { + label {Function:} + callback i18n_text_cb + xywh {220 95 125 20} box THIN_DOWN_BOX textfont 4 hide } } } + +decl {extern void i18n_cb(Fl_Choice *,void *);} {} diff --git a/fluid/alignment_panel.h b/fluid/alignment_panel.h index dcf8d3863..cf73c8927 100644 --- a/fluid/alignment_panel.h +++ b/fluid/alignment_panel.h @@ -19,5 +19,14 @@ extern Fl_Input *code_file_input; #include <FL/Fl_Light_Button.H> extern void include_H_from_C_button_cb(Fl_Light_Button*, void*); extern Fl_Light_Button *include_H_from_C_button; +#include <FL/Fl_Choice.H> +extern void i18n_type_cb(Fl_Choice*, void*); +extern Fl_Choice *i18n_type_chooser; +extern void i18n_text_cb(Fl_Input*, void*); +extern Fl_Input *i18n_include_input; +extern Fl_Input *i18n_file_input; +extern Fl_Input *i18n_set_input; +extern Fl_Input *i18n_function_input; Fl_Window* make_alignment_window(); +extern Fl_Menu_Item menu_i18n_type_chooser[]; #endif diff --git a/fluid/code.cxx b/fluid/code.cxx index 6503e02c9..d1ffcde91 100644 --- a/fluid/code.cxx +++ b/fluid/code.cxx @@ -1,5 +1,5 @@ // -// "$Id: code.cxx,v 1.9.2.3 2000/02/25 03:44:21 mike Exp $" +// "$Id: code.cxx,v 1.9.2.4 2000/04/24 18:22:50 mike Exp $" // // Code output routines for the Fast Light Tool Kit (FLTK). // @@ -35,6 +35,12 @@ static FILE *code_file; static FILE *header_file; +int msgnum; +extern int i18n_type; +extern const char* i18n_include; +extern const char* i18n_function; +extern const char* i18n_file; +extern const char* i18n_set; // return true if c can be in a C identifier. I needed this so // it is not messed up by locale settings: @@ -279,9 +285,18 @@ int write_code(const char *s, const char *t) { } write_declare("#include <FL/Fl.H>"); - + if (i18n_type && i18n_include_input->value()[0]) { + if (i18n_include_input->value()[0] != '<' && + i18n_include_input->value()[0] != '\"') + write_c("#include \"%s\"\n", i18n_include_input->value()); + else + write_c("#include %s\n", i18n_include_input->value()); + if (i18n_type == 2) + write_c("extern nl_catd %s;\n", i18n_file_input->value()); + } if (t && include_H_from_C) write_c("#include \"%s\"\n", filename_name(t)); + msgnum = 1; for (Fl_Type* p = Fl_Type::first; p;) { // write all static data for this & all children first p->write_static(); @@ -302,6 +317,76 @@ int write_code(const char *s, const char *t) { return x >= 0 && y >= 0; } +int write_strings(const char *sfile) { + FILE *fp = fopen(sfile, "w"); + Fl_Type *p; + + if (!fp) return 1; + + switch (i18n_type) { + case 0 : /* None, just put static text out */ + fprintf(fp, "# generated by Fast Light User Interface Designer (fluid) version %.4f\n", + FL_VERSION); + for (p = Fl_Type::first; p; p = p->next) { + if (p->is_widget() && p->label() && !((Fl_Widget_Type *)p)->image) { + for (const char *s = p->label(); *s; s ++) + if (*s < 32 || *s > 126 || *s == '\"') + fprintf(fp, "\\%03o", *s); + else + putc(*s, fp); + putc('\n', fp); + } + } + break; + case 1 : /* GNU gettext, put a .po file out */ + fprintf(fp, "# generated by Fast Light User Interface Designer (fluid) version %.4f\n", + FL_VERSION); + for (p = Fl_Type::first; p; p = p->next) { + if (p->is_widget() && p->label() && !((Fl_Widget_Type *)p)->image) { + const char *s; + + fputs("msgid \"", fp); + for (s = p->label(); *s; s ++) + if (*s < 32 || *s > 126 || *s == '\"') + fprintf(fp, "\\%03o", *s); + else + putc(*s, fp); + fputs("\"\n", fp); + + fputs("msgstr \"", fp); + for (s = p->label(); *s; s ++) + if (*s < 32 || *s > 126 || *s == '\"') + fprintf(fp, "\\%03o", *s); + else + putc(*s, fp); + fputs("\"\n", fp); + } + } + break; + case 2 : /* POSIX catgets, put a .msg file out */ + msgnum = 1; + fprintf(fp, "$ generated by Fast Light User Interface Designer (fluid) version %.4f\n", + FL_VERSION); + fprintf(fp, "$set %s\n", i18n_set_input->value()); + fputs("$quote \"\n", fp); + + for (p = Fl_Type::first; p; p = p->next) { + if (p->is_widget() && p->label() && !((Fl_Widget_Type *)p)->image) { + fprintf(fp, "%d \"", msgnum ++); + for (const char *s = p->label(); *s; s ++) + if (*s < 32 || *s > 126 || *s == '\"') + fprintf(fp, "\\%03o", *s); + else + putc(*s, fp); + fputs("\"\n", fp); + } + } + break; + } + + return fclose(fp); +} + //////////////////////////////////////////////////////////////// void Fl_Type::write_static() {} @@ -312,5 +397,5 @@ void Fl_Type::write_code1() { void Fl_Type::write_code2() {} // -// End of "$Id: code.cxx,v 1.9.2.3 2000/02/25 03:44:21 mike Exp $". +// End of "$Id: code.cxx,v 1.9.2.4 2000/04/24 18:22:50 mike Exp $". // diff --git a/fluid/file.cxx b/fluid/file.cxx index 2a6902bd3..3e0253d20 100644 --- a/fluid/file.cxx +++ b/fluid/file.cxx @@ -1,5 +1,5 @@ // -// "$Id: file.cxx,v 1.7.2.1 2000/02/25 03:44:22 mike Exp $" +// "$Id: file.cxx,v 1.7.2.2 2000/04/24 18:22:50 mike Exp $" // // Fluid file routines for the Fast Light Tool Kit (FLTK). // @@ -305,6 +305,11 @@ const char *read_word(int wantbrace) { // global int variables: extern int gridx, gridy, snap; +extern int i18n_type; +extern const char* i18n_include; +extern const char* i18n_function; +extern const char* i18n_file; +extern const char* i18n_set; static struct {const char* name; int* value;} inttable[] = { {"gridx", &gridx}, {"gridy", &gridy}, @@ -323,6 +328,19 @@ int write_file(const char *filename, int selected_only) { "version %.4f",FL_VERSION); if(!include_H_from_C) write_string("\ndo_not_include_H_from_C"); + if (i18n_type) { + write_string("\ni18n_type %d", i18n_type); + write_string("\ni18n_include %s", i18n_include); + switch (i18n_type) { + case 1 : /* GNU gettext */ + write_string("\ni18n_function %s", i18n_function); + break; + case 2 : /* POSIX catgets */ + write_string("\ni18n_file %s", i18n_file); + write_string("\ni18n_set %s", i18n_set); + break; + } + } if (!selected_only) { write_string("\nheader_name"); write_word(header_file_name); write_string("\ncode_name"); write_word(code_file_name); @@ -390,11 +408,40 @@ static void read_children(Fl_Type *p, int paste) { continue; } - if (!strcmp(c,"do_not_include_H_from_C")) - { + if (!strcmp(c,"do_not_include_H_from_C")) { include_H_from_C=0; goto CONTINUE; } + if (!strcmp(c,"i18n_type")) { + i18n_type = atoi(read_word()); + goto CONTINUE; + } + if (!strcmp(c,"i18n_function")) { + i18n_function = strdup(read_word()); + goto CONTINUE; + } + if (!strcmp(c,"i18n_file")) { + i18n_file = strdup(read_word()); + goto CONTINUE; + } + if (!strcmp(c,"i18n_set")) { + i18n_set = strdup(read_word()); + goto CONTINUE; + } + if (!strcmp(c,"i18n_include")) { + i18n_include = strdup(read_word()); + goto CONTINUE; + } + if (!strcmp(c,"i18n_type")) + { + i18n_type = atoi(read_word()); + goto CONTINUE; + } + if (!strcmp(c,"i18n_type")) + { + i18n_type = atoi(read_word()); + goto CONTINUE; + } if (!strcmp(c,"header_name")) { if (!header_file_set) header_file_name = strdup(read_word()); else read_word(); @@ -592,5 +639,5 @@ void read_fdesign() { } // -// End of "$Id: file.cxx,v 1.7.2.1 2000/02/25 03:44:22 mike Exp $". +// End of "$Id: file.cxx,v 1.7.2.2 2000/04/24 18:22:50 mike Exp $". // diff --git a/fluid/fluid.cxx b/fluid/fluid.cxx index 6e80e4bfe..6ef06bae0 100644 --- a/fluid/fluid.cxx +++ b/fluid/fluid.cxx @@ -1,5 +1,5 @@ // -// "$Id: fluid.cxx,v 1.15.2.3 2000/04/04 17:57:01 bill Exp $" +// "$Id: fluid.cxx,v 1.15.2.4 2000/04/24 18:22:50 mike Exp $" // // FLUID main entry for the Fast Light Tool Kit (FLTK). // @@ -163,6 +163,11 @@ int header_file_set = 0; int code_file_set = 0; const char* header_file_name = ".h"; const char* code_file_name = ".cxx"; +int i18n_type = 0; +const char* i18n_include = ""; +const char* i18n_function = ""; +const char* i18n_file = ""; +const char* i18n_set = ""; void write_cb(Fl_Widget *, void *) { if (!filename) { @@ -198,6 +203,29 @@ void write_cb(Fl_Widget *, void *) { } } +void write_strings_cb(Fl_Widget *, void *) { + static char *exts[] = { ".txt", ".po", ".msg" }; + if (!filename) { + save_cb(0,0); + if (!filename) return; + } + char sname[1024]; + strcpy(sname,filename_name(filename)); + filename_setext(sname, exts[i18n_type]); + if (!compile_only) goto_source_dir(); + int x = write_strings(sname); + if (!compile_only) leave_source_dir(); + if (compile_only) { + if (x) {fprintf(stderr,"%s : %s\n",sname,strerror(errno)); exit(1);} + } else { + if (x) { + fl_message("Can't write %s: %s", sname, strerror(errno)); + } else { + fl_message("Wrote %s", sname); + } + } +} + void openwidget_cb(Fl_Widget *, void *) { if (!Fl_Type::current) { fl_message("Please select a widget"); @@ -297,6 +325,7 @@ Fl_Menu_Item Main_Menu[] = { {"Save As...", FL_ALT+'S', save_cb, (void*)1}, {"Merge...", FL_ALT+'i', open_cb, (void*)1, FL_MENU_DIVIDER}, {"Write code", FL_ALT+'C', write_cb, 0}, + {"Write strings", FL_ALT+'W', write_strings_cb, 0}, {"Quit", FL_ALT+'q', exit_cb}, {0}, {"&Edit",0,0,0,FL_SUBMENU}, @@ -428,5 +457,5 @@ int main(int argc,char **argv) { } // -// End of "$Id: fluid.cxx,v 1.15.2.3 2000/04/04 17:57:01 bill Exp $". +// End of "$Id: fluid.cxx,v 1.15.2.4 2000/04/24 18:22:50 mike Exp $". // |
