private void writePropStr(string s)
{
int len = s.Length;
for (int i=0; i<len; ++i)
{
int ch = s[i];
int peek = i+1<len ? s[i+1] : -1;
// escape special chars
switch (ch)
{
case '\n': writeChar('\\').writeChar('n'); continue;
case '\r': writeChar('\\').writeChar('r'); continue;
case '\t': writeChar('\\').writeChar('t'); continue;
case '\\': writeChar('\\').writeChar('\\'); continue;
}
// escape control chars, comments, and =
if ((ch < ' ') || (ch == '/' && (peek == '/' || peek == '*')) || (ch == '='))
{
long nib1 = FanInt.toDigit((ch>>4)&0xf, 16).longValue();
long nib2 = FanInt.toDigit((ch>>0)&0xf, 16).longValue();
this.writeChar('\\').writeChar('u')
.writeChar('0').writeChar('0')
.writeChar(nib1).writeChar(nib2);
continue;
}
// normal character
writeChar(ch);
}
}