< prev index next >

src/java.xml.ws/share/classes/com/sun/xml/internal/messaging/saaj/packaging/mime/internet/HeaderTokenizer.java

Print this page


   1 /*
   2  * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any


 329                 c == '"' || delimiters.indexOf(c) >= 0)
 330                 break;
 331         }
 332         return new Token(Token.ATOM, string.substring(start, currentPos));
 333     }
 334 
 335     // Skip SPACE, HT, CR and NL
 336     private int skipWhiteSpace() {
 337         char c;
 338         for (; currentPos < maxPos; currentPos++)
 339             if (((c = string.charAt(currentPos)) != ' ') &&
 340                 (c != '\t') && (c != '\r') && (c != '\n'))
 341                 return currentPos;
 342         return Token.EOF;
 343     }
 344 
 345     /* Process escape sequences and embedded LWSPs from a comment or
 346      * quoted string.
 347      */
 348     private static String filterToken(String s, int start, int end) {
 349         StringBuffer sb = new StringBuffer();
 350         char c;
 351         boolean gotEscape = false;
 352         boolean gotCR = false;
 353 
 354         for (int i = start; i < end; i++) {
 355             c = s.charAt(i);
 356             if (c == '\n' && gotCR) {
 357                 // This LF is part of an unescaped
 358                 // CRLF sequence (i.e, LWSP). Skip it.
 359                 gotCR = false;
 360                 continue;
 361             }
 362 
 363             gotCR = false;
 364             if (!gotEscape) {
 365                 // Previous character was NOT '\'
 366                 if (c == '\\') // skip this character
 367                     gotEscape = true;
 368                 else if (c == '\r') // skip this character
 369                     gotCR = true;
   1 /*
   2  * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any


 329                 c == '"' || delimiters.indexOf(c) >= 0)
 330                 break;
 331         }
 332         return new Token(Token.ATOM, string.substring(start, currentPos));
 333     }
 334 
 335     // Skip SPACE, HT, CR and NL
 336     private int skipWhiteSpace() {
 337         char c;
 338         for (; currentPos < maxPos; currentPos++)
 339             if (((c = string.charAt(currentPos)) != ' ') &&
 340                 (c != '\t') && (c != '\r') && (c != '\n'))
 341                 return currentPos;
 342         return Token.EOF;
 343     }
 344 
 345     /* Process escape sequences and embedded LWSPs from a comment or
 346      * quoted string.
 347      */
 348     private static String filterToken(String s, int start, int end) {
 349         StringBuilder sb = new StringBuilder();
 350         char c;
 351         boolean gotEscape = false;
 352         boolean gotCR = false;
 353 
 354         for (int i = start; i < end; i++) {
 355             c = s.charAt(i);
 356             if (c == '\n' && gotCR) {
 357                 // This LF is part of an unescaped
 358                 // CRLF sequence (i.e, LWSP). Skip it.
 359                 gotCR = false;
 360                 continue;
 361             }
 362 
 363             gotCR = false;
 364             if (!gotEscape) {
 365                 // Previous character was NOT '\'
 366                 if (c == '\\') // skip this character
 367                     gotEscape = true;
 368                 else if (c == '\r') // skip this character
 369                     gotCR = true;
< prev index next >