diff --git a/source/org/thdl/tib/text/DuffCode.java b/source/org/thdl/tib/text/DuffCode.java index d6049b2..0794296 100644 --- a/source/org/thdl/tib/text/DuffCode.java +++ b/source/org/thdl/tib/text/DuffCode.java @@ -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(); - } -} \ No newline at end of file +/* +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 ""; + } +} diff --git a/source/org/thdl/tib/text/TibetanMachineWeb.java b/source/org/thdl/tib/text/TibetanMachineWeb.java index 1ea58f6..146c53e 100644 --- a/source/org/thdl/tib/text/TibetanMachineWeb.java +++ b/source/org/thdl/tib/text/TibetanMachineWeb.java @@ -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); }