diff --git a/source/org/thdl/tib/text/TibetanMachineWeb.java b/source/org/thdl/tib/text/TibetanMachineWeb.java index 4d1f338..5c259a3 100644 --- a/source/org/thdl/tib/text/TibetanMachineWeb.java +++ b/source/org/thdl/tib/text/TibetanMachineWeb.java @@ -1015,7 +1015,7 @@ private static final DuffCode TMW_tab = new DuffCode(1, '\t'); public static DuffCode mapTMtoTMW(int font, int ordinal, int suggestedFont) { if (font < 0 || font > 4) return null; - if (ordinal > 255) + if (ordinal >= 255) return getUnusualTMtoTMW(font, ordinal); if (ordinal < 32) { if (ordinal == (int)'\r') { @@ -1068,7 +1068,7 @@ private static final DuffCode TM_tab = new DuffCode(1, '\t'); public static DuffCode mapTMWtoTM(int font, int ordinal, int suggestedFont) { if (font < 0 || font > 9) return null; - if (ordinal > 127) + if (ordinal >= 127) return null; if (ordinal < 32) { if (ordinal == (int)'\r') { @@ -1149,20 +1149,47 @@ public static void main(String[] args) { } } -/** Tibet Doc makes weird RTF where you see TibetanMachine.8225 etc. - The highest possible glyph value should be 255, but that's not - what appears. This returns non-null if (font, code) identify an - oddball we know. This list may well be incomplete, but we handle - such oddballs in a first-class fashion. */ +/** A horrible kludge. A kludge is needed because javax.swing.rtf is + quite busted. As you'll see below though, this kludge does not + suffice. + +

If you open up a file that TibetDoc has saved, it will appear, + thanks to Java's bugs, to have weird RTF where you see + TibetanMachine.8225 etc. The highest possible glyph value should + be 255, but that's not what appears. The bug, precisely, is that + the RTF \'9c is not treated like the RTF + \u0156, as it should be, but is instead turned into + something akin to \u0347. This is Java's fault, not + TibetDoc's. I think it happens for glyphs that are like \'8X and + \'9X, not for \'7X, \'aX and the rest. Thus, there are 32 guys to + worry about, and 158, \'9e, and 142, \'8e, are not used by any TM + fonts, leaving us with 30 to worry about. Unfortunately, 145 + (\'91), 147 (\'93), 148 (\'94), 150 (\'96), 151 (\'97), and 152 + (\'98) simply DISAPPEAR from the input document. + + @return non-null if (font, code) identify an oddball we know. + + @deprecated This list is thought to be as many of the 30 as are + possible to get. But we cannot give you (char)145, etc. ever + because they are simply NOT THERE. So if you are using this + method, you are LOSING INFORMATION. Do not use this method. */ private static DuffCode getUnusualTMtoTMW(int font, int code) { - if (code > 255) { + // FIXME: don't use this! Do a search and replace through the RTF + // file instead. + if (code > 254) { switch (code) { + case 346: // 0=ga-wazur + return TMtoTMW[font][140 - 32]; + case 347: // 0=reduced-height ha return TMtoTMW[font][156 - 32]; case 352: // 1=dz-wazur, 0=k-wazur return TMtoTMW[font][138 - 32]; + case 356: // 0=ca-wazur + return TMtoTMW[font][141 - 32]; + case 357: // 2=b-t return TMtoTMW[font][157 - 32]; @@ -1175,6 +1202,12 @@ private static DuffCode getUnusualTMtoTMW(int font, int code) { case 378: // 1=reverse-ta--reverse-ta return TMtoTMW[font][159 - 32]; + case 381: // unused, here for completeness + return TMtoTMW[font][142 - 32]; + + case 382: // unused, here for completeness + return TMtoTMW[font][158 - 32]; + case 402: // 1=dz-ny 2=n-r 3=h-y return TMtoTMW[font][131 - 32];