package antlr;
/* ANTLR Translator Generator
* Project led by Terence Parr at http://www.cs.usfca.edu
* Software rights: http://www.antlr.org/license.html
*
* $Id:$
*/
//
// ANTLR C# Code Generator by Kunle Odutola : kunle UNDERSCORE odutola AT hotmail DOT com
//
class
CSharpCharFormatter implements
CharFormatter {
/** Given a character value, return a string representing the character
* that can be embedded inside a string literal or character literal
* This works for Java/C/C++ code-generation and languages with compatible
* special-character-escapment.
* Code-generators for languages should override this method.
* @param c The character of interest.
* @param forCharLiteral true to escape for char literal, false for string literal
*/
public
String escapeChar(int
c, boolean
forCharLiteral) {
switch (
c)
{
// case GrammarAnalyzer.EPSILON_TYPE : return "<end-of-token>";
case '\n' : return "\\n";
case '\t' : return "\\t";
case '\r' : return "\\r";
case '\\' : return "\\\\";
case '\'' : return
forCharLiteral ? "\\'" : "'";
case '"' : return
forCharLiteral ? "\"" : "\\\"";
default :
if (
c<' '||
c>126 )
{
if ( ( 0x0000 <=
c ) && (
c <= 0x000F ) )
{
return "\\u000" +
Integer.
toString(
c,16);
}
else if ( ( 0x0010 <=
c ) && (
c <= 0x00FF ) )
{
return "\\u00" +
Integer.
toString(
c,16);
}
else if ( ( 0x0100 <=
c ) && (
c <= 0x0FFF ))
{
return "\\u0" +
Integer.
toString(
c,16);
}
else
{
return "\\u" +
Integer.
toString(
c,16);
}
}
else
{
return
String.
valueOf((char)
c);
}
}
}
/** Converts a String into a representation that can be use as a literal
* when surrounded by double-quotes.
* @param s The String to be changed into a literal
*/
public
String escapeString(
String s)
{
String retval = new
String();
for (int
i = 0;
i <
s.
length();
i++)
{
retval +=
escapeChar(
s.
charAt(
i), false);
}
return
retval;
}
/** Given a character value, return a string representing the character
* literal that can be recognized by the target language compiler.
* This works for languages that use single-quotes for character literals.
* Code-generators for languages should override this method.
* @param c The character of interest.
*/
public
String literalChar(int
c)
{
return "'" +
escapeChar(
c, true) + "'";
}
/** Converts a String into a string literal
* This works for languages that use double-quotes for string literals.
* Code-generators for languages should override this method.
* @param s The String to be changed into a literal
*/
public
String literalString(
String s)
{
//return "\"" + escapeString(s) + "\"";
return "@\"\"\"" +
escapeString(
s) + "\"\"\"";
}
}