identical to duffpane but customized to the translation tool. the only change is
that the paste method is over-ridden for "smart-pasting". If pasting TMW paste as is. If pasting TM, converts to TMW. If neither of these fonts are used, assumes transliteration and converts to TMW.
This commit is contained in:
parent
707ae5e526
commit
5b2bb9af11
1 changed files with 149 additions and 0 deletions
149
source/org/thdl/tib/scanner/StrictDuffPane.java
Normal file
149
source/org/thdl/tib/scanner/StrictDuffPane.java
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
/*
|
||||||
|
The contents of this file are subject to the AMP 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 AMP web site
|
||||||
|
(http://www.tibet.iteso.mx/Guatemala/).
|
||||||
|
|
||||||
|
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 Andres Montano Pellegrini. Portions
|
||||||
|
created by Andres Montano Pellegrini are Copyright 2001 Andres Montano
|
||||||
|
Pellegrini. All Rights Reserved.
|
||||||
|
|
||||||
|
Contributor(s): ______________________________________.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.thdl.tib.scanner;
|
||||||
|
|
||||||
|
import java.awt.datatransfer.*;
|
||||||
|
import java.io.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.text.*;
|
||||||
|
|
||||||
|
import org.thdl.tib.input.*;
|
||||||
|
import org.thdl.tib.text.*;
|
||||||
|
import org.thdl.util.*;
|
||||||
|
|
||||||
|
/** Identical to DuffPane except that it only supports Tibetan script in
|
||||||
|
TibetanMachineWeb. No roman script can be inputted. If roman script is
|
||||||
|
pasted, it is assumed that it is either ACIP or wylie and is converted
|
||||||
|
accordingly to TibetanMachineWeb. If text in TibetanMachine is pasted,
|
||||||
|
it is converted to TibetanMachineWeb. Any other font is assumed to be
|
||||||
|
Roman script.
|
||||||
|
*/
|
||||||
|
public class StrictDuffPane extends DuffPane
|
||||||
|
{
|
||||||
|
public StrictDuffPane()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
disableRoman();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Smart paste! Automatically recognizes what is being pasted and converts
|
||||||
|
respectively. Currently it supports pasting from TibetanMachineWeb,
|
||||||
|
TibetanMachine, wylie, and ACIP.
|
||||||
|
*/
|
||||||
|
public void paste(int offset)
|
||||||
|
{
|
||||||
|
// Respect setEditable(boolean):
|
||||||
|
if (!this.isEditable())
|
||||||
|
return;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Transferable contents = rtfBoard.getContents(this);
|
||||||
|
|
||||||
|
if (contents.isDataFlavorSupported(rtfFlavor)){
|
||||||
|
|
||||||
|
InputStream in = (InputStream)contents.getTransferData(rtfFlavor);
|
||||||
|
int p1 = offset;
|
||||||
|
|
||||||
|
//construct new document that contains only portion of text you want to paste
|
||||||
|
TibetanDocument sd = new TibetanDocument();
|
||||||
|
|
||||||
|
// I swear this happened once when I pasted in some
|
||||||
|
// random junk just after Jskad started up.
|
||||||
|
ThdlDebug.verify(null != in);
|
||||||
|
|
||||||
|
boolean errorReading = false;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!ThdlOptions.getBooleanOption("thdl.do.not.fix.rtf.hex.escapes"))
|
||||||
|
in = new RTFFixerInputStream(in);
|
||||||
|
rtfEd.read(in, sd, 0);
|
||||||
|
} catch (Exception e) {
|
||||||
|
|
||||||
|
errorReading = true;
|
||||||
|
|
||||||
|
/* If fonts weren't supported and we don't know what it is try to paste
|
||||||
|
ACIP or wylie.
|
||||||
|
*/
|
||||||
|
if (contents.isDataFlavorSupported(DataFlavor.stringFlavor))
|
||||||
|
{
|
||||||
|
String data = (String)contents.getTransferData(DataFlavor.stringFlavor);
|
||||||
|
if (Manipulate.guessIfAcip(data)) data = Manipulate.acipToWylie(data);
|
||||||
|
toTibetanMachineWeb(data, offset);
|
||||||
|
}
|
||||||
|
// JOptionPane.showMessageDialog(this, "You cannot paste from the application from which you copied.\nIt uses an RTF format that is too advanced for the version\nof Java Jskad is running atop.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!errorReading)
|
||||||
|
{
|
||||||
|
/* If it is any font beside TibetanMachine and TibetanMachineWeb
|
||||||
|
assume it is wylie or Acip.
|
||||||
|
*/
|
||||||
|
if (!sd.getFont((sd.getCharacterElement(0).getAttributes())).getFamily().startsWith("TibetanMachine")
|
||||||
|
&& contents.isDataFlavorSupported(DataFlavor.stringFlavor))
|
||||||
|
{
|
||||||
|
String data = (String)contents.getTransferData(DataFlavor.stringFlavor);
|
||||||
|
if (Manipulate.guessIfAcip(data)) data = Manipulate.acipToWylie(data);
|
||||||
|
toTibetanMachineWeb(data, offset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// If it's font is TibetanMachine, convert to TibetanMachineWeb first
|
||||||
|
if (sd.getFont((sd.getCharacterElement(0).getAttributes())).getFamily().equals("TibetanMachine"))
|
||||||
|
{
|
||||||
|
StringBuffer errors = new StringBuffer();
|
||||||
|
long numAttemptedReplacements[] = new long[] { 0 };
|
||||||
|
sd.convertToTMW(0, -1, errors, numAttemptedReplacements);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i=0; i<sd.getLength()-1; i++) { //getLength()-1 so that final newline is not included in paste
|
||||||
|
try
|
||||||
|
{
|
||||||
|
String s = sd.getText(i,1);
|
||||||
|
AttributeSet as = sd.getCharacterElement(i).getAttributes();
|
||||||
|
getTibDoc().insertString(p1+i, s, as);
|
||||||
|
} catch (BadLocationException ble)
|
||||||
|
{
|
||||||
|
ble.printStackTrace();
|
||||||
|
ThdlDebug.noteIffyCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (contents.isDataFlavorSupported(DataFlavor.stringFlavor))
|
||||||
|
{
|
||||||
|
// if it is not in a font, assume it is wylie or ACIP.
|
||||||
|
String data = (String)contents.getTransferData(DataFlavor.stringFlavor);
|
||||||
|
if (Manipulate.guessIfAcip(data)) data = Manipulate.acipToWylie(data);
|
||||||
|
toTibetanMachineWeb(data, offset);
|
||||||
|
}
|
||||||
|
} catch (UnsupportedFlavorException ufe) {
|
||||||
|
ufe.printStackTrace();
|
||||||
|
ThdlDebug.noteIffyCode();
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
ioe.printStackTrace();
|
||||||
|
ThdlDebug.noteIffyCode();
|
||||||
|
} catch (IllegalStateException ise) {
|
||||||
|
ise.printStackTrace();
|
||||||
|
ThdlDebug.noteIffyCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue