Bad RTF now causes an error message to appear in the transcription

instead of causing a fatal exception.  The error allows you to look up
the DuffCode that caused the trouble.
This commit is contained in:
dchandler 2003-05-14 01:37:49 +00:00
parent 8275afeb41
commit 8958366a07
2 changed files with 182 additions and 175 deletions

View file

@ -1,165 +1,175 @@
/*
The contents of this file are subject to the THDL Open Community License
Version 1.0 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License on the THDL web site
(http://www.thdl.org/).
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific terms governing rights and limitations under the
License.
The Initial Developer of this software is the Tibetan and Himalayan Digital
Library (THDL). Portions created by the THDL are Copyright 2001 THDL.
All Rights Reserved.
Contributor(s): ______________________________________.
*/
package org.thdl.tib.text;
import java.util.StringTokenizer;
/**
* A wrapper for the primitive data types
* that combine to represent a Tibetan glyph in the
* TibetanMachineWeb family of fonts.
*
* A DuffCode consists of a font number, a character, and
* a character number. A font identification and a character
* (or character number) are sufficient to uniquely identify
* any TibetanMachineWeb glyph.
* @author Edward Garrett, Tibetan and Himalayan Digital Library
* @version 1.0
*/
public class DuffCode {
/**
* the font number in which this glyph can be found,
* from 1 (TibetanMachineWeb) to 10 (TibetanMachineWeb9).
*/
public int fontNum;
/**
* the character value of this glyph
*/
public char character;
/**
* the character value of this glyph, as an integer
*/
public int charNum;
/**
* Called by {@link TibetanMachineWeb} to generate
* DuffCodes from the 'tibwn.ini' initialization file.
* This constructor expects to receive a string such as "1,33" or "33,1",
* i.e. a sequence of two numbers separated by a comma. These numbers
* represent a character: one number is its identifying font number,
* and the other is the ASCII code of the character.
*
* @param s the string to parse
* @param leftToRight should be true if the first number is the font number,
* false if the second number is the font number
*/
public DuffCode(String s, boolean leftToRight) {
StringTokenizer st = new StringTokenizer(s,",");
try {
String val1 = st.nextToken();
String val2 = st.nextToken();
Integer num1 = new Integer(val1);
Integer num2 = new Integer(val2);
if (leftToRight) {
fontNum = num1.intValue();
charNum = num2.intValue();
character = (char)charNum;
}
else {
fontNum = num2.intValue();
charNum = num1.intValue();
character = (char)charNum;
}
}
catch (NumberFormatException e) {
}
}
/**
* Called to create DuffCodes on the fly
* from an identifying font number and an ASCII character.
*
* @param font the identifying number of the font
* @param ch a character
*/
public DuffCode(int font, char ch) {
fontNum = font;
character = ch;
charNum = (int)ch;
}
/**
* Gets the font number of this glyph.
* @return the identifying font number for this DuffCode
*/
public int getFontNum() {
return fontNum;
}
/**
* Gets the character for this glyph, as an integer.
* @return the identifying character, converted to an
* integer, for this DuffCode
*/
public int getCharNum() {
return charNum;
}
/**
* Gets the character for this glyph.
* @return the identifying character for this DuffCode
*/
public char getCharacter() {
return character;
}
/**
* Assigns a hashcode based on the font number and character for this glyph.
* The hashcode for a DuffCode with font=1 and character='c'
* is defined as the hash code of the string '1-c'.
*
* @return the hash code for this object
*/
public int hashCode() {
StringBuffer sb = new StringBuffer();
sb.append(new Integer(fontNum).toString());
sb.append('-');
sb.append(character);
String s = sb.toString();
return s.hashCode();
}
/**
* Evaluates two DuffCodes as equal iff their
* font numbers and characters are identical.
*
* @param o the object (DuffCode) you want to compare
* @return true if this object is equal to o, false if not
*/
public boolean equals(Object o) {
if (o instanceof DuffCode) {
DuffCode dc = (DuffCode)o;
if (fontNum == dc.fontNum && charNum == dc.charNum)
return true;
}
return false;
}
/**
* @return a string representation of this object
*/
public String toString() {
return "fontNum="+fontNum+";charNum="+charNum+";character="+new Character(character).toString();
}
}
/*
The contents of this file are subject to the THDL Open Community License
Version 1.0 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License on the THDL web site
(http://www.thdl.org/).
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific terms governing rights and limitations under the
License.
The Initial Developer of this software is the Tibetan and Himalayan Digital
Library (THDL). Portions created by the THDL are Copyright 2001 THDL.
All Rights Reserved.
Contributor(s): ______________________________________.
*/
package org.thdl.tib.text;
import java.util.StringTokenizer;
import org.thdl.util.ThdlDebug;
/**
* A wrapper for the primitive data types
* that combine to represent a Tibetan glyph in the
* TibetanMachineWeb family of fonts.
*
* A DuffCode consists of a font number, a character, and
* a character number. A font identification and a character
* (or character number) are sufficient to uniquely identify
* any TibetanMachineWeb glyph.
* @author Edward Garrett, Tibetan and Himalayan Digital Library
* @version 1.0
*/
public class DuffCode {
/**
* the font number in which this glyph can be found,
* from 1 (TibetanMachineWeb) to 10 (TibetanMachineWeb9).
*/
public int fontNum;
/**
* the character value of this glyph
*/
public char character;
/**
* the character value of this glyph, as an integer
*/
public int charNum;
/**
* Called by {@link TibetanMachineWeb} to generate
* DuffCodes from the 'tibwn.ini' initialization file.
* This constructor expects to receive a string such as "1,33" or "33,1",
* i.e. a sequence of two numbers separated by a comma. These numbers
* represent a character: one number is its identifying font number,
* and the other is the ASCII code of the character.
*
* @param s the string to parse
* @param leftToRight should be true if the first number is the font number,
* false if the second number is the font number
*/
public DuffCode(String s, boolean leftToRight) {
StringTokenizer st = new StringTokenizer(s,",");
try {
String val1 = st.nextToken();
String val2 = st.nextToken();
Integer num1 = new Integer(val1);
Integer num2 = new Integer(val2);
if (leftToRight) {
setFontNum(num1.intValue());
charNum = num2.intValue();
character = (char)charNum;
}
else {
setFontNum(num2.intValue());
charNum = num1.intValue();
character = (char)charNum;
}
}
catch (NumberFormatException e) {
ThdlDebug.noteIffyCode();
}
}
/**
* Called to create DuffCodes on the fly
* from an identifying font number and an ASCII character.
*
* @param font the identifying number of the font
* @param ch a character
*/
public DuffCode(int font, char ch) {
setFontNum(font);
character = ch;
charNum = (int)ch;
}
private void setFontNum(int font) {
ThdlDebug.verify(font >= 1 && font <= 10);
fontNum = font;
}
/**
* Gets the font number of this glyph.
* @return the identifying font number for this DuffCode
*/
public int getFontNum() {
return fontNum;
}
/**
* Gets the character for this glyph, as an integer.
* @return the identifying character, converted to an
* integer, for this DuffCode
*/
public int getCharNum() {
return charNum;
}
/**
* Gets the character for this glyph.
* @return the identifying character for this DuffCode
*/
public char getCharacter() {
return character;
}
/**
* Assigns a hashcode based on the font number and character for this glyph.
* The hashcode for a DuffCode with font=1 and character='c'
* is defined as the hash code of the string '1-c'.
*
* @return the hash code for this object
*/
public int hashCode() {
StringBuffer sb = new StringBuffer();
sb.append(new Integer(fontNum).toString());
sb.append('-');
sb.append(character);
String s = sb.toString();
return s.hashCode();
}
/**
* Evaluates two DuffCodes as equal iff their
* font numbers and characters are identical.
*
* @param o the object (DuffCode) you want to compare
* @return true if this object is equal to o, false if not
*/
public boolean equals(Object o) {
if (o instanceof DuffCode) {
DuffCode dc = (DuffCode)o;
if (fontNum == dc.fontNum && charNum == dc.charNum)
return true;
}
return false;
}
/**
* @return a string representation of this object
*/
public String toString() {
return "<duffcode font=" + TibetanMachineWeb.tmwFontNames[fontNum]
+ " charNum=" + charNum + " character="
+ new Character(character).toString() + "/>";
}
}

View file

@ -28,6 +28,7 @@ import javax.swing.text.*;
import java.awt.font.*;
import org.thdl.util.ThdlDebug;
import org.thdl.util.ThdlLazyException;
import org.thdl.util.Trie;
import org.thdl.util.ThdlOptions;
@ -537,17 +538,10 @@ public static boolean isFormatting(char c) {
* false if not
*/
public static boolean isChar(String s) {
if (currentKeyboardIsExtendedWylie()) {
if (charSet.contains(s))
return true;
else
return false;
}
if (currentKeyboardIsExtendedWylie())
return charSet.contains(s);
else
if (keyboard.isChar(s))
return true;
else
return false;
return keyboard.isChar(s);
}
/**
@ -934,6 +928,9 @@ public static String getWylieForGlyph(int font, int code) {
*/
public static String getWylieForGlyph(DuffCode dc) {
String hashKey = getHashKeyForGlyph(dc);
if (hashKey == null) {
return "<<[[JSKAD_TMW_TO_WYLIE_ERROR_NO_SUCH_WYLIE: Cannot convert DuffCode " + dc + " to THDL Extended Wylie. Please see the documentation for the TMW font and transcribe this yourself.]]>>";
}
return wylieForGlyph(hashKey);
}