From: <cra...@us...> - 2003-03-15 16:05:33
|
Update of /cvsroot/twikiplugins/twikiplugins/PowerEditPlugin/lib/TWiki/Plugins/PowerEditPlugin/src/com/ccsoft/edit In directory sc8-pr-cvs1:/tmp/cvs-serv10337/PowerEditPlugin/lib/TWiki/Plugins/PowerEditPlugin/src/com/ccsoft/edit Added Files: Controls.java Difference.java Log Message: Rewritten completely as a plugin instead of an addon --- NEW FILE: Controls.java --- // Copyright (C) 2003 Motorola - All rights reserved // It is hereby granted that this software can be used, copied, // modified, and distributed without fee provided that this // copyright notice appears in all copies. package com.ccsoft.edit; import java.io.IOException; import java.util.Hashtable; /** * Class that manages controls. * A Controls object is a hashtable keyed on the name of the control * block. */ class Controls extends Hashtable { Controls(String controlText) throws IOException { ControlTokeniser st = new ControlTokeniser(controlText); try { while (st.nextToken() == ControlTokeniser.TT_WORD) { ControlBlock b = (ControlBlock)get(st.sval); if (b == null) put(st.sval, b = new ControlBlock()); b.parse(st); } } catch (IOException ioe) { throw new IOException( ioe.getMessage() + " while parsing controls; line " + st.lineno()); } } public ControlBlock getBlock(String block) { return (ControlBlock)get(block); } } --- NEW FILE: Difference.java --- // Copyright (C) Crawford Currie 2001 - All rights reserved // It is hereby granted that this software can be used, copied, // modified, and distributed without fee provided that this // copyright notice appears in all copies. package com.ccsoft.edit; /** * Object that represents the difference between two strings, and * can undo that difference in a ModifiableText object. Note that * the undo function only makes sense when the ModifiableText object * contains exactly the text as it should be after the modification * was applied. */ class Difference { /** * Interface to a text object which can be modified. */ public interface ModifiableText { void replace(String s, int start, int end); } /** Start position of the change in the MODIFIED string */ private int index; /** Length of the change in the MODIFIED string */ private int len; /** Text that was lost from the UNMODIFIED string by the modification */ private String diff; /** * @param oldt the text BEFORE modification * @param newt the text AFTER modification */ Difference(String oldt, String newt) { // On the assumption that the difference is contiguous, find // the differences between the old text and the new. // First probe forward... index = 0; while (index < oldt.length() && index < newt.length() && oldt.charAt(index) == newt.charAt(index)) index++; // Now probe backwards int bold = oldt.length(); int bnew = newt.length(); while (bold > index && bnew > index && oldt.charAt(bold - 1) == newt.charAt(bnew - 1)) { bold--; bnew--; } len = bnew - index; if (bold > index) { diff = oldt.substring(index, bold); } else diff = ""; } /** * Undoes the modification. * @param ta text in which the change is to be undone * @return the caret position after the undo */ public int undo(ModifiableText ta) { ta.replace(diff, index, index + len); return index; } /** Return debug representation */ public String toString() { return "diff " + index + ":" + len + "<" + diff + ">"; } } |