예제 #1
0
  /**
   * Reads data in BRF format from <code>Reader</code>.
   *
   * <p>An attempt is made to determine the number of lines per page.
   *
   * @param reader the reader stream from which to read the data.
   * @exception IOException
   * @see #writeBRF(Writer)
   */
  public void readBRF(Reader reader) throws IOException {
    StringBuilder stringBuilder = new StringBuilder(65536);
    boolean checkLinesPerPage = true;
    boolean removeFormFeed = true;
    char buffer[] = new char[65536];
    int cnt, trim;

    eol = null;
    while ((cnt = reader.read(buffer)) > 0) {
      //   see if lines per page can be determined
      if (checkLinesPerPage) {
        checkLinesPerPage = false;
        int lines = 0, i;
        outer:
        for (i = 0; i < cnt; i++)
          switch (buffer[i]) {
            case '\n':
              lines++;
              break;

            case '\r':
              if (eol == null) eol = "\r\n";
              break;

            case 0xc:
              linesPerPage = lines;
              break outer;
          }

        if (eol == null) eol = "\n";
        if (i == cnt) removeFormFeed = false;
      }

      //   remove form feeds
      if (removeFormFeed) {
        trim = 0;
        for (int i = 0; i < cnt; i++)
          if (buffer[i] != 0xc) {
            buffer[trim] = buffer[i];
            trim++;
          }
      } else trim = cnt;

      stringBuilder.append(buffer, 0, trim);
    }

    content.setText(stringBuilder.toString());
    clearChanges();
  }
예제 #2
0
  /**
   * Reads data in BrailleZephyr file format from <code>Reader</code>.
   *
   * @param reader the reader stream from which to read the data.
   * @exception IOException
   * @see #writeBZY(Writer)
   */
  public void readBZY(Reader reader) throws IOException, BZException {
    String line;
    boolean returnAtEnd = false;
    int caretOffset = 0;
    int unknown = 0;

    content.setText("");
    eol = System.getProperty("line.separator");
    BufferedReader buffer = new BufferedReader(reader);

    //   read configuration lines
    header:
    while ((line = buffer.readLine()) != null) {
      String tokens[] = line.split(" ");
      switch (tokens[0]) {

          //   don't do anything for now
        case "Version":
          break;

        case "CharsPerLine":
          charsPerLine = Integer.parseInt(tokens[1]);
          break;
        case "LinesPerPage":
          linesPerPage = Integer.parseInt(tokens[1]);
          break;

        case "CaretOffset":
          caretOffset = Integer.parseInt(tokens[1]);
          break;
        case "ViewFocus":
          if (tokens[1].equals("braille")) {
            if (brailleText.isVisible()) brailleText.setFocus();
          } else if (tokens[1].equals("ascii")) {
            if (asciiText.isVisible()) asciiText.setFocus();
          } else logWriter.println("ERROR:  Invalid ViewFocus value:  " + line);
          break;

        case "ReturnAtEnd":
          returnAtEnd = Boolean.parseBoolean(tokens[1]);
          break;

        case "HeaderEnd":
          break header;

        default:
          logWriter.println("WARNING:  Unknown file format parameter:  " + line);
          unknown++;
          if (unknown > 6) throw new BZException("Invalid file format");
          break;
      }
    }
    if (line == null) throw new BZException("Invalid file format");

    //   read first line, may be null for empty document
    if ((line = buffer.readLine()) != null) {
      if (line.length() > 0 && line.charAt(line.length() - 1) == 0xb6)
        content.replaceTextRange(0, 0, line.substring(0, line.length() - 1) + PARAGRAPH_END);
      else content.replaceTextRange(0, 0, line);

      //   read next lines
      while ((line = buffer.readLine()) != null) {
        content.replaceTextRange(content.getCharCount(), 0, eol);
        if (line.length() > 0 && line.charAt(line.length() - 1) == 0xb6)
          content.replaceTextRange(
              content.getCharCount(), 0, line.substring(0, line.length() - 1) + PARAGRAPH_END);
        else content.replaceTextRange(content.getCharCount(), 0, line);
      }
    }

    if (returnAtEnd) content.replaceTextRange(content.getCharCount(), 0, eol);

    clearChanges();
    brailleText.setCaretOffset(caretOffset);
    asciiText.setCaretOffset(caretOffset);
  }
예제 #3
0
 /**
  * Sets the text for both braille and ascii texts.
  *
  * @param text the string to set the text
  */
 public void setText(String text) {
   content.setText(text);
   changes.clear();
   changeIndex = saveIndex = 0;
 }