User:Haus/Hanzo/slpds
Appearance
A simple load-process-diff-save cycle in Beanshell looks something like this:
//Get one page, process, diff, and save it back
//================================================
// Startup, load everything
addClassPath(new URL("file:/C:/Program Files/jEdit/hanzo/"));
import net.psammead.mwjed.*;
import net.psammead.mwapi.*;
import net.psammead.mwapi.ui.*;
import jdiff.*;
MwJedPlugin mw = MwJedPlugin.SELF;
reloadClasses("<unpackaged>");
//Log in
mwjed.getMediaWiki().login("wikipedia:en",
"YOURNAME",
"YOURPASSWORD",
true);
//Define functions
public void setBufferText(Buffer b, String txt){
int sz = b.getLength();
b.remove(0,sz);
b.insert(0,txt);
}
//Get the page and process
mw.openPage(view,"wikipedia:en:User:Haus/6",true);
//================================================
// Prep for diff
// Check if two panes to work with
v = view;
EditPane[] pns = v.getEditPanes();
int alen = java.lang.reflect.Array.getLength(pns);
if(alen<2){
v.splitVertically();
}
if(!DualDiff.isEnabledFor(v)){
DualDiff.toggleFor(v);
}
//================================================
// process the page
//== this is where the callback would start
//skip first line, mwjed uses it to store vms "uri"
int sz = buffer.getLength(); // need to wait
//Get index of beginning of line #1
int offset = buffer.getLineStartOffset(1);
String orig = buffer.getText(offset,sz-offset);
String processed = ShipBox.parseString(orig);
//================================================
// sort out the two panes and buffers
EditPane[] pns = v.getEditPanes();
EditPane pn0 = pns[0];
EditPane pn1 = pns[1];
if(pn0.getBuffer()==pn1.getBuffer()) {
pn1.setBuffer(jEdit.newFile(view));
print(true);
}
Buffer buf0=pn0.getBuffer();
Buffer buf1=pn1.getBuffer();
// put processed content into buffer
//Start compound edit
buf0.beginCompoundEdit();
//Clean out buffer
int sz = buf0.getLength();
buf0.remove(offset,sz-offset);
//Put processed text back into the buffer
buf0.insert(offset,processed);
buf0.endCompoundEdit();
//Put orig text into new buffer
setBufferText(buf1,orig);
DualDiff dualDiff = DualDiff.getDualDiffFor(v);
if(dualDiff!=null){
DualDiff.refreshFor( v );
}
//================================================
//Save buffer content
Buffer b = pn0.getBuffer();
int sz = b.getLength(); // need to wait
String curr = b.getText(0,sz);
Page p = mw.textToPage(curr);
mw.storeAndDisplay(view,
p,
"Migrating infobox with [[User:Haus/Hanzo|Hanzo]]",
false,
false);