1diff -ru src.orig/xget-lex.c src/xget-lex.c 2--- src.orig/xget-lex.c Fri May 1 06:45:12 1998 3+++ src/xget-lex.c Fri Apr 27 16:05:06 2001 4@@ -78,17 +78,18 @@ 5 6 enum token_type_ty 7 { 8- token_type_character_constant, 9- token_type_eof, 10- token_type_eoln, 11- token_type_hash, 12- token_type_lp, 13- token_type_comma, 14- token_type_name, 15- token_type_number, 16- token_type_string_literal, 17- token_type_symbol, 18- token_type_white_space 19+ token_type_character_constant = 0, 20+ token_type_eof = 1, 21+ token_type_eoln = 2, 22+ token_type_hash = 3, 23+ token_type_lp = 4, 24+ token_type_rp = 5, 25+ token_type_comma = 6, 26+ token_type_name = 7, 27+ token_type_number = 8, 28+ token_type_string_literal = 9, 29+ token_type_symbol = 10, 30+ token_type_white_space = 11 31 }; 32 typedef enum token_type_ty token_type_ty; 33 34@@ -941,6 +942,10 @@ 35 tp->type = token_type_lp; 36 return; 37 38+ case ')': 39+ tp->type = token_type_rp; 40+ return; 41+ 42 case ',': 43 tp->type = token_type_comma; 44 return; 45@@ -1236,6 +1241,11 @@ 46 tp->type = xgettext_token_type_lp; 47 return; 48 49+ case token_type_rp: 50+ last_non_comment_line = newline_count; 51+ tp->type = xgettext_token_type_rp; 52+ return; 53+ 54 case token_type_comma: 55 last_non_comment_line = newline_count; 56 57diff -ru src.orig/xget-lex.h src/xget-lex.h 58--- src.orig/xget-lex.h Fri May 1 06:45:23 1998 59+++ src/xget-lex.h Fri Apr 27 16:05:06 2001 60@@ -22,13 +22,14 @@ 61 62 enum xgettext_token_type_ty 63 { 64- xgettext_token_type_eof, 65- xgettext_token_type_keyword1, 66- xgettext_token_type_keyword2, 67- xgettext_token_type_lp, 68- xgettext_token_type_comma, 69- xgettext_token_type_string_literal, 70- xgettext_token_type_symbol 71+ xgettext_token_type_eof = 0, 72+ xgettext_token_type_keyword1 = 1, 73+ xgettext_token_type_keyword2 = 2, 74+ xgettext_token_type_lp = 3, 75+ xgettext_token_type_rp = 4, 76+ xgettext_token_type_comma = 5, 77+ xgettext_token_type_string_literal = 6, 78+ xgettext_token_type_symbol = 7 79 }; 80 typedef enum xgettext_token_type_ty xgettext_token_type_ty; 81 82diff -ru src.orig/xgettext.c src/xgettext.c 83--- src.orig/xgettext.c Wed Apr 29 18:57:50 1998 84+++ src/xgettext.c Fri Apr 27 16:33:46 2001 85@@ -835,7 +835,8 @@ 86 int is_cpp_file; 87 { 88 int state; 89- 90+ char *msgid = 0; 91+ 92 /* Inform scanner whether we have C++ files or not. */ 93 if (is_cpp_file) 94 xgettext_lex_cplusplus (); 95@@ -861,8 +862,12 @@ 96 State 3 = seen one of our keywords with string in second parameter 97 State 4 = was in state 3 and now saw a left paren 98 State 5 = waiting for comma after being in state 4 99- State 6 = saw comma after being in state 5 */ 100+ State 6 = saw comma after being in state 5 101+ State 7 = after comma and being in state 2 102+ State 8 = after string and being in state 7 103+ */ 104 xgettext_lex (&token); 105+ 106 switch (token.type) 107 { 108 case xgettext_token_type_keyword1: 109@@ -886,18 +891,62 @@ 110 state = 0; 111 } 112 continue; 113+ 114+ case xgettext_token_type_rp: 115+ if (state == 2 || state == 8) { 116+ token.string = strdup(msgid); 117+ remember_a_message (mlp, &token); 118+ free(msgid); 119+ msgid = 0; 120+ state = 0; 121+ } 122+ continue; 123 124 case xgettext_token_type_comma: 125- state = state == 5 ? 6 : 0; 126+ switch (state) { 127+ case 5: 128+ state = 6; 129+ break; 130+ case 2: 131+ state = 7; 132+ break; 133+ case 8: { 134+ char *newstring = (char*)malloc(strlen(msgid) + 2); 135+ strcpy(newstring, "_n:"); 136+ strcat(newstring, msgid + 2); 137+ free(msgid); 138+ token.string = newstring; 139+ remember_a_message (mlp, &token); 140+ msgid = 0; 141+ state = 0; 142+ break; 143+ } 144+ default: 145+ state = 0; 146+ break; 147+ } 148 continue; 149 150 case xgettext_token_type_string_literal: 151 if (extract_all || state == 2 || state == 6) 152 { 153- remember_a_message (mlp, &token); 154- state = 0; 155+ if (msgid) 156+ free(msgid); 157+ msgid = strdup(token.string); 158+ // state = 0; 159 } 160- else 161+ else if (state == 7) 162+ { 163+ if (msgid) { 164+ char *newstring = (char*)malloc(strlen(msgid) + strlen(token.string) + 20); 165+ sprintf(newstring, "_: %s\n%s", msgid, token.string); 166+ free(msgid); 167+ free(token.string); 168+ token.string = msgid = newstring; 169+ state = 8; 170+ } 171+ } 172+ else 173 { 174 free (token.string); 175 state = (state == 4 || state == 5) ? 5 : 0; 176@@ -905,8 +954,8 @@ 177 continue; 178 179 case xgettext_token_type_symbol: 180- state = (state == 4 || state == 5) ? 5 : 0; 181- continue; 182+ state = (state == 4 || state == 5) ? 5 : 0; 183+ continue; 184 185 default: 186 state = 0; 187@@ -915,6 +964,7 @@ 188 case xgettext_token_type_eof: 189 break; 190 } 191+ 192 break; 193 } 194 195