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;
}
collectedComments = rets;
CollectedComments = rets;
}
protected void collectComments() {
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;
foreach (char ch in rawStr)
{
@ -90,6 +91,8 @@ options {
break;
case '\n':
buf.Append("\\n");
rets.Add(buf.ToString());
buf = new StringBuilder();
break;
case '\f':
buf.Append("\\f");
@ -104,7 +107,10 @@ options {
if (ch != '"')
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})
| Character_literal -> string(payload={$Character_literal.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"})
| FALSE -> string(payload={"false"})
| 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>;"
variable_declarators(varinits) ::= "<varinits; separator=\",\">"
variable_declarators(varinits) ::= "<varinits; separator=\", \">"
variable_declarator(typename,init) ::= "<typename><if(init)> = <init><endif>"
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>"
// ******* UTILITY ***********
string(payload) ::= "<payload>"
string(payload) ::= "<payload>"
verbatim_string(payload) ::= <<
"<payload; separator="\" + \n\"">"
>>