diff options
Diffstat (limited to 'jnyqide/WordList.java')
-rw-r--r-- | jnyqide/WordList.java | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/jnyqide/WordList.java b/jnyqide/WordList.java new file mode 100644 index 0000000..758476f --- /dev/null +++ b/jnyqide/WordList.java @@ -0,0 +1,247 @@ +package jnyqide; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import java.util.ArrayList; + + +import javax.swing.JTextArea; +import javax.swing.JTextPane; +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultStyledDocument; + +public class WordList { + //public static Trie wordsTrie = new Trie(); + public static JTextArea textArea; + public static JTextPane pane; + public static int startPos; + public static int endPos; + public static Map<String, String> URLLinks = new HashMap<String, String>(); + public static ArrayList<String> words = new ArrayList<String> (); + + public static String getlink(String word) { + // strip off syntax help from word, e.g. (osc-tri hz) -> osc + System.out.println("getlink " + word); + if (word.charAt(0) == '(') { + int i = word.indexOf(" "); + if (i <= 0) i = word.length() - 1; // remove ")" + word = word.substring(1, i); + } else /* maybe SAL mode */ { + int i = word.indexOf("("); + if (i > 0) word = word.substring(0, i); + } + String s = URLLinks.get(word); + System.out.println("getlink(" + word + ")->" + s); + if (s == null) return "home.html"; + return s; + } + + public static void init(JTextArea a) + { + textArea = a; + //System.out.println("initializing WordList.java"); + try { + BufferedReader inf; + try { + inf = new BufferedReader(new FileReader("NyquistWords.txt")); + System.out.println("\n\n***********************Opened NyquistWords.txt*********\n\n"); + } catch (IOException e) { + System.out.println("could not find NyquistWords.txt, trying jnyqide/NyquistWords.txt"); + inf = new BufferedReader(new FileReader("jnyqide/NyquistWords.txt")); + } + String word, link; + while ((word = inf.readLine()) != null) { + //wordsTrie.addWord(word); + words.add(word); + link = inf.readLine(); + if ((link == null) || (link.equals(""))) link = "home.html"; + //char[] letters = word.toCharArray(); + //if (letters[letters.length-1] == ')') word = "(" + word; + //URLLinks.put(word, link); + // word is usually an expression, e.g. + // "transpose-abs amount beh)", so parse out the first word + int i = word.indexOf(" "); + if (i >= 0) word = word.substring(0, i); + i = word.indexOf(")"); + if (i >= 0) word = word.substring(0, i); + URLLinks.put(word, link); + } + inf.close(); + } catch (IOException e) { + System.out.println("Error: could not open NyquistWords.txt"); + } + } + + public static String removeChar(String word, char c) { + int loc = word.indexOf(c); + while (loc >= 0) { + word = word.substring(0, loc) + word.substring(loc + 1); + loc = word.indexOf(c); + } + return word; + } + + public static void appendSyntaxTip(StringBuffer s, String word, boolean sal) { + // let's keep the brackets until we copy the hint string into an editor + // first, remove brackets + // word = removeChar(removeChar(word, '['), ']'); + // if this is a lisp expression, append close paren + if (word.charAt(word.length() - 1) == ')') { + if (sal) { + // make it prefix with commas + int loc = word.indexOf(' '); // end of function name + int loc2 = loc + 1; // trim the space + if (loc < 0) { + loc = word.indexOf(')'); + loc2 = loc; // don't trim the ')' + } + if (loc < 0) { + System.out.println("appendSyntaxTip internal error: |" + + word + "|"); + return; + } + // now loc is the character after the function name and + // loc2 is the character to place after the open paren + word = word.substring(0, loc) + "(" + word.substring(loc2); + // insert commas after tokens starting after open paren + loc = loc + 1; + while (loc < word.length()) { + // advance to token + while (loc < word.length() && + (word.charAt(loc) == ' ' || + word.charAt(loc) == '[' || + word.charAt(loc) == ']')) loc++; + // retain starting location for keyword processing + loc2 = loc; + // advance to end of word + while (loc < word.length() && + word.charAt(loc) != ' ' && + word.charAt(loc) != '[' && + word.charAt(loc) != ']') loc++; + // convert to keyword or maybe add comma + if (loc < word.length()) { + if (word.charAt(loc2) == ':') { + word = word.substring(0, loc2) + // before keyword + word.substring(loc2 + 1, loc) + // after ':' + ":" + word.substring(loc); + // insert comma if this is not the last parameter, + // determined by looking ahead for a space + } else if (word.indexOf(' ', loc) > 0) { + word = word.substring(0, loc) + "," + + word.substring(loc); + loc = loc + 1; // skip the comma + } + } + // System.out.println("word |" + word + "| loc " + loc); + } + } else { + s.append("("); + } + } + s.append(word); + s.append("\n"); + } + + + public static void getAllWordsFor(String str, StringBuffer s, boolean sal) { + for (int i = 0; i < words.size(); i++) { + String word = (String) words.get(i); + int pos = word.indexOf(str); + if (pos >= 0) { + int sp = word.indexOf(" "); + if (sp < 0 || sp > pos) { + appendSyntaxTip(s, word, sal); + } + } + } + } + + + public static boolean isKeyword(String str) { + String s = URLLinks.get(str); + return s != null; + /* + str = str.toLowerCase(); + for (int i = 0; i < words.size(); i++) { + String word = (String) words.get(i); + int pos = word.indexOf(str); + if (pos == 0 && + (word.length() == str.length() || + (word.charAt(str.length() - 1) == ' ' || + word.charAt(str.length() - 1) == ')'))) { + return true; + } + } + return false; + */ + } + + + public static void getWordsFor(String str, StringBuffer s, boolean sal) { + for (int i = 0; i < words.size(); i++) { + String word = (String) words.get(i); + int pos = word.indexOf(str); + if (pos == 0) { + appendSyntaxTip(s, word, sal); + } + } + } + + + public static void printList(String str, JTextPane jTextPane, + int start, int end, boolean forceExact, boolean sal) { + + //List l; + //System.out.println("printList: prefFullSearch = " + MainFrame.prefFullSearch); + //if (MainFrame.prefFullSearch) l = wordsTrie.getAllWordsFor(str.toLowerCase()); + //else l = wordsTrie.getWordsFor(str.toLowerCase(), false); + //System.out.println(l); + //StringBuffer s = new StringBuffer(); + //if (l != null) { + // Iterator iter = l.iterator(); + // while (iter.hasNext()) { + // s.append(iter.next()).append("\n"); + // } + //} + StringBuffer s = new StringBuffer(); + str = str.toLowerCase(); + if (MainFrame.prefFullSearch && !forceExact) getAllWordsFor(str, s, sal); + else getWordsFor(str, s, sal); + textArea.setText(s.toString()); + pane = jTextPane; + startPos = start; + endPos = end; // haven't inserted character yet + } + + + public static void replaceWithTemplate(String template) { + // templates were displayed in textArea based on what the user + // typed. Now, the user has clicked on a template. Replace what + // the user typed (and parens) with the template string. + String before; + try { + before = pane.getText(startPos - 1, 1); + if (before.equals("(")) startPos--; + } catch (Exception ex) { + } + String after; + try { + after = pane.getText(endPos, 1); + while (Character.isWhitespace(after.charAt(0))) { + endPos++; + after = pane.getText(endPos, 1); + } + if (after.equals(")")) endPos++; + } catch (Exception ex) { + } + pane.select(startPos, endPos); + // remove those pesky brackets (denoting "optional") + template = removeChar(removeChar(template, '['), ']'); + pane.replaceSelection(template); + } +} |