User:Gumr51/common.js/typoscan.js

// var typoFuse; // overriden by actions.limit function HighlightTyposUnder( node, actions ){ if( typoFuse >= 0 && node ){ if( node.nodeType == 3 /* TEXT_NODE */ ){ for( var I = 0; I < actions.patterns.length; I++ ){ var pattern = actions.patterns[ I ]; if( node.nodeValue.match( pattern ) ){ if( node.parentNode ){ node.parentNode.innerHTML = node.parentNode.innerHTML.replace( pattern, '$& ' ); typoFuse--; }       }      }    }    if( node.childNodes.length ){ for( var subnode=0; subnode < node.childNodes.length; subnode++ ){ if( node.childNodes[ subnode ].getAttribute ){ if( !/pagenumber/.test( node.childNodes[ subnode ].getAttribute( "class" ) ) ){ HighlightTyposUnder( node.childNodes[ subnode ], actions ); }       } else { HighlightTyposUnder( node.childNodes[ subnode ], actions ); }     }    }  } } function HighlightTyposLike( actions ){ self.typoscan = self.typoscan || { exclude: true }; if( !( actions.exclude ) ){      //don't bother scanning historical, edit-in-progress or given ns pages. var content=document.getElementById('wikiPreview'); //presume currently editing page (must not touch unsafe structures like wpEditToken!) if( !content ){ content=document.getElementById('mw-content-text'); //user not currently editing: assume safe to address entire display region }   typoFuse = actions.limit;

for( var N=0; N<actions.groups.length; N++ ){ if( actions.groups[ N ].include ){ HighlightTyposUnder( content, actions.groups[ N ] ); }   }  } } self.typoscan={ exclude: /(action=history|(diff|oldid|search)=|(author|category|extension|file|help|index|mediawiki|meta|module|special|talk|template|topic|user|wiki([mp]edia|source))(:|%3A))/i.test( location.href ), limit: 40, groups: [ {     include: true,                                      // this group applies to all pages not already excluded patterns: [ /\\\S/g,                                   // back-slash escape? /;[.,:]/g,                                 // chained punctuation, semicolon-led /,[.,;:]/g,                                // chained punctuation, comma-led /:[.,;]/g,                                 // chained punctuation, colon-led /(^|[^'])Ave(?!([.!]| Maria))(\W|$)/g,     // typo of "we" (but "'Ave", "Ave." or "Ave Maria" is O.K.) /\|[-+]?/g,                                // wikicode leaking into HTML  (yes the '?' is dodgy but enlarges the match for table caption/row) // /vear/gi,                                  // (possible) typo of "year" /\Wim(der|desirable|less|productive)/g,    // typo of "under"/"undesirable"/"unless"/"unproductive" /(?!na)vv(?!(ies|y))/g,                    // typo of "w" (though legitimate in "navvy" or plural) // /\Wnm\W/g,                                 // typo of "run" /(^|\W)Sts?(?!\.)(\W|$)/g,                 // typo of "St." /\s["'`;:,!?$%*=+~]\s/g,                 // floating punctuation mark: WARNING: modern style: floating "=" OK        /modem/gi,                                  // typo of "modern"        /\w&/g,                                     // embedded or trailing "&"        /&(?!c\.)\w/g,                              // leading "&" ("&c." O.K.)        /(^|\W)[a-z]+[A-Z]+[A-Za-z]+(\W|$)/g,       // upper case embedded within lower case word        /(^|\W)[A-Z]{2,}[a-z]+[A-Za-z]+(\W|$)/g,    // lower case embedded within upper case word        /(^|\W)[a-zA-Z]+\d+[a-zA-Z]*(\W|$)/g,       // digit embedded within word        /(^|\W)\d+[a-zA-Z]+\d+(\W|$)/g,             // alphabetic embedded within digits        /(^|\W)[a-zA-Z]+ \.[a-zA-Z]+(\W|$)/g,       // period surrounded by letters

/\>/g,										// ">" /</g,										// "<" / tlie /g,                                 // typo of "he" /li /g,         	                        // typo of "h" / Av/g,										// " w" at the start of the word / op /g,                                   // typo of standalone " of " // /lv /gi,                                   // typo of "ly" /lI /g,                                    // typo of "ll" or "h" /ii/g,                                     // "u" or ü"        /jj/g,                                      // "p" or "g"        /\^/g                                       // standalone "^"?      ],      styling:        'background:salmon;'    },    {      include:        /Popular.Science.Monthly/.test( location.href ) && // this group applies only to PSM pages        document.evaluate(          "//span[contains(@class,'mwe-math-mathml-inline') or contains(@class,'mwe-math-mathml-ally')]",          document,          null,          XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,          null        ).snapshotLength===0,                              // ...which contain no       patterns: [        /[{[\]}^]{1,}/g                                    // mis-terminated template, link or standalone "^"?      ],      styling:        'background:lime;'        // 'background:orange;outline:1px solid blue;' },   {      include: true,                                      // this group applies to all pages not already excluded patterns: [ /[(\)]{1,}/g,                             // plagiarised parenthesis ],     styling: 'background:gold;' } // end of add ] };   // {    //   include: //   true,                                       // this group applies to all pages not already excluded // patterns: [ //   /\{1,}/g,                            // mis-terminated template or link  lime // ],    //  styling: //   'background:lime;' // }, jQuery( document ).ready( HighlightTyposLike( self.typoscan ) );

//