+ public void forwardsWord() {
+ int line = lineNumber;
+ while ((getChar() == -1)
+ || (getRawLine().length() == 0)
+ ) {
+ if (right() == false) {
+ return;
+ }
+ if (lineNumber != line) {
+ // We wrapped a line. Here that counts as whitespace.
+ if (!Character.isSpace((char) getChar())) {
+ // We found a character immediately after the line.
+ // Done!
+ return;
+ }
+ // Still looking...
+ line = lineNumber;
+ }
+ }
+ assert (getChar() != -1);
+
+ if (!Character.isSpace((char) getChar())
+ && (getRawLine().length() > 0)
+ ) {
+ // Advance until at the end of the document or a whitespace is
+ // encountered.
+ while (!Character.isSpace((char) getChar())) {
+ line = lineNumber;
+ if (right() == false) {
+ // End of document, bail out.
+ return;
+ }
+ if (lineNumber != line) {
+ // We wrapped a line. Here that counts as whitespace.
+ if (!Character.isSpace((char) getChar())
+ && (getRawLine().length() > 0)
+ ) {
+ // We found a character immediately after the line.
+ // Done!
+ return;
+ }
+ break;
+ }
+ }
+ }
+
+ while ((getChar() == -1)
+ || (getRawLine().length() == 0)
+ ) {
+ if (right() == false) {
+ return;
+ }
+ if (lineNumber != line) {
+ // We wrapped a line. Here that counts as whitespace.
+ if (!Character.isSpace((char) getChar())) {
+ // We found a character immediately after the line.
+ // Done!
+ return;
+ }
+ // Still looking...
+ line = lineNumber;
+ }
+ }
+ assert (getChar() != -1);
+
+ if (Character.isSpace((char) getChar())) {
+ // Advance until at the end of the document or a non-whitespace
+ // is encountered.
+ while (Character.isSpace((char) getChar())) {
+ if (right() == false) {
+ // End of document, bail out.
+ return;
+ }
+ }
+ return;
+ }
+
+ // We wrapped the line to get here.
+ return;