From 01e65176d4bce64079528fb35df27e8ebcb31ecf Mon Sep 17 00:00:00 2001 From: dchandler Date: Sun, 14 Dec 2003 07:41:15 +0000 Subject: [PATCH] Using less memory and time to figure out if warnings occurred. --- .../org/thdl/tib/input/TibetanConverter.java | 15 +++++++---- source/org/thdl/tib/text/TibTextUtils.java | 2 +- .../org/thdl/tib/text/ttt/ACIPConverter.java | 27 +++++++++++++------ .../tib/text/ttt/ACIPTshegBarScanner.java | 2 +- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/source/org/thdl/tib/input/TibetanConverter.java b/source/org/thdl/tib/input/TibetanConverter.java index c66e5cf..81ceaf6 100644 --- a/source/org/thdl/tib/input/TibetanConverter.java +++ b/source/org/thdl/tib/input/TibetanConverter.java @@ -241,12 +241,16 @@ public class TibetanConverter implements FontConverterConstants { } catch (ThdlLazyException e) { out.println("TibetanConverter has a BUG:"); e.getRealException().printStackTrace(out); + System.err.println("TibetanConverter has a BUG:"); + e.getRealException().printStackTrace(System.err); return 7; } catch (IOException e) { e.printStackTrace(out); + e.printStackTrace(System.err); return 4; } catch (OutOfMemoryError e) { e.printStackTrace(out); + e.printStackTrace(System.err); throw e; } } @@ -263,26 +267,27 @@ public class TibetanConverter implements FontConverterConstants { try { ArrayList al = ACIPTshegBarScanner.scanStream(in, null, ThdlOptions.getIntegerOption("thdl.most.errors.a.tibetan.acip.document.can.have", - 250 - 1) + 1000 - 1) ); if (null == al) return 47; - StringBuffer warnings = new StringBuffer(); boolean embeddedWarnings = (warningLevel != "None"); + boolean hasWarnings[] = new boolean[] { false }; if (ACIP_TO_UNI_TEXT == ct) { if (!ACIPConverter.convertToUnicodeText(al, out, null, - warnings, + null, hasWarnings, embeddedWarnings, warningLevel)) return 46; } else { if (ct != ACIP_TO_TMW) throw new Error("badness"); - if (!ACIPConverter.convertToTMW(al, out, null, warnings, + if (!ACIPConverter.convertToTMW(al, out, null, null, + hasWarnings, embeddedWarnings, warningLevel, colors)) return 46; } - if (embeddedWarnings && warnings.length() > 0) + if (embeddedWarnings && hasWarnings[0]) return 45; else return 0; diff --git a/source/org/thdl/tib/text/TibTextUtils.java b/source/org/thdl/tib/text/TibTextUtils.java index b5003af..6d39d38 100644 --- a/source/org/thdl/tib/text/TibTextUtils.java +++ b/source/org/thdl/tib/text/TibTextUtils.java @@ -348,7 +348,7 @@ public class TibTextUtils implements THDLWylieConstants { } try { int tloc[] = new int[] { loc }; - ACIPConverter.convertToTMW(al, tdoc, null, null, + ACIPConverter.convertToTMW(al, tdoc, null, null, null, putWarningsInOutput, warningLevel, colors, tloc); return tloc[0] - loc; diff --git a/source/org/thdl/tib/text/ttt/ACIPConverter.java b/source/org/thdl/tib/text/ttt/ACIPConverter.java index 3ec9c96..6b50b19 100644 --- a/source/org/thdl/tib/text/ttt/ACIPConverter.java +++ b/source/org/thdl/tib/text/ttt/ACIPConverter.java @@ -55,7 +55,7 @@ public class ACIPConverter { System.out.println("Bad args! Need just the name of the ACIP text file."); } StringBuffer errors = new StringBuffer(); - int maxErrors = 250; + int maxErrors = 1000; // DLC NOW PER CAPITA ArrayList al = ACIPTshegBarScanner.scanFile(args[0], errors, maxErrors - 1); if (null == al) { @@ -88,7 +88,7 @@ public class ACIPConverter { warnings = new StringBuffer(); putWarningsInOutput = true; } - convertToTMW(al, System.out, errors, warnings, + convertToTMW(al, System.out, errors, warnings, null, putWarningsInOutput, warningLevel, colors); int retCode = 0; if (errors.length() > 0) { @@ -128,6 +128,7 @@ public class ACIPConverter { OutputStream out, StringBuffer errors, StringBuffer warnings, + boolean[] hasWarnings, boolean writeWarningsToResult, String warningLevel, boolean colors) @@ -135,7 +136,7 @@ public class ACIPConverter { { TibetanDocument tdoc = new TibetanDocument(); boolean rv - = convertToTMW(scan, tdoc, errors, warnings, + = convertToTMW(scan, tdoc, errors, warnings, hasWarnings, writeWarningsToResult, warningLevel, colors, new int[] { tdoc.getLength() }); tdoc.writeRTFOutputStream(out); @@ -155,6 +156,7 @@ public class ACIPConverter { TibetanDocument tdoc, StringBuffer errors, StringBuffer warnings, + boolean[] hasWarnings, boolean writeWarningsToResult, String warningLevel, boolean colors, @@ -162,8 +164,8 @@ public class ACIPConverter { throws IOException { return convertTo(false, true, scan, null, tdoc, errors, warnings, - writeWarningsToResult, warningLevel, colors, - loc, loc[0] == tdoc.getLength()); + hasWarnings, writeWarningsToResult, warningLevel, + colors, loc, loc[0] == tdoc.getLength()); } /** Returns UTF-8 encoded Unicode. A bit indirect, so use this @@ -187,7 +189,7 @@ public class ACIPConverter { try { if (null != al) { convertToUnicodeText(al, sw, errors, - warnings, writeWarningsToResult, + warnings, null, writeWarningsToResult, warningLevel); return sw.toString("UTF-8"); } else { @@ -212,6 +214,9 @@ public class ACIPConverter { * @param errors if non-null, all error messages are appended * @param warnings if non-null, all warning messages appropriate * to warningLevel are appended + * @param hasWarnings if non-null, then hasWarnings[0] will be + * updated to true if and only if warnings are encountered and + * false otherwise * @param writeWarningsToOut if true, then all warning messages * are written to out in the appropriate places * @throws IOException if we cannot write to out @@ -220,12 +225,14 @@ public class ACIPConverter { OutputStream out, StringBuffer errors, StringBuffer warnings, + boolean[] hasWarnings, boolean writeWarningsToOut, String warningLevel) throws IOException { return convertTo(true, false, scan, out, null, errors, warnings, - writeWarningsToOut, warningLevel, false, new int[] { -1 } , true); + hasWarnings, writeWarningsToOut, warningLevel, false, + new int[] { -1 } , true); } private static boolean peekaheadFindsSpacesAndComma(ArrayList /* of TString */ scan, @@ -253,6 +260,7 @@ public class ACIPConverter { TibetanDocument tdoc, // for !toUnicode mode or (toUnicode && toRTF) mode StringBuffer errors, StringBuffer warnings, + boolean[] hasWarnings, boolean writeWarningsToOut, String warningLevel, boolean colors, @@ -299,6 +307,7 @@ public class ACIPConverter { int sz = scan.size(); boolean hasErrors = false; + if (null != hasWarnings) hasWarnings[0] = false; BufferedWriter writer = null; if (toUnicode && !toRTF) writer @@ -360,6 +369,7 @@ public class ACIPConverter { } if (null != warnings) { + if (null != hasWarnings) hasWarnings[0] = true; warnings.append("Warning: Lexical warning: "); warnings.append(s.getText()); warnings.append('\n'); @@ -424,7 +434,7 @@ public class ACIPConverter { // differently, but now, I think // this is impossible. DLC FIXME: // run with -Dthdl.debug=true on - // all ACIP Release IV texts you + // all ACIP Release V texts you // can find. ThdlDebug.noteIffyCode(); hasErrors = true; @@ -479,6 +489,7 @@ public class ACIPConverter { } } if (null != warnings) { + if (null != hasWarnings) hasWarnings[0] = true; warnings.append(warning); warnings.append('\n'); } diff --git a/source/org/thdl/tib/text/ttt/ACIPTshegBarScanner.java b/source/org/thdl/tib/text/ttt/ACIPTshegBarScanner.java index b1d40ca..ba63380 100644 --- a/source/org/thdl/tib/text/ttt/ACIPTshegBarScanner.java +++ b/source/org/thdl/tib/text/ttt/ACIPTshegBarScanner.java @@ -49,7 +49,7 @@ public class ACIPTshegBarScanner { System.exit(1); } StringBuffer errors = new StringBuffer(); - int maxErrors = 250; + int maxErrors = 1000; ArrayList al = scanFile(args[0], errors, maxErrors - 1); if (null == al) {