Updated the dictionary structure to allow grouping of dictionaries, this is the first step to try to clean up a bit the massive repetitions in dictionaries.
This commit is contained in:
parent
6bb0646f1c
commit
afd3a95a21
22 changed files with 1533 additions and 297 deletions
343
source/org/thdl/tib/scanner/AcipToTab.java
Normal file
343
source/org/thdl/tib/scanner/AcipToTab.java
Normal file
|
@ -0,0 +1,343 @@
|
|||
package org.thdl.tib.scanner;
|
||||
|
||||
import java.net.*;
|
||||
import java.io.*;
|
||||
|
||||
class AcipToTab
|
||||
{
|
||||
private BufferedReader in;
|
||||
private PrintWriter out;
|
||||
private String currentDefiniendum, currentDefinition;
|
||||
|
||||
public AcipToTab(BufferedReader in, PrintWriter out)
|
||||
{
|
||||
this.in = in;
|
||||
this.out = out;
|
||||
}
|
||||
|
||||
public void add()
|
||||
{
|
||||
out.println(currentDefiniendum + '\t' + currentDefinition);
|
||||
}
|
||||
|
||||
public static void main (String[] args) throws Exception
|
||||
{
|
||||
PrintWriter out;
|
||||
BufferedReader in=null;
|
||||
boolean file=false;
|
||||
|
||||
switch (args.length)
|
||||
{
|
||||
case 0: out = new PrintWriter(System.out);
|
||||
in = new BufferedReader(new InputStreamReader(System.in));
|
||||
break;
|
||||
case 1: out = new PrintWriter(System.out);
|
||||
file = true;
|
||||
break;
|
||||
default: out = new PrintWriter(new FileOutputStream(args[1]));
|
||||
file = true;
|
||||
}
|
||||
|
||||
if (file)
|
||||
{
|
||||
if (args[0].indexOf("http://") >= 0)
|
||||
in = new BufferedReader(new InputStreamReader(new BufferedInputStream((new URL(args[0])).openStream())));
|
||||
else
|
||||
in = new BufferedReader(new InputStreamReader(new FileInputStream(args[0])));
|
||||
}
|
||||
|
||||
new AcipToTab(in, out).run();
|
||||
}
|
||||
|
||||
public void run() throws Exception
|
||||
{
|
||||
final short newDefiniendum=1, halfDefiniendum=2, definition=3;
|
||||
short status=newDefiniendum;
|
||||
int marker, len, marker2, n=0, total=0, currentPage=0, currentLine=1, pos;
|
||||
char ch;
|
||||
String entrada="", currentLetter="", temp="", lastDefiniendum="", lastWeirdDefiniendum="";
|
||||
boolean markerNotFound;
|
||||
currentDefiniendum="";
|
||||
currentDefinition="";
|
||||
outAHere:
|
||||
while (true)
|
||||
{
|
||||
entrada=in.readLine();
|
||||
if (entrada==null) break;
|
||||
currentLine++;
|
||||
|
||||
entrada = entrada.trim();
|
||||
len = entrada.length();
|
||||
if (len<=0) continue;
|
||||
|
||||
// get page number
|
||||
if (entrada.charAt(0)=='@')
|
||||
{
|
||||
marker = 1;
|
||||
while(marker<len && Character.isDigit(entrada.charAt(marker)))
|
||||
marker++;
|
||||
temp = entrada.substring(1, marker);
|
||||
if (temp.length()>0)
|
||||
{
|
||||
currentPage=Integer.parseInt(temp);
|
||||
if (currentPage==3141)
|
||||
{
|
||||
System.out.println("Hello!");
|
||||
}
|
||||
}
|
||||
if (marker<len)
|
||||
{
|
||||
entrada = entrada.substring(marker).trim();
|
||||
len = entrada.length();
|
||||
}
|
||||
else continue;
|
||||
}
|
||||
|
||||
// get current letter
|
||||
if (entrada.charAt(0)=='(' || entrada.charAt(0)=='{' || entrada.charAt(0)=='?')
|
||||
{
|
||||
currentLetter = entrada.substring(1, entrada.length()-2);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (entrada.charAt(0)=='[')
|
||||
{
|
||||
marker=1;
|
||||
markerNotFound=true;
|
||||
do
|
||||
{
|
||||
while (marker<len && markerNotFound)
|
||||
{
|
||||
if (entrada.charAt(marker)==']') markerNotFound=false;
|
||||
else marker++;
|
||||
}
|
||||
if (markerNotFound)
|
||||
{
|
||||
entrada=in.readLine();
|
||||
if (entrada==null) break outAHere;
|
||||
currentLine++;
|
||||
len = entrada.length();
|
||||
marker=0;
|
||||
}
|
||||
else break;
|
||||
} while (true);
|
||||
if (marker<len)
|
||||
{
|
||||
entrada = entrada.substring(marker+1).trim();
|
||||
len = entrada.length();
|
||||
if (len<=0) continue;
|
||||
}
|
||||
else continue;
|
||||
}
|
||||
|
||||
// skip stuff. Add to previous definition.
|
||||
if (entrada.startsWith("..."))
|
||||
{
|
||||
entrada=entrada.substring(3);
|
||||
len = entrada.length();
|
||||
if (len<=0) continue;
|
||||
}
|
||||
|
||||
// find definiendum
|
||||
ch = entrada.charAt(0);
|
||||
if (Character.isLetter(ch) || ch=='\'')
|
||||
{
|
||||
/* first criteria: if it is not the root letter of section it is part of the
|
||||
previous definition, probably a page change, else go for it with following
|
||||
code: */
|
||||
|
||||
// get first syllable to check base letter
|
||||
marker=1;
|
||||
while (marker<len)
|
||||
{
|
||||
ch = entrada.charAt(marker);
|
||||
if (ch==' ' || ch=='/') break;
|
||||
marker++;
|
||||
}
|
||||
|
||||
if (status!=halfDefiniendum) temp = Manipulate.getBaseLetter(entrada.substring(0, marker));
|
||||
|
||||
// if line begins with current letter, probably it is a definiendum
|
||||
if (status==halfDefiniendum || currentLetter.equals(temp))
|
||||
{
|
||||
/* Since new definiendum was found, update last and collect new. No need to update
|
||||
status because it will be updated below. */
|
||||
if (status==definition)
|
||||
{
|
||||
// compare lastDefiniendum with currentDefiniendum
|
||||
total++;
|
||||
|
||||
// add here
|
||||
add();
|
||||
|
||||
/* include this to not include transliterated sanskrit
|
||||
*/
|
||||
//if (currentDefiniendum.indexOf("+")<0 && lastDefiniendum.indexOf("+")<0 && new TibetanString(lastDefiniendum).compareTo(new TibetanString(currentDefiniendum))>0) n++;
|
||||
lastDefiniendum=currentDefiniendum;
|
||||
currentDefiniendum="";
|
||||
currentDefinition="";
|
||||
}
|
||||
|
||||
marker=marker2=1;
|
||||
markerNotFound=true;
|
||||
|
||||
while (marker < len)
|
||||
{
|
||||
ch = entrada.charAt(marker);
|
||||
switch(ch)
|
||||
{
|
||||
case '/':
|
||||
markerNotFound=false;
|
||||
marker2=marker+1;
|
||||
break;
|
||||
case '(': case '<':
|
||||
markerNotFound=false;
|
||||
marker2=marker;
|
||||
break;
|
||||
case 'g': // verify "g "
|
||||
if (marker+1<len && Manipulate.isVowel(entrada.charAt(marker-1)) && entrada.charAt(marker+1)==' ')
|
||||
{
|
||||
temp = entrada.substring(0, marker+1);
|
||||
if (!lastWeirdDefiniendum.startsWith(temp))
|
||||
{
|
||||
markerNotFound=false;
|
||||
marker2=++marker;
|
||||
lastWeirdDefiniendum=temp;
|
||||
//n++;
|
||||
// out.println(currentPage + ": " + entrada);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ' ': // verify " "
|
||||
if (marker+1<len && entrada.charAt(marker+1)==' ')
|
||||
{
|
||||
markerNotFound=false;
|
||||
marker2=++marker;
|
||||
}
|
||||
break;
|
||||
case '.':
|
||||
if (marker+2<len && entrada.charAt(marker+1)=='.' && entrada.charAt(marker+2)=='.')
|
||||
{
|
||||
markerNotFound=false;
|
||||
marker2=marker;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (Character.isDigit(ch))
|
||||
{
|
||||
markerNotFound=false;
|
||||
marker2=marker;
|
||||
}
|
||||
}
|
||||
|
||||
if (markerNotFound) marker++;
|
||||
else break;
|
||||
}
|
||||
|
||||
/* check to see if the is a possible problem with the g suffix.
|
||||
|
||||
pos = entrada.indexOf("g ");
|
||||
if (pos>0 && Manipulate.isVowel(entrada.charAt(pos-1)) && (markerNotFound || entrada.substring(0,pos+1).length() < entrada.substring(0, marker).trim().length()))
|
||||
{
|
||||
// out.println(currentPage + ": " + entrada);
|
||||
n++;
|
||||
}*/
|
||||
|
||||
/* either this is a definiendum that consists of several lines or
|
||||
it is part of the last definition. */
|
||||
if (markerNotFound)
|
||||
{
|
||||
/* assume that the definiendum goes on to the next line. */
|
||||
currentDefiniendum = currentDefiniendum + " ";
|
||||
status=halfDefiniendum;
|
||||
}
|
||||
else
|
||||
{
|
||||
// total++;
|
||||
|
||||
currentDefiniendum = currentDefiniendum + entrada.substring(0,marker).trim();
|
||||
currentDefinition = "[" + currentPage + "] " + entrada.substring(marker2).trim();
|
||||
|
||||
status=definition;
|
||||
|
||||
while (true)
|
||||
{
|
||||
entrada=in.readLine();
|
||||
|
||||
if (entrada==null)
|
||||
{
|
||||
// add here
|
||||
add();
|
||||
|
||||
// if (new TibetanString(lastDefiniendum).compareTo(new TibetanString(currentDefiniendum))>0) n++;
|
||||
break outAHere;
|
||||
}
|
||||
|
||||
currentLine++;
|
||||
entrada = entrada.trim();
|
||||
|
||||
if (entrada.equals("")) break;
|
||||
else
|
||||
{
|
||||
currentDefinition = currentDefinition + " " + entrada;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else // last line did not start with the current letter, it must still be part of the definition
|
||||
{
|
||||
currentDefinition = currentDefinition + " " + entrada;
|
||||
while (true)
|
||||
{
|
||||
entrada=in.readLine();
|
||||
|
||||
if (entrada==null)
|
||||
{
|
||||
// add here
|
||||
add();
|
||||
|
||||
// if (new TibetanString(lastDefiniendum).compareTo(new TibetanString(currentDefiniendum))>0) n++;
|
||||
break outAHere;
|
||||
}
|
||||
|
||||
currentLine++;
|
||||
entrada = entrada.trim();
|
||||
|
||||
if (entrada.equals("")) break;
|
||||
{
|
||||
currentDefinition = currentDefinition + " " + entrada;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else // if first character was not a letter, it must still be part of definition
|
||||
{
|
||||
currentDefinition = currentDefinition + " " + entrada;
|
||||
while (true)
|
||||
{
|
||||
entrada=in.readLine();
|
||||
|
||||
if (entrada==null)
|
||||
{
|
||||
// add here
|
||||
add();
|
||||
|
||||
break outAHere;
|
||||
}
|
||||
|
||||
currentLine++;
|
||||
entrada = entrada.trim();
|
||||
|
||||
if (entrada.equals("")) break;
|
||||
else
|
||||
{
|
||||
currentDefinition = currentDefinition + " " + entrada;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// out.println(n + " / " + total);
|
||||
out.flush();
|
||||
}
|
||||
}
|
|
@ -73,13 +73,10 @@ public class AppletScannerFilter extends JApplet implements ActionListener, Focu
|
|||
|
||||
// sp = new SimpleScannerPanel(url);
|
||||
sp = new DuffScannerPanel(url);
|
||||
|
||||
sp.addFocusListener(this);
|
||||
|
||||
setContentPane(sp);
|
||||
|
||||
// setup the menu. Almost identical to WindowScannerFilter, but using swing.
|
||||
|
||||
JMenuBar mb = new JMenuBar();
|
||||
mnuEdit = new JMenu ("Edit");
|
||||
mnuCut = new JMenuItem("Cut");
|
||||
|
@ -107,13 +104,14 @@ public class AppletScannerFilter extends JApplet implements ActionListener, Focu
|
|||
mnuClear.addActionListener(this);
|
||||
mb.add(mnuEdit);
|
||||
|
||||
JMenu m = new JMenu("View");
|
||||
JMenu m;
|
||||
|
||||
/* m = new JMenu("View");
|
||||
tibScript = new JCheckBoxMenuItem("Tibetan Script", true);
|
||||
m.add(tibScript);
|
||||
tibScript.addItemListener(this);
|
||||
mb.add(m);
|
||||
mb.add(m);*/
|
||||
|
||||
//JMenuItem
|
||||
aboutItem = new JMenuItem("About...");
|
||||
aboutItem.addActionListener(this);
|
||||
|
||||
|
|
|
@ -150,6 +150,8 @@ myglossary_uma.txt</i> in the transliteration format explained above.<br>
|
|||
*/
|
||||
public class BinaryFileGenerator extends SimplifiedLinkedList
|
||||
{
|
||||
private static final int versionNumber = 3;
|
||||
|
||||
private long posHijos;
|
||||
private String sil, def[];
|
||||
public final static int delimiterGeneric=0;
|
||||
|
@ -158,7 +160,7 @@ public class BinaryFileGenerator extends SimplifiedLinkedList
|
|||
|
||||
/** Number of dictionary. If 0, partial word (no definition).
|
||||
*/
|
||||
private DictionarySource sourceDef;
|
||||
private ByteDictionarySource sourceDef;
|
||||
public static RandomAccessFile wordRaf;
|
||||
private static RandomAccessFile defRaf;
|
||||
|
||||
|
@ -181,14 +183,16 @@ public class BinaryFileGenerator extends SimplifiedLinkedList
|
|||
{
|
||||
super();
|
||||
int marker = sil.indexOf(" ");
|
||||
this.sourceDef = new DictionarySource();
|
||||
|
||||
// fix for updates
|
||||
this.sourceDef = new ByteDictionarySource();
|
||||
|
||||
if (marker<0)
|
||||
{
|
||||
this.sil = sil;
|
||||
this.def = new String[1];
|
||||
this.def[0] = def;
|
||||
this.sourceDef.add(numDef);
|
||||
this.sourceDef.addNewDef(numDef);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -208,9 +212,7 @@ public class BinaryFileGenerator extends SimplifiedLinkedList
|
|||
{
|
||||
final short newDefiniendum=1, halfDefiniendum=2, definition=3;
|
||||
short status=newDefiniendum;
|
||||
int marker, len, marker2;
|
||||
// int n=0;
|
||||
int currentPage=0, currentLine=1;
|
||||
int marker, len, marker2, currentPage=0, currentLine=1;
|
||||
char ch;
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(archivo)));
|
||||
String entrada="", s1="", s2="", currentLetter="", temp="", lastWeirdDefiniendum="", alternateWords[];
|
||||
|
@ -495,6 +497,11 @@ public class BinaryFileGenerator extends SimplifiedLinkedList
|
|||
s2 = Manipulate.deleteQuotes(entrada.substring(marker+delimiter.length()).trim());
|
||||
if (!s2.equals(""))
|
||||
{
|
||||
if (currentLine%5000==0)
|
||||
{
|
||||
System.out.println("Adding " + s1 + "...");
|
||||
System.out.flush();
|
||||
}
|
||||
marker2 = s1.indexOf(';');
|
||||
if (marker2>0)
|
||||
{
|
||||
|
@ -565,31 +572,233 @@ public class BinaryFileGenerator extends SimplifiedLinkedList
|
|||
}
|
||||
}
|
||||
|
||||
private void reGroup (int n)
|
||||
{
|
||||
int i, pos, posEnd;
|
||||
|
||||
for (i=0; i<def.length; i++)
|
||||
{
|
||||
if (i!=n)
|
||||
{
|
||||
// deal with repetitions of definitions
|
||||
if (def[i].length()>=def[n].length())
|
||||
{
|
||||
pos = def[i].indexOf(def[n]);
|
||||
|
||||
// if it is the same String exactly
|
||||
if (pos==0 && def[i].length()==def[n].length())
|
||||
{
|
||||
if (i<n)
|
||||
{
|
||||
sourceDef.addDictToDef(sourceDef.getDef(n), i);
|
||||
def = Manipulate.deleteString(def, n);
|
||||
sourceDef.deleteDef(n);
|
||||
n = i;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
sourceDef.addDictToDef(sourceDef.getDef(i), n);
|
||||
def = Manipulate.deleteString(def, i);
|
||||
sourceDef.deleteDef(i);
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
posEnd = pos + def[n].length();
|
||||
|
||||
if ((pos==0 || (pos>0 && !Character.isLetter(def[i].charAt(pos-1)))) && (posEnd==def[i].length() || !Character.isLetter(def[i].charAt(posEnd))))
|
||||
{
|
||||
if(sourceDef.getDef(i).contains(sourceDef.getDef(n)))
|
||||
{
|
||||
def = Manipulate.deleteString(def, n);
|
||||
sourceDef.deleteDef(n);
|
||||
return;
|
||||
}
|
||||
|
||||
// else
|
||||
sourceDef.addDictToDef(sourceDef.getDef(i), n);
|
||||
|
||||
do
|
||||
{
|
||||
def[i] = Manipulate.replace(def[i], pos, posEnd, "*");
|
||||
pos = def[i].indexOf(def[n]);
|
||||
posEnd = pos + def[n].length();
|
||||
} while ((pos==0 || (pos>0 && !Character.isLetter(def[i].charAt(pos-1)))) && (posEnd==def[i].length() || !Character.isLetter(def[i].charAt(posEnd))));
|
||||
|
||||
if (i<n)
|
||||
{
|
||||
def = Manipulate.addString(def, def[n], i);
|
||||
def = Manipulate.deleteString(def, n+1);
|
||||
sourceDef.insertDef(sourceDef.getDef(n), i);
|
||||
sourceDef.deleteDef(n+1);
|
||||
n = i;
|
||||
reGroup(i+1);
|
||||
}
|
||||
else
|
||||
{
|
||||
reGroup(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pos = def[n].indexOf(def[i]);
|
||||
posEnd = pos + def[i].length();
|
||||
|
||||
if ((pos==0 || (pos>0 && !Character.isLetter(def[n].charAt(pos-1)))) && (posEnd==def[n].length() || !Character.isLetter(def[n].charAt(posEnd))))
|
||||
{
|
||||
if (sourceDef.getDef(n).contains(sourceDef.getDef(i)))
|
||||
{
|
||||
def = Manipulate.deleteString(def, i);
|
||||
sourceDef.deleteDef(i);
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
|
||||
sourceDef.addDictToDef(sourceDef.getDef(n), i);
|
||||
|
||||
do
|
||||
{
|
||||
def[n] = Manipulate.replace(def[n], pos, posEnd, "*");
|
||||
pos = def[n].indexOf(def[i]);
|
||||
posEnd = pos + def[i].length();
|
||||
} while ((pos==0 || (pos>0 && !Character.isLetter(def[n].charAt(pos-1)))) && (posEnd==def[n].length() || !Character.isLetter(def[n].charAt(posEnd))));
|
||||
|
||||
i=-1; // start over
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// deal with repetition of dictionaries
|
||||
|
||||
if (sourceDef.getDef(i).equals(sourceDef.getDef(n)))
|
||||
{
|
||||
if (i<n)
|
||||
{
|
||||
def[i] = def[i] + ". " + def[n];
|
||||
def = Manipulate.deleteString(def, n);
|
||||
sourceDef.deleteDef(n);
|
||||
n = i;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
def[n] = def[n] + ". " + def[i];
|
||||
def = Manipulate.deleteString(def, i);
|
||||
sourceDef.deleteDef(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void addMoreDef(String def, int numDef)
|
||||
{
|
||||
String temp;
|
||||
boolean notAlreadyThere, changed;
|
||||
int i, pos, posEnd;
|
||||
|
||||
if (this.def==null)
|
||||
{
|
||||
// add a new definition for this dictionary
|
||||
this.def = new String[1];
|
||||
this.def[0] = def;
|
||||
sourceDef.add(numDef);
|
||||
//sourceDef.add(numDef);
|
||||
sourceDef.addNewDef(numDef);
|
||||
}
|
||||
else
|
||||
{
|
||||
// if the word is repeated in the same dictionary
|
||||
if (sourceDef.contains(numDef))
|
||||
this.def[this.def.length-1] = this.def[this.def.length-1] + ". " + def;
|
||||
notAlreadyThere = true;
|
||||
do
|
||||
{
|
||||
i=0;
|
||||
changed = false;
|
||||
|
||||
while (notAlreadyThere && i<this.def.length)
|
||||
{
|
||||
if (this.def[i].length()>=def.length())
|
||||
{
|
||||
pos = this.def[i].indexOf(def);
|
||||
posEnd = pos + def.length();
|
||||
if ((pos==0 || (pos>0 && !Character.isLetter(this.def[i].charAt(pos-1)))) && (posEnd==this.def[i].length() || !Character.isLetter(this.def[i].charAt(posEnd))))
|
||||
{
|
||||
if (!sourceDef.isDictInDef(numDef, i))
|
||||
{
|
||||
if (this.def[i].length()>def.length())
|
||||
{
|
||||
//temp = Manipulate.deleteSubstring(this.def[i], pos, posEnd);
|
||||
temp = this.def[i];
|
||||
do
|
||||
{
|
||||
temp = Manipulate.replace(temp, pos, posEnd, "*");
|
||||
pos = temp.indexOf(def);
|
||||
posEnd = pos + def.length();
|
||||
} while ((pos==0 || (pos>0 && !Character.isLetter(temp.charAt(pos-1)))) && (posEnd==temp.length() || !Character.isLetter(temp.charAt(posEnd))));
|
||||
|
||||
this.def[i] = def;
|
||||
this.def = Manipulate.addString(this.def, temp, i+1);
|
||||
sourceDef.dubDef(i);
|
||||
sourceDef.addDictToDef(numDef, i);
|
||||
|
||||
reGroup(i);
|
||||
if (i+1<this.def.length) reGroup(i+1);
|
||||
else reGroup(this.def.length-1);
|
||||
}
|
||||
else sourceDef.addDictToDef(numDef, i);
|
||||
}
|
||||
notAlreadyThere = false;
|
||||
changed = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int i=0;
|
||||
String newDef[] = new String[this.def.length+1];
|
||||
while(i<this.def.length)
|
||||
pos = def.indexOf(this.def[i]);
|
||||
posEnd = pos + this.def[i].length();
|
||||
|
||||
if ((pos==0 || (pos>0 && !Character.isLetter(def.charAt(pos-1)))) && (posEnd==def.length() || !Character.isLetter(def.charAt(posEnd))))
|
||||
{
|
||||
newDef[i] = this.def[i];
|
||||
if (sourceDef.isDictInDefAlone(numDef, i))
|
||||
{
|
||||
this.def[i] = def;
|
||||
reGroup(i);
|
||||
}
|
||||
else
|
||||
{
|
||||
sourceDef.addDictToDef(numDef, i);
|
||||
do
|
||||
{
|
||||
//def = Manipulate.deleteSubstring(def, pos, posEnd);
|
||||
def = Manipulate.replace(def, pos, posEnd, "*");
|
||||
pos = def.indexOf(this.def[i]);
|
||||
posEnd = pos + this.def[i].length();
|
||||
} while ((pos==0 || (pos>0 && !Character.isLetter(def.charAt(pos-1)))) && (posEnd==def.length() || !Character.isLetter(def.charAt(posEnd))));
|
||||
}
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
newDef[i] = def;
|
||||
this.def = newDef;
|
||||
sourceDef.add(numDef);
|
||||
} while (changed);
|
||||
|
||||
if (notAlreadyThere)
|
||||
{
|
||||
// check if it is a duplicate for the same dictionary.
|
||||
i = sourceDef.containsAlone(numDef);
|
||||
if (i>-1)
|
||||
{
|
||||
this.def[i] = this.def[i] + ". " + def;
|
||||
reGroup(i);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.def = Manipulate.addString(this.def, def, this.def.length);
|
||||
sourceDef.addNewDef(numDef);
|
||||
reGroup(this.def.length-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -681,6 +890,12 @@ public class BinaryFileGenerator extends SimplifiedLinkedList
|
|||
print();
|
||||
wordRaf.writeInt((int)posHijos);
|
||||
|
||||
// write version marker
|
||||
wordRaf.writeShort(-1);
|
||||
wordRaf.writeByte(-1);
|
||||
|
||||
// write version number
|
||||
wordRaf.writeByte(versionNumber);
|
||||
}
|
||||
|
||||
public static void main(String args[]) throws Exception
|
||||
|
@ -754,11 +969,14 @@ public class BinaryFileGenerator extends SimplifiedLinkedList
|
|||
{
|
||||
delimiterType=delimiterDash;
|
||||
}
|
||||
System.out.println("\nProcessing " + args[i] + "...");
|
||||
sl.addFile(args[i] + ".txt", delimiterType, delimiter, n);
|
||||
n++; i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
System.out.println("Writing to file " + args[a] + "...");
|
||||
System.out.flush();
|
||||
sl.generateDatabase(args[a]);
|
||||
}
|
||||
}
|
||||
|
|
171
source/org/thdl/tib/scanner/BitDictionarySource.java
Normal file
171
source/org/thdl/tib/scanner/BitDictionarySource.java
Normal file
|
@ -0,0 +1,171 @@
|
|||
/*
|
||||
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.io.*;
|
||||
|
||||
/** Specifies a subset of dictionaries among a set of
|
||||
dictionaries. Supports a maximum of 30 dictionaries.
|
||||
|
||||
@author Andrés Montano Pellegrini
|
||||
*/
|
||||
public class BitDictionarySource extends DictionarySource
|
||||
{
|
||||
private int dicts;
|
||||
|
||||
/** Last bit of word; 1 if there are more brothers.*/
|
||||
private static final int lastBit=1073741824;
|
||||
private static final int allDicts=lastBit-1;
|
||||
|
||||
public BitDictionarySource()
|
||||
{
|
||||
dicts = 0;
|
||||
}
|
||||
|
||||
public BitDictionarySource(int dicts)
|
||||
{
|
||||
this.dicts = dicts;
|
||||
}
|
||||
|
||||
public boolean equals(Object obj)
|
||||
{
|
||||
BitDictionarySource objB = (BitDictionarySource) obj;
|
||||
return (this.getDicts()==objB.getDicts());
|
||||
}
|
||||
|
||||
/** Returns an instance of DictionarySource with all dictionaries selected */
|
||||
public BitDictionarySource getAllDictionaries()
|
||||
{
|
||||
BitDictionarySource ds = new BitDictionarySource();
|
||||
ds.setDicts(allDicts);
|
||||
return ds;
|
||||
}
|
||||
|
||||
/** Marks all dictionaries as selected */
|
||||
public void setAllDictionaries()
|
||||
{
|
||||
dicts = allDicts;
|
||||
}
|
||||
|
||||
/** Assumes dicts is an array of bits, and selects the dictionaries marked by
|
||||
each bit. */
|
||||
public void setDicts(int dicts)
|
||||
{
|
||||
this.dicts = dicts;
|
||||
}
|
||||
|
||||
/** Returns an array of bits representing the selected dictionaries. */
|
||||
public int getDicts()
|
||||
{
|
||||
return dicts;
|
||||
}
|
||||
|
||||
private int getBits(int n)
|
||||
{
|
||||
return 1 << n;
|
||||
}
|
||||
|
||||
public boolean contains(int dict)
|
||||
{
|
||||
return (dicts & getBits(dict))>0;
|
||||
}
|
||||
|
||||
public boolean contains(BitDictionarySource dicts)
|
||||
{
|
||||
return this.intersection(dicts).equals(dicts);
|
||||
}
|
||||
|
||||
/** Marks the dictionary "dict" as selected */
|
||||
public void add(int dict)
|
||||
{
|
||||
dicts|= getBits(dict);
|
||||
}
|
||||
|
||||
public void add(BitDictionarySource dicts)
|
||||
{
|
||||
this.dicts|= dicts.dicts;
|
||||
}
|
||||
|
||||
/** Write to file using BinaryFileGenerator */
|
||||
public void print(boolean hasNext, DataOutput raf) throws IOException
|
||||
{
|
||||
int numDict;
|
||||
if (hasNext) numDict = lastBit | dicts;
|
||||
else numDict = dicts;
|
||||
raf.writeInt(numDict);
|
||||
}
|
||||
|
||||
public void read(DataInput raf) throws IOException
|
||||
{
|
||||
setDicts(raf.readInt());
|
||||
}
|
||||
|
||||
public boolean hasBrothers()
|
||||
{
|
||||
return (dicts & lastBit)>0;
|
||||
}
|
||||
|
||||
public int countDefs()
|
||||
{
|
||||
int n, source;
|
||||
for (n=0, source = dicts & allDicts; source>0; source>>=1)
|
||||
if (source%2==1) n++;
|
||||
return n;
|
||||
}
|
||||
|
||||
public DictionarySource intersection(DictionarySource dsO)
|
||||
{
|
||||
BitDictionarySource ds = new BitDictionarySource(), dsOB = (BitDictionarySource) dsO;
|
||||
ds.setDicts(this.dicts & dsOB.dicts);
|
||||
return ds;
|
||||
}
|
||||
|
||||
/** Returns an array containing the indexes for the available dictionaries. Use this
|
||||
method when you know exactly how many dictionaries there are! */
|
||||
public int[] untangleDefs(int n)
|
||||
{
|
||||
int arr[], i, pos, source;
|
||||
arr = new int[n];
|
||||
for (i=0, pos=0, source=dicts & allDicts; pos<n; i++, source>>=1)
|
||||
if (source%2==1)
|
||||
arr[pos++]=i;
|
||||
return arr;
|
||||
}
|
||||
|
||||
/** Returns an array containing the indexes for the available dictionaries.*/
|
||||
public int[] untangleDefs()
|
||||
{
|
||||
return untangleDefs(countDefs());
|
||||
}
|
||||
|
||||
public boolean isEmpty()
|
||||
{
|
||||
return (dicts & allDicts)<=0;
|
||||
}
|
||||
|
||||
public void reset()
|
||||
{
|
||||
dicts = 0;
|
||||
}
|
||||
public String getTag(int i)
|
||||
{
|
||||
int source[] = this.untangleDefs();
|
||||
if (defTags==null) return Integer.toString(source[i]+1);
|
||||
return defTags[source[i]];
|
||||
}
|
||||
}
|
307
source/org/thdl/tib/scanner/ByteDictionarySource.java
Normal file
307
source/org/thdl/tib/scanner/ByteDictionarySource.java
Normal file
|
@ -0,0 +1,307 @@
|
|||
/*
|
||||
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.io.*;
|
||||
|
||||
/** Specifies a subset of dictionaries among a set of
|
||||
dictionaries. Supports a maximum of 30 dictionaries.
|
||||
Unlike @BitDictionarySource, it provides the infrastructure
|
||||
to group definitions from various dictionaries.
|
||||
|
||||
@author Andrés Montano Pellegrini
|
||||
*/
|
||||
public class ByteDictionarySource extends DictionarySource
|
||||
{
|
||||
//private BitDictionarySource dicts[];
|
||||
private BitDictionarySource dicts[];
|
||||
private boolean hasBrother;
|
||||
|
||||
/** Last bit of word; 1 if there are more brothers.*/
|
||||
private static final int lastBit = 64;
|
||||
private static final int allDicts=lastBit-1;
|
||||
|
||||
public ByteDictionarySource()
|
||||
{
|
||||
dicts = null;
|
||||
hasBrother = false;
|
||||
}
|
||||
|
||||
public ByteDictionarySource(BitDictionarySource dicts[], boolean hasBrother)
|
||||
{
|
||||
this.dicts = dicts;
|
||||
this.hasBrother = hasBrother;
|
||||
}
|
||||
|
||||
public void insertDef(BitDictionarySource newDef, int n)
|
||||
{
|
||||
int i;
|
||||
BitDictionarySource newDicts[] = new BitDictionarySource[dicts.length+1];
|
||||
|
||||
for (i=0; i<n; i++)
|
||||
newDicts[i] = dicts[i];
|
||||
|
||||
newDicts[n] = newDef;
|
||||
|
||||
for (i=n+1; i<newDicts.length; i++)
|
||||
newDicts[i] = dicts[i-1];
|
||||
|
||||
dicts = newDicts;
|
||||
}
|
||||
|
||||
public void deleteDef(int n)
|
||||
{
|
||||
int i;
|
||||
BitDictionarySource newDicts[] = new BitDictionarySource[dicts.length-1];
|
||||
|
||||
for (i=0; i<n; i++)
|
||||
newDicts[i] = dicts[i];
|
||||
|
||||
for (i=n+1; i<dicts.length; i++)
|
||||
newDicts[i-1] = dicts[i];
|
||||
|
||||
dicts = newDicts;
|
||||
}
|
||||
|
||||
public void addNewDef(int dictNum)
|
||||
{
|
||||
if (dicts==null)
|
||||
{
|
||||
dicts = new BitDictionarySource[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
BitDictionarySource newDicts[] = new BitDictionarySource[dicts.length+1];
|
||||
int i;
|
||||
|
||||
for (i=0; i<dicts.length; i++)
|
||||
newDicts[i] = dicts[i];
|
||||
|
||||
dicts = newDicts;
|
||||
}
|
||||
dicts[dicts.length-1] = new BitDictionarySource();
|
||||
dicts[dicts.length-1].add(dictNum);
|
||||
}
|
||||
|
||||
public void addDictToDef(int dict, int def)
|
||||
{
|
||||
dicts[def].add(dict);
|
||||
}
|
||||
|
||||
public void addDictToDef(BitDictionarySource dicts, int def)
|
||||
{
|
||||
this.dicts[def].add(dicts);
|
||||
}
|
||||
|
||||
public BitDictionarySource getDef(int i)
|
||||
{
|
||||
return dicts[i];
|
||||
}
|
||||
|
||||
public void dubDef(int n)
|
||||
{
|
||||
BitDictionarySource newDicts[] = new BitDictionarySource[dicts.length+1];
|
||||
int i;
|
||||
|
||||
for (i=0; i<=n; i++)
|
||||
newDicts[i] = dicts[i];
|
||||
|
||||
newDicts[n+1] = new BitDictionarySource(newDicts[n].getDicts());
|
||||
|
||||
for (i=n+2; i<newDicts.length; i++)
|
||||
newDicts[i] = dicts[i-1];
|
||||
|
||||
dicts = newDicts;
|
||||
}
|
||||
|
||||
public boolean isDictInDef (int dict, int def)
|
||||
{
|
||||
return dicts[def].contains(dict);
|
||||
}
|
||||
|
||||
public boolean isDictInDefAlone (int dict, int def)
|
||||
{
|
||||
return dicts[def].contains(dict) && dicts[def].countDefs()==1;
|
||||
}
|
||||
|
||||
public int containsAlone(int dict)
|
||||
{
|
||||
int i;
|
||||
if (dicts == null) return -1;
|
||||
for (i=0; i<dicts.length; i++)
|
||||
{
|
||||
if (isDictInDefAlone(dict,i))
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/** Write to file using BinaryFileGenerator */
|
||||
public void print(boolean hasNext, DataOutput raf) throws IOException
|
||||
{
|
||||
int i, j, eachDict[], n;
|
||||
|
||||
/* first write how many definitions are, using the first bit to mark
|
||||
the brothers of the node. */
|
||||
if (dicts==null)
|
||||
{
|
||||
if (hasNext) raf.writeByte(lastBit);
|
||||
else raf.writeByte(0);
|
||||
return;
|
||||
}
|
||||
if (hasNext) n = lastBit | dicts.length;
|
||||
else n = dicts.length;
|
||||
raf.writeByte(n);
|
||||
|
||||
/* Then write the dictionaries associated with each definition, using the
|
||||
first bit to mark for more dicts. */
|
||||
for (i=0; i<dicts.length; i++)
|
||||
{
|
||||
eachDict = dicts[i].untangleDefs();
|
||||
n = eachDict.length-1;
|
||||
for (j=0; j<n; j++)
|
||||
raf.writeByte(lastBit | eachDict[j]);
|
||||
raf.writeByte(eachDict[n]);
|
||||
}
|
||||
}
|
||||
|
||||
public void read(DataInput raf) throws IOException
|
||||
{
|
||||
int i, n;
|
||||
|
||||
n = (int) raf.readByte();
|
||||
if ((n & lastBit)>0)
|
||||
{
|
||||
hasBrother = true;
|
||||
n = n & allDicts;
|
||||
}
|
||||
else hasBrother = false;
|
||||
|
||||
if (n==0)
|
||||
{
|
||||
dicts = null;
|
||||
return;
|
||||
}
|
||||
|
||||
dicts = new BitDictionarySource[n];
|
||||
|
||||
for (i=0; i< dicts.length; i++)
|
||||
{
|
||||
dicts[i] = new BitDictionarySource();
|
||||
do
|
||||
{
|
||||
n = (int) raf.readByte();
|
||||
dicts[i].add(n & allDicts);
|
||||
} while((n & lastBit)>0);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasBrothers()
|
||||
{
|
||||
return this.hasBrother;
|
||||
}
|
||||
|
||||
public boolean contains(int dict)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (dicts==null) return false;
|
||||
|
||||
for (i=0; i<dicts.length; i++)
|
||||
if (dicts[i].contains(i)) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public int containsDict(BitDictionarySource dict)
|
||||
{
|
||||
int i;
|
||||
if (dicts==null) return -1;
|
||||
for (i=0; i<dicts.length; i++)
|
||||
if (dicts[i].equals(dict)) return i;
|
||||
return -1;
|
||||
}
|
||||
|
||||
public int countDefs()
|
||||
{
|
||||
int i, n;
|
||||
|
||||
if (dicts==null) return 0;
|
||||
|
||||
n=0;
|
||||
for (i=0; i<dicts.length; i++)
|
||||
if (!dicts[i].isEmpty()) n++;
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
public void reset()
|
||||
{
|
||||
dicts = null;
|
||||
}
|
||||
|
||||
public boolean isEmpty(int def)
|
||||
{
|
||||
return dicts[def].isEmpty();
|
||||
}
|
||||
|
||||
public boolean isEmpty()
|
||||
{
|
||||
int i;
|
||||
|
||||
if (dicts == null) return true;
|
||||
|
||||
for (i=0; i< dicts.length; i++)
|
||||
if (!dicts[i].isEmpty()) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public DictionarySource intersection(DictionarySource dsO)
|
||||
{
|
||||
BitDictionarySource newDicts[], dsOB;
|
||||
int i;
|
||||
|
||||
newDicts = new BitDictionarySource[dicts.length];
|
||||
dsOB = (BitDictionarySource) dsO;
|
||||
|
||||
for (i=0; i<dicts.length; i++)
|
||||
newDicts[i] = (BitDictionarySource) dicts[i].intersection(dsOB);
|
||||
|
||||
return new ByteDictionarySource(newDicts, hasBrother);
|
||||
}
|
||||
|
||||
public String getTag(int n)
|
||||
{
|
||||
int i, source[] = dicts[n].untangleDefs();
|
||||
String tag;
|
||||
|
||||
if (defTags==null) tag = Integer.toString(source[0]+1);
|
||||
else tag = defTags[source[0]];
|
||||
|
||||
for (i=1; i<source.length; i++)
|
||||
{
|
||||
tag += ", ";
|
||||
|
||||
if (defTags==null) tag += Integer.toString(source[i]+1);
|
||||
else tag += defTags[source[i]];
|
||||
}
|
||||
|
||||
return tag;
|
||||
}
|
||||
}
|
|
@ -42,18 +42,21 @@ public class CachedSyllableListTree implements SyllableListTree
|
|||
long pos, defSources[];
|
||||
DictionarySource sourceDef;
|
||||
int i;
|
||||
FileSyllableListTree.openFiles(archivo);
|
||||
long posLista = FileSyllableListTree.wordRaf.length() - 4;
|
||||
SimplifiedLinkedList syllables = new SimplifiedLinkedList();
|
||||
|
||||
FileSyllableListTree.wordRaf.seek(posLista);
|
||||
posLista = (long) FileSyllableListTree.wordRaf.readInt();
|
||||
FileSyllableListTree.wordRaf.seek(posLista);
|
||||
FileSyllableListTree.openFiles(archivo);
|
||||
|
||||
SimplifiedLinkedList syllables = new SimplifiedLinkedList();
|
||||
do
|
||||
{
|
||||
// get "link" to children
|
||||
pos = (long) FileSyllableListTree.wordRaf.readInt();
|
||||
// get syllable
|
||||
sil = FileSyllableListTree.wordRaf.readUTF();
|
||||
sourceDef = DictionarySource.read(FileSyllableListTree.wordRaf);
|
||||
// get dictionary information for each definition
|
||||
if (FileSyllableListTree.versionNumber==2) sourceDef = new BitDictionarySource();
|
||||
else sourceDef = new ByteDictionarySource();
|
||||
sourceDef.read(FileSyllableListTree.wordRaf);
|
||||
|
||||
if (sourceDef.isEmpty()) defSources = null;
|
||||
else
|
||||
{
|
||||
|
@ -88,9 +91,13 @@ public class CachedSyllableListTree implements SyllableListTree
|
|||
|
||||
public DictionarySource getDictionarySource()
|
||||
{
|
||||
return FileSyllableListTree.defSourcesWanted;
|
||||
return null;
|
||||
}
|
||||
|
||||
public BitDictionarySource getDictionarySourcesWanted()
|
||||
{
|
||||
return FileSyllableListTree.defSourcesWanted;
|
||||
}
|
||||
|
||||
public boolean hasDef()
|
||||
{
|
||||
|
|
|
@ -28,20 +28,9 @@ package org.thdl.tib.scanner;
|
|||
public class Definitions
|
||||
{
|
||||
public String[] def;
|
||||
public int[] source;
|
||||
public static String[] defTags;
|
||||
private DictionarySource source;
|
||||
|
||||
static
|
||||
{
|
||||
defTags=null;
|
||||
}
|
||||
|
||||
public static void setTags(String tags[])
|
||||
{
|
||||
defTags = tags;
|
||||
}
|
||||
|
||||
public Definitions(String[] def, int[] source)
|
||||
public Definitions(String[] def, DictionarySource source)
|
||||
{
|
||||
this.def = def;
|
||||
this.source = source;
|
||||
|
@ -54,24 +43,53 @@ public class Definitions
|
|||
this.def[0] = def;
|
||||
}
|
||||
|
||||
public String getTag(int i)
|
||||
public String getPreview()
|
||||
{
|
||||
if (source==null) return null;
|
||||
if (defTags==null) return Integer.toString(source[i]+1);
|
||||
return defTags[source[i]];
|
||||
String s;
|
||||
int i;
|
||||
|
||||
if (def==null) return "";
|
||||
|
||||
s = def[0];
|
||||
|
||||
for (i=1; i<def.length; i++)
|
||||
s = s + ". " + def[i];
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
int i;
|
||||
int i,j;
|
||||
String s;
|
||||
if (def==null) return null;
|
||||
if (source==null) return def[0];
|
||||
|
||||
s = "(" + getTag(0) + ") " + def[0];
|
||||
if (FileSyllableListTree.versionNumber==2)
|
||||
{
|
||||
s = "(" + source.getTag(0) + ") " + def[0];
|
||||
for (i=1; i<def.length; i++)
|
||||
s += "\n" + "(" + getTag(i) + ") " + def[i];
|
||||
s += "\n" + "(" + source.getTag(i) + ") " + def[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
ByteDictionarySource sourceb = (ByteDictionarySource) source;
|
||||
j=0;
|
||||
while (sourceb.isEmpty(j)) j++;
|
||||
s = "(" + sourceb.getTag(j) + ") " + def[0];
|
||||
for (i=1; i<def.length; i++)
|
||||
{
|
||||
j++;
|
||||
while (sourceb.isEmpty(j)) j++;
|
||||
s += "\n" + "(" + sourceb.getTag(j) + ") " + def[i];
|
||||
}
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
public DictionarySource getDictionarySource()
|
||||
{
|
||||
return source;
|
||||
}
|
||||
}
|
|
@ -15,123 +15,54 @@ Pellegrini. All Rights Reserved.
|
|||
|
||||
Contributor(s): ______________________________________.
|
||||
*/
|
||||
package org.thdl.tib.scanner;
|
||||
|
||||
package org.thdl.tib.scanner;
|
||||
import java.io.*;
|
||||
|
||||
/** Specifies a subset of dictionaries among a set of
|
||||
dictionaries. Supports a maximum of 30 dictionaries.
|
||||
/** Specifies a generic interface to access and process a subset of
|
||||
dictionaries among a set of dictionaries.
|
||||
|
||||
@author Andrés Montano Pellegrini
|
||||
*/
|
||||
public class DictionarySource
|
||||
public abstract class DictionarySource
|
||||
{
|
||||
private int dicts;
|
||||
|
||||
/** Last bit of word; 1 if there are more brothers.*/
|
||||
private static final int lastBit=1073741824;
|
||||
private static final int allDicts=lastBit-1;
|
||||
|
||||
public DictionarySource()
|
||||
public static String[] defTags;
|
||||
static
|
||||
{
|
||||
dicts = 0;
|
||||
defTags=null;
|
||||
}
|
||||
|
||||
public static DictionarySource getAllDictionaries()
|
||||
public static void setTags(String tags[])
|
||||
{
|
||||
DictionarySource ds = new DictionarySource();
|
||||
ds.setDicts(allDicts);
|
||||
return ds;
|
||||
defTags = tags;
|
||||
}
|
||||
|
||||
public void setAllDictionaries()
|
||||
{
|
||||
dicts = allDicts;
|
||||
}
|
||||
/** Get the tag or tags associated to definition number i. */
|
||||
public abstract String getTag(int i);
|
||||
|
||||
public void setDicts(int dicts)
|
||||
{
|
||||
this.dicts = dicts;
|
||||
}
|
||||
/** Marks all dictionaries as unselected */
|
||||
public abstract void reset();
|
||||
|
||||
public int getDicts()
|
||||
{
|
||||
return dicts;
|
||||
}
|
||||
/** Returns an instance of DictionarySource marking as selected all dictionaries
|
||||
that were selected in both the current and dsO. */
|
||||
public abstract DictionarySource intersection(DictionarySource dsO);
|
||||
|
||||
private int getBits(int n)
|
||||
{
|
||||
return 1 << n;
|
||||
}
|
||||
/** Returns true if no dictionaries are selected. */
|
||||
public abstract boolean isEmpty();
|
||||
|
||||
public boolean contains(int dict)
|
||||
{
|
||||
return (dicts & getBits(dict))>0;
|
||||
}
|
||||
/** Writes the dictionary information to a random access file. */
|
||||
public abstract void print(boolean hasNext, DataOutput raf) throws IOException;
|
||||
|
||||
public void add(int dict)
|
||||
{
|
||||
dicts|= getBits(dict);
|
||||
}
|
||||
/** Reads the dictionary information from a random access file, according
|
||||
to the way it was written with @print. */
|
||||
public abstract void read(DataInput raf) throws IOException;
|
||||
|
||||
/** Write to file using BinaryFileGenerator */
|
||||
public void print(boolean hasNext, DataOutput raf) throws IOException
|
||||
{
|
||||
int numDict;
|
||||
if (hasNext) numDict = lastBit | dicts;
|
||||
else numDict = dicts;
|
||||
raf.writeInt(numDict);
|
||||
}
|
||||
/** Returns the number of definitions available. */
|
||||
public abstract int countDefs();
|
||||
|
||||
public static DictionarySource read(DataInput raf) throws IOException
|
||||
{
|
||||
DictionarySource ds = new DictionarySource();
|
||||
ds.setDicts(raf.readInt());
|
||||
return ds;
|
||||
}
|
||||
/** Returns true if the node has brothers. This is used by @FileSyllableListTree. */
|
||||
public abstract boolean hasBrothers();
|
||||
|
||||
public boolean hasBrothers()
|
||||
{
|
||||
return (dicts & lastBit)>0;
|
||||
}
|
||||
|
||||
public int countDefs()
|
||||
{
|
||||
int n, source;
|
||||
for (n=0, source = dicts & allDicts; source>0; source>>=1)
|
||||
if (source%2==1) n++;
|
||||
return n;
|
||||
}
|
||||
|
||||
public DictionarySource intersection(DictionarySource dsO)
|
||||
{
|
||||
DictionarySource ds = new DictionarySource();
|
||||
ds.setDicts(this.dicts & dsO.dicts);
|
||||
return ds;
|
||||
}
|
||||
|
||||
public int[] untangleDefs(int n)
|
||||
{
|
||||
int arr[], i, pos, source;
|
||||
arr = new int[n];
|
||||
for (i=0, pos=0, source=dicts & allDicts; pos<n; i++, source>>=1)
|
||||
if (source%2==1)
|
||||
arr[pos++]=i;
|
||||
return arr;
|
||||
}
|
||||
|
||||
public int[] untangleDefs()
|
||||
{
|
||||
return untangleDefs(countDefs());
|
||||
}
|
||||
|
||||
public boolean isEmpty()
|
||||
{
|
||||
return (dicts & allDicts)<=0;
|
||||
}
|
||||
|
||||
public void reset()
|
||||
{
|
||||
dicts = 0;
|
||||
}
|
||||
/** Returns true if dict is a selected dictionary. */
|
||||
public abstract boolean contains(int dict);
|
||||
}
|
|
@ -64,7 +64,7 @@ public class DictionaryTableModel extends AbstractTableModel
|
|||
case 0:
|
||||
if (tibetanActivated) return arrayTibetan[row];
|
||||
else return array[row].getWylie();
|
||||
case 1: return array[row].getDef();
|
||||
case 1: return array[row].getDefPreview();
|
||||
default: return array[row].toString();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,20 +38,24 @@ public class FileSyllableListTree implements SyllableListTree
|
|||
private long def[];
|
||||
private long posLista;
|
||||
private DictionarySource defSource;
|
||||
public static DictionarySource defSourcesWanted;
|
||||
public static BitDictionarySource defSourcesWanted;
|
||||
public static RandomAccessFile wordRaf=null;
|
||||
private static RandomAccessFile defRaf=null;
|
||||
public static int versionNumber;
|
||||
|
||||
/** Creates the root */
|
||||
public FileSyllableListTree(String archivo, int defSourcesWanted) throws Exception
|
||||
{
|
||||
sil = null;
|
||||
def = null;
|
||||
this.defSource = new DictionarySource();
|
||||
openFiles(archivo);
|
||||
posLista = wordRaf.length() - 4;
|
||||
wordRaf.seek(posLista);
|
||||
posLista = (long)wordRaf.readInt();
|
||||
defSource = null;
|
||||
|
||||
this.openFiles(archivo);
|
||||
posLista = this.wordRaf.getFilePointer();
|
||||
|
||||
/* if versionNumber is 2 use BitDictionarySource
|
||||
else use ByteDictionarySource. */
|
||||
this.defSourcesWanted.setDicts(defSourcesWanted);
|
||||
}
|
||||
|
||||
/** Used to create each node (except the root)
|
||||
|
@ -74,11 +78,60 @@ public class FileSyllableListTree implements SyllableListTree
|
|||
return defSource;
|
||||
}
|
||||
|
||||
public BitDictionarySource getDictionarySourcesWanted()
|
||||
{
|
||||
return this.defSourcesWanted;
|
||||
}
|
||||
|
||||
public static void openFiles(String archivo) throws Exception
|
||||
{
|
||||
long fileSize;
|
||||
int pos;
|
||||
|
||||
wordRaf = new RandomAccessFile(archivo + ".wrd", "r");
|
||||
defRaf = new RandomAccessFile(archivo + ".def", "r");
|
||||
defSourcesWanted = DictionarySource.getAllDictionaries();
|
||||
|
||||
fileSize = wordRaf.length();
|
||||
wordRaf.seek(fileSize-4L);
|
||||
pos = wordRaf.readInt();
|
||||
|
||||
if (pos >> 8 == -1)
|
||||
{
|
||||
versionNumber = pos & 255;
|
||||
|
||||
// for now, only version 2 & 3 should be expected
|
||||
if (versionNumber != 3) versionNumber=2;
|
||||
wordRaf.seek(fileSize-8L);
|
||||
pos = wordRaf.readInt();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Updates the dictionary for backward compatibility.
|
||||
try
|
||||
{
|
||||
wordRaf.close();
|
||||
wordRaf = new RandomAccessFile(archivo + ".wrd", "rw");
|
||||
wordRaf.seek(fileSize);
|
||||
wordRaf.writeShort(-1);
|
||||
wordRaf.writeByte(-1);
|
||||
|
||||
// Because it didn't have a version number, must be version 2.
|
||||
versionNumber = 2;
|
||||
wordRaf.writeByte(versionNumber);
|
||||
wordRaf.close();
|
||||
wordRaf = new RandomAccessFile(archivo + ".wrd", "r");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// dictionary is stored on a non-writable media. Do nothing.
|
||||
}
|
||||
}
|
||||
|
||||
/* if versionNumber is 2 use BitDictionarySource else use
|
||||
ByteDictionarySource. */
|
||||
defSourcesWanted = new BitDictionarySource();
|
||||
|
||||
wordRaf.seek(pos);
|
||||
}
|
||||
|
||||
public String getDef()
|
||||
|
@ -90,12 +143,14 @@ public class FileSyllableListTree implements SyllableListTree
|
|||
{
|
||||
if (def==null) return null;
|
||||
DictionarySource defSourceAvail = defSource.intersection(defSourcesWanted);
|
||||
|
||||
int defsAvail[] = defSourceAvail.untangleDefs(), defsFound[] = defSource.untangleDefs(def.length);
|
||||
|
||||
|
||||
String defs[] = new String[defsAvail.length];
|
||||
String defs[];
|
||||
int i, n=0;
|
||||
|
||||
if (versionNumber==2)
|
||||
{
|
||||
int defsAvail[] = ((BitDictionarySource) defSourceAvail).untangleDefs(), defsFound[] = ((BitDictionarySource) defSource).untangleDefs(def.length);
|
||||
|
||||
defs = new String[defsAvail.length];
|
||||
try
|
||||
{
|
||||
for (i=0; i<defsAvail.length; i++)
|
||||
|
@ -110,7 +165,31 @@ public class FileSyllableListTree implements SyllableListTree
|
|||
System.out.println(e);
|
||||
return null;
|
||||
}
|
||||
return new Definitions(defs, defsAvail);
|
||||
}
|
||||
else
|
||||
{
|
||||
ByteDictionarySource defSourceAvailBy = (ByteDictionarySource) defSourceAvail;
|
||||
defs = new String [defSourceAvailBy.countDefs()];
|
||||
|
||||
try
|
||||
{
|
||||
for (i=0; i < def.length; i++)
|
||||
{
|
||||
if (!defSourceAvailBy.isEmpty(i))
|
||||
{
|
||||
defRaf.seek(def[i]);
|
||||
defs[n] = defRaf.readUTF();
|
||||
n++;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.out.println(e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return new Definitions(defs, defSourceAvail);
|
||||
}
|
||||
|
||||
public boolean hasDef()
|
||||
|
@ -125,6 +204,7 @@ public class FileSyllableListTree implements SyllableListTree
|
|||
String sil;
|
||||
long pos, defSource[];
|
||||
DictionarySource sourceDef;
|
||||
|
||||
int i;
|
||||
|
||||
if (silStr==null) return null;
|
||||
|
@ -135,7 +215,11 @@ public class FileSyllableListTree implements SyllableListTree
|
|||
{
|
||||
pos = (long) wordRaf.readInt();
|
||||
sil = wordRaf.readUTF();
|
||||
sourceDef = DictionarySource.read(wordRaf);
|
||||
|
||||
if (versionNumber==2) sourceDef = new BitDictionarySource();
|
||||
else sourceDef = new ByteDictionarySource();
|
||||
sourceDef.read(wordRaf);
|
||||
|
||||
if (sourceDef.isEmpty()) defSource = null;
|
||||
else
|
||||
{
|
||||
|
|
|
@ -43,9 +43,9 @@ public class LocalTibetanScanner extends TibetanScanner
|
|||
archivo = null;
|
||||
}
|
||||
|
||||
public DictionarySource getDictionarySource()
|
||||
public BitDictionarySource getDictionarySource()
|
||||
{
|
||||
return raiz.getDictionarySource();
|
||||
return raiz.getDictionarySourcesWanted();
|
||||
}
|
||||
|
||||
|
||||
|
@ -401,7 +401,7 @@ outAHere:
|
|||
ll2.addLast(s.substring(n+1).trim());
|
||||
}
|
||||
}
|
||||
Definitions.defTags = ll2.toStringArray();
|
||||
DictionarySource.setTags(ll2.toStringArray());
|
||||
return ll1.toStringArray();
|
||||
}
|
||||
catch (Exception e)
|
||||
|
|
|
@ -55,6 +55,78 @@ public class Manipulate
|
|||
return linea;
|
||||
}
|
||||
|
||||
public static String deleteSubstring (String string, int pos, int posEnd)
|
||||
{
|
||||
if (pos<0) return string;
|
||||
|
||||
if (pos==0)
|
||||
{
|
||||
return string.substring(posEnd).trim();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (posEnd<string.length())
|
||||
return string.substring(0, pos).concat(string.substring(posEnd)).trim();
|
||||
else
|
||||
return string.substring(0, pos).trim();
|
||||
}
|
||||
}
|
||||
|
||||
public static String replace(String string, int pos, int posEnd, String newSub)
|
||||
{
|
||||
if (pos<0) return string;
|
||||
|
||||
if (pos==0)
|
||||
{
|
||||
return newSub.concat(string.substring(posEnd)).trim();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (posEnd<string.length())
|
||||
return string.substring(0, pos).concat(newSub).concat(string.substring(posEnd)).trim();
|
||||
else
|
||||
return string.substring(0, pos).concat(newSub).trim();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static String deleteSubstring (String string, String sub)
|
||||
{
|
||||
int pos = string.indexOf(sub), posEnd = pos + sub.length();
|
||||
return deleteSubstring(string, pos, posEnd);
|
||||
}
|
||||
|
||||
public static String[] addString(String array[], String s, int n)
|
||||
{
|
||||
int i;
|
||||
String newArray[] = new String[array.length+1];
|
||||
|
||||
for (i=0; i<n; i++)
|
||||
newArray[i] = array[i];
|
||||
|
||||
newArray[n] = s;
|
||||
|
||||
for (i=n+1; i<newArray.length; i++)
|
||||
newArray[i] = array[i-1];
|
||||
|
||||
return newArray;
|
||||
}
|
||||
|
||||
public static String[] deleteString(String array[], int n)
|
||||
{
|
||||
int i;
|
||||
|
||||
String newArray[] = new String[array.length-1];
|
||||
|
||||
for (i=0; i<n; i++)
|
||||
newArray[i] = array[i];
|
||||
|
||||
for (i=n; i<newArray.length; i++)
|
||||
newArray[i] = array[i+1];
|
||||
|
||||
return newArray;
|
||||
}
|
||||
|
||||
public static boolean isVowel (char ch)
|
||||
{
|
||||
ch = Character.toLowerCase(ch);
|
||||
|
|
|
@ -52,6 +52,14 @@ public class MemorySyllableListTree extends SimplifiedLinkedList implements Syll
|
|||
return null;
|
||||
}
|
||||
|
||||
/** Null because it does not support multiple dictionaries.
|
||||
*/
|
||||
public BitDictionarySource getDictionarySourcesWanted()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public MemorySyllableListTree(String sil, String def)
|
||||
{
|
||||
|
|
|
@ -57,8 +57,7 @@ public class OnLineScannerFilter extends HttpServlet
|
|||
}
|
||||
|
||||
synchronized public void doGet(HttpServletRequest request,
|
||||
HttpServletResponse response)
|
||||
throws IOException, ServletException
|
||||
HttpServletResponse response) throws IOException, ServletException
|
||||
{
|
||||
String answer, parrafo = null, checkboxName;
|
||||
|
||||
|
@ -69,7 +68,7 @@ public class OnLineScannerFilter extends HttpServlet
|
|||
response.setContentType("text/html");
|
||||
PrintWriter out = response.getWriter();
|
||||
|
||||
DictionarySource ds=null;
|
||||
BitDictionarySource ds=null;
|
||||
boolean checkedDicts[], allUnchecked, wantsTibetan, useTHDLBanner = (request.getParameter("thdlBanner")!=null);
|
||||
// int percent=100;
|
||||
|
||||
|
@ -225,14 +224,15 @@ public class OnLineScannerFilter extends HttpServlet
|
|||
ds.add(i);
|
||||
}
|
||||
if (dictionaries[i]!=null)
|
||||
out.print(">" + dictionaries[i] + " (" + Definitions.defTags[i] + ") ");
|
||||
out.print(">" + dictionaries[i] + " (" + DictionarySource.defTags[i] + ") ");
|
||||
else
|
||||
out.print(">" + Definitions.defTags[i] + " ");
|
||||
out.print(">" + DictionarySource.defTags[i] + " ");
|
||||
// out.println(" + "</td>");
|
||||
}
|
||||
// out.println(" </tr>");
|
||||
}
|
||||
else ds = DictionarySource.getAllDictionaries();
|
||||
// fix for updates
|
||||
else ds = new BitDictionarySource().getAllDictionaries();
|
||||
// out.println("</table>");
|
||||
out.println("</p>");
|
||||
out.println("<table border=\"0\" width=\"100%\">");
|
||||
|
@ -300,36 +300,40 @@ public class OnLineScannerFilter extends HttpServlet
|
|||
|
||||
init = fin+1;
|
||||
} */
|
||||
scanner.clearTokens();
|
||||
scanner.scanBody(in);
|
||||
scanner.finishUp();
|
||||
words = scanner.getTokenArray();
|
||||
printText(pw, words, tibetan);
|
||||
printAllDefs(pw, words, tibetan);
|
||||
printText(pw, tibetan);
|
||||
printAllDefs(pw, tibetan);
|
||||
scanner.clearTokens();
|
||||
}
|
||||
}
|
||||
|
||||
public void printText(PrintWriter pw, Object words[], boolean tibetan)
|
||||
public void printText(PrintWriter pw, boolean tibetan)
|
||||
{
|
||||
Token token;
|
||||
Token words[] = scanner.getTokenArray();
|
||||
Word word;
|
||||
char pm;
|
||||
int i;
|
||||
|
||||
if (words==null) return;
|
||||
|
||||
pw.print("<p>");
|
||||
for (i=0; i < words.length; i++)
|
||||
{
|
||||
token = (Token) words[i];
|
||||
if (token instanceof Word)
|
||||
|
||||
if (words[i] instanceof Word)
|
||||
{
|
||||
word = (Word) token;
|
||||
word = (Word) words[i];
|
||||
if (word.getDefs().getDictionarySource()!=null)
|
||||
pw.print(word.getLink());
|
||||
else pw.print(word.getWylie() + " ");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (token instanceof PunctuationMark)
|
||||
if (words[i] instanceof PunctuationMark)
|
||||
{
|
||||
pm = token.toString().charAt(0);
|
||||
pm = words[i].toString().charAt(0);
|
||||
switch (pm)
|
||||
{
|
||||
case '\n':
|
||||
|
@ -352,53 +356,49 @@ public class OnLineScannerFilter extends HttpServlet
|
|||
pw.println("</p>");
|
||||
}
|
||||
|
||||
public void printAllDefs(PrintWriter pw, Object words[], boolean tibetan)
|
||||
public void printAllDefs(PrintWriter pw, boolean tibetan)
|
||||
{
|
||||
SimplifiedLinkedList temp = new SimplifiedLinkedList();
|
||||
int i;
|
||||
Word word;
|
||||
int i, j;
|
||||
Word words[];
|
||||
Definitions defs;
|
||||
|
||||
for (i=words.length-1; i >= 0; i--)
|
||||
{
|
||||
if (words[i] instanceof Word)
|
||||
{
|
||||
if (!temp.contains(words[i]))
|
||||
{
|
||||
temp.addLast(words[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SimplifiedListIterator li = temp.listIterator();
|
||||
String tag;
|
||||
DictionarySource ds;
|
||||
|
||||
words = scanner.getWordArray(false);
|
||||
|
||||
if (words == null) return;
|
||||
|
||||
pw.println("<table border=\"1\" width=\"100%\">");
|
||||
while (li.hasNext())
|
||||
|
||||
for (j=0; j<words.length; j++)
|
||||
{
|
||||
word = (Word)li.next();
|
||||
defs = word.getDefs();
|
||||
defs = words[j].getDefs();
|
||||
ds = defs.getDictionarySource();
|
||||
if (ds==null) continue;
|
||||
pw.println(" <tr>");
|
||||
tag = defs.getTag(0);
|
||||
if (tag!=null)
|
||||
{
|
||||
pw.println(" <td width=\"20%\" rowspan=\""+ defs.def.length +"\" valign=\"top\">"+ word.getBookmark(tibetan) +"</td>");
|
||||
pw.println(" <td width=\"5%\">"+ tag +"</td>");
|
||||
pw.println(" <td width=\"75%\">" + defs.def[0] + "</td>");
|
||||
}
|
||||
tag = ds.getTag(0);
|
||||
// else tag = null;
|
||||
/*if (tag!=null)
|
||||
{*/
|
||||
pw.println(" <td width=\"20%\" rowspan=\""+ defs.def.length +"\" valign=\"top\">"+ words[j].getBookmark(tibetan) +"</td>");
|
||||
pw.println(" <td width=\"12%\">"+ tag +"</td>");
|
||||
pw.println(" <td width=\"68%\">" + defs.def[0] + "</td>");
|
||||
/*}
|
||||
else
|
||||
{
|
||||
pw.println(" <td width=\"20%\" rowspan=\""+ defs.def.length +"\" valign=\"top\">"+ word.getBookmark(tibetan) +"</td>");
|
||||
pw.println(" <td width=\"20%\" rowspan=\""+ defs.def.length +"\" valign=\"top\">"+ words[j].getBookmark(tibetan) +"</td>");
|
||||
pw.println(" <td width=\"80%\" colspan=\"2\">" + defs.def[0] + "</td>");
|
||||
}
|
||||
}*/
|
||||
pw.println(" </tr>");
|
||||
for (i=1; i<defs.def.length; i++)
|
||||
{
|
||||
pw.println(" <tr>");
|
||||
tag = defs.getTag(i);
|
||||
if (ds!=null) tag = ds.getTag(i);
|
||||
else tag = null;
|
||||
if (tag!=null)
|
||||
{
|
||||
pw.println(" <td width=\"5%\">"+ tag +"</td>");
|
||||
pw.println(" <td width=\"75%\">" + defs.def[i] + "</td>");
|
||||
pw.println(" <td width=\"12%\">"+ tag +"</td>");
|
||||
pw.println(" <td width=\"68%\">" + defs.def[i] + "</td>");
|
||||
}
|
||||
else pw.println(" <td width=\"80%\" colspan=\"2\">" + defs.def[i] + "</td>");
|
||||
pw.println(" </tr>");
|
||||
|
|
|
@ -35,7 +35,7 @@ import javax.servlet.http.*;
|
|||
public class RemoteScannerFilter extends GenericServlet
|
||||
{
|
||||
private TibetanScanner scanner;
|
||||
private DictionarySource ds;
|
||||
private BitDictionarySource ds;
|
||||
|
||||
public RemoteScannerFilter() throws Exception
|
||||
{
|
||||
|
@ -53,6 +53,7 @@ public class RemoteScannerFilter extends GenericServlet
|
|||
PrintWriter out = res.getWriter();
|
||||
int i;
|
||||
String linea, dicts = req.getParameter("dicts"), dicDescrip[];
|
||||
|
||||
if (dicts!=null)
|
||||
{
|
||||
if (dicts.equals("names"))
|
||||
|
@ -66,7 +67,7 @@ public class RemoteScannerFilter extends GenericServlet
|
|||
|
||||
for (i=0; i<dicDescrip.length; i++)
|
||||
{
|
||||
out.println(dicDescrip[i] + "," + Definitions.defTags[i]);
|
||||
out.println(dicDescrip[i] + "," + DictionarySource.defTags[i]);
|
||||
}
|
||||
out.close();
|
||||
return;
|
||||
|
|
|
@ -31,12 +31,12 @@ import java.io.*;
|
|||
public class RemoteTibetanScanner extends TibetanScanner
|
||||
{
|
||||
private String url;
|
||||
private DictionarySource defSourcesWanted;
|
||||
private BitDictionarySource defSourcesWanted;
|
||||
|
||||
public RemoteTibetanScanner(String url) throws Exception
|
||||
{
|
||||
super();
|
||||
defSourcesWanted = DictionarySource.getAllDictionaries();
|
||||
defSourcesWanted = new BitDictionarySource().getAllDictionaries();
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
|
@ -95,7 +95,7 @@ public class RemoteTibetanScanner extends TibetanScanner
|
|||
{
|
||||
}
|
||||
|
||||
public DictionarySource getDictionarySource()
|
||||
public BitDictionarySource getDictionarySource()
|
||||
{
|
||||
return defSourcesWanted;
|
||||
}
|
||||
|
@ -129,7 +129,7 @@ public class RemoteTibetanScanner extends TibetanScanner
|
|||
}
|
||||
}
|
||||
br.close();
|
||||
Definitions.defTags = ll2.toStringArray();
|
||||
DictionarySource.setTags(ll2.toStringArray());
|
||||
return ll1.toStringArray();
|
||||
}
|
||||
catch (Exception e)
|
||||
|
|
|
@ -128,9 +128,9 @@ public abstract class ScannerPanel extends Panel implements ActionListener
|
|||
for (i=0; i<dictionaries.length; i++)
|
||||
{
|
||||
if (dictionaries[i]!=null)
|
||||
chkDicts[i] = new Checkbox(dictionaries[i] + " (" + Definitions.defTags[i] + ")", true);
|
||||
chkDicts[i] = new Checkbox(dictionaries[i] + " (" + DictionarySource.defTags[i] + ")", true);
|
||||
else
|
||||
chkDicts[i] = new Checkbox(Definitions.defTags[i], true);
|
||||
chkDicts[i] = new Checkbox(DictionarySource.defTags[i], true);
|
||||
panel2.add(chkDicts[i]);
|
||||
}
|
||||
return panel2;
|
||||
|
@ -153,7 +153,7 @@ public abstract class ScannerPanel extends Panel implements ActionListener
|
|||
status.setText("Finishing...");
|
||||
}
|
||||
|
||||
protected void setDicts(DictionarySource ds)
|
||||
protected void setDicts(BitDictionarySource ds)
|
||||
{
|
||||
if (chkDicts==null)
|
||||
{
|
||||
|
|
|
@ -37,13 +37,14 @@ public class SimpleScannerPanel extends ScannerPanel implements ItemListener
|
|||
private List listDefs;
|
||||
private Word wordArray[];
|
||||
private int lenPreview;
|
||||
private static int WIDTH_PORTRAIT = 34;
|
||||
private static int WIDTH_LANDSCAPE = 46;
|
||||
private static int WIDTH_PORTRAIT = 36;
|
||||
private static int WIDTH_LANDSCAPE = 48;
|
||||
|
||||
public SimpleScannerPanel(String file, boolean landscape)
|
||||
{
|
||||
super(file);
|
||||
Panel panel1, panel2;
|
||||
Font f;
|
||||
cardPanel = new Panel(new CardLayout());
|
||||
|
||||
// FIXME values shouldn't be hardwired
|
||||
|
@ -53,22 +54,44 @@ public class SimpleScannerPanel extends ScannerPanel implements ItemListener
|
|||
|
||||
// panel1 = new Panel(new GridLayout(3, 1));
|
||||
|
||||
panel1 = new Panel(new BorderLayout());
|
||||
// txtInput = new TextArea("",1,1,TextArea.SCROLLBARS_VERTICAL_ONLY);
|
||||
if (landscape) txtInput = new TextArea("", 3, WIDTH_LANDSCAPE, TextArea.SCROLLBARS_VERTICAL_ONLY);
|
||||
else txtInput = new TextArea("", 4, WIDTH_PORTRAIT, TextArea.SCROLLBARS_VERTICAL_ONLY);
|
||||
//panel1.add(txtInput);
|
||||
panel1.add(txtInput, BorderLayout.NORTH);
|
||||
|
||||
panel1 = new Panel(new BorderLayout());
|
||||
panel2 = new Panel(new GridLayout(2, 1));
|
||||
|
||||
listDefs = new List();
|
||||
|
||||
if (landscape)
|
||||
{
|
||||
txtInput = new TextArea("", 0, 0, TextArea.SCROLLBARS_VERTICAL_ONLY);
|
||||
txtOutput = new TextArea("", 4, WIDTH_LANDSCAPE,TextArea.SCROLLBARS_VERTICAL_ONLY);
|
||||
|
||||
panel2.add(txtInput);
|
||||
panel2.add(listDefs);
|
||||
|
||||
panel1.add(panel2, BorderLayout.CENTER);
|
||||
panel1.add(txtOutput, BorderLayout.SOUTH);
|
||||
}
|
||||
else
|
||||
{
|
||||
txtInput = new TextArea("", 4, WIDTH_PORTRAIT, TextArea.SCROLLBARS_VERTICAL_ONLY);
|
||||
txtOutput = new TextArea("",0, 0,TextArea.SCROLLBARS_VERTICAL_ONLY);
|
||||
|
||||
panel2.add(listDefs);
|
||||
panel2.add(txtOutput);
|
||||
|
||||
panel1.add(txtInput, BorderLayout.NORTH);
|
||||
panel1.add(panel2, BorderLayout.CENTER);
|
||||
}
|
||||
listDefs.setMultipleMode(false);
|
||||
listDefs.addItemListener(this);
|
||||
|
||||
panel2 = new Panel(new GridLayout(2,1));
|
||||
panel2.add(listDefs);
|
||||
txtOutput = new TextArea("",0,0,TextArea.SCROLLBARS_VERTICAL_ONLY);
|
||||
txtOutput.setEditable(false);
|
||||
panel2.add(txtOutput);
|
||||
panel1.add(panel2, BorderLayout.CENTER);
|
||||
|
||||
/*f = new Font(null, Font.PLAIN, 10);
|
||||
txtOutput.setFont(f);
|
||||
txtInput.setFont(f);*/
|
||||
|
||||
cardPanel.add(panel1, "1");
|
||||
|
||||
// FIXME: values shouldn't be hardwired
|
||||
|
@ -113,8 +136,7 @@ public class SimpleScannerPanel extends ScannerPanel implements ItemListener
|
|||
|
||||
for(i=0; i<wordArray.length; i++)
|
||||
{
|
||||
|
||||
preview = wordArray[i].toString();
|
||||
preview = wordArray[i].getWordDefPreview();
|
||||
if (preview.length()>lenPreview) preview = preview.substring(0,lenPreview);
|
||||
listDefs.add(preview);
|
||||
}
|
||||
|
|
|
@ -39,5 +39,7 @@ public interface SyllableListTree
|
|||
public Definitions getDefs();
|
||||
public boolean hasDef();
|
||||
public SyllableListTree lookUp(String silStr);
|
||||
|
||||
public DictionarySource getDictionarySource();
|
||||
public BitDictionarySource getDictionarySourcesWanted();
|
||||
}
|
|
@ -25,7 +25,7 @@ import org.thdl.util.*;
|
|||
*/
|
||||
public abstract class TibetanScanner
|
||||
{
|
||||
public static final String version = "The Tibetan to English Translation Tool, version 2.2.2 compiled on " + ThdlVersion.getTimeOfCompilation() + ". ";
|
||||
public static final String version = "The Tibetan to English Translation Tool, version 3.0.0 compiled on " + ThdlVersion.getTimeOfCompilation() + ". ";
|
||||
public static final String copyrightUnicode="Copyright " + '\u00A9' + " 2000-2004 by Andr" + '\u00E9' + "s Montano Pellegrini, all rights reserved.";
|
||||
public static final String copyrightASCII="Copyright 2000-2004 by Andres Montano Pellegrini, all rights reserved.";
|
||||
public static final String copyrightHTML="<hr><small><strong>" + version + "Copyright © 2000-2004 by <a href=\"http://www.people.virginia.edu/~am2zb/\" target=\"_blank\">Andrés Montano Pellegrini.</a><br/>All rights reserved.</strong></small>";
|
||||
|
@ -293,6 +293,7 @@ public abstract class TibetanScanner
|
|||
public Token[] getTokenArray()
|
||||
{
|
||||
int n=wordList.size();
|
||||
if (n==0) return null;
|
||||
Token token[] = new Token[n];
|
||||
SimplifiedListIterator li = wordList.listIterator();
|
||||
while(li.hasNext())
|
||||
|
@ -306,35 +307,76 @@ public abstract class TibetanScanner
|
|||
}
|
||||
|
||||
public Word[] getWordArray()
|
||||
{
|
||||
return getWordArray(true);
|
||||
}
|
||||
|
||||
public Word[] getWordArray(boolean includeRepeated)
|
||||
{
|
||||
Token token;
|
||||
Word array[];
|
||||
Word array[], word;
|
||||
int n=0;
|
||||
SimplifiedListIterator li = wordList.listIterator();
|
||||
SimplifiedLinkedList ll2, ll = new SimplifiedLinkedList();
|
||||
|
||||
while(li.hasNext())
|
||||
if (li.next() instanceof Word) n++;
|
||||
{
|
||||
token = (Token) li.next();
|
||||
|
||||
if (token instanceof Word)
|
||||
{
|
||||
ll.addLast(token);
|
||||
}
|
||||
}
|
||||
|
||||
if (includeRepeated)
|
||||
{
|
||||
n = ll.size();
|
||||
|
||||
if (n==0) return null;
|
||||
|
||||
array = new Word[n];
|
||||
n--;
|
||||
li = wordList.listIterator();
|
||||
li = ll.listIterator();
|
||||
|
||||
n=0;
|
||||
while (li.hasNext())
|
||||
{
|
||||
array[n++] = (Word) li.next();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ll2 = new SimplifiedLinkedList();
|
||||
li = ll.listIterator();
|
||||
|
||||
while(li.hasNext())
|
||||
{
|
||||
token = (Token) li.next();
|
||||
if (token instanceof Word)
|
||||
word = (Word) li.next();
|
||||
|
||||
if (!ll2.contains(word)) ll2.addLast(word);
|
||||
}
|
||||
|
||||
n = ll2.size();
|
||||
|
||||
if (n==0) return null;
|
||||
|
||||
array = new Word[n];
|
||||
li = ll2.listIterator();
|
||||
|
||||
while (li.hasNext())
|
||||
{
|
||||
array[n] = (Word) token;
|
||||
n--;
|
||||
array[--n] = (Word) li.next();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
public abstract void scanLine(String linea);
|
||||
public abstract void scanBody(String linea);
|
||||
public abstract void finishUp();
|
||||
public abstract DictionarySource getDictionarySource();
|
||||
public abstract BitDictionarySource getDictionarySource();
|
||||
public abstract String[] getDictionaryDescriptions();
|
||||
}
|
||||
|
|
|
@ -189,10 +189,12 @@ public class WindowScannerFilter implements WindowListener, FocusListener, Actio
|
|||
mnuDicts = new CheckboxMenuItem("Dictionaries", false);
|
||||
m.add(mnuDicts);
|
||||
mnuDicts.addItemListener(this);
|
||||
mb.add(m);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
m = new Menu("Help");
|
||||
if (!pocketpc)
|
||||
{
|
||||
for (int i = 0; i < DuffScannerPanel.keybdMgr.size(); i++)
|
||||
{
|
||||
final JskadKeyboard kbd = DuffScannerPanel.keybdMgr.elementAt(i);
|
||||
|
@ -217,10 +219,10 @@ public class WindowScannerFilter implements WindowListener, FocusListener, Actio
|
|||
}
|
||||
}
|
||||
m.add("-");
|
||||
}
|
||||
mnuAbout = new MenuItem("About...");
|
||||
m.add(mnuAbout);
|
||||
mnuAbout.addActionListener(this);
|
||||
}
|
||||
mb.add(m);
|
||||
|
||||
// disable menus
|
||||
|
|
|
@ -78,6 +78,16 @@ public class Word extends Token
|
|||
return def.toString();
|
||||
}
|
||||
|
||||
public String getDefPreview()
|
||||
{
|
||||
return def.getPreview();
|
||||
}
|
||||
|
||||
public String getWordDefPreview()
|
||||
{
|
||||
return super.token + " - " + getDefPreview();
|
||||
}
|
||||
|
||||
public Definitions getDefs()
|
||||
{
|
||||
return def;
|
||||
|
|
Loading…
Reference in a new issue