diff --git a/source/org/thdl/tib/input/Jskad.java b/source/org/thdl/tib/input/Jskad.java index 2d8f6d7..4d6cd01 100644 --- a/source/org/thdl/tib/input/Jskad.java +++ b/source/org/thdl/tib/input/Jskad.java @@ -323,7 +323,25 @@ public class Jskad extends JPanel implements DocumentListener { }); toolsMenu.addSeparator(); toolsMenu.add(importItem); - } + + JMenuItem toTMItem = new JMenuItem("Convert TMW to TM"); // DLC FIXME: do it just in the selection? + toTMItem.addActionListener(new ThdlActionListener() { + public void theRealActionPerformed(ActionEvent e) { + ((TibetanDocument)dp.getDocument()).convertToTM(0, -1); // entire document + } + }); + + JMenuItem toTMWItem = new JMenuItem("Convert TM to TMW"); // DLC FIXME: do it just in the selection? + toTMWItem.addActionListener(new ThdlActionListener() { + public void theRealActionPerformed(ActionEvent e) { + ((TibetanDocument)dp.getDocument()).convertToTMW(0, -1); // entire document + } + }); + toolsMenu.addSeparator(); + toolsMenu.add(toTMItem); + toolsMenu.add(toTMWItem); + } + if (ThdlOptions.getBooleanOption("thdl.add.developer.options.to.menu")) { toolsMenu.addSeparator(); @@ -338,7 +356,7 @@ public class Jskad extends JPanel implements DocumentListener { if (ThdlOptions.getBooleanOption("thdl.add.developer.options.to.menu")) { toolsMenu.addSeparator(); - JMenuItem DevelItem = new JMenuItem("Check for non-TMW characters"); // DLC NOW: do it just in the selection + JMenuItem DevelItem = new JMenuItem("Check for non-TMW characters"); // FIXME: do it just in the selection? DevelItem.addActionListener(new ThdlActionListener() { public void theRealActionPerformed(ActionEvent e) { ((TibetanDocument)dp.getDocument()).findSomeNonTMWCharacters(0, -1); // entire document. @@ -347,17 +365,6 @@ public class Jskad extends JPanel implements DocumentListener { toolsMenu.add(DevelItem); } - if (ThdlOptions.getBooleanOption("thdl.add.developer.options.to.menu")) { - toolsMenu.addSeparator(); - JMenuItem DevelItem = new JMenuItem("Fix curly braces RTF problem"); // DLC NOW: do it just in the selection - DevelItem.addActionListener(new ThdlActionListener() { - public void theRealActionPerformed(ActionEvent e) { - ((TibetanDocument)dp.getDocument()).replaceTahomaCurlyBracesAndBackslashes(0, -1); // entire document - } - }); - toolsMenu.add(DevelItem); - } - menuBar.add(toolsMenu); JMenu infoMenu = new JMenu("Info"); @@ -401,11 +408,11 @@ public class Jskad extends JPanel implements DocumentListener { new SimpleFrame(kbd.getIdentifyingString(), kbd.getQuickRefPane()); /* DLC FIXME -- pressing the "Extended - Wylie" menu item twice causes the first - pane to become dead. We should check - to see if the first pane exists and - raise it rather than creating a second - pane. */ + Wylie" menu item (for example) twice + causes the first pane to become dead. + We should check to see if the first + pane exists and raise it rather than + creating a second pane. */ } }); infoMenu.add(keybdItem); @@ -420,11 +427,11 @@ public class Jskad extends JPanel implements DocumentListener { public void theRealActionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(Jskad.this, "Copyright 2001-2003 Tibetan and Himalayan Digital Library\n\n"+ - "Jskad is protected by the THDL Open Community License.\n\n"+ /* FIXME HARD-CODED VERSION NUMBER */ + "Jskad is protected by the THDL Open Community License.\n\n"+ /* FIXME UPDATE THE YEAR REGULARLY */ "For more information, or to download the source code\n"+ "for Jskad, visit our web site:\n"+ - " http://www.thdl.org/\n" + + " http://thdl.org/\n" + "\n" + "When submitting bug reports, please indicate that the\n" + "time of compilation is " diff --git a/source/org/thdl/tib/input/TMW_RTF_TO_THDL_WYLIE.java b/source/org/thdl/tib/input/TMW_RTF_TO_THDL_WYLIE.java index e97c9b8..78453a1 100644 --- a/source/org/thdl/tib/input/TMW_RTF_TO_THDL_WYLIE.java +++ b/source/org/thdl/tib/input/TMW_RTF_TO_THDL_WYLIE.java @@ -23,11 +23,14 @@ import java.io.*; import org.thdl.util.*; import org.thdl.tib.text.*; -/** +/** DLC FIXME: this is misnamed and it doesn't allow for TM->TMW conversion. + * * TMW_RTF_TO_THDL_WYLIE is a command-line utility for converting TMW - * to Wylie. It is a TibetanMachineWeb-in-RichTextFormat to THDL - * Extended Wylie converter, more specifically. Invoke it with no - * parameters for usage information. + * to Wylie or to Tibetan Machine. It is a + * TibetanMachineWeb-in-RichTextFormat to your choice of + * TibetanMachine-in-RichTextFormat or THDL Extended + * Wylie-in-RichTextFormat converter, more specifically. Invoke it + * with no parameters for usage information. * @author David Chandler */ public class TMW_RTF_TO_THDL_WYLIE { static final String rtfErrorMessage @@ -48,19 +51,25 @@ public class TMW_RTF_TO_THDL_WYLIE { * @return the exit code. */ public static int realMain(String[] args, PrintStream out) { try { + boolean convertToTMMode = false; + boolean convertToWylieMode = false; boolean findSomeNonTMWMode = false; boolean findAllNonTMWMode = false; // Process arguments: if ((args.length != 1 && args.length != 2) || (args.length == 1 - && (args[0].equals("-h") - || args[0].equals("--help"))) + && !(args[0].equals("-v") + || args[0].equals("--version"))) || (args.length == 2 && !((findAllNonTMWMode = args[0].equals("--find-all-non-tmw")) + || (convertToTMMode + = args[0].equals("--to-tibetan-machine")) + || (convertToWylieMode + = args[0].equals("--to-wylie")) || (findSomeNonTMWMode = args[0].equals("--find-some-non-tmw"))))) { - out.println("TMW_RTF_TO_THDL_WYLIE [--find-all-non-tmw | --find-some-non-tmw] RTF_file |"); + out.println("TMW_RTF_TO_THDL_WYLIE [--find-all-non-tmw | --find-some-non-tmw | --to-tibetan-machine | --to-wylie] RTF_file |"); out.println("TMW_RTF_TO_THDL_WYLIE [--version | -v | --help | -h]"); out.println(""); out.println("Distributed under the terms of the THDL Open Community License Version 1.0."); @@ -72,17 +81,24 @@ public class TMW_RTF_TO_THDL_WYLIE { out.println(" not in Tibetan Machine Web fonts, exit zero iff none found"); out.println(" --find-some-non-tmw to locate all distinct characters in the input document"); out.println(" not in Tibetan Machine Web fonts, exit zero iff none found"); - out.println(" Otherwise, needs one argument, the name of the TibetanMachineWeb RTF file."); - out.println(" Writes the Wylie transliteration of that file to standard output after"); - out.println(" dealing with the curly brace problem. Exit code is zero on success,"); - out.println(" nonzero otherwise."); + out.println(" --to-tibetan-machine to convert TibetanMachineWeb to TibetanMachine"); + out.println(" rather than TibetanMachineWeb to Wylie"); + out.println(" --to-wylie to convert TibetanMachineWeb to TibetanMachine"); + out.println(" rather than TibetanMachineWeb to Wylie"); + out.println(" In --to... modes, needs one argument, the name of the TibetanMachineWeb RTF"); + out.println(" file. Writes the THDL Extended Wylie transliteration of that file [in"); + out.println(" --to-wylie mode] or the TibetanMachine equivalent of that file [in"); + out.println(" --to-tibetan-machine mode] to standard output after dealing with the curly"); + out.println(" brace problem. Exit code is zero on success, nonzero otherwise."); out.println(""); out.println(" You may find it helpful to use `--find-some-non-tmw' mode before doing a"); out.println(" conversion so that you have confidence in the conversion's correctness."); return 77; } if (args[0].equals("--version") || args[0].equals("-v")) { - out.println("TMW_RTF_TO_THDL_WYLIE version 0.8"); + out.println("TMW_RTF_TO_THDL_WYLIE version 0.81"); + out.println("Compiled at " + + ThdlVersion.getTimeOfCompilation()); return 77; } String tmwRtfPath = args[args.length - 1]; @@ -107,12 +123,19 @@ public class TMW_RTF_TO_THDL_WYLIE { } else if (findSomeNonTMWMode) { // 0, -1 is the entire document. return ((TibetanDocument)dp.getDocument()).findSomeNonTMWCharacters(0, -1, out); - } else { // conversion mode + } else { // conversion {to Wylie or TM} mode // Fix curly braces in the entire document: ((TibetanDocument)dp.getDocument()).replaceTahomaCurlyBracesAndBackslashes(0, -1); - // Convert to THDL Wylie: - dp.toWylie(0, dp.getDocument().getLength()); + if (convertToWylieMode) { + ThdlDebug.verify(!convertToTMMode); + // Convert to THDL Wylie: + dp.toWylie(0, dp.getDocument().getLength()); + } else { + ThdlDebug.verify(convertToTMMode); + // Convert to TibetanMachine: + ((TibetanDocument)dp.getDocument()).convertToTM(0, dp.getDocument().getLength()); + } // Write to standard output the result: ((TibetanDocument)dp.getDocument()).writeRTFOutputStream(out); diff --git a/source/org/thdl/tib/input/TMW_RTF_TO_THDL_WYLIETest.java b/source/org/thdl/tib/input/TMW_RTF_TO_THDL_WYLIETest.java index b6ad47b..1640665 100644 --- a/source/org/thdl/tib/input/TMW_RTF_TO_THDL_WYLIETest.java +++ b/source/org/thdl/tib/input/TMW_RTF_TO_THDL_WYLIETest.java @@ -77,74 +77,55 @@ public class TMW_RTF_TO_THDL_WYLIETest extends TestCase { assertTrue(0 == rc); } - /** Tests the --find-some-non-tmw mode of {@link - * org.thdl.tib.input.TMW_RTF_TO_THDL_WYLIE}. */ - public void testFindSomeNonTMWMode() { + + private void helper(String mode, String extension, int erc) { String[] args = new String[] { - "--find-some-non-tmw", - "source" + File.separator - + "org" + File.separator - + "thdl" + File.separator - + "tib" + File.separator - + "input" + File.separator - + "TMW_RTF_TO_THDL_WYLIETest1.rtf" + mode, + getTestFileName("Test1") }; boolean fileNotFound = false; try { - int rc = TMW_RTF_TO_THDL_WYLIE.realMain(args, new PrintStream(new FileOutputStream("bin/for-junit/TMW_RTF_TO_THDL_WYLIETest1ResultFindSome.out"))); - assertTrue(rc == 1); + int rc = TMW_RTF_TO_THDL_WYLIE.realMain(args, new PrintStream(new FileOutputStream("bin/for-junit/TMW_RTF_TO_THDL_WYLIETest1Result" + extension + ".out"))); + assertTrue(rc == erc); } catch (FileNotFoundException e) { fileNotFound = true; } assertTrue(!fileNotFound); - testActualAndExpected("Test1ResultFindSome"); + testActualAndExpected("Test1Result" + extension); + } + + private static String getTestFileName(String testName) { + return "source" + File.separator + + "org" + File.separator + + "thdl" + File.separator + + "tib" + File.separator + + "input" + File.separator + + "TMW_RTF_TO_THDL_WYLIE" + testName + ".rtf"; + } + + + /** Tests the --find-some-non-tmw mode of {@link + * org.thdl.tib.input.TMW_RTF_TO_THDL_WYLIE}. */ + public void testFindSomeNonTMWMode() { + helper("--find-some-non-tmw", "FindSome", 1); } /** Tests the --find-all-non-tmw mode of {@link * org.thdl.tib.input.TMW_RTF_TO_THDL_WYLIE}. */ public void testFindAllNonTMWMode() { - String[] args = new String[] { - "--find-all-non-tmw", - "source" + File.separator - + "org" + File.separator - + "thdl" + File.separator - + "tib" + File.separator - + "input" + File.separator - + "TMW_RTF_TO_THDL_WYLIETest1.rtf" - }; - boolean fileNotFound = false; - try { - int rc = TMW_RTF_TO_THDL_WYLIE.realMain(args, new PrintStream(new FileOutputStream("bin/for-junit/TMW_RTF_TO_THDL_WYLIETest1ResultFindAll.out"))); - assertTrue(rc == 1); - } catch (FileNotFoundException e) { - fileNotFound = true; - } - assertTrue(!fileNotFound); - - testActualAndExpected("Test1ResultFindAll"); + helper("--find-all-non-tmw", "FindAll", 1); } - /** Tests the converter mode of {@link + /** Tests the --to-wylie converter mode of {@link * org.thdl.tib.input.TMW_RTF_TO_THDL_WYLIE}. */ public void testConverterMode() { - String[] args = new String[] { - "source" + File.separator - + "org" + File.separator - + "thdl" + File.separator - + "tib" + File.separator - + "input" + File.separator - + "TMW_RTF_TO_THDL_WYLIETest1.rtf" - }; - boolean fileNotFound = false; - try { - int rc = TMW_RTF_TO_THDL_WYLIE.realMain(args, new PrintStream(new FileOutputStream("bin/for-junit/TMW_RTF_TO_THDL_WYLIETest1ResultConversion.out"))); - assertTrue(rc == 0); - } catch (FileNotFoundException e) { - fileNotFound = true; - } - assertTrue(!fileNotFound); + helper("--to-wylie", "Conversion", 0); + } - testActualAndExpected("Test1ResultConversion"); + /** Tests the --to-tibetan-machine converter mode of {@link + * org.thdl.tib.input.TMW_RTF_TO_THDL_WYLIE}. */ + public void testTMConverterMode() { + helper("--to-tibetan-machine", "TM", 0); } } diff --git a/source/org/thdl/tib/input/TMW_RTF_TO_THDL_WYLIETest1ResultTM.expected b/source/org/thdl/tib/input/TMW_RTF_TO_THDL_WYLIETest1ResultTM.expected new file mode 100644 index 0000000..9a94db2 --- /dev/null +++ b/source/org/thdl/tib/input/TMW_RTF_TO_THDL_WYLIETest1ResultTM.expected @@ -0,0 +1,84 @@ +{\rtf1\ansi +{\fonttbl\f0\fnil Monospaced;\f1\fnil TibetanMachineWeb;\f2\fnil TibetanMachine;\f3\fnil Tahoma;\f4\fnil TibetanMachineSkt4;\f5\fnil TimesNewRoman;\f6\fnil TibetanMachineSkt2;\f7\fnil TibetanMachineSkt3;\f8\fnil Times New Roman;} +{\stylesheet{\s2\f1\fs144\i0\b0\cf0 default;}{\s1\li0\ri0\fi0\ql\sbasedon2\snext1 Body Text;}} +\margl1440\margr1440\widowctrl +\s1\li0\ri0\fi0\ql\f2\fs56\i0\b0\cf0 /\'eb+-`\'dc-+\'e8/-*\'e89-+c\'dc+-`\'dc-\{:-0\'eb7\'dc-u\'e4-+e$<\'ca\f3\fs44\ul0\par +\par +\f2\ul0\'c9\f4 &\f2\'ca \f5\ul0 \f2\ul0\'ca#$<-%,-8\'df:-b\'dc-<-:-\u129 ?\'eb+-\'fd7\'dc-0*\'eb-9\'dc<-`\'dc-\{:-v\'eb,-#1\'ec-/\'eb9-/B\'eb+-\'fd7\'dc-+\'e8/-*\'e89-J\'eb#<-Q,-#5\'eb,-\'b9\'a57\'dc-+#7-Y\'eb,-+c\'dc+-`\'dc-\{:-0\'eb7\'dc-u\'e4-+e$<-5\'e8<-e-/-/\'ba\'a5#<-<\'eb\'ca\'ca\par +\par +/U:-\'fd-/6$-\'fd\'eb7\'dc-/P-,-Z\'a8#-\'fd7\'dc-i\'eb$-a\'e89-+/\'df<-,-7'\'dc#<-o:-X\'dc$-Y\'eb/<-#<\'e89-b\'dc-#+,-h\'dc-:\'ca\'ca\par +i#<-X,-,\'eb9-/\'df7\'dc-F-\{,-7\'eb+-#6\'dc-0$\'eb,-\'fd9-9/-7/9-&\'eb<-\'b4\'a5,-0-:\'df<-#6\'dc#<-\'fd7\'dc-0\'dc#-Y\'eb$-%,\'ca\'ca\par +0*7-#(\'dc<-/%\'b0+-o:-Z\'e89-/%<-/%\'eb0-\'fd7\'dc-\{:-A-Y\'eb$-/E\'e3$<-Y\'eb/<-/%\'b0-0$7-/-0"9-(:-2\'ec#<-`\'dc-+\'fd:\'ca\'ca\par +v-,-0*\'eb-/7\'dc-a\'b2-0&\'eb#-6<-#1$-r<-\'fd\'eb-7&\'dc-0\'e8+-#1\'ec-/\'eb<-7'\'dc#-D\'e8,-\'b5<\'df0-\'b8\'a5-+#\'e8-:\'e8#<-03\'ec+\'ca\'ca\par +\par +7&\'dc-/7\'dc-+$\'eb<-\'fd\'eb-F0-\'fd9-7'\'eb0<-\'fd7\'dc-#5\'eb0-0\'e8+-2\'e9-8\'dc-#8\'df$-l\'e1$-D#-\'fd7\'dc-E\'eb-B\'e8-#$-\'ca\'ca\par +:\'eb$<-<\'df-\u129 ?\'eb+-:-6+-0\'dc-;\'e8<-\'fd9-7+\'eb+-\'fd-7'\'eb-/7\'dc-7e\'b3$-#,<-0&\'eb#-#\'dc-#,-03\'ec+-`\'dc\'ca\'ca\par +a/-/+#-+/$-\'fd\'eb9-\'b8\'a5<-#<\'df0-\{:-/-8\'eb$<-`\'dc<-:\'e8#<-/W#<-2\'e9-+$-8\'e8-;\'e8<-+\'fd#-\'b7\'e2-0\'e8+\'ca\'ca\par +2\'e9-+\'fd:-8\'eb$<-7\'b8\'a57\'dc-O\'eb,-\'fd-\'b8\'a5<-<\'df-^\'dc,-\'fd7\'dc-+$\'eb<-i\'e1/-7o<-/\'df-v-,-0\'e8+-\'fd-_\'eb:\'ca\'ca\par +\par +29-\'b8\'a5-+$9-/7\'dc-0a\'e8,-\'fd7\'dc-#\'e8-<9-#5\'eb,-\'b9\'a57\'dc-:$-2\'ec7\'dc-N#<-`\'b2-8\'dc<\'ca\'ca\par +&\'eb<-\'b4\'a5,-9\'dc-\u144 ?#<-0\'dc#-%,-0-8\'dc-X\'dc$-:-/[\'a8,-\'fd7\'dc-9$-+/$-\'b8\'a5\'ca\'ca\par +7\'b8\'a5-7o:-w\'eb<-#9-9\'dc-0\'eb7\'dc-[$-/C,-&\'eb<-(\'dc+-0\'e8-:\'eb$-#1$-07\'dc-$\'eb<\'ca\'ca\par +B\'e8,-\'fd9-7&9-/7\'dc-e\'e8+-\'fd\'eb-6\'df9-.\'df+-M-\'fd-0i\'dc,-\'fd7\'dc-\{,-\'b8\'a5-/\'ba\'a5#<\'ca\'ca\par +\f3\ul0\par +\li720\f2\ul0 [$-03\'ec+-7/\'df0-b\'dc-l-/<-7a\'b2+-\'fd7\'dc-e\'b3-9\'df7\'dc-E\'e3:-/I\'e8#<-:\'ca\'ca\par +/D,-#8\'eb7\'dc-+$\'eb<-\'b4\'a5,-+/$-\'b8\'a5-e\'e8+-\'fd7\'dc-8\'eb,-),-8\'eb$<-J\'eb#<-\'fd7\'dc\'ca\'ca\par +6\'df9-0\'dc#-(#-n,-10-b\'dc<-+#\'e8-/7\'dc-#6\'df#<-%,-7\'b8\'a5<-0-e<\'ca\'ca\par +7+9-03+-9\'dc#-e\'e8+-T-0\'eb<-r\'dc+-\'fd-#<\'df0-:-0$7-\u128 ?\'e79-%\'dc#\'ca\par +\par +8\'dc+-7\'eb$-/5\'dc,-9<-w-#5\'eb,-7"\'eb9-:\'eb-#(\'dc<-\'fe\'e8<-:\'ca\'ca\par +7h\'e1:-/-Y\'e89-8$-7d$-0\'eb-<\'e8:-e\'e8+-0#\'eb-\'fe\'e8<-`\'dc\'ca\'ca\par +/\'ea-\'ac\'d99-0*\'dc$-"7\'dc-:,-/\'df-9/-7d$-+e$<-%,-0\'ca\'ca\par +\u137 ?-/7\'dc-+/$-d\'b3#-$#-#\'dc-\{:-\'fd\'eb-(\'e89-i\'e1/-03\'ec+\'ca\'ca\par +\par +#$<-%,-T-:0-8$<-\'fd7\'dc-a\'eb,-7+\'dc9-\{:-/7\'dc-/Y,-\'fd-/%\'b0-#(\'dc<-/+#-\'fd\'eb7\'dc-\'b5\'a59-"$-0&\'eb#\'ca\par +0a\'e8,-/I\'e8-\'b9\'a5<-\'fd7\'dc-,0-0"7\'dc-i\'e1-8\'dc<-(\'e8-/9-7l\'e8,-03+-&\'eb<-\{:-0\'e8<-+/\'eb,-F0-#<\'df0-+$-\'ca\'ca\par +\{:-/-\'b4\'a5,-+$\'eb<-02\'ec-\'fe\'e8<-E\'eb-B\'e8-/Y,-\'fd7\'dc-I-:#-*0<-%+-0a\'e8,-\'fd-5\'dc-/-72\'ec7\'dc\'ca\'ca\par +/!7-l\'dc,-#6\'df#<-%,-+e\'dc#-73\'dd,-P\'eb-7+\'dc9-;\'eb$-7b\'b29-0\'dc,-,-\'b4\'a5,-0a\'e8,-r$-:<-#$-#\'dc<-#5:\'ca\'ca\par +\par +:\'dc-h\'dc7\'dc-N\'e4#-n,-0a\'e8,-\'fd7\'dc-[$-/-%,\'ca\'ca\par +7'0-0#\'eb,-v\'eb\f4 e\f2 -8\'dc-:$-2\'ec-/6\f4 e\f2 $-\'fd\'eb7\'dc-2\'ec,\'ca\'ca\par +"-+\'eb#-<\'eb-<\'eb9-/g-/7\'dc-i#\f4 e\f2 <-\'fd\f4 e\f2 7\'dc-\{,\'ca\'ca\par +d\'eb#<-o:-F-:\'df$-7#\'eb+-0"<-D#-\'b7\'e2-\{:\'ca\'ca\f3\ul0\par +\par +\f2\ul0 +\'fd:-Q,-&\'eb<-`\'dc-9$-/5\'dc,-$\'eb<-8$<-\'fd9\'ca\'ca\par +#,<-M7\'dc-/$-03\'ec+-7e\'eb9-\'fd9-T\'a9,-i\'e1/-\'fd7\'dc\'ca\'ca\par +0$7-\u128 ?\'e79-/i\'eb+-e\'e8+-/\f6 v\'e4\f2 -3\'dd\'a1-4-!\'ca\par +H+-e\'b3$-%\'eb+-\'fd,-0&\'eb#-\'b7\'e2-F0-\'fd9-/W#<\'ca\'ca\par +\par +\{-=\'eb9-:\'df$-+$-9\'dc#<-`\'dc<-0$\'eb,-0*\'eb-5\'dc$-\'ca\'ca\par +/!7-h\'dc0<-#<\'e89-7"\'eb9-0&\'eb#-+0,-#(7-#,\'eb,-\'fd7\'dc\'ca\'ca\par +<-\'fe-7'0-0#\'eb,-+\'fd:-Q,-x$<-`\'dc-#\'b8\'a5$-\'ca\'ca\par +&\'eb<-Q,-<-\'fe\'eb$-\{:-\'fd\'eb9-<\'df-0\'dc-++\'ca\'ca\par +\par +\u137 ?-/7\'dc-7//-Y\'e8#<-0\'b8\'a5+-\'fd7\'dc-\{9-/%\'dc$<-`$-\'ca\'ca\par +0*\'eb,-\'fd\'eb7\'dc-h\'dc-:-l\'e8#<-\'fd<-7b\'dc$-0\'dc,-\'fd7\'dc\'ca\'ca\par +:\'e8#<-/;+-#)0-b\'dc-7e\'b3$-#,<-v\'eb-Q,-%,\'ca\'ca\par +#$-\'b8\'a5-#,<-`$-+$-/7\'dc-\u135 ?\'eb-/-7.\'e8:\'ca\'ca\par +\par +8-9/<-+0-\'fd7\'dc-\u129 ?\'eb+-2\'b1:-\'fd+-+!9-2:\'ca\'ca\par +&\'e8<-&\'e89-/+\'eb-/-X\'dc#<-07\'dc-/<\'dc:-6\'e89-b\'dc<\'ca\'ca\par +6\'df0-\'fd7\'dc-\'b8\'a5<-7+\'dc9-+\'e8/-*\'e89-#)0-\{\'e6+-<\'eb#<\'ca\'ca\par +/B\'eb+-\'fd-9$-(\'dc+-$:-/7\'dc-\{\'e6-9\'df-6+\'ca\'ca\par +\par +a+-\'fd9-/%\'b0-n#-9\'dc#-\'fd7\'dc-&\'b1-#)\'e89-&\'e8\'ca\'ca\par +v\'eb-i\'eb<-#6\'dc$<-`\'dc<-\u133 ?\'eb:-7+\'eb+-9\'dc#-e\'e8+-\'fd\'ca\'ca\par +;\'e8<-e7\'dc-2\'b1:-:-0-\u130 ?$<-/Y,-/%\'eb<-+#\'ca\par +I\'eb0-\'fd9-9\'dc$<-\'fd7\'dc-2\'b1:-:-8\'dc+-0\'dc-#)\'eb+\'ca\'ca\par +\par +7\'eb,-)$-Y\'eb/<-`\'dc<-8$<-\'fd7\'dc-,\'eb9-73\'dd,-:\'ca\'ca\par +7"\'eb9-:\'eb<-\u128 ?\'e79-/7\'dc-/!7-8\'dc-l\'dc-/5\'eb,-b\'dc<\'ca\'ca\par ++\'e8/-*\'e89-J\'eb#<-Q,-#<9-\'fd7\'dc-+#7-Y\'eb,-0i\'eb,\'ca\'ca\par +7/\'eb+-e\'e8+-0-:-8-8\'dc-\{\'e6+-7+\'dc-\u135 ?\'eb\'ca\'ca\par +\f3\ul0\par +\li0\fi720\f2\ul0 ;\'dc<-\'fd-/B\'eb+-\'fd7\'dc-+e$<-`\'dc-$-9\'eb-)\f6\'ae\'e0\f2 -97\'dc-P\'df+-:<-(\'e8-/9-l$<-)\'e8\'ca\f5\ul0 \f2\ul0 v-,-0\'e8+-\'fd7\'dc-8\'e8-;\'e8<-`\'dc-/\'b8\'a5+-I\'dc-6+-0\'dc-;\'e8<-\'fd7\'dc-7e\'b3$-#,<-6-0-)\'eb#-+/$-#\'dc-\{:-\'fd\'eb-H+-\'b8\'a5-e\'b3$-/7\'dc-*\'df#<-`\'dc-#<$-03\'ec+-+\'fd:-/\'e87\'df7\'dc-03\'e9<-\{,-\'b8\'a5-\\\'e4+-\'fd7\'dc-/U:-\'fd-/6$-\'fd\'eb-7+\'dc7\'dc-7l\'e8,-0&\'eb#-Y\'eb/<-/%\'b0-0$7-/-Y\'eb$-#\'dc-0\'dc-P\'a9$-7n\'e8$-/7\'dc-+/\'df<-,<-&\'b1-;\'e8:-+/$-\'fd\'eb7\'dc-+`\'dc:-7"\'eb9-(-#$-/-P-/\'df9-0$\'eb,-\'fd9-7.#<-;\'dc$-\'ca\f5\ul0 \f2\ul0 0+7-8\'dc<-/%\'dc$<-\'fd7\'dc-x/<-\'fd\'eb-&\'e87\'dc-^\'eb,-:0-b\'dc-0*\'df-.\'df:-\'b8\'a5-e\'b3$-/7\'dc-/+\'e8,-Y\'eb/<-l\'dc-0-0\'e8+-\'fd<-\'fd+-+!9-P-/\'df9-/W#<-\'fd7\'dc-+e$<-`\'dc-\{:-0\'eb7\'dc-A-/\'eb-&\'e8-r\'dc+-\'fd-#<\'df0-b\'dc-"\'eb9-0\'eb-8\'df#-\'b7\'e2-/E\'e3$-/7\'dc-\{:-/-/\'df-90-;\'dc$-\'fd-7+\'dc-(\'dc+-`\'dc-/Y,-\'fd-9\'dc,-\'fd\'eb-&\'e8-,\'dc-T-+$-/%<-\'fd7\'dc-7i\'eb-/7\'dc-:\'e8#<-e<-i$<-0\'e8+-\'fd7\'dc-6\'eb$-#\'dc<-/\u133 ?\'e5/<-\'fd7\'dc-.,-/+\'e8-\'b4\'a5,-b\'dc-I-:#-Y\'e8\'ca\par +\'cc\f5\ul0 \f2\ul0 +\'e8-8$-7e\'b3$-5\'dc$-7.\'e8:-/-+$-\'ca\f5\ul0 \f2\ul0 89-Q,-\'b8\'a5-\{<-\'fd7\'dc-e\'e8+-\'fd\'eb-,\'dc-8$<-\'fd7\'dc-,\'eb9-73\'dd,-b\'dc-a\'eb,-:-0$7-\u128 ?\'e79-/7\'dc-\{:-\'fd\'eb-&\'e8,-\'fd\'eb-5\'dc#-:-9#-:<-\'fd<-,\'ca\f5\ul0 \f2\ul0 7\'eb-U\'eb:-b\'dc-Y\'eb,-\'fd<-`$-9\'dc#<-+$-\'ca\f5\ul0 \f2\ul0 8\'df:-+$-\'ca\f5\ul0 \f2\ul0\'b8\'a5<-+$-\'ca\f5\ul0 \f2\ul0 /\{\'e6+-+$-\'ca\f5\ul0 \f2\ul0 /\'df+-0\'e8+-+\'e8-#6\'dc#<-\'fd-M-:-#6\'dc#<-,<\'ca\f5\ul0 \f2\ul0 6<-#1$-#\'dc-r<-<\'df-/P0<-\'fd9-03+-\'fd<\'ca\f5\ul0 \f2\ul0 *\'eb#-09-7+\'dc-(\'dc+-`\'dc-#\'b8\'a5$-9/<-%\'b0$-6+-/B\'eb+-\'fd9-e-Y\'e8\'ca\f5\ul0 \f2\ul0 7.#<-\'fd7\'dc-8\'df:-b\'dc-0\'dc-.:-&\'e8-/-7&\'dc-0\'e8+-`\'dc-#,<-,<-&+-\'fd<\'ca\f5\ul0 \f2\ul0 #5:-\'b8\'a5-0\'e8+-\'fd7\'dc-2\'e9-+$-7+\'eb+-@\'e3-:-:\'eb$<-\u129 ?\'eb+-%\'dc$-0*7-8<-\'fd7\'dc-8\'eb,-),-\'b8\'a5-0-:-+/$-7e\'eb9-\'fd7\'dc-2\'e9\'ca\f5\ul0 \f2\ul0 7/+-I\'eb:-b\'dc-0*\'df-:-9#-0-:<-\'fd7\'dc-/\'b8\'a5+-I\'dc-<7\'dc-/%\'b0+-+$-\'ca\f5\ul0 \f2\ul0 <7\'dc-5#\f5\ul0 \f2\ul0 f\'b3-\'b5\'a57\'dc-2:\'ca\f5\ul0 \f2\ul0 0-H\'eb<-\'fd7\'dc-7o<-<-:\'df-F0<-:-:\'eb$<-\u129 ?+-\'fd<\'ca\f5\ul0 \f2\ul0 T-:<-&+-\'fd7\'dc-8\'eb,-),-.:-&\'e89-:<-#5,-\'b8\'a5-b\'b29-%\'dc$-\'ca\f5\ul0 \f2\ul0 0-H\'eb<-\'fd7\'dc-7o<-`$-F0-\'fd9-#8\'e8$-/7\'dc-#5,-+/$-\'b8\'a5-b\'b29-\'fd-5\'dc#-#\'dc-e\'e8+-\'fd-:-/D\'e8,\'ca\f5\ul0 \f2\ul0 <\'eb-,0-b\'dc-e-/-:-/I0<-\'fd<\'ca\f5\ul0 \f2\ul0 .,-2\'b1,-\'b8\'a5-I\'eb+-\'fd-+$-02$-7o\'e1-/-e\'b3$-/-F0<-:-l$-\'fd\'eb7\'dc-*\'dc#-#\'dc<-#%\'eb+-\'fd7\'dc-5:-N\'e8-/9\'ca\f5\ul0 \f2\ul0\u128 ?\'a5,-b\'dc<-/\'b4\'a59-5\'dc$-7\'b8\'a5+-\'fd-:<\'ca\f5\ul0 \f2\ul0 0$-\'fd\'eb<-/\'b4\'a59-/7\'dc-\{:-\'fd\'eb-5\'e8<-\{:-\'fd\'eb-:-W-/9-i#<-;\'dc$-\'ca\f5\ul0 \f2\ul0 +\'e8-,<-9\'dc0-/5\'dc,-7\'eb+-03\'e9<\'ca\f5\ul0 \f2\ul0 +#\'e8-/\'ca\f5\ul0 \f2\ul0 +#\'e8-0&\'eb#\f5\ul0 \f2\ul0 #<\'eb-\u130 ?\'eb$-7.#<-)\'e8-W\'eb,-b\'dc-\{:-\'fd\'eb-Z\'e8-M9-/B\'eb+-:\'ca\f5\ul0 \f2\ul0 #<\'eb-\u130 ?\'eb$-7.#<-`\'dc-\u129 ?\'dc-/\'eb9-;-H\'e8,-5\'dc#-e\'b3$-/-:<-$-:<-\'b9\'a5\'ca\f5\ul0 \f2\ul0 +\'e87\'dc-/x-#8<-\'fd9-;-H\'e8,-5\'dc#-e\'b3$-/-:<-03\'e9<-\'fd\'ca\f5\ul0 \f2\ul0 +\'e87\'dc-/x-#8\'eb,-\'fd9-;-H\'e8,-5\'dc$-e\'b3$-/-:<-(\'e8-03\'e9<\'ca\f5\ul0 \f2\ul0 +\'e87\'dc-?$-\'fd-#8<-\'fd9-;-H\'e8,-5\'dc#-e\'b3$-/-:<-03\'e9<-Q,\'ca\f5\ul0 \f2\ul0 +\'e87\'dc-?$-\'fd-#8\'eb,-\'fd9-;-H\'e8,-5\'dc#-e\'b3$-/-:<-(\'e8-03\'e9<-Q,-)\'e8\'ca\f5\ul0 \f2\ul0 7+\'dc-M-:-7"\'eb9-:\'eb<-\u128 ?\'e79-/7\'dc-\{:-\'fd\'eb-M9-i#<-;\'dc$-\'ca\f5\ul0 \f2\ul0 d\'dc-0-/5\'dc<-,\'dc-u\'dc$-/5\'dc-,<-#%\'dc#-#\'dc-/9-:-+/$-\u128 ?\'e79-/<\'ca\f5\ul0 \f2\ul0 #<\'e89-+$\'df:-6$<-N#<-`\'dc-7"\'eb9-:\'eb<-\u128 ?\'e79-/7\'dc-\{:-\'fd\'eb-8\'dc,-,\'eb\'ca\f5\ul0 \f2\ul0\'ca\par +\f5\ul0 \f2\ul0\{:-\'fd\'eb-7+\'dc-+#-,<-9\'dc0-\'fd9-/\{\'e6+-+\'e8-6<-#1$-8,-&\'eb+-\'b8\'a5-<-8-&\'dc#-7/\'df0-(\'dc-h\'dc-&\'dc#-Y\'eb$-M-/\{-/%\'b0-/5\'dc-e\'b3$-/9-i#<-:\'ca\f5\ul0 \f2\ul0 7'\'dc#-D\'e8,-#+#<-\'fd9\'ca\f5\ul0 \f2\ul0\{:-\'fd\'eb-7/\'df0-n#-/\{+-<\'df0-h\'dc-/5\'dc-Y\'eb$-M-/\{-<\'df0-%\'b0-I-/5\'dc-8\'eb+-\'fd9-/;+-\'fd7\'dc-:\'df#<-#(\'dc<-!-X\'dc#<-\'b8\'a5<-`\'dc-:\'eb-\{\'e6<-\u137 ?-/-\'b4\'a5,-b\'dc-#1\'b0#-\{,\'ca\f5\ul0 \f2\ul0 #5\'eb,-\'b9\'a5-+\'fd:-b\'dc<-7l\'e8,-\'fd9-03+-\'fd-:<-#<:-/9-0-#<\'df$<-\'fd<\'ca\f5\ul0 \f2\ul0 y+-,<-`$-:\'eb-\{\'e6<-:-7l\'dc<-\'fd9-7+\'eb+-\'fd7\'dc-v\'eb-Q,-+#-#\'dc<-+c+-\'fd9-e7\'eb\'ca\f5\ul0 \f2\ul0\'ca\par +\f5\ul0 \f2\ul0 +\'e8-8$-Y\'eb,-\'fd-7+\'dc-(\'dc+-`\'dc-#\'b8\'a5$-:-(\'dc-07\'dc-#(\'e8,-+$-/\'df-90-;\'dc$-\'fd-\'bb\'d3`-5\'e8<-/B\'eb+-\'fd-,\'dc\'ca\f5\ul0 \f2\ul0 8\'df:-i\'e1-73\'dd,-\'b8\'a5-\{:-\'fd\'eb-/\{-*0-\'fd-e\'b3$-/7\'dc-0*7-0-F-/-%,-b\'dc-/\'df-#\'ed-)-0-+$-\f6\'a3\f2 -9-\f6 a\f2 -3-#(\'dc<-:<\'ca\f5\ul0 \f2\ul0 W\'eb,-0<-9/-\'b7\'e2-e\'b3$-Y\'e8-:\'eb-07\'dc-\u129 ?\'dc:-\'fd\'eb-8\'dc+-\'b8\'a5-7\'eb$-/7\'dc-/<0-#),-b\'dc-"$-/\'df9-#,<-\'fd7\'dc-2\'e9\'ca\f5\ul0 \f2\ul0 #8\'eb-%,-\'fd\f6 V\f2 7\'dc-I-:#-+$-/6$-0\'eb-+#7-0\'b5\'a59-\u129 ?\'eb+-\'fd7\'dc-\'b8\'a5<-:<-8\'eb:-/<\'ca\f5\ul0 \f2\ul0 /6$-0\'eb-/<+-\'fd7\'dc-9:-i\'dc-h#-%,-:\'eb-07\'dc-\u129 ?\'dc:-\'fd\'eb7\'dc-(\'e8-7+/<-<\'df-/\'eb9-/7\'dc-z\'e8,-b\'dc<-#\'ed-)-0-/<:-;\'dc$-:-/\'fe\'eb,-\'fd7\'dc-\'b8\'a5<\'ca\f5\ul0 \f2\ul0 l$-r\'eb$-0+\'eb#-,#-#\'dc-J\'e0-7n\'e1:-b\'dc<-i\'e1-&9-b\'dc-*\'dc#<-\'fd-+$-\'ca\f5\ul0 \f2\ul0 l\'dc-/5\'eb,-:\'df<-:-9\'e8#-\'fd7\'dc-z\'e8,-b\'dc<-7+\'eb+-\'fd7\'dc-#,<-B\'e8<-<\'df-l,-\'fd7\'dc-8\'dc+-`\'dc-;\'dc$-D<-l$<-)\'e8\'ca\f5\ul0 \f2\ul0 "0<-`\'dc-\u144 ?$<-0-#(\'dc<-T,-%\'dc#-\'b7\'e2-T\'a9$-/-:<-V\'eb-$-#(\'dc<-<\'df-b\'b29-\'fd-(\'dc-7\'eb+-`\'dc<-/\'fe$<-;\'dc$-a\'e87\'df-#(\'dc<-/\'df-90-b\'dc-;\'dc$-#<\'e8/-\'b7\'e2-\'ba\'a5#<-\'fd<-0\'dc$-+\'e8-P9-\'b8\'a5-i#<-:\'ca\f5\ul0 \f2\ul0 /\'df-90-;\'dc$-\'fd7\'dc-/\{\'e6+-:-\{:-\'fd\'eb-/\{-e\'b3$-/7\'dc-0*7-0-7.#<-\'fe\'e8<-\'fd\'eb\'ca\f5\ul0 \f2\ul0 7.#<-\'fe\'e8<-\'fd\'eb-:-r<-/5\'dc-e\'b3$-8$-/1\'b0,-0\'eb-7+<-)\'e8-y9-Y\'eb/<-Q,-b\'dc-\{:-\'fd\'eb-#5,-5\'dc#-#\'dc-/\'df-0\'eb-"/-\'b7\'e2-v$<-\'fd9-r<-e\'b3$-,-\{:-r\'dc+-\'b8\'a5-+/$-/U\'a89-/9-"<-v$<-\'fd<-+0-/%<\'ca\f5\ul0 \f2\ul0 r<-W\'eb,-0-F0<-\u129 ?\'e7#<-\'fd-9$-9$-#\'dc-r\'dc$-0\'eb-+$-/%<-)\'e8-&\'b1-/\'eb-U:-Q,-;\'dc$-D7\'dc-7i0-\'b8\'a5-0\'dc$-r\'dc$-T,-%\'dc#-\'b7\'e2-7\'b8\'a5<-\'fd-:<-\'bb\'d3`7\'dc-/\{\'e6+-%\'e8<-i#<-\'fd-8\'dc,-,\'eb\'ca\'ca\par +\f5\ul0 \f2\ul0 +\'e8-8$-\'b4\'a5,-0a\'e8,-(\'dc-07\'dc-#(\'e8,-7+\'dc-(\'dc+-7h\'e1$<-:\'eb9-0"<-i\'e1/-F0<-`\'dc-/5\'e8+-2\'b1:-0$-\'b8\'a5-0&\'dc<-`$-+\'eb,-i\'e1/-%\'e8<-\'fd-<-:\'df#-+e9-w-7o\'dc$-\'fd\'eb7\'dc-&\'b1-Y\'eb+-`\'dc-(-/7\'dc-2\'e9<-/%\'eb-M7\'dc-\'b8\'a5<-<\'df\'ca\f5\ul0 \f2\ul0 8\'df0-#<\'eb-\u130 ?\'eb$-:-#,<-\'fd7\'dc-T\'a90<-<\'df-u$-\'fd\'eb-&\'e87\'dc-n\'e1#-\'b5\'a5-*:-+!9-b\'dc-F0-\'fd9-b\'b29-,<-\'ba\'a5#<\'ca\f5\ul0 \f2\ul0 w-/-/%\'b0-.:-&\'e89-:\'eb,-\'fd-:\'e8#<-\'fd9-\u130 ?9-/-T7\'dc-U+-\'b8\'a5-9\'df-l-5\'e8<-\'fd-/<\'dc:-Q,-\'fd-F0<-l#-\'fd\'eb9-/B\'eb+-\'fd\'ca\f5\ul0 \f2\ul0\{-,#-\'fd-+/$-*$-+$-/Y\'a9,-\'fd7\'dc-0\'dc$-#\'dc$-;\'dc$-\'ca\f5\ul0 \f2\ul0 /\'eb+-8\'df:-\'b8\'a5-N#<-.\'eb-\u135 ?\'e87\'df9-7/\'eb+-\'fd7\'dc-+c\'dc+-*-<-#<-(-/-0\'e8-)\'eb#-%,-b\'dc-w-/\'ca\f5\ul0 \f2\ul0\{-,#-\'fd-<\'dc-8\'eb:-\'b8\'a5-/B\'eb+-\'fd7\'dc-89-$\'eb7\'dc-2\'e9<-/\'b8\'a5,-b\'dc-9\'e8<-#67-7\'eb+-6\'e89-/\'b8\'a5,-\'fd-+$-\'ca\f5\ul0 \f2\ul0 :<-U9-\{:-:-//<-\'fd-,-:\'df\f6\'b1\f2\'dc-,\'dc7\'dc-,#<-<\'df-U\'a8-/P0<\'ca\f5\ul0 \f2\ul0 +\'e8-,<-:$-2\'ec7\'dc-\'b4\'a5\f6 q\f2 -F0-\'fd9-\{<-\'fd7\'dc-6\'dc:-0$9-b\'dc-\u128 ?\'e7-I:-l\'e1#-%\'b0-I-/5\'dc7\'dc-8:-7+/-`\'dc-8\'eb,-),-\'b4\'a5,-:-9$-#\'dc9-/b\'dc<-;\'dc$-\'ca\f5\ul0 \f2\ul0\'fd\f6 V\f2\'eb7\'dc-X\'e80<-\'fd-*\'eb#<-\'fd7\'dc-9\'dc-\u144 ?#<-0\'dc#-%,-b\'dc-+\'eb,-8\'eb$<-<\'df-2$-/7\'dc-i#<-73\'dd,-0-+$-<-02\'ec-0-<\'eb#<-/1\'b0,-0\'eb9-+/$-/U\'a89-)\'e8-:\'eb-(\'dc-\'bb\'a5-I-+\'b5\'a57\'dc-/9-\'b8\'a5-(\'dc-7\'eb#-b\'dc-\{:-n,-#(\'dc<-7*\'df$-#\'dc-\u129 ?\'dc-/\'eb9-7'\'dc#<-\'fd-0\'e8+-\'fd7\'dc-\{:-*/<-`\'dc-e-/7\'dc-U+-#<$-0*\'eb,-\'fd\'eb<-9$-e,-\'b8\'a5-7b\'dc$-/9-+/$-*\'eb/-,7$-\'ca\f5\ul0 \f2\ul0 0&\'eb#-#\'dc-\u135 ?\'e5:-U\'a87\'dc-03+-\'fd-Y\'eb,-\'fd7\'dc-&\'e8+-\'b8\'a5\'ca\f5\ul0 \f2\ul0 +\'b5\'a5$-:\'eb-(\'e89-+\'b5\'a5-\'fd-\'b4\'a5,-73\'dd,-5\'e8<-\'fd-<-.\'eb-e\'dc-/-:-9$-e\'b3$-#\'dc-V\'eb-,<\'ca\f5\ul0 \f2\ul0 9/-e\'b3$-#\'dc-+$\'eb<-\'fd\'eb-8\'eb$<-<\'df-J\'eb#<-)\'e8\'ca\f5\ul0 \f2\ul0 :\'eb-l\'e1#-\'b7\'e2-+!7-/-\u129 ?+-\'fd<-:$-2\'ec-.\'df,-<\'df0-2\'ec#<-\'fd-:<-#5,-\'b8\'a5-b\'b29-\'fd-,\'ca\f5\ul0 \f2\ul0 +#7-0\'eb-+$-+#7-Y\'eb/<-0<-/-Y\'eb$-#\'dc-7\'eb-0-:,-/%\'b0-l\'e1#-#\'dc-/9-\'b8\'a5-(\'dc$-"\'df9-e<-\'fd7\'dc-7\'eb-*\'df#-\u136 ?$-I\'dc-+$-\u130 ?9-/7\'dc-\'b4\'a5,-\'b7\'e2-/6$-\'fd\'eb7\'dc-0&\'eb+-\u135 ?\'dc,-b\'dc<-U\'a8-<\'df-4\f6\'c7\f2 7\'dc-0&\'eb+-Z\'eb$-(\'dc-#5\'eb,-7/\'df0-b\'dc<-7a\'b2+-\'fd-P9-b\'b29-)\'e8-E\'eb-B\'e8-#+,-\'b8\'a5-e$-&\'b1/-`\'dc-;\'dc$-l\'e1$-,-7&\'dc-0\'e8+-/+#-\'fd\'eb<-~-72\'ec$-b\'dc-F0-\'fd9-\u135 ?\'e5:-)\'e8-.\'df:-/7\'dc-~7\'dc-#+,-:-/\'ba\'a5#<-,<\'ca\f5\ul0 \f2\ul0 &\'b1-r\'dc,-\{:-02,-%,-Z\'e8-+$-/%<-\'fd7\'dc-#8\'df:-:<-F0-\'fd9-\{:-/7\'dc-/-+,-,0-0"7\'dc-0*7-t<-\'fd9-/\u133 ?\'e8$<-)\'e8\'ca\f5\ul0 \f2\ul0 +\'b5\'a5$-:\'eb-<\'eb-M-\'fd-\{:-/-5\'e8<-\'fd-;\'dc$-D7\'dc-<-#<-(-/7\'dc-/%\'eb-M7\'dc-\'fe-9\'e8$<-;9-/-,-8\'e8-;\'e8<-0&\'eb#-#\'dc-/\'b8\'a5+-I\'dc-0$\'eb,-\'b8\'a5-03+-+\'eb\'ca\f5\ul0 \f2\ul0\'ca0+\'eb-:<\'ca\f5\ul0 \f2\ul0 +\'e87\'dc-(\'dc,-0\'eb-w-/-\u133 ?-#%,-b\'dc<-/6\'df$-/-+$-\'ca\f5\ul0 \f2\ul0\u133 ?-#%,-73\'dd,-+$-/\'b8\'a5+-I\'dc-6<-`\'dc-a\'e87\'df-5\'dc#-`$-\'fe\'e8<-\'fd9-/;+-\'fd7\'dc-#67-73\'dd,-b\'dc-9\'dc-0\'eb-,\'dc-#67-#,<-<\'df-#%\'dc#-&\'b1-2\'ec+-<\'eb-/\{+-w-U9-b\'dc-U9-#,<-<\'df-/%\'b0-l\'e1#-&\'b1-2\'ec+-Y\'eb$-\'fd-\u133 ?-#%,-#+\'eb$-#\'dc-U9-09-/%\'b0-l\'e1#-&\'b1-2\'ec+-(\'e89-+\'b5\'a5-e\'b3$-/<-#67-73\'dd,-b\'dc-9\'dc-0\'eb-,\'dc-2+-07\'dc->\'a1-+\f7 5\f2 -#1$-07\'dc-$\'eb<-<\'df-#<:-/9-;9-/-8\'dc,-,\'eb\'ca\f5\ul0 \f2\ul0\'ca\par +\f5\ul0 \f2\ul0 +\'e8-,<-5#-5\'e8-+\'b5\'a57\'dc-/9-\'b8\'a5-+0-\'fd7\'dc-&\'eb<-`\'dc-/\'b8\'a5+-I\'dc7\'dc-V\'eb-/\{-0-d\'e8-/7\'dc-2\'b1:-/Y,-\'fd<\'ca\f5\ul0 \f2\ul0 7'\'dc#-D\'e8,-b\'dc-e\'e8+-\'fd\'eb-#<\'e89-0$:-%,-b\'dc<-U:-\'fd-0&\'eb#-#\'dc-/6$-\'fd\'eb7\'dc-+\'fd:-+$-Q,-\'fd7\'dc-+\'eb,-\'b8\'a5-#<\'eb:-/-:-/D\'e8,-,<\'ca\f5\ul0 \f2\ul0 0&\'eb#-+0,-b\'dc-#\'b8\'a5:-e-<\'eb-<\'eb7\'dc-v\'eb-+$-720-\'fd9-6/-\{<-&\'eb<-`\'dc-V\'eb-u\'e8#<-F0-\'fd9-/g:-,<-*\'e8#-\'fd-&\'e8-&\'b1$-#\'dc-9\'dc#<-%,-b\'dc-8\'eb:-#\'eb\'ca\f5\ul0 \f2\ul0 9$-7+\'eb+-\'fd7\'dc-2\'ec#<-0*7-+#-#%\'dc#-\'b7\'e2-7'\'eb-/7\'dc-9\'eb-6+-0\'dc-;\'e8<-\'fd-0"7-a/-\'b7\'e2-o\'eb-/7\'dc-7"\'eb9-:\'eb-/U\'eb9-)\'e8\'ca\f5\ul0 \f2\ul0 0*9-b+-`\'dc-8\'df:-~-0&\'eb#-#\'dc-i\'eb$-\'b8\'a5-+\'b5\'a5$-:\'eb-b-#%\'dc#-\'fd-+\'fd7-/\'eb-5\'e8<-\'fd-N#<-7o\'e1#-#\'dc-:\'eb9-0\'dc-7b\'b29-/7\'dc-/+\'e8-/-&\'e8,-\'fd\'eb-&\'eb<-`\'dc-U\'a87\'dc-0"7-t\'eb$-\'b8\'a5-[-2\'ec#<-\'fd7\'dc-\u135 ?\'e5:-U\'a87\'dc-w\'eb<-#9-b\'dc<-9\'eb:-\'fd7\'dc-&\'b1-73\'dd,-#6\'df#<-U\'a8-*-0\'dc-++-\'fd7\'dc-03+-\'fd-/Y,-)\'eb\'ca\f5\ul0 \f2\ul0\'ca\par +\f5\ul0 \f2\ul0 +\'e8-P9-/Y,-\'fd-9\'dc,-\'fd\'eb-&\'e8-8\'df:-+/\'df<-7b\'b29-,<-&9-\'b8\'a5<-`\'dc-+:-7i\'eb7\'dc-t\'e4$-9$-//<-<\'df-7b\'b29-/7\'dc-#;\'dc<-:\'df#<-/5\'dc,-*-i\'e19-a/-\'fd-:<\'ca\f5\ul0 \f2\ul0 7i\'eb-/7\'dc-v-0-\'bb\'d3`-<\'e8$-#\'e8-b-#%\'dc#-\'fd-N#<-7o\'e1#-:\'eb-,#-(9-q\'dc\'a2-\f6 Z\'c9\f2 -\f6\u130 ?\f2 -!-\'aa-!9-#<$-/-\'b4\'a5,-b\'dc-#,-03\'ec+-F0-\'fd9-73\'dd,-\'fd7\'dc-0\'dc7\'dc-+/$-d\'b3#-w-/-/6$-\'fd\'eb9-;\'eb-:\'eb-!-Y\'eb$-n#-/%\'b0-#(\'dc<-`\'dc-/+#-(\'dc+-%,-b\'dc-+\'fd:-+$-\'fd\'eb7\'dc-<$<-\{<-\'b8\'a5<-`\'dc-7"\'eb9-:\'eb7\'dc-\{\'e6+-#<\'df$<-\'fd-;\f6\'b2\f2 -:9-\u129 ?,-l$<-,<-0-:-87\'dc-\'fe\'e8+-2:-\'b8\'a5-U\'a8-#<\'df$<-*\'df#<-8\'eb$<-<\'df-J\'eb#<-\'fd7\'dc-+`\'dc:-7"\'eb9-b\'dc-[$-/C,-8\'e8-;\'e8<-`\'dc-#6\'dc-e\'dc,-0$\'eb,-\'fd9-7/9-/7\'dc-\u128 ?\'e7-07\'dc-#9-b\'dc<-I\'e8,-\'fd7\'dc-7l\'e8,-e\'e8+-`\'dc-+#7-Y\'eb,-#<9-\'fd-/\u132 ?\'e5,-)\'e8\'ca\f5\ul0 \f2\ul0 E\'eb-B\'e8-*\'e8#-\'fd7\'dc-/#\'eb-U:-!-:\'a1-\'fd7\'dc-i\'eb$-a\'e89-b\'dc-\'fe\'e8-@\'e39-7b\'e8+-\'fd7\'dc-0\'df-0*7-o:-/7\'dc-03+-\'fd-,<-/6\'df$-7'\'dc#<-\'fd-0\'e8+-\'fd7\'dc-#+\'eb$-M7\'dc-h\'dc-:-/i\'eb+-e\'e8+-I\'dc/<-Y\'eb$-7"\'eb9-:\'eb7\'dc-9\'dc-0\'eb-0&\'eb#-\'b7\'e2-/g-/7\'dc-&\'eb<-\{:-9\'dc#<-Q,-<\'df0-%\'b0-I-#<\'df0-\'b8\'a5-e\'eb,-\'fd-0*7-+#-#\'dc<-d\'dc-,$-#5,-#<\'df0-\u130 ?\'eb9-/7\'dc-#<$-&\'e8,-\'b9\'d3-+7\'dc-\u133 ?-+e$<-`\'dc-,\'eb9-/\'df7\'dc-7d$-7n\'e1:-:<-Q,-b\'dc-F-/9-\\\'e4+-\'fd9-03+-\'fd7\'dc-*-0\'ca\f5\ul0 \f2\ul0 l#-\'fd\'eb7\'dc-7"\'eb9-:\'eb-%,-b\'dc<-+\'b5\'a5$-:\'eb-+\'b5\'a5-/%\'b0-I-/\{+-\'fd9-t-t\'eb7\'dc-+\'fd\'df$-2\'ec#<-0*7-+#-0\'dc$-#\'dc-T#-09-e<-,<-W-,-0\'e8+-\'fd<-<-&\'e8,-\'fd\'eb7\'dc-"\'eb9-8\'df#-\'b4\'a5,-\'b7\'e2-a/-\'fd9-03+-+\'eb\'ca\f5\ul0 \f2\ul0\'ca+\'e8-8$-9\'dc#<-Q,-l#-\'fd\'eb-+\'b5\'a5$-:\'eb-M-/%\'b07\'dc-Y\'e8$-\'b8\'a5-t-t\'eb-/%\'eb0-\'fd9-/5\'e8+-\'fd-P9-,\'ca\f5\ul0 \f2\ul0 t-t\'eb7\'dc-#,<-2+-Y\'eb$-+$-/\{+-/\{9-/;+-\'fd-:<-:\'eb-i$<-/5\'dc-/%\'b0-I-/\'b8\'a5,-10-0\'dc-7i\'dc#-\'fd7\'dc-\'fe\'eb,-8\'eb+-%\'dc$-\'ca\f5\ul0 \f2\ul0 +\'e8-+#-9#<-I\'dc<-<\'df-7&+-,-5\'dc/-I\'dc<-,\'dc-7e\'b3$-/7\'dc-U/<-0\'e8+-\'fd<-#6\'df9-#,<-`\'dc-;\'e8<-Q,-F0<-<\'eb0<-;\'dc#\f5\ul0 \f2\ul0 +\'e8-P9-;0-\f6\'a3\f2 -:<-02\'ec,-)\'e8\'ca\f5\ul0 \f2\ul0 >\'eb-\{,\'ca\f5\ul0 \f2\ul0 /:-8\'df:\'ca\f5\ul0 \f2\ul0\{-=\'eb9-<\'eb#<-<\'df-/Y,-\'fd-e\'b3$-2\'b1:-,\'dc-0*7-8<-`$-0$-#\'dc<-+\'eb#<-\'fd<-0-\u135 ?\'eb<-<\'eb\'ca\f5\ul0 \f2\ul0\'ca\par +\f8\fs24\ul0\par +\pard\ql\f2\fs72\ul0\par +\f1\fs144\par +} diff --git a/source/org/thdl/tib/input/jskad_doc.html b/source/org/thdl/tib/input/jskad_doc.html index 2f0951a..fe31a2b 100644 --- a/source/org/thdl/tib/input/jskad_doc.html +++ b/source/org/thdl/tib/input/jskad_doc.html @@ -8,6 +8,7 @@
+Jskad now supports converting Tibetan Machine to Tibetan Machine Web +and vice versa. Try it form the Tools menu. Be on the +lookout for formatting changes; Java's RTF support is currently +poor. +
+
* 1 - TibetanMachineWeb
@@ -29,9 +33,18 @@ package org.thdl.tib.text;
* ...
* 10 - TibetanMachineWeb9
*
-* The string represents a contiguous stretch of data in that -* font, i.e. a stretch of TibetanMachineWeb that doesn't require a font change. -*/ +* For TM, the font number is a number from one to five, corresponding +* to the five TibetanMachineWeb fonts, as follows: +*
+* 1 - TibetanMachine
+* 2 - TibetanMachineSkt1
+* 3 - TibetanMachineSkt2
+* 4 - TibetanMachineSkt3
+* 5 - TibetanMachineSkt4
+*
+* The string represents a contiguous stretch of data in that font,
+* i.e. a stretch of TibetanMachineWeb or TibetanMachine that doesn't
+* require a font change. */
public class DuffData {
/**
* a string of text
@@ -43,11 +56,24 @@ public class DuffData {
public int font;
/**
-* @param s a string of TibetanMachineWeb text
-* @param i a TibetanMachineWeb font number
+* @param s a string of TibetanMachineWeb or TibetanMachine text
+* @param i a TibetanMachineWeb or TibetanMachine font number
*/
public DuffData(String s, int i) {
text = s;
font = i;
}
+
+ /** Default constructor. The DuffData is invalid after this until
+ you call setData or manipulate the public fields. */
+ public DuffData() { }
+
+/** Changes the text and font this DuffData represents.
+* @param c a character of TibetanMachineWeb or TibetanMachine text
+* @param i a TibetanMachineWeb or TibetanMachine font number
+*/
+ public void setData(char c, int i) {
+ text = new String(new char[] { c });
+ font = i;
+ }
}
diff --git a/source/org/thdl/tib/text/TibetanDocument.java b/source/org/thdl/tib/text/TibetanDocument.java
index 7ced0df..9792637 100644
--- a/source/org/thdl/tib/text/TibetanDocument.java
+++ b/source/org/thdl/tib/text/TibetanDocument.java
@@ -150,16 +150,18 @@ public class TibetanDocument extends DefaultStyledDocument {
* @param pos the position at which you want to insert text
*/
public int insertDuff(int pos, DuffData[] glyphs) {
- return insertDuff(tibetanFontSize, pos, glyphs);
+ return insertDuff(tibetanFontSize, pos, glyphs, true);
}
- private int insertDuff(int fontSize, int pos, DuffData[] glyphs) {
+ private int insertDuff(int fontSize, int pos, DuffData[] glyphs, boolean asTMW) {
if (glyphs == null)
return pos;
MutableAttributeSet mas;
for (int i=0; i