My TranslatorReader allows simple indenting with blanks
two methods change:
- handleBackslash
- handleHeading
one new method:
- addBlankSpaces
...
public class TranslatorReader extends Reader
.....
/** Allow this many characters to be pushed back in the stream. */
///Wolfgang
// private static final int PUSHBACK_BUFFER_SIZE = 8;
private static final int PUSHBACK_BUFFER_SIZE = 100;
///Wolfgang
...
private String handleBackslash()
throws IOException
{
int ch = nextToken();
if( ch == '\\' )
{
int ch2 = nextToken();
if( ch2 == '\\' )
{
return "<BR clear=\"all\" />";
}
pushBack( ch2 );
///Wolfgang
StringBuffer buf = new StringBuffer();
buf.append( "<BR />" );
addBlankSpaces(buf);
return buf.toString();
// return "<BR />";
///Wolfgang
}
pushBack( ch );
return "\\";
}
...
private String handleHeading()
throws IOException
{
StringBuffer buf = new StringBuffer();
int ch = nextToken();
if( ch == '!' )
{
int ch2 = nextToken();
if( ch2 == '!' )
{
buf.append("<H2>");
///Wolfgang
addBlankSpaces(buf);
///Wolfgang
m_closeTag = "</H2>";
}
else
{
buf.append( "<H3>" );
///Wolfgang
addBlankSpaces(buf);
///Wolfgang
m_closeTag = "</H3>";
pushBack( ch2 );
}
}
else
{
buf.append( "<H4>" );
///Wolfgang
addBlankSpaces(buf);
///Wolfgang
m_closeTag = "</H4>";
pushBack( ch );
}
return buf.toString();
}
....
/*
* adds as many ' ' (=coded &NonBlankSPace; see in editing!) as blanks present
* useful for manual indenting headers or after forced linebreak
* @author Wolfgang Irler (01/2003)
*
**/
public void addBlankSpaces( StringBuffer buf )
throws IOException
{
///Wolfgang
int ch3 = 0;
int blanks=0;
boolean checkBlanks=true;
while (checkBlanks) {
ch3 = nextToken();
if (ch3 == ' ' && checkBlanks){
blanks++;
buf.append( " " ); // reads "&NonBlankSPace;" see in edit mode!!
if (blanks>=PUSHBACK_BUFFER_SIZE) checkBlanks=false;
}else {
pushBack( ch3 );
checkBlanks=false;
}
}
///Wolfgang
}