View Javadoc

    1   /* Value
    2   *
    3   * $Id: Value.java 4644 2006-09-20 22:40:21Z paul_jack $
    4   *
    5   * Created on July 26, 2006.
    6   *
    7   * Copyright (C) 2006 Internet Archive.
    8   *
    9   * This file is part of the Heritrix web crawler (crawler.archive.org).
    10  *
    11  * Heritrix is free software; you can redistribute it and/or modify
    12  * it under the terms of the GNU Lesser Public License as published by
    13  * the Free Software Foundation; either version 2.1 of the License, or
    14  * any later version.
    15  *
    16  * Heritrix is distributed in the hope that it will be useful,
    17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    19  * GNU Lesser Public License for more details.
    20  *
    21  * You should have received a copy of the GNU Lesser Public License
    22  * along with Heritrix; if not, write to the Free Software
    23  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    24  */
    25  package org.archive.util.anvl;
    26
    27  /***
    28   * TODO: Now values 'fold' but should but perhaps they shouldn't be stored
    29   * folded.  Only when we serialize should we fold (But how to know where
    30   * to fold?).
    31   * @author stack
    32   * @version $Date: 2006-09-20 22:40:21 +0000 (Wed, 20 Sep 2006) $ $Version$
    33   */
    34  class Value extends SubElement {
    35
    36      private StringBuilder sb;
    37      private boolean folding = false;
    38
    39      private Value() {
    40          this(null);
    41      }
    42
    43      public Value(final String s) {
    44          super(s);
    45      }
    46
    47      protected String baseCheck(String s) {
    48          this.sb = new StringBuilder(s.length() * 2);
    49          super.baseCheck(s);
    50          return sb.toString();
    51      }
    52
    53      @Override
    54      protected void checkCharacter(char c, String srcStr, int index) {
    55          checkControlCharacter(c, srcStr, index);
    56          // Now, rewrite the value String with folding (If CR or LF or CRLF
    57          // present.
    58          if (ANVLRecord.isCR(c)) {
    59              this.folding = true;
    60              this.sb.append(ANVLRecord.FOLD_PREFIX);
    61          } else if (ANVLRecord.isLF(c)) {
    62              if (!this.folding) {
    63                  this.folding = true;
    64                  this.sb.append(ANVLRecord.FOLD_PREFIX);
    65              } else {
    66                  // Previous character was a CR. Fold prefix has been added.
    67              }
    68          } else if (this.folding && Character.isWhitespace(c)) {
    69              // Only write out one whitespace character. Skip.
    70          } else {
    71              this.folding = false;
    72              this.sb.append(c);
    73          }
    74      }
    75  }