/** * 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(); }
/** * 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); }
/** * 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; }