Jskad/source/org/thdl/tib/text/TibetanQTText.java
dchandler abcf8f19b3 Factored TibetanDocument into two classes, one that is a
DefaultStyledDocument, and another consisting entirely of static utility
methods for processing Tibetan text.  Moved TibetanDocument.DuffData
into its own class.

I think this makes things a bit more transparent, and gets us a little closer to
making clean use of Swing.
2002-11-02 03:38:59 +00:00

189 lines
4.9 KiB
Java

/*
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.*;
import org.w3c.dom.*;
public class TibetanQTText {
private static String tibFontSize = "28";
private Map lines;
private Map times;
int id;
public TibetanQTText() {
lines = new HashMap();
times = new TreeMap();
id = 0;
}
public void addLine(String wylie, String t1, String t2) {
id++;
String lineID = String.valueOf(id);
lines.put(lineID, wylie);
try {
Float startTime = new Float(t1);
if (!times.containsKey(startTime))
times.put(startTime, lineID+",");
else {
String val = (String)times.get(startTime);
val += lineID+",";
times.put(startTime, val);
}
Float stopTime = new Float(t2);
if (!times.containsKey(stopTime))
times.put(stopTime, lineID+",");
else {
String val = (String)times.get(stopTime);
val += lineID+",";
times.put(stopTime, val);
}
}
catch (NumberFormatException nfe) {
}
}
public void organizeLines() {
List line_list = new ArrayList();
Iterator iter = times.keySet().iterator();
while (iter.hasNext()) {
Float this_time = (Float)iter.next();
String these_lines = (String)times.get(this_time);
StringTokenizer sTok = new StringTokenizer(these_lines,",");
while (sTok.hasMoreTokens()) {
String lineID = sTok.nextToken();
if (line_list.contains(lineID))
line_list.remove(lineID);
else
line_list.add(lineID);
}
StringBuffer sb = new StringBuffer();
Iterator line_list_iter = line_list.iterator();
while (line_list_iter.hasNext()) {
String lineID = (String)line_list_iter.next();
sb.append(lineID);
sb.append(',');
}
times.put(this_time, sb.toString());
}
}
public String getQTTextForLines() {
StringBuffer sb = new StringBuffer();
Iterator iter = times.keySet().iterator();
while (iter.hasNext()) {
Float this_time = (Float)iter.next();
sb.append(getQTTimeTag(String.valueOf(this_time)));
String these_lines = (String)times.get(this_time);
StringTokenizer sTok = new StringTokenizer(these_lines,",");
while (sTok.hasMoreTokens()) {
String lineID = sTok.nextToken();
String wylie = (String)lines.get(lineID);
sb.append(getQTText(wylie));
sb.append('\n');
}
}
return sb.toString();
}
public static String getQTHeader() {
return "{QTtext}{plain}{anti-alias:off}{size:28}{justify:left}{timeScale:1000}{width:320}{height:120}{timeStamps:absolute}{language:0}{textEncoding:0}\n";
}
public static String getQTTimeTag(String t) {
StringBuffer sb = new StringBuffer();
sb.append('[');
sb.append(t);
sb.append(']');
return sb.toString();
}
public static String getQTText(String wylie) {
try {
return getQTText(TibTextUtils.getTibetanMachineWeb(wylie));
}
catch (InvalidWylieException ive) {
return null;
}
}
public static String getQTText(DuffData[] duffData) {
StringBuffer qtBuffer = new StringBuffer();
qtBuffer.append("{size:" + tibFontSize + "}");
for (int i=0; i<duffData.length; i++) {
qtBuffer.append("{font:" + TibetanMachineWeb.tmwFontNames[duffData[i].font] + "}");
qtBuffer.append(duffData[i].text);
}
return qtBuffer.toString();
}
}
/*
public void addLine(NodeList nodes) {
Element line = (Element)nodes.item(0);
Node wylie_node = line.getFirstChild();
// NodeList wylie_nodes = line.getElementsByTagName("wylie");
// Node wylie_node = wylie_nodes.item(0);
Node wylie_text = wylie_node.getFirstChild();
System.out.println(wylie_text.getNodeName());
// String wylie = wylie_text.getNodeValue();
id++;
String lineID = String.valueOf(id);
lines.put(lineID, wylie);
NodeList audio_nodes = line.getElementsByTagName("AUDIO");
Element audio_element = (Element)audio_nodes.item(0);
try {
Integer startTime = Integer.valueOf(audio_element.getAttribute("begin"));
if (!times.containsKey(startTime))
times.put(startTime, lineID+",");
else {
String val = (String)times.get(startTime);
val += lineID+",";
times.put(startTime, val);
}
Integer stopTime = Integer.valueOf(audio_element.getAttribute("end"));
if (!times.containsKey(stopTime))
times.put(stopTime, lineID+",");
else {
String val = (String)times.get(stopTime);
val += lineID+",";
times.put(stopTime, val);
}
}
catch (NumberFormatException nfe) {
}
}
*/