1
0
mirror of https://github.com/twiglet/cs2j.git synced 2025-01-18 13:15:17 +01:00

fix broken CollectComments, split verbatim strings on carriage returns

This commit is contained in:
Kevin Glynn 2010-12-04 13:00:16 +01:00
parent 82df2babbe
commit cdecbce4c0
2 changed files with 17 additions and 7 deletions

View File

@ -56,16 +56,17 @@ options {
} }
EmittedCommentTokenIdx = endIdx+1; EmittedCommentTokenIdx = endIdx+1;
} }
collectedComments = rets; CollectedComments = rets;
} }
protected void collectComments() { protected void collectComments() {
collectComments(((CommonTokenStream)this.GetTreeNodeStream().TokenStream).GetTokens().Count - 1); collectComments(((CommonTokenStream)this.GetTreeNodeStream().TokenStream).GetTokens().Count - 1);
} }
protected string escapeJavaString(string rawStr) protected List<string> escapeJavaString(string rawStr)
{ {
StringBuilder buf = new StringBuilder(rawStr.Length * 2); List<string> rets = new List<string>();
StringBuilder buf = new StringBuilder();
bool seenDQ = false; bool seenDQ = false;
foreach (char ch in rawStr) foreach (char ch in rawStr)
{ {
@ -90,6 +91,8 @@ options {
break; break;
case '\n': case '\n':
buf.Append("\\n"); buf.Append("\\n");
rets.Add(buf.ToString());
buf = new StringBuilder();
break; break;
case '\f': case '\f':
buf.Append("\\f"); buf.Append("\\f");
@ -104,7 +107,10 @@ options {
if (ch != '"') if (ch != '"')
seenDQ = false; seenDQ = false;
} }
return buf.ToString(); if (buf.Length > 0) {
rets.Add(buf.ToString());
}
return rets;
} }
} }
@ -1170,7 +1176,7 @@ literal:
| Hex_number -> string(payload={$Hex_number.text}) | Hex_number -> string(payload={$Hex_number.text})
| Character_literal -> string(payload={$Character_literal.text}) | Character_literal -> string(payload={$Character_literal.text})
| STRINGLITERAL -> string(payload={ $STRINGLITERAL.text }) | STRINGLITERAL -> string(payload={ $STRINGLITERAL.text })
| Verbatim_string_literal -> string(payload={ "\"" + escapeJavaString($Verbatim_string_literal.text.Substring(1)) + "\"" }) | Verbatim_string_literal -> verbatim_string(payload={ escapeJavaString($Verbatim_string_literal.text.Substring(1)) })
| TRUE -> string(payload={"true"}) | TRUE -> string(payload={"true"})
| FALSE -> string(payload={"false"}) | FALSE -> string(payload={"false"})
| NULL -> string(payload={"null"}) | NULL -> string(payload={"null"})

View File

@ -54,7 +54,7 @@ class_member(comments, member) ::= <<
>> >>
field(modifiers, type, field, comments, init) ::= "<comments><modifiers(modifiers)><type> <field><if(init)> = <init><endif>;" field(modifiers, type, field, comments, init) ::= "<comments><modifiers(modifiers)><type> <field><if(init)> = <init><endif>;"
variable_declarators(varinits) ::= "<varinits; separator=\",\">" variable_declarators(varinits) ::= "<varinits; separator=\", \">"
variable_declarator(typename,init) ::= "<typename><if(init)> = <init><endif>" variable_declarator(typename,init) ::= "<typename><if(init)> = <init><endif>"
primary_expression_start_parts(start,follows) ::= "<start><follows>" primary_expression_start_parts(start,follows) ::= "<start><follows>"
@ -91,4 +91,8 @@ imps(types) ::= "<if(types)>implements <types; separator=\",\"><endif>"
cast_expr(type, exp) ::= "(<type>)<exp>" cast_expr(type, exp) ::= "(<type>)<exp>"
// ******* UTILITY *********** // ******* UTILITY ***********
string(payload) ::= "<payload>" string(payload) ::= "<payload>"
verbatim_string(payload) ::= <<
"<payload; separator="\" + \n\"">"
>>