Revision 137476 of "User:PerfektesChaos/js/WikiSyntaxTextMod/dX.js" on testwiki/// PerfektesChaos/js/WikisyntaxTextMod/?X.js /// 2012-05-30 [email protected] /// Fingerprint: #0#0# /// <nowiki> /* jshint curly:true, latedef:true, laxbreak:true, trailing:true, undef:true, white:false */ /* global jQuery: true, mw: true, mediaWiki: false, window: false */ /*jslint plusplus: true, regexp: true, sloppy: true, unparam: true, vars: true, white: true, maxerr: 50 */ /*globals jQuery: true, mw: true, mediaWiki: false, window: false */ if (typeof(mediaWiki) !== "object") { // disconnected mw = { libs: { }, log: function () {} }; jQuery = {}; } if (typeof(mw.libs.WikiSyntaxTextMod) !== "object") { // isolated mw.libs.WikiSyntaxTextMod = { debugging: false }; } if (typeof(mw.libs.WikiSyntaxTextMod.X) !== "object") { mw.libs.WikiSyntaxTextMod.X = { }; } mw.libs.WikiSyntaxTextMod.X.vsn = -0.531; if (typeof(mw.libs.WikiSyntaxTextMod.bb) !== "object") { mw.libs.WikiSyntaxTextMod.bb = { }; } if (typeof(mw.libs.WikiSyntaxTextMod.main) !== "object") { mw.libs.WikiSyntaxTextMod.main = { }; } // Requires: JavaScript 1.5 RegExp non-capturing parenthese // mw.log(WSTM.debugging,"",0); //----------------------------------------------------------------------- mw.libs.WikiSyntaxTextMod.bb.chrX = function (WSTM) { if (typeof(WSTM.w) !== "object") { WSTM.w = { }; } if (typeof(WSTM.w.chr) !== "object") { WSTM.w.chr = { detected: { ampersand: false, exchange: 0, nbHyphen: false, ordMasc: false, tab: false, tabEOL: false, white: false }, re: { } }; } WSTM.w.chr.flushEntities = function (adjust) { // Exchange undesired entities in modifiable nodes with UCS chars // Precondition: // adjust -- WikiTom to be analyzed // Postcondition: // Nodes are modified where suitable. // Uses: // > .o.WikiTom.TextOnly // >< .w.chr.re.entities // .w.chr.flushEntities() -- recursive // .w.chr.flat() // 2012-04-30 [email protected] var c; var e; var f; var i; var j; var k; var l; var m; var n; var s; var r; if (adjust.children) { n = adjust.children.length; for (i = 0; i < n; i++) { this.flushEntities(adjust.children[i]); } // for i } else if (adjust.lookup) { if (adjust.mode <= WSTM.o.WikiTom.TextOnly) { s = adjust.source; if (s) { m = false; i = s.indexOf("&"); if (i >= 0) { if (! this.re.entities) { k = "&#x?[0-9A-Fa-f+]+;"; r = "&[A-Za-z][a-zETH][a-zHO]" + "[a-zR123]?[a-zN1234]?[a-z24]?[a-z]?;"; this.re.entities = [ new RegExp(k, "g"), new RegExp(r, "g") ]; } for (k = 0; k < 2; k++) { l = (k === 1); r = this.re.entities[k]; r.lastIndex = 0; do { j = r.lastIndex; f = r.exec(s); if (f) { e = f[0]; if (e !== " ") { c = this.flat(e, l); if (c) { mw.log(WSTM.debugging,".w.chr.flushEntities()"+c,0); j = f.index; m = j + e.length; s = s.substr(0, j) + c + s.substr(m); r.lastIndex = j + 1; } // } // replace, except nbsp } // found? } while (f); // do } // for k } // '&' in node if (m) { if (adjust.source !== s) { adjust.fresh(s); } } } } } }; // .w.chr.flushEntities() }; // .bb.chrX() mw.libs.WikiSyntaxTextMod.bb.chrX(mw.libs.WikiSyntaxTextMod); delete mw.libs.WikiSyntaxTextMod.bb.chrX; //----------------------------------------------------------------------- mw.libs.WikiSyntaxTextMod.bb.elemX = function (WSTM) { if (typeof(WSTM.w) !== "object") { WSTM.w = { }; } if (typeof(WSTM.w.elem) !== "object") { WSTM.w.elem = { }; } }; // .bb.elemX() mw.libs.WikiSyntaxTextMod.bb.elemX(mw.libs.WikiSyntaxTextMod); delete mw.libs.WikiSyntaxTextMod.bb.elemX; //----------------------------------------------------------------------- mw.libs.WikiSyntaxTextMod.bb.linkX = function (WSTM) { // Analysis of link -- web and wiki // 2012-05-18 [email protected] if (typeof(WSTM.w.link) !== "object") { WSTM.w.link = { wiki: { }, web: { } }; } WSTM.w.link.format = function (adjust, about, above, adhere) { // Format found '[' in WikiTom, analyze and process link // Precondition: // adjust -- WikiTom element // about -- location object // .i string position of beginning "[" // .k sibling number of adjust // above -- top level // adhere -- true: freeze link targets // Postcondition: // Returns array with start location for next search // .i string position of termination // .k sibling number of termination // .target WikiTom, if category or interwiki // Uses: // > .o.Wikilink.instance // > .w.link.reHead // > .o.Wikilink.ModeIw // > .o.Wikilink.ModeFile // > .o.WikiTom.LinkFile // > .o.Wikilink.ModeCat // > .o.WikiTom.LinkCategory // > .o.WikiTom.LinkInterWiki // > .o.WikiTom.LinkWiki // > .mod.hyper // < .o.WikiTom().mode // < .o.WikiTom().lookup // .o.WikiTom().fetch() // .o.WikiTom().focus() // .o.WikiTom().flip() // .errors.found() // .o.wikilink:: // .set() // .getChange() // .getError() // .getUserModified() // .getType() // .getTargetLength() // .getIncrement() // .o.WikiTom().folder() // .w.link.web.format() // 2012-06-31 [email protected] var got; var j = about.i; var m = 1; var mode = 0; var n; var r = { i: j + 1, k: about.k }; var s; var wlink = WSTM.o.Wikilink.instance; var wtom; if (adjust.fetch(r.k, r.i, true) === 91) { // '[' mode = 10; // "[[" //mw.log(WSTM.debugging,".w.link.format() ["+adjust.fetch(r.k, r.i, false).substr(0,100),0); } else { s = adjust.fetch(r.k, r.i, false); //mw.log(WSTM.debugging,".w.link.format() "+s.substr(0,100),0); if (s) { got = this.reHead.exec(s); if (got) { if (got.index) { // ^ matches multiline } else { if (got[1]) { // bad format: spaces between brackets j += got[1].length; // TODO: test } if (got[2]) { mode = 11; } else { mode = 20; // "[//" or "[https://" etc. } } } else { got = /^([^\[|\n]+)([^\]\[|\n]+)?\](.)/.exec(s); if (got) { if (! got.index) { // ^ matches multiline if (got[3] === "]") { if (got[1].length < 100) { // MAX_WIKILINK_LENGTH mode = 12; // bad: second bracket missing if (got[2]) { if (got[2].length > 200) {// MAX_LINKTITLE_LEN mode = 0; } } } } } } } } } switch (mode) { case 10 : case 11 : case 12 : if (mode > 10) { mw.log(WSTM.debugging,".w.link.format() mode="+mode,0); } wtom = adjust.focus(r.k); wlink.set(wtom, j, adhere, wtom, WSTM.mod.hyper); // "[" case 12 setLoose if (wlink.getChange()) { n = wlink.getRemoveFrom(); adjust.flip(r.k, j + n, wlink.getRemoveTo() - n, wlink.getTextReplace()); if (wlink.getError() || wlink.getUserModified()) { WSTM.mod.lazy = false; } } n = wlink.getType(); if (adjust.parent) { if (n === WSTM.o.Wikilink.ModeIw && ! above) { s = adjust.fetch(r.k, j, false); WSTM.errors.found("wikilinkInterwikiDeep", false, s.substr(0, 50)); mode = 0; } // interwiki } if (adhere) { n = wlink.getTargetLength(); if (n) { j += 2; got = adjust.folder(j, r.k, j + n, r.k); m = wlink.getIncrement(); if (got) { got.lookup = false; switch (wlink.getType()) { // magicNumber->const case WSTM.o.Wikilink.ModeFile : got.mode = WSTM.o.WikiTom.LinkFile; break; case WSTM.o.Wikilink.ModeCat : got.mode = WSTM.o.WikiTom.LinkCategory; got.leader = wlink.getLeader(); r.target = got; break; case WSTM.o.Wikilink.ModeIw : got.mode = WSTM.o.WikiTom.LinkInterWiki; got.leader = wlink.getLeader(); r.target = got; break; default: got.mode = WSTM.o.WikiTom.LinkWiki; break; } // switch wlink.mode r.k += 2; j = 0; m = 0; } } } else { m = 2; } if (mode > 10) { s = adjust.fetch(r.k, j, false); WSTM.errors.found("wikilinkBracketsAhead", false, s.substr(0, 50)); } break; case 20 : got = WSTM.w.link.web.format(adjust, { i: j + 1, j: 0, k: r.k }, adhere, false, WSTM.mod.hyper); if (got) { m = got[1]; if (got[2]) { s = adjust.fetch(r.k, 0, false); adjust.flip(r.k, 0, s.length, got[2]); if (got[3]) { WSTM.mod.lazy = false; } } if (typeof(got[0]) === "number") { j = got[0]; } r.mode = got[4]; if (adhere && r.mode) { got = adjust.folder(j, r.k, m, r.k); if (got) { got.lookup = false; got.mode = r.mode; } r.k += 2; j = 0; m = 0; } } break; } // switch mode r.i = j + m; return r; }; // .w.link.format() }; // .bb.linkX() mw.libs.WikiSyntaxTextMod.bb.linkX(mw.libs.WikiSyntaxTextMod); delete mw.libs.WikiSyntaxTextMod.bb.linkX; //----------------------------------------------------------------------- /* mw.libs.WikiSyntaxTextMod.w.polish.strong = function () { // Remove superfluous ''' from headlines // Postcondition: // stringDOM_Nodelist Nodes are modified where suitable. // RegExp was used. // Uses: // >< .tx.tree // stringDOM_Nodelist:: // .find() // .getNode() // .modify() // Requires: JavaScript 1.3 charCodeAt() // 2011-12-31 [email protected] with (mw.libs.WikiSyntaxTextMod) { var i; var join; var keep; var node; var reHead = false; var reLine = new RegExp("\n=+.*'''.*= *\n", "g"); var store; var target = [reLine, 0]; var bold = tx.tree.find(target, 0, 0); while (bold) { store = bold[2].substr(1); join = store.length; if (store.charCodeAt(0) === 61) { // '=' if (! reHead) { reHead = new RegExp("^(==+)[^=\n].+[^=\n]\\1 *\n", ""); } if (! reHead.test(store)) { store = false; } } if (store) { i = store.indexOf("'''"); node = tx.tree.getNode(bold[1]); keep = bold[0] - node.beg + 1; while (i >= 0) { store = (i > 0 ? store.substr(0, i) : "") + store.substr(i + 3); i = store.indexOf("'''"); } // while node.modify(keep, store, keep + join); join = store.length; } bold = tx.tree.find(target, bold[0] + join, bold[1]); } // while bold } // with WSTM }; // .w.polish.strong() */ //----------------------------------------------------------------------- mw.libs.WikiSyntaxTextMod.bb.apiX = function (WSTM) { // Detected syntax error handling // 2012-04-30 [email protected] if (typeof(WSTM.api) !== "object") { WSTM.api = { }; } WSTM.api.textMod = function (adjust) { // Main task for modifications of wikitext string // Precondition: // adjust -- string with entire wikitext // Postcondition: // Returns false if nothing to do // array[2] [0] modified string // [1] true if minor edits only (not userdef) // Uses: // > .str.spaces // > WikisyntaxTextMod_UserHook // > .mod.comment // > .mod.lock // > .w.chr.detected.exchange // > .w.chr.detected.nbHyphen // > .mod.plain // > .mod.plain.raw // > .mod.plain.name // > .mod.lenient // > .text.learnt // > .w.chr.detected.tabEOL // >< .mod.plain.stm // < .w.encountered // < .str.locateEntities // < .text // .mod.furnish() // .g.factory() // .w.tags.frozen() // .o.WikiTom() // .w.chr.filter() // .w.tags.fire() // .w.chr.flip() // .w.elem.fair() // .w.elem.redirect() // .w.tags.future() // .w.elem.references() // .w.elem.galleries() // .w.template.findISBN() // .w.template.fire() // .w.link.fire() // .w.elem.fixed() // .w.elem.finishing() // .util.translate.further() // .o.WikiTom.replace() // .o.WikiTom.toString() // .() // Requires: JavaScript 1.3 charCodeAt() // 2012-05-30 [email protected] var ext; var r = false; var re = new RegExp("\n[ " + WSTM.str.spaces + "]+\n", "g"); var score = adjust; WSTM.o.WikiTom.Level=-99; RegExp.multiline = true; if (typeof(window) === "object") { if (typeof(window.console) === "object") { window.console.clear(); mw.log(WSTM.debugging,".api.textMod()",0); } if (window.name) { mw.log(WSTM.debugging,"window.name='"+window.name+"'",3); } } WSTM.mod.furnish(); WSTM.g.factory(); WSTM.w.encountered = { cats: false, indent: false, isbn: false, iwiki: false, refgroups: false }; WSTM.str.locateEntities = true; WSTM.config.xEvaluation = jQuery.cookie("xEvaluation");// //////// if (typeof(WSTM.config.xEvaluation) === "string") { WSTM.config.xEvaluation = WSTM.config.xEvaluation.replace(/(0|false)/, ""); WSTM.config.xEvaluation = (WSTM.config.xEvaluation.length > 0); } if (WSTM.mod.comment) { WSTM.w.tags.frozen(); } WSTM.text = new WSTM.o.WikiTom(adjust, null); WSTM.w.chr.filter(WSTM.text); WSTM.w.tags.fire(WSTM.text); WSTM.w.chr.flip(WSTM.text); WSTM.w.elem.fair(WSTM.text); WSTM.mod.lock = (WSTM.mod.lock || WSTM.w.chr.detected.exchange || WSTM.w.chr.detected.nbHyphen); WSTM.w.elem.redirect(WSTM.text); if (WSTM.w.tags.future("references", false)) { WSTM.w.elem.references(WSTM.text); } if (WSTM.w.tags.future("gallery", false)) { WSTM.w.elem.galleries(); } WSTM.w.template.findISBN(); WSTM.o.WikiTom.Level=0; WSTM.w.template.fire(WSTM.text, true); WSTM.w.link.fire(WSTM.text, true, WSTM.mod.lock, false); if (WSTM.mod.lock && WSTM.w.encountered.indent) { WSTM.w.elem.fixed(WSTM.text, true); } WSTM.w.elem.finishing(); if (WSTM.mod.plain) { if (! WSTM.mod.plain.stm) { WSTM.mod.plain.stm = WSTM.util.translate.further( WSTM.mod.plain.raw, false, WSTM.mod.plain.name, WSTM.mod.lenient); } // _Text if (WSTM.mod.plain.stm) { WSTM.text.replace(WSTM.mod.plain.stm, false); } } // _Text if (WSTM.text.learnt || WSTM.w.chr.detected.tabEOL) { score = WSTM.text.toString(); } // /////////////////////////////////////////////////////////////////// if (typeof(WikisyntaxTextMod_UserHook) === "function") { var s = WikisyntaxTextMod_UserHook(score); if (typeof(s) === "string") { score = s; } // apparently changed by user } // WikisyntaxTextMod_UserHook defined if (score !== adjust) { // remove trailing whitespace on this occasion: re = new RegExp("([^=]|[^=]= |==)[ " + WSTM.str.spaces + "]+\n", "g"); // Test: vorher "([^ =][^=]|==) +\n" // Chemiker: Vorlagen behalten Leerzeichen bei leeren Parametern score = score.replace(re, "$1\n"); ext = score.length - 1; if (score.charCodeAt(ext) === 10) { while (score.charCodeAt(ext - 1) === 10) { score = score.substr(0, ext); ext--; } // while } // score terminated by \n } // changes if (typeof(window.console) === "object") { WSTM.text.DEBUGparent(); mw.log(WSTM.debugging,".main.bb.X.fn ==================",0,WSTM.X); mw.log(WSTM.debugging,".main.bb.X.fn",0,WSTM.text); mw.log(WSTM.debugging,".main.bb.X.fn",0,WSTM.w.encountered); mw.log(WSTM.debugging,".main.bb.X.fn",0,WSTM.w.chr.detected); } if (score !== adjust) { r = [score, WSTM.mod.lazy]; } // changes return r; }; // .api.textMod() }; // .bb.apiX() mw.libs.WikiSyntaxTextMod.bb.apiX(mw.libs.WikiSyntaxTextMod); delete mw.libs.WikiSyntaxTextMod.bb.apiX; //----------------------------------------------------------------------- mw.libs.WikiSyntaxTextMod.bb.X = function (jQuery, mw, WSTM) { // Start on import: callback to waiting ... if (typeof(WSTM.main.wait) === "function") { WSTM.main.wait("X", WSTM.X.vsn); } }; mw.libs.WikiSyntaxTextMod.bb.X(jQuery, mw, mw.libs.WikiSyntaxTextMod); // Emacs // Local Variables: // encoding: iso-8859-1-dos // fill-column: 80 // End: /// EOF </nowiki> WikiSyntaxTextMod/?X.js All content in the above text box is licensed under the Creative Commons Attribution-ShareAlike license Version 4 and was originally sourced from https://test.wikipedia.org/w/index.php?oldid=137476.
![]() ![]() This site is not affiliated with or endorsed in any way by the Wikimedia Foundation or any of its affiliates. In fact, we fucking despise them.
|