src/net/fortuna/ical4j/data/CalendarParserImpl.java

changeset 3
73bdfa70b04e
parent 0
fb9019fb1bf7
     1.1 --- a/src/net/fortuna/ical4j/data/CalendarParserImpl.java	Tue Feb 10 19:25:00 2015 +0100
     1.2 +++ b/src/net/fortuna/ical4j/data/CalendarParserImpl.java	Tue Feb 10 19:38:00 2015 +0100
     1.3 @@ -177,7 +177,7 @@
     1.4                  else {
     1.5                      propertyParser.parse(tokeniser, in, handler);
     1.6                  }
     1.7 -                absorbWhitespace(tokeniser);
     1.8 +                absorbWhitespace(tokeniser, in);
     1.9                  // assertToken(tokeniser, StreamTokenizer.TT_WORD);
    1.10              }
    1.11          }
    1.12 @@ -228,10 +228,9 @@
    1.13              // text       = *(TSAFE-CHAR / ":" / DQUOTE / ESCAPED-CHAR)
    1.14              //
    1.15              tokeniser.ordinaryChar('"');
    1.16 -            int nextToken = tokeniser.nextToken();
    1.17 +            int nextToken = nextToken(tokeniser, in);
    1.18  
    1.19 -            while (nextToken != StreamTokenizer.TT_EOL
    1.20 -                    && nextToken != StreamTokenizer.TT_EOF) {
    1.21 +            while (nextToken != StreamTokenizer.TT_EOL) {
    1.22  
    1.23                  if (tokeniser.ttype == StreamTokenizer.TT_WORD) {
    1.24                      value.append(tokeniser.sval);
    1.25 @@ -240,17 +239,12 @@
    1.26                      value.append((char) tokeniser.ttype);
    1.27                  }
    1.28  
    1.29 -                nextToken = tokeniser.nextToken();
    1.30 +                nextToken = nextToken(tokeniser, in);
    1.31              }
    1.32              
    1.33              // reset DQUOTE to be quote char
    1.34              tokeniser.quoteChar('"');
    1.35              
    1.36 -            if (nextToken == StreamTokenizer.TT_EOF) {
    1.37 -                throw new ParserException("Unexpected end of file",
    1.38 -                        getLineNumber(tokeniser, in));
    1.39 -            }
    1.40 -
    1.41              try {
    1.42                  handler.propertyValue(value.toString());
    1.43              }
    1.44 @@ -279,7 +273,7 @@
    1.45                  final ContentHandler handler) throws IOException, ParserException,
    1.46                  URISyntaxException {
    1.47  
    1.48 -            while (tokeniser.nextToken() == ';') {
    1.49 +            while (nextToken(tokeniser, in) == ';') {
    1.50                  paramParser.parse(tokeniser, in, handler);
    1.51              }
    1.52          }
    1.53 @@ -312,7 +306,7 @@
    1.54              final StringBuffer paramValue = new StringBuffer();
    1.55  
    1.56              // preserve quote chars..
    1.57 -            if (tokeniser.nextToken() == '"') {
    1.58 +            if (nextToken(tokeniser, in) == '"') {
    1.59                  paramValue.append('"');
    1.60                  paramValue.append(tokeniser.sval);
    1.61                  paramValue.append('"');
    1.62 @@ -320,7 +314,7 @@
    1.63              else if (tokeniser.sval != null) {
    1.64                  paramValue.append(tokeniser.sval);
    1.65                  // check for additional words to account for equals (=) in param-value
    1.66 -                int nextToken = tokeniser.nextToken();
    1.67 +                int nextToken = nextToken(tokeniser, in);
    1.68  
    1.69                  while (nextToken != ';' && nextToken != ':' && nextToken != ',') {
    1.70  
    1.71 @@ -331,7 +325,7 @@
    1.72                      	paramValue.append((char) tokeniser.ttype);
    1.73                      }
    1.74  
    1.75 -                    nextToken = tokeniser.nextToken();
    1.76 +                    nextToken = nextToken(tokeniser, in);
    1.77                  }
    1.78                  tokeniser.pushBack();
    1.79              } else if(tokeniser.sval == null) { 
    1.80 @@ -363,7 +357,7 @@
    1.81  
    1.82              while (Component.BEGIN.equals(tokeniser.sval)) {
    1.83                  componentParser.parse(tokeniser, in, handler);
    1.84 -                absorbWhitespace(tokeniser);
    1.85 +                absorbWhitespace(tokeniser, in);
    1.86                  // assertToken(tokeniser, StreamTokenizer.TT_WORD);
    1.87              }
    1.88          }
    1.89 @@ -429,7 +423,7 @@
    1.90      private void assertToken(final StreamTokenizer tokeniser, Reader in, final int token)
    1.91              throws IOException, ParserException {
    1.92  
    1.93 -        if (tokeniser.nextToken() != token) {
    1.94 +        if (nextToken(tokeniser, in) != token) {
    1.95              throw new ParserException(MessageFormat.format(UNEXPECTED_TOKEN_MESSAGE, new Object[] {
    1.96                      new Integer(token), new Integer(tokeniser.ttype),
    1.97              }), getLineNumber(tokeniser, in));
    1.98 @@ -489,9 +483,9 @@
    1.99       * @param tokeniser
   1.100       * @throws IOException
   1.101       */
   1.102 -    private void absorbWhitespace(final StreamTokenizer tokeniser) throws IOException {
   1.103 +    private void absorbWhitespace(final StreamTokenizer tokeniser, Reader in) throws IOException, ParserException {
   1.104          // HACK: absorb extraneous whitespace between components (KOrganizer)..
   1.105 -        while (tokeniser.nextToken() == StreamTokenizer.TT_EOL) {
   1.106 +        while (nextToken(tokeniser, in) == StreamTokenizer.TT_EOL) {
   1.107              if (log.isTraceEnabled()) {
   1.108                  log.trace("Absorbing extra whitespace..");
   1.109              }
   1.110 @@ -518,4 +512,20 @@
   1.111          }
   1.112          return line;
   1.113      }
   1.114 +
   1.115 +    /**
   1.116 +     * Reads the next token from the tokeniser.
   1.117 +     * This method throws a ParseException when reading EOF.
   1.118 +     * @param tokeniser
   1.119 +     * @param in
   1.120 +     * @return
   1.121 +     * @throws ParseException When reading EOF.
   1.122 +     */
   1.123 +    private int nextToken(StreamTokenizer tokeniser, Reader in) throws IOException, ParserException {
   1.124 +        int token = tokeniser.nextToken();
   1.125 +        if (token == StreamTokenizer.TT_EOF) {
   1.126 +            throw new ParserException("Unexpected end of file", getLineNumber(tokeniser, in));
   1.127 +        }
   1.128 +        return token;
   1.129 +    }
   1.130  }

mercurial