summaryrefslogtreecommitdiffstats
path: root/scripts/gettext.patch
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/gettext.patch')
-rw-r--r--scripts/gettext.patch194
1 files changed, 194 insertions, 0 deletions
diff --git a/scripts/gettext.patch b/scripts/gettext.patch
new file mode 100644
index 00000000..9470c6f9
--- /dev/null
+++ b/scripts/gettext.patch
@@ -0,0 +1,194 @@
+diff -ru src.orig/xget-lex.c src/xget-lex.c
+--- src.orig/xget-lex.c Fri May 1 06:45:12 1998
++++ src/xget-lex.c Fri Apr 27 16:05:06 2001
+@@ -78,17 +78,18 @@
+
+ enum token_type_ty
+ {
+- token_type_character_constant,
+- token_type_eof,
+- token_type_eoln,
+- token_type_hash,
+- token_type_lp,
+- token_type_comma,
+- token_type_name,
+- token_type_number,
+- token_type_string_literal,
+- token_type_symbol,
+- token_type_white_space
++ token_type_character_constant = 0,
++ token_type_eof = 1,
++ token_type_eoln = 2,
++ token_type_hash = 3,
++ token_type_lp = 4,
++ token_type_rp = 5,
++ token_type_comma = 6,
++ token_type_name = 7,
++ token_type_number = 8,
++ token_type_string_literal = 9,
++ token_type_symbol = 10,
++ token_type_white_space = 11
+ };
+ typedef enum token_type_ty token_type_ty;
+
+@@ -941,6 +942,10 @@
+ tp->type = token_type_lp;
+ return;
+
++ case ')':
++ tp->type = token_type_rp;
++ return;
++
+ case ',':
+ tp->type = token_type_comma;
+ return;
+@@ -1236,6 +1241,11 @@
+ tp->type = xgettext_token_type_lp;
+ return;
+
++ case token_type_rp:
++ last_non_comment_line = newline_count;
++ tp->type = xgettext_token_type_rp;
++ return;
++
+ case token_type_comma:
+ last_non_comment_line = newline_count;
+
+diff -ru src.orig/xget-lex.h src/xget-lex.h
+--- src.orig/xget-lex.h Fri May 1 06:45:23 1998
++++ src/xget-lex.h Fri Apr 27 16:05:06 2001
+@@ -22,13 +22,14 @@
+
+ enum xgettext_token_type_ty
+ {
+- xgettext_token_type_eof,
+- xgettext_token_type_keyword1,
+- xgettext_token_type_keyword2,
+- xgettext_token_type_lp,
+- xgettext_token_type_comma,
+- xgettext_token_type_string_literal,
+- xgettext_token_type_symbol
++ xgettext_token_type_eof = 0,
++ xgettext_token_type_keyword1 = 1,
++ xgettext_token_type_keyword2 = 2,
++ xgettext_token_type_lp = 3,
++ xgettext_token_type_rp = 4,
++ xgettext_token_type_comma = 5,
++ xgettext_token_type_string_literal = 6,
++ xgettext_token_type_symbol = 7
+ };
+ typedef enum xgettext_token_type_ty xgettext_token_type_ty;
+
+diff -ru src.orig/xgettext.c src/xgettext.c
+--- src.orig/xgettext.c Wed Apr 29 18:57:50 1998
++++ src/xgettext.c Fri Apr 27 16:33:46 2001
+@@ -835,7 +835,8 @@
+ int is_cpp_file;
+ {
+ int state;
+-
++ char *msgid = 0;
++
+ /* Inform scanner whether we have C++ files or not. */
+ if (is_cpp_file)
+ xgettext_lex_cplusplus ();
+@@ -861,8 +862,12 @@
+ State 3 = seen one of our keywords with string in second parameter
+ State 4 = was in state 3 and now saw a left paren
+ State 5 = waiting for comma after being in state 4
+- State 6 = saw comma after being in state 5 */
++ State 6 = saw comma after being in state 5
++ State 7 = after comma and being in state 2
++ State 8 = after string and being in state 7
++ */
+ xgettext_lex (&token);
++
+ switch (token.type)
+ {
+ case xgettext_token_type_keyword1:
+@@ -886,18 +891,62 @@
+ state = 0;
+ }
+ continue;
++
++ case xgettext_token_type_rp:
++ if (state == 2 || state == 8) {
++ token.string = strdup(msgid);
++ remember_a_message (mlp, &token);
++ free(msgid);
++ msgid = 0;
++ state = 0;
++ }
++ continue;
+
+ case xgettext_token_type_comma:
+- state = state == 5 ? 6 : 0;
++ switch (state) {
++ case 5:
++ state = 6;
++ break;
++ case 2:
++ state = 7;
++ break;
++ case 8: {
++ char *newstring = (char*)malloc(strlen(msgid) + 2);
++ strcpy(newstring, "_n:");
++ strcat(newstring, msgid + 2);
++ free(msgid);
++ token.string = newstring;
++ remember_a_message (mlp, &token);
++ msgid = 0;
++ state = 0;
++ break;
++ }
++ default:
++ state = 0;
++ break;
++ }
+ continue;
+
+ case xgettext_token_type_string_literal:
+ if (extract_all || state == 2 || state == 6)
+ {
+- remember_a_message (mlp, &token);
+- state = 0;
++ if (msgid)
++ free(msgid);
++ msgid = strdup(token.string);
++ // state = 0;
+ }
+- else
++ else if (state == 7)
++ {
++ if (msgid) {
++ char *newstring = (char*)malloc(strlen(msgid) + strlen(token.string) + 20);
++ sprintf(newstring, "_: %s\n%s", msgid, token.string);
++ free(msgid);
++ free(token.string);
++ token.string = msgid = newstring;
++ state = 8;
++ }
++ }
++ else
+ {
+ free (token.string);
+ state = (state == 4 || state == 5) ? 5 : 0;
+@@ -905,8 +954,8 @@
+ continue;
+
+ case xgettext_token_type_symbol:
+- state = (state == 4 || state == 5) ? 5 : 0;
+- continue;
++ state = (state == 4 || state == 5) ? 5 : 0;
++ continue;
+
+ default:
+ state = 0;
+@@ -915,6 +964,7 @@
+ case xgettext_token_type_eof:
+ break;
+ }
++
+ break;
+ }
+