TM->TMW conversion has no known bugs. Oddballs have been
comprehensively handled.
This commit is contained in:
parent
689c1910aa
commit
7938648ca8
5 changed files with 40 additions and 6 deletions
|
@ -122,3 +122,8 @@ thdl.add.developer.options.to.menu = false
|
||||||
# you about the messy details of how Jskad decides when and where to
|
# you about the messy details of how Jskad decides when and where to
|
||||||
# break lines for display.
|
# break lines for display.
|
||||||
thdl.log.line.breaking.algorithm = false
|
thdl.log.line.breaking.algorithm = false
|
||||||
|
|
||||||
|
# Java Swing's RTF support is buggy. The hex escape sequence \'97
|
||||||
|
# disappears from the input. We turn these guys into Unicode escapes
|
||||||
|
# when this is false. We leave it buggy when this is true.
|
||||||
|
thdl.do.not.fix.rtf.hex.escapes = false
|
||||||
|
|
|
@ -33,6 +33,7 @@ import org.thdl.tib.text.*;
|
||||||
import org.thdl.util.ThdlDebug;
|
import org.thdl.util.ThdlDebug;
|
||||||
import org.thdl.util.ThdlOptions;
|
import org.thdl.util.ThdlOptions;
|
||||||
import org.thdl.util.StatusBar;
|
import org.thdl.util.StatusBar;
|
||||||
|
import org.thdl.util.RTFFixerInputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enables input of Tibetan text
|
* Enables input of Tibetan text
|
||||||
|
@ -1036,6 +1037,8 @@ public void paste(int offset) {
|
||||||
boolean errorReading = false;
|
boolean errorReading = false;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
if (!ThdlOptions.getBooleanOption("thdl.do.not.fix.rtf.hex.escapes"))
|
||||||
|
in = new RTFFixerInputStream(in);
|
||||||
rtfEd.read(in, sd, 0);
|
rtfEd.read(in, sd, 0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
errorReading = true;
|
errorReading = true;
|
||||||
|
@ -1047,7 +1050,7 @@ public void paste(int offset) {
|
||||||
/** Added by AM, to fix copy-paste issues for
|
/** Added by AM, to fix copy-paste issues for
|
||||||
Translation Tool. Assumes that if roman is
|
Translation Tool. Assumes that if roman is
|
||||||
disabled and you are pasting something in RTF but
|
disabled and you are pasting something in RTF but
|
||||||
is not TibetanMachineWeb it most be wylie. */
|
it is not TibetanMachineWeb then it must be wylie. */
|
||||||
if (!sd.getFont((sd.getCharacterElement(0).getAttributes())).getFamily().startsWith("TibetanMachineWeb")
|
if (!sd.getFont((sd.getCharacterElement(0).getAttributes())).getFamily().startsWith("TibetanMachineWeb")
|
||||||
&& !isRomanEnabled
|
&& !isRomanEnabled
|
||||||
&& contents.isDataFlavorSupported(DataFlavor.stringFlavor))
|
&& contents.isDataFlavorSupported(DataFlavor.stringFlavor))
|
||||||
|
|
|
@ -35,6 +35,7 @@ import java.util.Vector;
|
||||||
|
|
||||||
import org.thdl.tib.text.*;
|
import org.thdl.tib.text.*;
|
||||||
import org.thdl.util.ThdlDebug;
|
import org.thdl.util.ThdlDebug;
|
||||||
|
import org.thdl.util.RTFFixerInputStream;
|
||||||
import org.thdl.util.ThdlOptions;
|
import org.thdl.util.ThdlOptions;
|
||||||
import org.thdl.util.ThdlVersion;
|
import org.thdl.util.ThdlVersion;
|
||||||
import org.thdl.util.StatusBar;
|
import org.thdl.util.StatusBar;
|
||||||
|
@ -435,6 +436,19 @@ public class Jskad extends JPanel implements DocumentListener {
|
||||||
toolsMenu.add(DevelItem);
|
toolsMenu.add(DevelItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ThdlOptions.getBooleanOption("thdl.add.developer.options.to.menu")) {
|
||||||
|
toolsMenu.addSeparator();
|
||||||
|
JMenuItem DevelItem = new JMenuItem("Debug dump to standard output");
|
||||||
|
DevelItem.addActionListener(new ThdlActionListener() {
|
||||||
|
public void theRealActionPerformed(ActionEvent e) {
|
||||||
|
StringBuffer buf = new StringBuffer();
|
||||||
|
((TibetanDocument)dp.getDocument()).getTextRepresentation(0, -1, buf);
|
||||||
|
System.out.println("The text representation of the document, for debugging, is this:\n" + buf);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
toolsMenu.add(DevelItem);
|
||||||
|
}
|
||||||
|
|
||||||
if (ThdlOptions.getBooleanOption("thdl.add.developer.options.to.menu")) {
|
if (ThdlOptions.getBooleanOption("thdl.add.developer.options.to.menu")) {
|
||||||
toolsMenu.addSeparator();
|
toolsMenu.addSeparator();
|
||||||
JMenuItem DevelItem = new JMenuItem("Check for non-TMW characters"); // FIXME: do it just in the selection?
|
JMenuItem DevelItem = new JMenuItem("Check for non-TMW characters"); // FIXME: do it just in the selection?
|
||||||
|
@ -764,6 +778,8 @@ public class Jskad extends JPanel implements DocumentListener {
|
||||||
if (dp.getDocument().getLength()>0 && parentObject instanceof JFrame) {
|
if (dp.getDocument().getLength()>0 && parentObject instanceof JFrame) {
|
||||||
JFrame parentFrame = (JFrame)parentObject;
|
JFrame parentFrame = (JFrame)parentObject;
|
||||||
InputStream in = new FileInputStream(fileChosen);
|
InputStream in = new FileInputStream(fileChosen);
|
||||||
|
if (!ThdlOptions.getBooleanOption("thdl.do.not.fix.rtf.hex.escapes"))
|
||||||
|
in = new RTFFixerInputStream(in);
|
||||||
ThdlOptions.setUserPreference("thdl.Jskad.working.directory",
|
ThdlOptions.setUserPreference("thdl.Jskad.working.directory",
|
||||||
fileChosen.getParentFile().getAbsolutePath());
|
fileChosen.getParentFile().getAbsolutePath());
|
||||||
JFrame newFrame = new JFrame(f_name);
|
JFrame newFrame = new JFrame(f_name);
|
||||||
|
@ -798,6 +814,8 @@ public class Jskad extends JPanel implements DocumentListener {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
InputStream in = new FileInputStream(fileChosen);
|
InputStream in = new FileInputStream(fileChosen);
|
||||||
|
if (!ThdlOptions.getBooleanOption("thdl.do.not.fix.rtf.hex.escapes"))
|
||||||
|
in = new RTFFixerInputStream(in);
|
||||||
ThdlOptions.setUserPreference("thdl.Jskad.working.directory",
|
ThdlOptions.setUserPreference("thdl.Jskad.working.directory",
|
||||||
fileChosen.getParentFile().getAbsolutePath());
|
fileChosen.getParentFile().getAbsolutePath());
|
||||||
dp.newDocument();
|
dp.newDocument();
|
||||||
|
@ -1229,9 +1247,11 @@ public class Jskad extends JPanel implements DocumentListener {
|
||||||
/** Stores all open Jskad sessions. */
|
/** Stores all open Jskad sessions. */
|
||||||
private static Vector jskads = new Vector();
|
private static Vector jskads = new Vector();
|
||||||
|
|
||||||
/** Closes all Jskad windows after asking "Do you want to save?"
|
/** Closes all Jskad windows if user confirms. After asking "Do
|
||||||
for the modified windows. If you don't cancel for any unsaved
|
you want to save?" for the modified windows, this closes them
|
||||||
session, then all sessions are closed. */
|
all. If you don't cancel for any unsaved session, then all
|
||||||
|
sessions are closed. If you do cancel for any one, even the
|
||||||
|
last one, then all sessions remain open. */
|
||||||
private static void exitAction() {
|
private static void exitAction() {
|
||||||
int sz = jskads.size();
|
int sz = jskads.size();
|
||||||
for (int i = 0; i < sz; i++) {
|
for (int i = 0; i < sz; i++) {
|
||||||
|
|
|
@ -183,6 +183,8 @@ public class TibetanConverter implements FontConverterConstants {
|
||||||
try {
|
try {
|
||||||
// Read in the rtf file.
|
// Read in the rtf file.
|
||||||
if (debug) System.err.println("Start: reading in old RTF file");
|
if (debug) System.err.println("Start: reading in old RTF file");
|
||||||
|
if (!ThdlOptions.getBooleanOption("thdl.do.not.fix.rtf.hex.escapes"))
|
||||||
|
in = new RTFFixerInputStream(in);
|
||||||
dp.rtfEd.read(in, dp.getDocument(), 0);
|
dp.rtfEd.read(in, dp.getDocument(), 0);
|
||||||
if (debug) System.err.println("End : reading in old RTF file");
|
if (debug) System.err.println("End : reading in old RTF file");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
|
@ -1015,8 +1015,12 @@ private static final DuffCode TMW_tab = new DuffCode(1, '\t');
|
||||||
public static DuffCode mapTMtoTMW(int font, int ordinal, int suggestedFont) {
|
public static DuffCode mapTMtoTMW(int font, int ordinal, int suggestedFont) {
|
||||||
if (font < 0 || font > 4)
|
if (font < 0 || font > 4)
|
||||||
return null;
|
return null;
|
||||||
if (ordinal >= 255)
|
if (ordinal >= 255) {
|
||||||
return getUnusualTMtoTMW(font, ordinal);
|
DuffCode rv = getUnusualTMtoTMW(font, ordinal);
|
||||||
|
if (null != rv && !ThdlOptions.getBooleanOption("thdl.do.not.fix.rtf.hex.escapes"))
|
||||||
|
throw new Error("oddballs still found after fixing RTF hex escapes");
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
if (ordinal < 32) {
|
if (ordinal < 32) {
|
||||||
if (ordinal == (int)'\r') {
|
if (ordinal == (int)'\r') {
|
||||||
if (0 == suggestedFont)
|
if (0 == suggestedFont)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue