বিষয়বস্তুতে চলুন

ব্যবহারকারী:রবি/common.js: সংশোধিত সংস্করণের মধ্যে পার্থক্য

ভারতপিডিয়া থেকে
রবি (আলোচনা | অবদান)
রবি (আলাপ)-এর সম্পাদিত 63272 নম্বর সংশোধনটি বাতিল করা হয়েছে
রবি (আলোচনা | অবদান)
সম্পাদনা সারাংশ নেই
ট্যাগ: মোবাইল সম্পাদনা মোবাইল ওয়েব সম্পাদনা উচ্চতর মোবাইল সম্পাদনা
 
(একই ব্যবহারকারী দ্বারা সম্পাদিত ৩৮টি মধ্যবর্তী সংশোধন দেখানো হচ্ছে না)
১ নং লাইন: ১ নং লাইন:
// This script aligns dates into one of two formats allowed by [[WP:MOSNUM]].
mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/রোলব্যাক নিশ্চিতকারক.js&action=raw&ctype=text/javascript');
// PLEASE READ THE DOCUMENTATION at [[User:Ohconfucius/script/MOSNUM dates]] (click on the link above) before using.
mw.loader.load('//commons.m.wikimedia.org/w/index.php?title=MediaWiki:Gadget-HotCat.js&action=raw&ctype=text/javascript');
 
$(document).ready(function() {
 
function customAlert(msg,duration){
var pageId = mw.config.get('wgArticleId');
var div = document.createElement('div');
div.style ='position: fixed; right:500px; top:100px;height:51px;padding-top:13px;width:300px;font-size:25px; display:block;border: solid 1px black;background-color:white';
div.innerHTML = "<center><img src='https://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Chulito_verde.jpg/21px-Chulito_verde.jpg'>"+"  "+msg+"</center>";
setTimeout(function() {
div.parentNode.removeChild(div);
},duration);
document.body.appendChild(div);};
var bnSpellChecker = function() {
$('#wpTextbox1').wikiEditor('addToToolbar', {
            'section': 'main',
            'group': 'insert',
            'tools': {
                'bnSpellChecker': {
                  label: 'বানান শুদ্ধি করুন',
                  type: 'button',
          icon: '//upload.wikimedia.org/wikipedia/commons/thumb/0/01/Lachit_SpellChecker.png/25px-Lachit_SpellChecker.png',
                  action: {
                        type: 'callback',
                        execute: function() {
                       
  getText = $('#wpTextbox1').val();
  x = getText.replace(/  +/g, " ");
 
  //wiki special
  x = x.replace(/\u09DF/g, 'য়');
  x = x.replace(/{{ /g, '{{');
//  x = x.replace(/ডঃ/g, 'ড°');
  x = x.replace(/ঐতিয্য/g, 'ঐতিহ্য');
  x = x.replace(/নিম্নপ্রদত্ব/g, 'নিম্নপ্রদত্ত');
  x = x.replace(/কাহানি/g, 'কাহিনী');
  x = x.replace(/মনোনিত/g, 'মনোনীত');
 
  // From Dibya Dutta's Pratishapan
  x = x.replace(/৷/g, "।");
  x = x.replace(/ ।/g, "।");
  x = x.replace(/ ৷/g, "।");
  x = x.replace(/ \?/g, "?");
  x = x.replace(/ ॥/g, "॥");
  x = x.replace(/ !/g, "!");
  x = x.replace(/ ;/g, ";");
  x = x.replace(/ ,/g, ',');
  x = x.replace(/।।/g, '॥');
  x = x.replace(/৷৷/g, "॥");
  x = x.replace(/াে/g, "ো");
  x = x.replace(/ো/g, "ো");
  x = x.replace(/অাা/g, 'আ');
  x = x.replace(/অা/g, 'আ');
  x = x.replace(/আা/g, 'আ');


// Feedback and constructive criticism are welcome
  //Lachit Spellchecker
    x = x.replace(/য়/g, 'য়');
//  x = x.replace(/ন্ট/g, 'ণ্ট');
    x = x.replace(/থ্থ/g, 'ত্থ');
    x = x.replace(/ট্ন/g, 'ত্ন');
    x = x.replace(/ধ্ধ/g, 'দ্ধ');
    x = x.replace(/ন্ঠ/g, 'ণ্ঠ');
  //  x = x.replace(/ন্ড/g, 'ণ্ড');
    x = x.replace(/ণ্দ/g, 'ন্দ');
    x = x.replace(/ণ্ধ/g, 'ন্ধ');
    x = x.replace(/ন্ঢ/g, 'ণ্ঢ');
    x = x.replace(/ণ্ত/g, 'ন্ত');
    x = x.replace(/ণ্জ/g, 'ঞ্জ');
    x = x.replace(/ন্জ/g, 'ঞ্জ');
    x = x.replace(/ন্চ/g, 'ঞ্চ');
    x = x.replace(/ন্ছ/g, 'ঞ্ছ');
    x = x.replace(/ণ্চ/g, 'ঞ্চ');
    x = x.replace(/ণ্ছ/g, 'ঞ্ছ');
    x = x.replace(/ণ্স/g, 'ন্স');
    x = x.replace(/ষ্ন/g, 'ষ্ণ');
//  x = x.replace(/স্ট/g, 'ষ্ট'); (প্রতিবর্ণীতে ভুল ফলাফল দিচ্ছে)
    x = x.replace(/স্হ/g, 'স্থ');
    x = x.replace(/ষ্হ/g, 'স্থ');
    x = x.replace(/ন্হ/g, 'ন্থ');
    x = x.replace(/স্ঠ/g, 'ষ্ঠ');
    x = x.replace(/ঙঁ/g, 'ঙ');
    x = x.replace(/ঞঁ/g, 'ঞ');
    x = x.replace(/নঁ/g, 'ন');
    x = x.replace(/ণঁ/g, 'ণ');
    x = x.replace(/মঁ/g, 'ম');
    x = x.replace(/অা/g, 'আ');
    x = x.replace(/অাা/g, 'আ');
    x = x.replace(/অাা/g, 'আ');


/**
* TemplateScript adds configurable templates and scripts to the sidebar, and adds an example regex editor.
* @see https://meta.wikimedia.org/wiki/TemplateScript
*/
// <pre>
if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) !== -1) {
$.ajax(
'//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js',
{dataType: 'script', cache: true}
).done(function () {
$.when(
mw.loader.using(['mediawiki.util']),
$.ajax('//en.wikipedia.org/w/index.php?title=User:Ohconfucius/script/MOSNUM_utils.js&action=raw&ctype=text/javascript',
{dataType: 'script', cache: true}),
$.ready
).done(function () {
var add = function() {
            return mw.util.addPortletLink.apply(mw.util, arguments);
};


$(add('p-tb', '#', 'DATES to dmy', 'dmy-unitfixer', 'Align all dates to dmy', '', '')).click(ohc_all_to_dmy_driver);
$(add('p-tb', '#', 'DATES to mdy', 'mdy-unitfixer', 'Align all dates to mdy', '', '')).click(ohc_all_to_mdy_driver);
// $(add('p-tb', '#', 'Expand ref dates', 't-expandref', 'Expand month names within refs', '', '')).click(ohc_expand_ref_dates_driver);
// $(add('p-tb', '#', 'Expand all dates', 't-expandall', 'Expand month names throughout', '', '')).click(ohc_expand_all_dates_driver);
$( add('p-tb', '#', 'US-slash dates', 't-US', 'US-slash', '', '') ).click(ohc_US_slash_dates_driver);
$( add('p-tb', '#', 'UK-slash dates', 't-UK', 'UK-slash', '', '') ).click(ohc_UK_slash_dates_driver);
});
});
}


function ohc_fix_unambiguous_dates()
    //crucial part starts
{
    // do not fiddle here
// resolvable ambiguous date formats
    //removes multiple question marks, exclamation
// UK style
 
ohc_regex(/([^-\w/:\.])@DD\.@MM\.@YYYY(?=[^-–/\w&])/gi, "$1@Day @Month @YYYY", function(d) {
    x = x.replace(/\?\?\?/g, '?'); //removes triple question marks with spaces
if (d.d == d.m) return true;
    x = x.replace(/\?\?/g, '?'); //removed double question marks with spaces
if (d.d > 12) return true;
    // x = x.replace(/!!!/g, '!'); //removes triple exclamation with spaces NOT FOR WIKI
return false;
    // x = x.replace(/!!/g, '!'); //removes double exclamation with spaces NOT FOR WIKI
});
 
ohc_regex(/([^-\w/:\.])@DD\/@MM\/@YYYY(?=[^-–/\w&])/gi, "$1@Day @Month @YYYY", function(d) {
    // crucial part ends
if (d.d == d.m) return true;
 
if (d.d > 12) return true;
    // brings the question marks, exclamation, full stop before inverted comma
return false;
    // new in Version 3.0
});
//   x = x.replace(/"। /g, '।" ');  // ” = RIGHT DOUBLE QUOTATION MARK “ = LEFT DOUBLE QUOTATION MARK
    x = x.replace(/"\?/g, '?"'); // ” = RIGHT DOUBLE QUOTATION MARK “ = LEFT DOUBLE QUOTATION MARK
    x = x.replace(/"! /g, '!" '); // ” = RIGHT DOUBLE QUOTATION MARK “ = LEFT DOUBLE QUOTATION MARK
 
 
    //corrects commonly mistaken words


// US style
  x = x.replace(/অংক/g, 'অঙ্ক');
ohc_regex(/([^-\w/:\.])@MM\.@DD\.@YYYY(?=[^-–/\w&])/gi, "$1@Month @Day, @YYYY", function(d) {
  x = x.replace(/অংকন/g, 'অঙ্কন');
if (d.d > 12) return true;
  x = x.replace(/অংকুর/g, 'অঙ্কুর');
return false;
  x = x.replace(/অংগ /g, 'অঙ্গ ');
});
  x = x.replace(/অংগন/g, 'অঙ্গন');
ohc_regex(/([^-\w/:\.])@MM\/@DD\/@YYYY(?=[^-–/\w&])/gi, "$1@Month @Day, @YYYY", function(d) {
  x = x.replace(/অংগাংগী/g, 'অঙ্গাঙ্গি');
if (d.d > 12) return true;
  x = x.replace(/অকল্যান/g, 'অকল্যাণ');
return false;
  x = x.replace(/অকারন/g, 'অকারণ');
});
  x = x.replace(/অগ্রগন্য/g, 'অগ্রগণ্য');
}
  x = x.replace(/অগ্রহায়ন/g, 'অগ্রহায়ণ');
  x = x.replace(/অচিন্ত/g, 'অচিন্ত্য');
  x = x.replace(/অচিন্ত্যনীয়/g, 'অচিন্তনীয়');
  x = x.replace(/অঞ্জলী/g, 'অঞ্জলি');
  x = x.replace(/অণ্বেষণ/g, 'অন্বেষণ');
  x = x.replace(/অতিথী/g, 'অতিথি');
  x = x.replace(/অতিব /g, 'অতীব ');
  x = x.replace(/অতিষ্ট/g, 'অতিষ্ঠ');
  x = x.replace(/অত্যাধিক/g, 'অত্যধিক');
  x = x.replace(/অত্যান্ত/g, 'অত্যন্ত');
  x = x.replace(/অদ্ভূত/g, 'অদ্ভুত');
  x = x.replace(/অদ্যপি/g, 'অদ্যাপি');
  x = x.replace(/অদ্যবদি/g, 'অদ্যাবধি');
  x = x.replace(/অধঃস্তন/g, 'অধস্তন');
  x = x.replace(/অধিকরন/g, 'অধিকরণ');
  x = x.replace(/অধীনস্ত/g, 'অধীনস্থ');
  x = x.replace(/অধ্যাবসায়/g, 'অধ্যবসায়');
  x = x.replace(/অধ্যায়ণ/g, 'অধ্যয়ন');
  x = x.replace(/অধ্যূষিত/g, 'অধ্যুষিত');
  x = x.replace(/অনিন্দসুন্দর/g, 'অনিন্দ্যসুন্দর');
  x = x.replace(/অনিষ্ঠ/g, 'অনিষ্ট');
  x = x.replace(/অনু /g, 'অণু ');
  x = x.replace(/অনুকুল/g, 'অনুকূল');
  x = x.replace(/অনুর্ধ্ব/g, 'অনূর্ধ্ব');
  x = x.replace(/অনুসঙ্গ/g, 'অনুষঙ্গ');
  x = x.replace(/অন্তঃসত্তা/g, 'অন্তসত্ত্বা');
  x = x.replace(/অন্তকরণ/g, 'অন্তঃকরণ');
  x = x.replace(/অন্তর্ভূক্ত/g, 'অন্তর্ভুক্ত');
  x = x.replace(/অন্তর্মুখি/g, 'অন্তর্মুখী');
  x = x.replace(/অন্যমনষ্ক/g, 'অন্যমনস্ক');
  x = x.replace(/অপসৃয়মান/g, 'অপসৃয়মাণ');
  x = x.replace(/অপাংক্তেয়/g, 'অপাঙ্‌ক্তেয়');
  x = x.replace(/অপেক্ষমান/g, 'অপেক্ষমাণ');
  x = x.replace(/অভিভুত/g, 'অভিভূত');
  x = x.replace(/অভিমুখি /g, 'অভিমুখী ');
  x = x.replace(/অভ্যন্তরিক/g, 'আভ্যন্তরিক');
  x = x.replace(/অভ্যস্থ/g, 'অভ্যস্ত');
  x = x.replace(/অমানুসিক/g, 'অমানুষিক');
  x = x.replace(/অমাবশ্যা/g, 'অমাবস্যা');
  x = x.replace(/অমিতাক্ষর/g, 'অমিত্রাক্ষর');
  x = x.replace(/অর্ধ্ব/g, 'অর্ধ');
  x = x.replace(/অর্পণা/g, 'অপর্ণা');
  x = x.replace(/অলংঘ/g, 'অলঙ্ঘ্য');
  x = x.replace(/অশিরিরী/g, 'অশরীরী');
  x = x.replace(/অসুয়া/g, 'অসূয়া');
  x = x.replace(/অস্তমান/g, 'অস্তায়মান');
  x = x.replace(/অহঃরহ/g, 'অহরহ');
  x = x.replace(/আঁড়াআড়ি/g, 'আড়াআড়ি');
  x = x.replace(/আঁড়িপাতা/g, 'আড়িপাতা');
  x = x.replace(/আকষ্কিক/g, 'আকস্মিক');
  x = x.replace(/আকাংখা/g, 'আকাঙ্ক্ষা');
  x = x.replace(/আকাবাকা/g, 'আঁকাবাঁকা');
  x = x.replace(/আকুতি/g, 'আকূতি');
  x = x.replace(/আকূল/g, 'আকুল');
  x = x.replace(/আক্রমন/g, 'আক্রমণ');
  x = x.replace(/আটপৌড়ে/g, 'আটপৌরে');
  x = x.replace(/আড়ষ্ঠ/g, 'আড়ষ্ট');
  x = x.replace(/আড়ৎ/g, 'আড়ত');
  x = x.replace(/আতংক/g, 'আতঙ্ক');
  x = x.replace(/আত্মস্যাৎ/g, 'আত্মসাৎ');
  x = x.replace(/আদ্যান্ত/g, 'আদ্যন্ত');
  x = x.replace(/আদ্র/g, 'আর্দ্র');
  x = x.replace(/আনবিক/g, 'আণবিক');
  x = x.replace(/আনুষাঙ্গিক/g, 'আনুষঙ্গিক');
  x = x.replace(/আপাতঃদৃষ্টে/g, 'আপাতদৃষ্টে');
  x = x.replace(/আপাততঃ/g, 'আপাতত');
  x = x.replace(/আপোষ/g, 'আপোস');
  x = x.replace(/আভ্যন্তরীণ/g, 'অভ্যন্তরীণ');
  x = x.replace(/আয়ত্ব/g, 'আয়ত্ত');
  x = x.replace(/আয়ত্বাধীন/g, 'আয়ত্তাধীন');
  x = x.replace(/আরাম্ভ/g, 'আরম্ভ');
  x = x.replace(/আলিংগন/g, 'আলিঙ্গন');
  x = x.replace(/আলোচ্যমান/g, 'আলোচ্য');
  x = x.replace(/আশংকা/g, 'আশঙ্কা');
  x = x.replace(/আশক্তি/g, 'আসক্তি');
  x = x.replace(/আশ্বস্থ/g, 'আশ্বস্ত');
  x = x.replace(/আস্তাকুঁড়/g, 'আঁস্তাকুড়');
  x = x.replace(/ইংগিত/g, 'ইঙ্গিত');
  x = x.replace(/ইতঃস্তত/g, 'ইতস্তত');
  x = x.replace(/ইতিপূর্বে/g, 'ইতঃপূর্বে');
  x = x.replace(/ইতিমধ্যে/g, 'ইতোমধ্যে');
  x = x.replace(/ইদানিং/g, 'ইদানীং');
  x = x.replace(/ইয়ত্বা/g, 'ইয়ত্তা');
  x = x.replace(/ইষ্ঠ/g, 'ইষ্ট');
  x = x.replace(/ইষৎ/g, 'ঈষৎ');
  x = x.replace(/ঈস্পিত/g, 'ঈপ্সিত');
  x = x.replace(/উচিৎ/g, 'উচিত');
  x = x.replace(/উচ্চৈস্বরে/g, 'উচ্চৈঃস্বরে');
  x = x.replace(/উচ্ছ্বল/g, 'উচ্ছল');
  x = x.replace(/উজ্বল/g, 'উজ্জ্বল');
  x = x.replace(/উত্তরন/g, 'উত্তরণ');
  x = x.replace(/উত্তরসুরী/g, 'উত্তরসূরি');
  x = x.replace(/উত্তলন/g, 'উত্তোলন');
  x = x.replace(/উত্যক্ত/g, 'উত্ত্যক্ত');
  x = x.replace(/উদীচি/g, 'উদীচী');
  x = x.replace(/উদ্দান/g, 'উদ্যান');
  x = x.replace(/উদ্দ্যোগ/g, 'উদ্যোগ');
  x = x.replace(/উদ্ধত্য/g, 'ঔদ্ধত্য');
  x = x.replace(/উদ্বিঘ্ন/g, 'উদ্বিগ্ন');
  x = x.replace(/উদ্ভিজ/g, 'উদ্ভিজ্জ');
  x = x.replace(/উদ্ভুত/g, 'উদ্ভূত');
  x = x.replace(/উনবিংশ/g, 'ঊনবিংশ');
  x = x.replace(/উপকুল/g, 'উপকূল');
  x = x.replace(/উপচার্য/g, 'উপাচার্য');
  x = x.replace(/উপরোক্ত/g, 'উপরিউক্ত');
  x = x.replace(/উপলক্ষ্য/g, 'উপলক্ষ');
  x = x.replace(/উভয়চর/g, 'উভচর');
  x = x.replace(/উর্ধ্ব/g, 'ঊর্ধ্ব');
  x = x.replace(/উর্মি/g, 'ঊর্মি');
  x = x.replace(/উশৃঙ্খল/g, 'উচ্ছৃঙ্খল');
  x = x.replace(/উষর/g, 'ঊষর');
  x = x.replace(/উহ্য/g, 'ঊহ্য');
  x = x.replace(/উৎকর্ষতা/g, 'উৎকর্ষ');
  x = x.replace(/ঊনিশ/g, 'উনিশ');
  x = x.replace(/এককৃত/g, 'একীকৃত');
  x = x.replace(/একনিষ্ট/g, 'একনিষ্ঠ');
  x = x.replace(/একভূত/g, 'একীভূত');
  x = x.replace(/একাধিক্রমে/g, 'একাদিক্রমে');
  x = x.replace(/এক্ষুণি/g, 'এক্ষুনি');
  x = x.replace(/এতদ্‌সঙ্গে/g, 'এতৎসঙ্গে');
  x = x.replace(/এতদ্‌সত্ত্বেও/g, 'এতৎসত্ত্বেও');
  x = x.replace(/এশিয় /g, 'এশীয় ');
  x = x.replace(/ঐকবদ্ধ/g, 'ঐক্যবদ্ধ');
  x = x.replace(/ঐক্যতা/g, 'একতা');
  x = x.replace(/ঐক্যতান/g, 'ঐকতান');
  x = x.replace(/ঐক্যমত/g, 'ঐকমত্য');
  x = x.replace(/ওতঃপ্রোত/g, 'ওতপ্রোত');
  x = x.replace(/ঔচিত্ত/g, 'ঔচিত্য');
  x = x.replace(/কংকণ/g, 'কঙ্কণ');
  x = x.replace(/কংকাল/g, 'কঙ্কাল');
  x = x.replace(/কচিৎ/g, 'ক্বচিৎ');
  x = x.replace(/কটুক্তি/g, 'কটূক্তি');
  x = x.replace(/কতৃক/g, 'কর্তৃক');
  x = x.replace(/কতৃত্ত্ব/g, 'কর্তৃত্ব');
  x = x.replace(/কতৃপক্ষ/g, 'কর্তৃপক্ষ');
  x = x.replace(/কথপোকথন/g, 'কথোপকথন');
  x = x.replace(/কদাচিত/g, 'কদাচিৎ');
  x = x.replace(/ কনা/g, ' কণা');
  x = x.replace(/কনিষ্ট/g, 'কনিষ্ঠ');
  x = x.replace(/কন্ঠশিল্পী/g, 'কণ্ঠশিল্পী');
  x = x.replace(/কন্ঠস্ত/g, 'কণ্ঠস্থ');
  x = x.replace(/কয়েদী/g, 'কয়েদি');
  x = x.replace(/করনিক/g, 'করণিক');
  x = x.replace(/কর্তী/g, 'কর্ত্রী');
  x = x.replace(/কর্মচারি/g, 'কর্মচারী');
  x = x.replace(/কলংক/g, 'কলঙ্ক');
  x = x.replace(/কলসী/g, 'কলসি');
  x = x.replace(/কল্যান/g, 'কল্যাণ');
  x = x.replace(/কল্যানীয়াষু/g, 'কল্যাণীয়াসু');
  x = x.replace(/কল্যানীয়েসু/g, 'কল্যাণীয়েষু');
  x = x.replace(/কষ্ঠি/g, 'কষ্টি');
  x = x.replace(/কাঁচ/g, 'কাচ');
  x = x.replace(/কাঁছাকাছি/g, 'কাছাকাছি');
  x = x.replace(/কাংখিত/g, 'কাঙ্খিত');
  x = x.replace(/কাকলী/g, 'কাকলি');
  x = x.replace(/কাচা/g, 'কাঁচা');
  x = x.replace(/কাতলা/g, 'কাৎলা');
  x = x.replace(/কার্যতঃ/g, 'কার্যত');
  x = x.replace(/কিংবদন্তী/g, 'কিংবদন্তি');
  x = x.replace(/কিম্বা/g, 'কিংবা');
  x = x.replace(/কুটনীতি/g, 'কূটনীতি');
  x = x.replace(/কুৎসিৎ/g, 'কুৎসিত');
  x = x.replace(/কূটিল/g, 'কুটিল');
  x = x.replace(/কৃচ্ছতা/g, 'কৃচ্ছ্রতা');
  x = x.replace(/কৃচ্ছসাধন/g, 'কৃচ্ছ্রসাধন');
  x = x.replace(/কৃষিজীবি/g, 'কৃষিজীবী');
  x = x.replace(/কৃষ্টিবান/g, 'কৃষ্টিমান');
  x = x.replace(/কেন্দ্রিয়/g, 'কেন্দ্রীয়');
  x = x.replace(/কেরাণী/g, 'কেরানি');
  x = x.replace(/কোণাকুণি/g, 'কোনাকুনি');
  x = x.replace(/কৌতুহল/g, 'কৌতূহল');
  x = x.replace(/কৌতূক/g, 'কৌতুক');
  x = x.replace(/ক্রুর/g, 'ক্রূর');
  x = x.replace(/ক্ষীয়মান/g, 'ক্ষীয়মাণ');
  x = x.replace(/ক্ষুন্ন/g, 'ক্ষুণ্ণ');
  x = x.replace(/ক্ষুব্দ/g, 'ক্ষুব্ধ');
  x = x.replace(/ক্ষেপন/g, 'ক্ষেপণ');
  x = x.replace(/ক্ষেপনাস্ত্র/g, 'ক্ষেপণাস্ত্র');
  x = x.replace(/খঞ্জনী/g, 'খঞ্জনি');
  x = x.replace(/খুটিনাটি/g, 'খুঁটিনাটি');
  x = x.replace(/খুড়ী/g, 'খুড়ি');
  x = x.replace(/খুশী/g, 'খুশি');
  x = x.replace(/খেতমজুর/g, 'ক্ষেতমজু');
  x = x.replace(/খেলাধূলা/g, 'খেলাধুলা');
  x = x.replace(/খেলোয়ার/g, 'খেলোয়াড়');
  x = x.replace(/খোজ/g, 'খোঁজ');
  x = x.replace(/খোলাখোলি/g, 'খোলাখুলি');
  x = x.replace(/গংগা/g, 'গঙ্গা');
  x = x.replace(/গগণ/g, 'গগন');
  x = x.replace(/গড্ডালিকা/g, 'গড্ডলিকা');
  x = x.replace(/গত্যান্তর/g, 'গত্যন্তর');
  x = x.replace(/ গন /g, ' গণ ');
  x = x.replace(/গননা/g, 'গণনা');
  x = x.replace(/গনিত/g, 'গণিত');
  x = x.replace(/গন্য /g, 'গণ্য ');
  x = x.replace(/গন্‌জ/g, 'গঞ্জ');
  x = x.replace(/গবেষনা/g, 'গবেষণা');
  x = x.replace(/গরীব/g, 'গরিব');
  x = x.replace(/গর্ধব/g, 'গর্ধভ');
  x = x.replace(/গাড়ী/g, 'গাড়ি');
  x = x.replace(/গার্হস্থ /g, 'গার্হস্থ্য ');
  x = x.replace(/গীর্জা/g, 'গির্জা');
  x = x.replace(/গুড়া/g, 'গুঁড়া');
  x = x.replace(/গুড়ো/g, 'গুঁড়ো');
  x = x.replace(/গুণে গুণে/g, 'গুনে গুনে');
  x = x.replace(/গৃহস্ত/g, 'গৃহস্থ');
  x = x.replace(/গৃহিত/g, 'গৃহীত');
  x = x.replace(/গোধুলি/g, 'গোধূলি');
  x = x.replace(/গোষ্ঠি/g, 'গোষ্ঠী');
  x = x.replace(/গোস্পদ/g, 'গোষ্পদ');
  x = x.replace(/গ্রন্থী/g, 'গ্রন্থি');
  x = x.replace(/গ্রহন/g, 'গ্রহণ');
  x = x.replace(/গ্রহিতা/g, 'গ্রহীতা');
  x = x.replace(/গ্রামীন/g, 'গ্রামীণ');
  x = x.replace(/গ্রীক/g, 'গ্রিক');
  x = x.replace(/গ্রীস/g, 'গ্রিস');
  x = x.replace(/ঘনিষ্ট/g, 'ঘনিষ্ঠ');
  x = x.replace(/ঘরণী/g, 'ঘরনি');
  x = x.replace(/ ঘাটি/g, ' ঘাঁটি');
  x = x.replace(/ঘুরাঘুরি/g, 'ঘোরাঘুরি');
  x = x.replace(/ঘুর্ণীয়মান/g, 'ঘূর্ণায়মান');
  x = x.replace(/ঘুর্নি/g, 'ঘূর্ণি');
  x = x.replace(/ঘুসখোর/g, 'ঘুষখোর');
  x = x.replace(/ঘূণ/g, 'ঘুণ');
  x = x.replace(/ঘোষনা/g, 'ঘোষণা');
  x = x.replace(/ঘ্রান/g, 'ঘ্রাণ');
  x = x.replace(/চত্তর/g, 'চত্বর');
  x = x.replace(/চরক/g, 'চড়ক');
  x = x.replace(/চাকরানী/g, 'চাকরানি');
  x = x.replace(/চাকরী/g, 'চাকরি');
  x = x.replace(/চাকুরী/g, 'চাকুরী');
  x = x.replace(/চাতুর্যতা/g, 'চাতুর্য');
  x = x.replace(/চীৎকার/g, 'চিৎকার');
  x = x.replace(/চুড়মার/g, 'চুরমার');
  x = x.replace(/চুড়ান্ত/g, 'চূড়ান্ত');
  x = x.replace(/চূষ্য/g, 'চোষ্য');
  x = x.replace(/চৌচিড়/g, 'চৌচির');
  x = x.replace(/ছাকনি/g, 'ছাঁকনি');
  x = x.replace(/ ছাকা/g, ' ছাঁকা');
  x = x.replace(/ছাত্রীবাস/g, 'ছাত্রীনিবাস');
  x = x.replace(/ছোওয়া/g, 'ছোঁয়া');
  x = x.replace(/ছোকড়া/g, 'ছোকরা');
  x = x.replace(/ছোটখাট /g, 'ছোটোখাটো ');
  x = x.replace(/ছোটাছোটি/g, 'ছোটাছুটি');
  x = x.replace(/জংগল/g, 'জঙ্গল');
  x = x.replace(/জগত/g, 'জগৎ');
  x = x.replace(/জঘণ্য/g, 'জঘন্য');
  x = x.replace(/জটীল/g, 'জটিল');
  x = x.replace(/জবানবন্দী/g, 'জবানবন্দি');
  x = x.replace(/জরুরী/g, 'জরুরি');
  x = x.replace(/জাগরুক/g, 'জাগরূক');
  x = x.replace(/জাতিয়/g, 'জাতীয়');
  x = x.replace(/জাতী /g, 'জাতি ');
  x = x.replace(/জাতীয়করন/g, 'জাতীয়করণ');
  x = x.replace(/জানুয়ারী/g, 'জানুয়ারি');
  x = x.replace(/জিনিষ/g, 'জিনিস');
  x = x.replace(/জীবীকা/g, 'জীবিকা');
  x = x.replace(/জেষ্ঠ্য/g, 'জ্যেষ্ঠ');
  x = x.replace(/জৈষ্ঠ্য/g, 'জ্যৈষ্ঠ');
  x = x.replace(/জ্বরাজীর্ণ/g, 'জরাজীর্ণ');
  x = x.replace(/টাকশাল/g, 'টাঁকশাল');
  x = x.replace(/টেঁকসই/g, 'টেকসই');
  x = x.replace(/ডাইনী/g, 'ডাইনি');
  x = x.replace(/তক্ষুণি/g, 'তক্ষুনি');
  x = x.replace(/তছরূপ/g, 'তছরুপ');
  x = x.replace(/তড়িত/g, 'তড়িৎ');
  x = x.replace(/ততক্ষণাৎ/g, 'তৎক্ষণাৎ');
  x = x.replace(/ততধিক/g, 'ততোধিক');
  x = x.replace(/তত্তজ্ঞান/g, 'তত্ত্বজ্ঞান');
  x = x.replace(/তত্তাবদায়ক/g, 'তত্ত্বাবধায়ক');
  x = x.replace(/তত্তাবধান/g, 'তত্ত্বাবধান');
  x = x.replace(/তদসংক্রান্ত/g, 'তৎসংক্রান্ত');
  x = x.replace(/তদানুসারে/g, 'তদনুসারে');
  x = x.replace(/তদ্রুপ/g, 'তদ্রূপ');
  x = x.replace(/তফাত/g, 'তফাৎ');
  x = x.replace(/তরংগ/g, 'তরঙ্গ');
  x = x.replace(/তরান্বিত/g, 'ত্বরান্বিত');
  x = x.replace(/তর্জনি/g, 'তর্জনী');
  x = x.replace(/তষ্কর/g, 'তস্কর');
  x = x.replace(/তাঁতী/g, 'তাঁতি');
  x = x.replace(/তাবত/g, 'তাবৎ');
  x = x.replace(/তিতীক্ষা/g, 'তিতিক্ষা');
  x = x.replace(/তিরষ্কার/g, 'তিরস্কার');
  x = x.replace(/ত্বরিৎ/g, 'ত্বরিত');
  x = x.replace(/ত্যজ্য/g, 'ত্যাজ্য');
  x = x.replace(/ত্রান/g, 'ত্রাণ');
  x = x.replace(/ত্রিভূজ/g, 'ত্রিভুজ');
  x = x.replace(/তৎবিষয়ক/g, 'তদ্বিষয়ক');
  x = x.replace(/থুত্থুরে/g, 'থুত্থুড়ে');
  x = x.replace(/দক্ষিন/g, 'দক্ষিণ');
  x = x.replace(/দণ্ডবত/g, 'দণ্ডবৎ');
  x = x.replace(/দরকারী/g, 'দরকারি');
  x = x.replace(/দরুণ/g, 'দরুন');
  x = x.replace(/দারিদ্রতা/g, 'দরিদ্রতা, দারিদ্র');
  x = x.replace(/দারুন/g, 'দারুণ');
  x = x.replace(/দিকভ্রান্ত/g, 'দিগভ্রান্ত');
  x = x.replace(/দিক্ষা/g, 'দীক্ষা');
  x = x.replace(/দিঘী/g, 'দিঘি');
  x = x.replace(/দীর্ঘসূত্রিতা/g, 'দীর্ঘসূত্রতা');
  x = x.replace(/দুতাবাস/g, 'দূতাবাস');
  x = x.replace(/দুরবীক্ষন/g, 'দূরবীক্ষণ');
  x = x.replace(/দুরাবস্থা/g, 'দুরবস্থা');
  x = x.replace(/দুষ /g, 'দোষ ');
  x = x.replace(/দুষ্কৃতীকারী/g, 'দুষ্কৃতকারী');
  x = x.replace(/দূরবীক্ষন/g, 'দূরবীক্ষণ');
  x = x.replace(/দূরবীণ/g, 'দূরবীন');
  x = x.replace(/দূরারোগ্য/g, 'দুরারোগ্য');
  x = x.replace(/দূরুহ/g, 'দুরূহ');
  x = x.replace(/দূর্গ/g, 'দুর্গ');
  x = x.replace(/দৃঢ়করণ/g, 'দৃঢ়ীকরণ');
  x = x.replace(/দৃষ্টিকোন/g, 'দৃষ্টিকোণ');
  x = x.replace(/দৃষ্ঠিভঙ্গি/g, 'দৃষ্টিভঙ্গি');
  x = x.replace(/দেদীপ্যমাণ/g, 'দেদীপ্যমান');
  x = x.replace(/দেরী/g, 'দেরি');
  x = x.replace(/দৈনতা/g, 'দীনতা, দৈন্য');
  x = x.replace(/দোষনীয়/g, 'দূষণীয়');
  x = x.replace(/দৌরাত্ম/g, 'দৌরাত্ম্য');
  x = x.replace(/দ্বন্দ/g, 'দ্বন্দ্ব');
  x = x.replace(/দ্বিতীয়তঃ/g, 'দ্বিতীয়ত');
  x = x.replace(/ধজা/g, 'ধ্বজা');
  x = x.replace(/ধরণ/g, 'ধরন');
  x = x.replace(/ধাধা/g, 'ধাঁধা');
  x = x.replace(/ধারন/g, 'ধারণ');
  x = x.replace(/ধারনা/g, 'ধারণা');
  x = x.replace(/ধুমপান/g, 'ধূমপান');
  x = x.replace(/ধুর্ত/g, 'ধূর্ত');
  x = x.replace(/ধুলি/g, 'ধূলি');
  x = x.replace(/ধুসর/g, 'ধূসর');
  x = x.replace(/ধূলা/g, 'ধুলা');
  x = x.replace(/ধ্বনী/g, 'ধ্বনি');
  x = x.replace(/ধ্বস/g, 'ধ্স');
  x = x.replace(/ধ্বস্তাধ্বস্তি/g, 'ধ্স্তাধস্তি');
  x = x.replace(/নচেত/g, 'নচেৎ');
  x = x.replace(/নচ্ছাড়/g, 'নচ্ছাড়');
  x = x.replace(/নবীণ/g, 'নবীন');
  x = x.replace(/নমষ্কার/g, 'নমস্কার');
  x = x.replace(/নিক্কন/g, 'নিক্বণ');
  x = x.replace(/নিন্দ্যনীয়/g, 'নিন্দনীয়');
  x = x.replace(/নিরব/g, 'নীরব');
  x = x.replace(/নিরস /g, 'নীরস ');
  x = x.replace(/নিরুপন/g, 'নিরূপণ');
  x = x.replace(/নিরোগ/g, 'নীরোগ');
  x = x.replace(/নির্দোষী/g, 'নির্দোষ');
  x = x.replace(/নির্ধনী/g, 'নির্ধন');
  x = x.replace(/নির্নয়/g, 'নির্ণয়');
  x = x.replace(/নিস্কাশন/g, 'নিষ্কাশন');
  x = x.replace(/নিস্প্রভ/g, 'নিষ্প্রভ');
  x = x.replace(/নিস্প্রয়োজন/g, 'নিষ্প্রয়োজন');
  x = x.replace(/নিহারীকা/g, 'নীহারিকা');
  x = x.replace(/নীচে/g, 'নিচে');
  x = x.replace(/নীজ/g, 'নিজ');
  x = x.replace(/নীরলস/g, 'নিরলস');
  x = x.replace(/নূন্যতম/g, 'ন্যূনতম');
  x = x.replace(/নৃসংশ/g, 'নৃশংস');
  x = x.replace(/নৈশব্দ্য/g, 'নৈঃশব্দ্য');
  x = x.replace(/ন্যয়/g, 'ন্যায়');
  x = x.replace(/ন্যয্য/g, 'ন্যায্য');
  x = x.replace(/পংক/g, 'পঙ্ক');
  x = x.replace(/পংক্তি/g, 'পঙক্তি');
  x = x.replace(/পক্ক/g, 'পক্ব');
  x = x.replace(/পড়শী/g, 'পড়শি');
  x = x.replace(/পড়াশুনা/g, 'পড়াশোনা');
  x = x.replace(/পথমধ্যে/g, 'পথিমধ্যে');
  x = x.replace(/পথিকৃত/g, 'পথিকৃৎ');
  x = x.replace(/পন্য /g, 'পণ্য ');
  x = x.replace(/পরবর্তীতে /g, 'পরবর্তীকালে ');
  x = x.replace(/পরমানু/g, 'পরমাণু');
  x = x.replace(/পরষ্পর/g, 'পরস্পর');
  x = x.replace(/পরাস্থ/g, 'পরাস্ত');
  x = x.replace(/পরিনাম/g, 'পরিণাম');
  x = x.replace(/পরিবহণ/g, 'পরিবহন');
  x = x.replace(/পরিমান/g, 'পরিমাণ');
  x = x.replace(/পরিষ্ফুট/g, 'পরিস্ফুট');
  x = x.replace(/পরিস্কার/g, 'পরিষ্কার');
  x = x.replace(/পশ্চাদপট/g, 'পশ্চাৎপট');
  x = x.replace(/পশ্চাদপদ/g, 'পশ্চাৎপদ');
  x = x.replace(/পশ্চাৎগামী/g, 'পশ্চাদগামী');
  x = x.replace(/পশ্চাৎভূমি/g, 'পশ্চাদভূমি');
  x = x.replace(/পারদর্শীতা/g, 'পারদর্শিতা');
  x = x.replace(/পারমানবিক/g, 'পারমাণবিক');
  x = x.replace(/পার্বন/g, 'পার্বণ');
  x = x.replace(/পালংক/g, 'পালঙ্ক');
  x = x.replace(/পাষান/g, 'পাষাণ');
  x = x.replace(/পিচাশ/g, 'পিশাচ');
  x = x.replace(/পিঠস্থান/g, 'পীঠস্থান');
  x = x.replace(/পিপিলিকা/g, 'পিপীলিকা');
  x = x.replace(/পুংখানুপুংখ/g, 'পুঙ্খানুপুঙ্খ');
  x = x.replace(/পুজা/g, 'পূজা');
  x = x.replace(/পুণবিবেচনা/g, 'পুনর্বিবেচনা');
  x = x.replace(/পুন্য/g, 'পুণ্য');
  x = x.replace(/পুরষ্কার/g, 'পুরস্কার');
  x = x.replace(/পুর্ন/g, 'পূর্ণ');
  x = x.replace(/পুস্করিনী/g, 'পুষ্করিণী');
  x = x.replace(/পূজো/g, 'পুজো');
  x = x.replace(/পূবালী/g, 'পুবালি');
  x = x.replace(/পূর্ণগঠন/g, 'পুনর্গঠন');
  x = x.replace(/পৈত্রিক/g, 'পৈতৃক');
  x = x.replace(/পোষাক/g, 'পোশাক');
  x = x.replace(/পৌনঃপৌনিক/g, 'পৌনঃপুনিক');
  x = x.replace(/পৌরহিত্য/g, 'পৌরোহিত্য');
  x = x.replace(/প্রজ্জলন/g, 'প্রজ্বলন');
  x = x.replace(/প্রজ্জলিত/g, 'প্রজ্বলিত');
  x = x.replace(/প্রণয়ণ/g, 'প্রণয়ন');
  x = x.replace(/প্রতিকুল/g, 'প্রতিকূল');
  x = x.replace(/প্রতিযোগীতা/g, 'প্রতিযোগিতা');
  x = x.replace(/প্রত্যয়ণ/g, 'প্রত্যায়ন');
  x = x.replace(/প্রথমতঃ/g, 'প্রথমত');
  x = x.replace(/প্রধানতঃ/g, 'প্রধানত');
  x = x.replace(/প্রনালী/g, 'প্রণালী');
  x = x.replace(/প্রনিধান/g, 'প্রণিধান');
  x = x.replace(/প্রবাহমাণ/g, 'প্রবাহমান');
  x = x.replace(/প্রবীন/g, 'প্রবীণ');
  x = x.replace(/প্রভুত/g, 'প্রভূত');
  x = x.replace(/প্রয়ান/g, 'প্রয়াণ');
  x = x.replace(/প্রশস্থ/g, 'প্রশস্ত');
  x = x.replace(/প্রসংগ/g, 'প্রসঙ্গ');
  x = x.replace(/প্রসংশা/g, 'প্রশংসা');
  x = x.replace(/প্রাংগন/g, 'প্রাঙ্গণ');
  x = x.replace(/প্রাণপন/g, 'প্রাণপণ');
  x = x.replace(/প্রানীজগৎ/g, 'প্রাণীজগৎ');
  x = x.replace(/প্রানীবিদ্যা/g, 'প্রাণীবিদ্যা');
  x = x.replace(/ফলতঃ/g, 'ফলত');
  x = x.replace(/ফলপ্রসু/g, 'ফলপ্রসূ');
  x = x.replace(/ফাল্গুণ/g, 'ফাল্গুন');
  x = x.replace(/ফেব্রুয়ারী/g, 'ফেব্রুয়ারি');
  x = x.replace(/বংগ/g, 'বঙ্গ');
  x = x.replace(/বনষ্পতি/g, 'বনস্পতি');
  x = x.replace(/বনিক/g, 'বণিক');
  x = x.replace(/বন্টন/g, 'বণ্টন');
  x = x.replace(/বন্দোপাধ্যায়/g, 'বন্দ্যোপাধ্যায়');
  x = x.replace(/বয়ষ্ক/g, 'বয়স্ক');
  x = x.replace(/বয়োকনিষ্ট/g, 'বয়ঃকনিষ্ঠ');
  x = x.replace(/বর্ণালী/g, 'বর্ণালি');
  x = x.replace(/বর্ত্তমান/g, 'বর্তমান');
  x = x.replace(/বর্ষন/g, 'বর্ষণ');
  x = x.replace(/বাঁশী/g, 'বাঁশি');
  x = x.replace(/বাকদত্তা/g, 'বাগদত্তা');
  x = x.replace(/বাঞ্চনীয়/g, 'বাঞ্ছনীয়');
  x = x.replace(/বাঞ্চা/g, 'বাঞ্ছা');
  x = x.replace(/ বাড়ী/g, ' বাড়ি');
  x = x.replace(/বাদুর/g, 'বাদুড়');
  x = x.replace(/বানিজ্য/g, 'বাণিজ্য');
  x = x.replace(/বিদ্যান/g, 'বিদ্বান');
  x = x.replace(/বিপদগ্রস্থ/g, 'বিপদগ্রস্ত');
  x = x.replace(/বিপদজনক/g, 'বিপজ্জনক');
  x = x.replace(/বিপনন/g, 'বিপণন');
  x = x.replace(/বিপনী/g, 'বিপণী');
  x = x.replace(/বিশ্বস্থ/g, 'বিশ্বস্ত');
  x = x.replace(/বিষ্ফোরণ/g, 'বিস্ফোরণ');
  x = x.replace(/বীভৎস্য/g, 'বীভৎস');
  x = x.replace(/বুদ্ধিজীবি/g, 'বুদ্ধজীবী');
//  x = x.replace(/বেশী/g, 'বেশি'); দ্ব্যর্থক শব্দ, দুটো ভিন্ন অর্থ প্রকাশ করে
  x = x.replace(/ব্যকরণ/g, 'ব্যাকরণ');
  x = x.replace(/ব্যপক/g, 'ব্যাপক');
  x = x.replace(/ব্যহত/g, 'ব্যাহত');
  x = x.replace(/ব্যাতিক্রম/g, 'ব্যতিক্রম');
  x = x.replace(/ব্যাথা/g, 'ব্যথা');
  x = x.replace(/ব্যাপি/g, 'ব্যাপী');
  x = x.replace(/ব্যাবধান/g, 'ব্যবধান');
  x = x.replace(/ব্যাবহার/g, 'ব্যবহার');
  x = x.replace(/ব্যাভিচার/g, 'ব্যভিচার');
  x = x.replace(/ব্যায় /g, 'ব্যয় ');
  x = x.replace(/ব্যার্থ/g, 'ব্যর্থ');
  x = x.replace(/ব্যুৎপত্তি/g, 'বুৎপত্তি');
  x = x.replace(/ব্রাক্ষণ/g, 'ব্রাহ্মণ');
  x = x.replace(/ভংগ/g, 'ভঙ্গ');
  x = x.replace(/ভংগী/g, 'ভঙ্গি');
  x = x.replace(/ভংগুর/g, 'ভঙ্গুর');
  x = x.replace(/ভনিতা/g, 'ভণিতা');
  x = x.replace(/ভবিষ্যৎবাণী/g, 'ভবিষ্যদ্বাণী');
  x = x.replace(/ভরনপোষণ/g, 'ভরণপোষণ');
  x = x.replace(/ভষ্ম/g, 'ভস্ম');
  x = x.replace(/ভাষ্কর/g, 'ভাস্কর');
  x = x.replace(/ভিখারী/g, 'ভিখারি');
  x = x.replace(/ভিরু/g, 'ভীরু');
  x = x.replace(/ভীড়/g, 'ভিড়');
  x = x.replace(/ভুড়ি/g, 'ভুঁড়ি');
  x = x.replace(/ভুতপূর্ব/g, 'ভূতপূর্ব');
  x = x.replace(/ভুমিষ্ট/g, 'ভূমিষ্ঠ');
  x = x.replace(/ভুয়সী/g, 'ভূয়সী');
  x = x.replace(/ভুরিভোজন/g, 'ভূরিভোজন');
  x = x.replace(/ভূবন/g, 'ভুবন');
  x = x.replace(/ভূয়া/g, 'ভুয়া');
  x = x.replace(/ভূল/g, 'ভুল');
  x = x.replace(/ভৌগলিক/g, 'ভৌগোলিক');
  x = x.replace(/ভ্রমন/g, 'ভ্রমণ');
  x = x.replace(/ভ্রাম্যমান/g, 'ভ্রাম্যমাণ');
  x = x.replace(/ভ্রুক্ষেপ/g, 'ভ্রূক্ষেপ');
  x = x.replace(/মজুরী/g, 'মজুরি');
  x = x.replace(/মণিষা/g, 'মনীষা');
  x = x.replace(/মনমালিন্য/g, 'মনোমালিন্য');
  x = x.replace(/মনিষী/g, 'মনীষী');
  x = x.replace(/মন্ত্রনালয়/g, 'মন্ত্রণালয়');
  x = x.replace(/ময়ুর/g, 'ময়ূর');
  x = x.replace(/মরুদ্যান/g, 'মরূদ্যান');
  x = x.replace(/মশারী/g, 'মশারি');
  x = x.replace(/মস্তিস্ক/g, 'মস্তিষ্ক');
  x = x.replace(/মহত্ত/g, 'মহত্ত্ব');
  x = x.replace(/মহামতী/g, 'মহামতি');
  x = x.replace(/মহামারি/g, 'মহামারী');
  x = x.replace(/মহিয়সী/g, 'মহীয়সী');
  x = x.replace(/ মাংশ /g, ' মাংস ');
  x = x.replace(/মানিক্য/g, 'মানিক');
  x = x.replace(/মাসী/g, 'মাসি');
  x = x.replace(/মাহাত্ম/g, 'মাহাত্ম্য');
  x = x.replace(/মিতালী/g, 'মিতালি');
  x = x.replace(/মিমাংসা/g, 'মীমাংসা');
  x = x.replace(/মিরিচিকা/g, 'মরীচিকা');
  x = x.replace(/মুখস্ত/g, 'মুখস্থ');
  x = x.replace(/মুঢ়/g, 'মূঢ়');
  x = x.replace(/মুত্র/g, 'মূত্র');
  x = x.replace(/মুদ্রন/g, 'মুদ্রণ');
  x = x.replace(/মুমুর্ষ/g, 'মুমূর্ষু');
  x = x.replace(/মুর্খ/g, 'মূর্খ');
  x = x.replace(/মুর্তি/g, 'মূর্তি');
  x = x.replace(/মুর্ধন্য/g, 'মূর্ধন্য');
  x = x.replace(/মুষ্ঠি/g, 'মুষ্টি');
  x = x.replace(/মুহুর্ত/g, 'মুহূর্ত');
  x = x.replace(/মুহূর্মুহু/g, 'মুহুর্মুহু');
  x = x.replace(/মুহ্যবান/g, 'মোহ্যমান/মুহ্যমান');
  x = x.replace(/মূখ্য/g, 'মুখ্য');
  x = x.replace(/মূল্যায়ণ/g, 'মূল্যায়ন');
  x = x.replace(/মৃয়মান/g, 'ম্রিয়মাণ');
  x = x.replace(/মোটামোটি/g, 'মোটামুটি');
  x = x.replace(/মৌনতা/g, 'মৌন');
  x = x.replace(/যক্ষা/g, 'যক্ষ্মা');
  x = x.replace(/যথেষ্ঠ/g, 'যথেষ্ট');
  x = x.replace(/যদ্যাপি/g, 'যদ্যপি');
  x = x.replace(/যন্ত্রনা/g, 'যন্ত্রণা');
  x = x.replace(/যাদুঘর/g, 'জাদুঘর');
  x = x.replace(/রংগ/g, 'রঙ্গ');
  x = x.replace(/রঙিণ/g, 'রঙিন');
  x = x.replace(/রঙ্গিণ/g, 'রঙ্গিন');
  x = x.replace(/রথি/g, 'রথী');
  x = x.replace(/রসায়ণ/g, 'রসায়ন');
  x = x.replace(/রাংগামাটি/g, 'রাঙ্গামাটি');
  x = x.replace(/রামায়ন/g, 'রামায়ণ');
  x = x.replace(/রাষ্ট্রিয়/g, 'রাষ্ট্রীয়');
  x = x.replace(/রূপায়ন/g, 'রূপায়ণ');
  x = x.replace(/রোপন/g, 'রোপণ');
  x = x.replace(/লংকা/g, 'লঙ্কা');
  x = x.replace(/লংঘন/g, 'লঙ্ঘন');
  x = x.replace(/লক্ষী/g, 'লক্ষ্মী');
  x = x.replace(/লক্ষ্যণীয়/g, 'লক্ষণীয়');
  x = x.replace(/লঘুকরণ/g, 'লঘূকরণ');
  x = x.replace(/লজ্জাষ্কর/g, 'লজ্জাকর');
  x = x.replace(/লবন/g, 'লবণ');
  x = x.replace(/লাইব্রেরী/g, 'লাইব্রেরি');
  x = x.replace(/লাবন্য/g, 'লাবণ্য');
  x = x.replace(/শংকর/g, 'শঙ্কর');
  x = x.replace(/শংকা/g, 'শঙ্কা');
  x = x.replace(/শংকিত/g, 'শঙ্কিত');
  x = x.replace(/শরীক/g, 'শরিক');
  x = x.replace(/শশাংক/g, 'শশাঙ্ক');
  x = x.replace(/শশুর/g, 'শ্বশুর');
  x = x.replace(/শশ্মান/g, 'শ্মশান');
  x = x.replace(/শাড়ী/g, 'শাড়ি');
  x = x.replace(/শাষণ/g, 'শাসন');
  x = x.replace(/শারীরীক/g, 'শারীরিক');
  x = x.replace(/শাশুড়ী/g, 'শাশুড়ি');
  x = x.replace(/শিক্ষাঙ্গন/g, 'শিক্ষাঙ্গণ');
  x = x.replace(/শিরচ্ছেদ/g, 'শিরশ্ছেদ');
  x = x.replace(/শিরধার্য/g, 'শিরোধার্য');
  x = x.replace(/শিরনাম/g, 'শিরোনাম');
  x = x.replace(/শিরমণি/g, 'শিরোমণি');
  x = x.replace(/শুভাকাংখী/g, 'শুভাকাঙ্খী');
  x = x.replace(/শুশ্রুষা/g, 'শুশ্রূষা');
  x = x.replace(/শূণ্য/g, 'শুন্য');
  x = x.replace(/শৃংখলা/g, 'শৃঙ্খলা');
  x = x.replace(/শ্বাশত/g, 'শাশ্বত');
  x = x.replace(/শ্রদ্ধাঞ্জলী/g, 'শ্রদ্ধাঞ্জলি');
  x = x.replace(/শ্রদ্ধাভাজনীয়/g, 'শ্রদ্ধাভাজন');
  x = x.replace(/শ্রদ্ধাষ্পদ/g, 'শ্রদ্ধাস্পদ');
  x = x.replace(/শ্রমজীবি/g, 'শ্রমজীবী');
  x = x.replace(/শ্রাবন/g, 'শ্রাবণ');
  x = x.replace(/শ্রীমতি/g, 'শ্রীমতী');
  x = x.replace(/শ্রেষ্ট/g, 'শ্রেষ্ঠ');
  x = x.replace(/ষষ্ট/g, 'ষষ্ঠ');
  x = x.replace(/ষষ্ঠদশ/g, 'ষোড়শ');
  x = x.replace(/সংগা/g, 'সংজ্ঞা');
  x = x.replace(/সংগী/g, 'সঙ্গী');
  x = x.replace(/সখ/g, 'শখ');
  x = x.replace(/সতীন/g, 'সতিন');
  x = x.replace(/সত্বেও/g, 'সত্ত্বেও');
  x = x.replace(/সত্যয়িত/g, 'সত্যায়িত');
  x = x.replace(/সদ্যজাত/g, 'সদ্যোজাত');
  x = x.replace(/সদ্যস্নাত/g, 'সদ্যঃস্নাত');
  x = x.replace(/সনাক্ত/g, 'শনাক্ত');
  x = x.replace(/সন্মান/g, 'সম্মান');
  x = x.replace(/সন্মানীত/g, 'সম্মানীত');
  x = x.replace(/সন্মুখ/g, 'সম্মুখ');
  x = x.replace(/সন্মেলন/g, 'সম্মেলন');
  x = x.replace(/সমীচিন/g, 'সমীচীন');
  x = x.replace(/সম্বরণ/g, 'সংবরণ');
  x = x.replace(/সম্বর্ধনা/g, 'সংবর্ধনা');
  x = x.replace(/সম্বলিত/g, 'সংবলিত');
  x = x.replace(/সরকারী/g, 'সরকারি');
  x = x.replace(/সরণী/g, 'সরণি');
  x = x.replace(/সরনী/g, 'সরণি');
  x = x.replace(/সর্বাঙ্গীন/g, 'সর্বাঙ্গীণ');
  x = x.replace(/সলজ্জিত/g, 'সলজ্জ');
  x = x.replace(/সশংকিত/g, 'সশঙ্ক');
  x = x.replace(/সহকারি/g, 'সহকারী');
  x = x.replace(/সাংগ/g, 'সাঙ্গ');
  x = x.replace(/সাক্ষাতকার/g, 'সাক্ষাৎকার');
  x = x.replace(/সাড়াশী/g, 'সাঁড়াশি');
  x = x.replace(/সাধারন/g, 'সাধারণ');
  x = x.replace(/সান্তনা/g, 'সান্ত্বনা');
  x = x.replace(/সামগ্রীক/g, 'সামগ্রিক');
  x = x.replace(/সৌখিন/g, 'শৌখিন');
  x = x.replace(/স্বচ্ছল/g, 'সচ্ছল');
  x = x.replace(/স্বরস্বতী/g, 'সরস্বতী');
  x = x.replace(/স্বস্ত্রীক/g, 'সস্ত্রীক');
  x = x.replace(/স্বাতন্ত্র/g, 'স্বাতন্ত্র্য');
  x = x.replace(/স্বাধীকার/g, 'স্বাধিকার');
  x = x.replace(/স্বায়ত্ত্বশাসন/g, 'স্বায়ত্তশাসন');
  x = x.replace(/স্মরন/g, 'স্মরণ');
  x = x.replace(/স্রোতঃস্বতী/g, 'স্রোতস্বতী');
  x = x.replace(/হীনমন্যতা/g, 'হীনম্মন্যতা');
  x = x.replace(/হৃদপিণ্ড/g, 'হৃৎপিণ্ড');
  x = x.replace(/হৃদস্পন্দন/g, 'হৃৎস্পন্দন');
  x = x.replace(/হৃৎরোগ/g, 'হৃদরোগ');


function ohc_US_slash_dates_to_mdy()
//added by YAHYA
{
    x = x.replace(/আঘাট/g, 'আঘাত');
//ranges
    x = x.replace(/সাংঘাটিক/g, 'সাংঘাতিক');
ohc_regex(/([^-\d/:\.])@MM\/@DD\/@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@MM\/@DD\/@YYNN(?=[^-–/\w&])/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon2 @Day2, @Year2");
    x = x.replace(/আবিস্কার/g, 'আবিষ্কার');
ohc_regex(/([^-\d/:\.])@MM\.@DD\.@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@MM\.@DD\.@YYNN(?=[^-–/\w&])/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon2 @Day2, @Year2");
    x = x.replace(/আনুসংগিক/g, 'আনুষঙ্গিক');
ohc_regex(/(\| ?)@MM\/@DD\/@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@MM\/@DD\/@YYNN(?=\s*\|)/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon2 @Day2, @Year2");
    x = x.replace(/শীততাপ/g, 'শীতাতপ');
ohc_regex(/(\| ?)@MM\.@DD\.@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@MM\.@DD\.@YYNN(?=\s*\|)/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon @Day2, @Year2");
    x = x.replace(/অতীষ্ঠ/g, 'অতিষ্ঠ');
    x = x.replace(/আষ্ফালন/g, 'আস্ফালন');
    x = x.replace(/আয়ত্ব/g, 'আয়ত্ত');
    x = x.replace(/ঐশ্চর্য/g, 'ঐশ্বর্য');
    x = x.replace(/ক্রুটি/g, 'ত্রুটি');
    x = x.replace(/অংকণ/g, 'অঙ্কন');
    x = x.replace(/কোরাণ/g, 'কোরান');
    x = x.replace(/খরছ/g, 'খরচ');
    x = x.replace(/আরো /g, 'আরও ');
    x = x.replace(/বাহ্যিক লিঙ্ক/g, 'বহিঃসংযোগ');
    x = x.replace(/বাহ্যিক লিংক/g, 'বহিঃসংযোগ');


// resolvable ambiguous date formats
//নতুন শব্দ এই লাইনের উপরে যোগ হবে।
ohc_regex(/([^-\d/:\.])@MM\/@DD\/@YYNN(?=[^-–/\w&])/gi, '$1@Month @Day, @YYYY');
ohc_regex(/([^-\d/:\.])@MM\.@DD\.@YYNN(?=[^-–/\w&])/gi, '$1@Month @Day, @YYYY');
ohc_regex(/([^-\d/:\.])@MM[-–]@DD[-–]@YYNN(?=[^-–/\w&])/gi, '$1@Month @Day, @YYYY');
ohc_regex(/(\| ?)@MM\/@DD\/@YYNN(?=\s*\|)/gi, '$1@Month @Day, @YYYY');
ohc_regex(/(\| ?)@MM\.@DD\.@YYNN(?=\s*\|)/gi, '$1@Month @Day, @YYYY');
// ohc_regex(/(\| ?)@MM[-–]@DD[-–]@YYNN(?=\s*\|)/gi, '$1@Month @Day, @YYYY');
}
function ohc_UK_slash_dates_to_dmy()
{
//ranges
ohc_regex(/([^-\d/:\.])@DD\/@MM\/@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@DD\/@MM\/@YYNN(?=[^-–/\w&])/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");
ohc_regex(/([^-\d/:\.])@DD\.@MM\.@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@DD\.@MM\.@YYNN(?=[^-–/\w&])/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");
ohc_regex(/(\| ?)@DD\/@MM\/@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@DD\/@MM\/@YYNN(?=\s*\|)/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");
ohc_regex(/(\| ?)@DD\.@MM\.@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@DD\.@MM\.@YYNN(?=\s*\|)/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");


// resolvable ambiguous date formats
    // wiki formatting
ohc_regex(/([^-\d/:\.])@DD\/@MM\/@YYNN(?=[^-–/\w&])/gi, '$1@Day @Month @YYYY');
  x = x.replace(/। </g, '।<');
ohc_regex(/([^-\d/:\.])@DD\.@MM\.@YYNN(?=[^-–/\w&])/gi, '$1@Day @Month @YYYY');
  x = x.replace(/! -/g, '!-');
ohc_regex(/([^-\d/:\.])@DD[-–]@MM[-–]@YYNN(?=[^-–/\w&])/gi, '$1@Day @Month @YYYY');
  x = x.replace(/“।/g, '।”');
ohc_regex(/(\| ?)@DD\/@MM\/@YYNN(?=\s*\|)/gi, '$1@Day @Month @YYYY');
  x = x.replace(/। ”/g, '।”');
ohc_regex(/(\| ?)@DD\.@MM\.@YYNN(?=\s*\|)/gi, '$1@Day @Month @YYYY');
  x = x.replace(/! \|/g, '!|');
// ohc_regex(/(\| ?)@DD[-–]@MM[-–]@YYNN(?=\s*\|)/gi, '$1@Day @Month @YYYY');
  x = x.replace(/! }/g, '!}');
}
  x = x.replace(/! !/g, '!!');
  x = x.replace(/। "/g, '।" ');
  x = x.replace(/! "/g, '!" ');


function ohc_remove_leading_zeroes()
// some more formatting for bnwiki
{
  x = x.replace(/ <ref>/g, '<ref>');
ohc_regex(/(\D[^\w\/])@Month\s@ZD@th?,?\s@YYYY(?=\W\D)/gi, "$1@LMonth @Day, @LYear");
  x = x.replace(/ <ref /g, '<ref ');
ohc_regex(/(\D[^\w\/])@Month\s@ZD@th?(?=\W\D)/gi, "$1@LMonth @Day");
  x = x.replace(/{{reflist/g, '{{সূত্র তালিকা');
ohc_regex(/(\D[^\w\/])@ZD@th?\s@Month\s@YYYY(?=\W\D)/gi, "$1@Day @LMonth @LYear");
  x = x.replace(/{{Reflist/g, '{{সূত্র তালিকা');
ohc_regex(/(\D[^\w\/])@ZD@th?\s@Month(?=\W\D)/gi, "$1@Day @LMonth");
  x = x.replace(/<\/references>/g, '{{সূত্র তালিকা}}');
}


function ohc_delink_dates()
  // fixing error
{
//add missing space between wikilinks
regex(/(\]\])(\[\[)/gi, '$1 $2');  //remove (?!file:) to ensure a space between all links
// rem redundant quote marks and parentheses
regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\'\'\'([^|}\[\]]*)\'\'\'(?=\s*[|}])/gi, "$1$2");
regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\'\'([^|}\[\]]*)\'\'(?=\s*[|}])/gi, "$1$2");
regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\"([^|}\[\]]*)\"(?=\s*[|}])/gi, "$1$2");
regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\(([^|}\[\]]*)\)(?=\s*[|}])/gi, "$1$2");


//delink unpiped dates
    x = x.replace(/বৈচিত্র/g, 'বৈচিত্র্য');
//delink full dates
    x = x.replace(/বৈচিত্র্য্য/g, 'বৈচিত্র্য');
ohc_regex(/\[\[@Day[\s_](?:of[\s_])?@Month(?:\]\]\s?\[\[\| )@YYYY\]\]/gi, "@Day @LMonth @YYYY");
    x = x.replace(/তামুল/g, 'তামোল');
ohc_regex(/\[\[@Month (?:the\s)?@Day(?:\]\],? \[\[|, )@YYYY\]\]/gi, "@LMonth @Day, @YYYY");
    x = x.replace(/ফূর্তি/g, 'স্ফূর্তি');
    x = x.replace(/স্ফুর্তি/g, 'স্ফূর্তি');
    x = x.replace(/স্স্স্ফূর্তি/g, 'স্ফূর্তি');
    x = x.replace(/স্স্ফূর্তি/g, 'স্ফূর্তি');
    x = x.replace(/নৈশব্দ/g, 'নৈঃশব্দ্য');
    x = x.replace(/নৈঃশব্দ/g, 'নৈঃশব্দ্য');
    x = x.replace(/নৈঃশব্দ্য্য্য/g, 'নৈঃশব্দ্য');
    x = x.replace(/নৈঃশব্দ্য্য/g, 'নৈঃশব্দ্য');
    x = x.replace(/নৈঃশব্দ্যতা/g, 'নৈঃশব্দ্য');
    x = x.replace(/বৈশিষ্ট্য্য/g, 'বৈশিষ্ট্য');
    x = x.replace(/নিরালস্য্য/g, 'নিরালস্য');
    x = x.replace(/দৈর্ঘ্য্য/g, 'দৈর্ঘ্য');
    x = x.replace(/কেচাঁ/g, 'কেঁচা');
    x = x.replace(/কেঁচাঁ/g, 'কেঁচা');
    x = x.replace(/অন্তঃসত্বা/g, 'অন্তঃসত্ত্বা');
    x = x.replace(/অন্তসত্তা/g, 'অন্তঃসত্ত্বা');
    x = x.replace(/অন্তঃসত্তা/g, 'অন্তঃসত্ত্বা');
    x = x.replace(/ন্দ্ব্ব/g, 'ন্দ্ব');
    x = x.replace(/ধ্ব্ব/g, 'ধ্ব');
    x = x.replace(/ত্ব্ব/g, 'ত্ব');
    x = x.replace(/ঁঁ/g, 'ঁ');
    x = x.replace(/মাননি\u09DF/g, 'মাননী\u09DF');
    x = x.replace(/মাননিয়/g, 'মাননীয়');
    x = x.replace(/বিদূষী/g, 'বিদুষী');
    x = x.replace(/বয়সীয়াল/g, 'বয়সিয়াল');
    x = x.replace(/রিস্কা/g, 'রিক্সা');
    //x = x.replace(/অনসুয়া/g, 'অনসূয়া');
    x = x.replace(/অনুসূয়া/g, 'অনসুয়া');
    x = x.replace(/মুমূর্ষুু/g, 'মুমূর্ষু');
    x = x.replace(/নিরবিচ্ছিন্ন/g, 'নিরবচ্ছিন্ন');
    x = x.replace(/ণ্ধ/g, 'ন্ধ');


//delink yyyy-mm-dd dates
    // removes double space between anything
ohc_regex(/\[\[@YYYY(?:\]\]-\[\[|-)@MM-@DD\]\]/gi, "@YYYY-@MM-@DD");
    x = x.replace(/ /g, ' '); // makes double space into one
ohc_regex(/@YYYY-\[\[@MM-@DD\]\]/gi, "@YYYY-@MM-@DD");
    x = x.replace(/   /g, ' '); //makes triple space into one
 
    x = x.replace(/য়/g, '\u09DF');


//underscore and nbsp in linked dates
  $('#wpTextbox1').val(x);
ohc_regex(/\[\[@DD@th?(?:\s|_|&nbsp;)@Month\]\]/gi, "@Day @LMonth");
    customAlert('বানান শুদ্ধি সম্পন্ন!','3000');
ohc_regex(/\[\[@Month(?:\s|_|&nbsp;)@DD@th?\]\]@th?/gi, "@LMonth @Day"); //consolidated regex with flexible removal of ordinal simple date
                        }
ohc_regex(/\[\[@Day @Month\]\]/gi, "@Day @LMonth");
                    }
ohc_regex(/\[\[@Month @YYYY\]\]/gi, "@LMonth @YYYY");
                }
ohc_regex(/\[\[@YYYY\]\]/gi, "@YYYY");
            }
        });


//remove leading zero and links from linked date
    };
ohc_regex(/\[\[@Month(?:[ _]|&nbsp;)@ZD@th\]\]/gi, "@LMonth @Day");
   
ohc_regex(/\[\[@ZD@th(?:[ _]|&nbsp;)@Month\]\]/gi, "@Day @LMonth");
/* Check if view is in edit mode and that the required modules are available. Then, customize the toolbar … */
    if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) !== -1) {
        $.when(mw.loader.using('ext.wikiEditor'), $.ready)
            .then(bnSpellChecker);
    }
});


// remove nowrap template from dm and md dates
ohc_regex(/(date[ ]*=[ ]*)\{\{(?:j|no ?(?:break|wrap))\|(?:@DD(?:[ _]|&nbsp;)@Month)( @yyyy|)\}\}/gi, '$1@DD @LMonth$2');
ohc_regex(/(date[ ]*=[ ]*)\{\{(?:j|no ?(?:break|wrap))\|(?:@Month(?:[ _]|&nbsp;)@DD)( @yyyy|)\}\}/gi, '$1@LMonth @DD$2');
//delink single dm or 'dth the m'
ohc_regex(/(?:the\s)?\[\[@Day@th?[\s_](?:of[\s_])?@Month\]\]/gi, "@Day @LMonth");
//delink single md or 'm the dth'
ohc_regex(/\[\[@Month[\s_](?:the[\s_])?@Day@th?\]\](?=\W)/gi, "@LMonth @Day");


//month+day piped
// This script aligns dates into one of two formats allowed by [[WP:MOSNUM]].
ohc_regex(/\[\[(?:@dd@th?[\s_](?:of[\s_])?@month|@month[\s_]@dd@th?)\|((?:@month |)@day)@th?\]\]/gi, "$1");
// PLEASE READ THE DOCUMENTATION at [[User:Ohconfucius/script/MOSNUM dates]] (click on the link above) before using.
ohc_regex(/\[\[(?:@dd@th?[\s_](?:of[\s_])?@month|@month[\s_]@dd@th?)\|@Day@th?[\s_](@month|)\]\]/gi, "@Day $1");


// ohc_regex(/\[\[@month @dd(?:#[^|]+|)\|([^|\]]+)@th?\]\]/gi, "$1");
// Feedback and constructive criticism are welcome
// ohc_regex(/\[\[@dd @month(?:#[^|]+|)\|([^|\]]+)@th?\]\]/gi, "$1");
ohc_regex(/\[\[@month @yyyy(?:#[^|]+|)\|([^|\]]+)\]\]/gi, "$1");


//month+day+year pseudo-ISO dates
/**
ohc_regex(/\[\[@Month @DD\|\d\d-\d\d\]\]-(?:\[\[)?(?:@yyyy[^|]*\|)?@YYYY(?:\]\])/gi, "@Day @LMonth @YYYY");
* TemplateScript adds configurable templates and scripts to the sidebar, and adds an example regex editor.
ohc_regex(/\[\[@DD\s@Month\|\d\d-\d\d\]\]-(?:\[\[)?(?:@yyyy[^|]*\|)?@YYYY(?:\]\])/gi, "@Day @LMonth @YYYY");
* @see https://meta.wikimedia.org/wiki/TemplateScript
 
*/
//'[[month day|xxXxx]]Xyyyy ' to 'month day, year'
// <pre>
ohc_regex(/\[\[@Month\s@Day\|@dd.@dd\]\].@YYYY/gi, "@LMonth @Day, @YYYY");
if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) !== -1) {
//'[[day month|xxXxx]]Xyyyy' to 'day month year'
$.ajax(
ohc_regex(/\[\[@Day\s@Month\|@dd.@dd\]\].@YYYY/gi, "@Day @LMonth @YYYY");
'//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js',
 
{dataType: 'script', cache: true}
// century
).done(function () {
regex(/\[\[((?:first|second|third|(?:four|fif|six|seven|eigh|nin|ten|eleven|twelf|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twentie)th|twenty[\s\-]first[\s\-])centur(?:y|ies)(?:\s(?:AD|BC|CE|BCE))?)\]\]/gi, '$1');
$.when(
regex(/\[\[(?:first|second|third|(?:four|fif|six|seven|eigh|nin|ten|eleven|twelf|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twentie)th|twenty[\s\-]first)[\s\-_]centur(?:y|ies)(?:\s(?:AD|BC|CE|BCE))?\|([^\]]{1,30})\]\]/gi, '$1');
mw.loader.using(['mediawiki.util']),
regex(/\[\[(\d{1,2}(?:st|[nr]d|th))[\s\-_](centur(?:y|ies))(\s(?:AD|BC|CE|BCE)|)\]\]/gi, '$1 $2$3');
$.ajax('//en.wikipedia.org/w/index.php?title=User:Ohconfucius/script/MOSNUM_utils.js&action=raw&ctype=text/javascript',
ohc_regex(/\[\[\d{1,2}@th[\s\-_]centur(?:y|ies)(?:\s(?:AD|BC|CE|BCE)|)\|([^\]]{1,30})\]\]/gi, '$1');
{dataType: 'script', cache: true}),
$.ready
).done(function () {
var add = function() {
            return mw.util.addPortletLink.apply(mw.util, arguments);
};


// months
$(add('p-tb', '#', 'DATES to dmy', 'dmy-unitfixer', 'Align all dates to dmy', '', '')).click(ohc_all_to_dmy_driver);
ohc_regex(/\[\[@Month\]\]/gi, "@LMonth");
$(add('p-tb', '#', 'DATES to mdy', 'mdy-unitfixer', 'Align all dates to mdy', '', '')).click(ohc_all_to_mdy_driver);
ohc_regex(/\[\[@FullMonth\|([^\]]{1,30})\]\]/gi, "$1");
// $(add('p-tb', '#', 'Expand ref dates', 't-expandref', 'Expand month names within refs', '', '')).click(ohc_expand_ref_dates_driver);
// $(add('p-tb', '#', 'Expand all dates', 't-expandall', 'Expand month names throughout', '', '')).click(ohc_expand_all_dates_driver);
$( add('p-tb', '#', 'US-slash dates', 't-US', 'US-slash', '', '') ).click(ohc_US_slash_dates_driver);
$( add('p-tb', '#', 'UK-slash dates', 't-UK', 'UK-slash', '', '') ).click(ohc_UK_slash_dates_driver);
});
});
}


// decades and years
function ohc_fix_unambiguous_dates()
regex(/(\d{1,3}0)[‘`´’′]?s/g, '$1s');
{
regex(/\[\[(\d{1,3}0)\'?s\]\]/g, '$1s');
// resolvable ambiguous date formats
regex(/\[\[\d{1,3}0\'?s?\|([^\]]{1,30})\]\]/g, '$1');
// UK style
regex(/\[\[(\d{1,3}0)\'?(s)?\s(AD|BC|CE|BCE)\]\]/gi, '$1$2 $3');
ohc_regex(/([^-\w/:\.])@DD\.@MM\.@YYYY(?=[^-–/\w&])/gi, "$1@Day @Month @YYYY", function(d) {
regex(/\[\[(\d{1,4}[\s_]?)(AD|BC|CE|BCE)\]\]/gi, '$1$2');
if (d.d == d.m) return true;
regex(/\[\[(AD|BC|CE|BCE)([\s_]?)(\d{1,4})\]\]/gi, '$1$2$3');
if (d.d > 12) return true;
ohc_regex(/([-])\[\[\s?@yyyy\s?\|\s?(\d{2,4})\s?\]\]/gi, '$1$2'); //piped year
return false;
regex(/\[\[([12]\d{3}|[1-9]\d{0,2})\]\]/gi, '$1');
});
regex(/\[\[\d{1,3}0\'?s?\s(?:AD|BC|CE|BCE)\|([^\]]{1,30})\]\]/gi, '$1');
ohc_regex(/([^-\w/:\.])@DD\/@MM\/@YYYY(?=[^-–/\w&])/gi, "$1@Day @Month @YYYY", function(d) {
regex(/\[\[\d{1,3}0\'?s?\s\(decade\)\|([^\]]{1,30})\]\]/gi, '$1');
if (d.d == d.m) return true;
if (d.d > 12) return true;
return false;
});


//month+year
// US style
//Identify surprise or 'Easter egg' diversions linking month+years to year articles. Turn them into month+year links to be dealt with below
ohc_regex(/([^-\w/:\.])@MM\.@DD\.@YYYY(?=[^-–/\w&])/gi, "$1@Month @Day, @YYYY", function(d) {
ohc_regex(/\[\[@yyyy in[^|\]]+\|@Day @Month @YYYY\]\]/gi, "@Day @LMonth @YYYY");
if (d.d > 12) return true;
ohc_regex(/\[\[@yyyy in[^|\]]+\|@Month @Day,? @YYYY\]\]/gi, "@LMonth @Day, @YYYY");
return false;
ohc_regex(/\[\[@yyyy#[^|\]]+\|(@month\s|)(@yyyy)\]\]/gi, "$1$2");
});
ohc_regex(/\[\[@yyyy#[^|\]]+\|(@month|@yyyy)\]\]/gi, "$1");
ohc_regex(/([^-\w/:\.])@MM\/@DD\/@YYYY(?=[^-–/\w&])/gi, "$1@Month @Day, @YYYY", function(d) {
ohc_regex(/\[\[(@month\s@yyyy)\]\]/gi, "$1");
if (d.d > 12) return true;
ohc_regex(/\[\[@month\s@yyyy\|([^\]]{1,30})\]\]/gi, "$1");
return false;
ohc_regex(/\[\[(?:List of |)Bollywood films of @yyyy\|@YYYY\]\](?= [^\[]{2}^B)/gi, "@YYYY");
});
 
ohc_regex(/(\[\[@yyyy[^|\]]+\|@yyyy)(\]\])( season)/gi, "$1$3$2");
 
//removed piped years when in full date (excepting disambiguated parentheses - updated 24/2/2012)
// ohc_regex(/\[\[[^|\]\(\)]{1,32}\|@YYYY\]\]/gi, '@Year'); // 23/6/2021 – disabled delinking "other" year-in articles
 
//Identify surprise or 'Easter egg' diversions linking months to year or "year in" articles.
ohc_regex(/\[\[\d{1,4}#[^|\]]+\|@Month\]\]/gi, "@LMonth");
ohc_regex(/\[\[@yyyy \w[^|\]]{3,12}\|@Year\]\]/gi, '@Year');
 
// month and day piped
ohc_regex(/\[\[@month[\s_]@day\|@MM-@DD\]\]/gi, "@MM-@DD");
ohc_regex(/\[\[@month[\s_]@day\|([^\]]{1,30})\]\]/gi, "$1");
ohc_regex(/\[\[@day(?:\s|_|@th )(?:of[\s_]|)?@month\|([^\]]{1,30})\]\]/gi, "$1");
 
//years piped
regex(/\[\[\d{1,4}\|([^\]]{1,30})\]\]/gi, '$1');
}
}


function ohc_fix_common_errors()
function ohc_US_slash_dates_to_mdy()
{
{
ohc_regex(/(\d)<sup>@th<\/sup>/gi, '$1th');
//ranges
// remove dashbot comment from dates
ohc_regex(/([^-\d/:\.])@MM\/@DD\/@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@MM\/@DD\/@YYNN(?=[^-–/\w&])/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon2 @Day2, @Year2");
regex(/<!-- ?DASHBot ?-->/gi, '');
ohc_regex(/([^-\d/:\.])@MM\.@DD\.@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@MM\.@DD\.@YYNN(?=[^-–/\w&])/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon2 @Day2, @Year2");
ohc_regex(/(\|\s*(?:date|year)\s*=)\s*c(?:irca|a\.)?\s?((?:@day |)@month @year)(?=[\s\n]*[<|}])/gi, '$1c. $2'); //add space
ohc_regex(/(\| ?)@MM\/@DD\/@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@MM\/@DD\/@YYNN(?=\s*\|)/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon2 @Day2, @Year2");
//common cs1 errors
ohc_regex(/(\| ?)@MM\.@DD\.@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@MM\.@DD\.@YYNN(?=\s*\|)/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon @Day2, @Year2");
regex(/(\|\s*(?:date|year)\s*=)\s*(1[7-9]\d|20[0-1])\?(?=[\s\n]*[<|}])/gi, '$1c. $20');
 
regex(/(\|\s*(?:date|year)\s*=\s*(1[7-9])\d{2})[-–](\d{2})(?=[\s\n]*[<|}])/gi, '$1–$2$3');  
// resolvable ambiguous date formats
// regex(/(\|\s*(?:date|year)\s*=\s*(20)[0-1]\d)[-–]([0-2]\d)(?=[\s\n]*[<|}])/gi, '$1–$2$3');
ohc_regex(/([^-\d/:\.])@MM\/@DD\/@YYNN(?=[^-–/\w&])/gi, '$1@Month @Day, @YYYY');
regex(/(\|\s*(?:date|year)\s*=\s*)@YYYY\s*[-–/]\s*@YYYY(?=[\s\n]*[<|}])/gi, '$1@YYYY1–@YYYY2'); //common cs1 error
ohc_regex(/([^-\d/:\.])@MM\.@DD\.@YYNN(?=[^-–/\w&])/gi, '$1@Month @Day, @YYYY');
regex(/(\|\s*(?:date)\s*=)\s*s(pring|ummer),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1S$2 $3'); //common cs1 error
ohc_regex(/([^-\d/:\.])@MM[-]@DD[-]@YYNN(?=[^-–/\w&])/gi, '$1@Month @Day, @YYYY');
regex(/(\|\s*(?:date)\s*=)\s*a(utumn),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1A$2 $3'); //common cs1 error
ohc_regex(/(\| ?)@MM\/@DD\/@YYNN(?=\s*\|)/gi, '$1@Month @Day, @YYYY');
regex(/(\|\s*(?:date)\s*=)\s*f(all),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1F$2 $3'); //common cs1 error
ohc_regex(/(\| ?)@MM\.@DD\.@YYNN(?=\s*\|)/gi, '$1@Month @Day, @YYYY');
regex(/(\|\s*(?:date)\s*=)\s*w(inter),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1W$2 $3'); //common cs1 error
// ohc_regex(/(\| ?)@MM[-–]@DD[-–]@YYNN(?=\s*\|)/gi, '$1@Month @Day, @YYYY');
ohc_regex(/(\|\s*access-?date\s*=)\s*(@month @year)(?=[\s\n]*[<|}])/gi, '$11 $2'); //common cs1 error
}
// ohc_regex(/(\|\s*date\s*=\s*)@year\?(?=[\s\n]*[<|}])/gi, '$1@Year'); //common cs1 error
// ohc_regex(/(\|\s*(?:date|year)\s*=)\s*@year\?(?=[\s\n]*[<|}])/gi, '$1c. @Year'); //common cs1 error
function ohc_UK_slash_dates_to_dmy()
// ohc_regex(/(\|\s*(?:date|year)\s*=)\s*(@month @year)\?(?=[\s\n]*[<|}])/gi, '$1c. $2'); //common cs1 error
{
ohc_regex(/(\|\s*access-?date\s*=)\s*@month @day, (1[7-9]\d{2}|2000)(?=[\s\n]*[<|}])/gi, '$1'); //rem access date before Wikipedia (জানুয়ারি 2001)
//ranges
ohc_regex(/(\|\s*access-?date\s*=)\s*@day @month.? (1[7-9]\d{2}|2000)(?=[\s\n]*[<|}])/gi, '$1'); //rem access date before Wikipedia (জানুয়ারি 2001)
ohc_regex(/([^-\d/:\.])@DD\/@MM\/@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@DD\/@MM\/@YYNN(?=[^-–/\w&])/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");
ohc_regex(/(\|\s*access-?date\s*=)\s*31( (?:এপ্রিল|জুন|সেপ্টেম্বর|নভেম্বর) @year)(?=[\s\n]*[<|}])/gi, '$130$2'); //rem nonsense access date (short months)
ohc_regex(/([^-\d/:\.])@DD\.@MM\.@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@DD\.@MM\.@YYNN(?=[^-–/\w&])/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");
ohc_regex(/(\|\s*access-?date\s*=)\s*29( ফেব্রুয়ারি (?:200[1235679]|201[1345789]))(?=[\s\n]*[<|}])/gi, '$128$2'); //rem nonsense access date 29 ফেব্রুয়ারি (non-leap year)
ohc_regex(/(\| ?)@DD\/@MM\/@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@DD\/@MM\/@YYNN(?=\s*\|)/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");
ohc_regex(/(\|\s*access-?date\s*=)\s*(?:3[01])( ফেব্রুয়ারি @yyyy)(?=[\s\n]*[<|}])/gi, '$128$2'); //rem nonsense access dates ফেব্রুয়ারি
ohc_regex(/(\| ?)@DD\.@MM\.@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@DD\.@MM\.@YYNN(?=\s*\|)/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");
regex(/(\|\s*access-?date\s*=)\s*(\d{4})(?=[\s\n]*[<|}])/gi, ''); //common cs1 error
//month+day+year pseudo-ISO dates
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*@dd)-@Mon-@YYYY/gi, "$1 @FullMonth @YYYY");
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@YYYY-@DD-@Mon/gi, "$1 @DD @FullMonth @YYYY");


regex(/(\|\s*(?:date|year)\s*=)\s*(?:(?:date |)unknown|(?:not? |non-|un)date[ds])(?=[\s\n]*[<|}])/gi, '$1n.d.'); //common cs1 error
// resolvable ambiguous date formats
regex(/(\|\s*(?:date|year)\s*=)\s*n\.?d(?=[\s\n]*[<|}])/gi, '$1n.d.'); //common cs1 error
ohc_regex(/([^-\d/:\.])@DD\/@MM\/@YYNN(?=[^-–/\w&])/gi, '$1@Day @Month @YYYY');
regex(/(\|\s*)year(\s*=\s*)(?=n\.?d\.)(?=[\s\n]*[<|}])/gi, '$1date$2'); //common cs1 error
ohc_regex(/([^-\d/:\.])@DD\.@MM\.@YYNN(?=[^-–/\w&])/gi, '$1@Day @Month @YYYY');
 
ohc_regex(/([^-\d/:\.])@DD[-–]@MM[-]@YYNN(?=[^-–/\w&])/gi, '$1@Day @Month @YYYY');
  // remove parasitic metadata -  days of the week/descriptives
ohc_regex(/(\| ?)@DD\/@MM\/@YYNN(?=\s*\|)/gi, '$1@Day @Month @YYYY');
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:[^|}\d]*|)@Day\s+@Month\s+@YYYY((?:[a-z]\b|)\s?)[^|<}]*(?=[\s\n]*[<|}])/gi, "$1@Day @Month @YYYY$2"); //rem negate "<", "hyphens" "dashes" 26/6/2020
ohc_regex(/(\| ?)@DD\.@MM\.@YYNN(?=\s*\|)/gi, '$1@Day @Month @YYYY');
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)[^|}]*@Month\s+@Day,\s+@YYYY((?:[a-z]\b|)\s?)[^|<}]*(?=[\s\n]*[<|}])/gi, "$1@Month @Day, @YYYY$2"); //rem negate "<", "hyphens" "dashes" 26/6/2020
// ohc_regex(/(\| ?)@DD[-]@MM[-–]@YYNN(?=\s*\|)/gi, '$1@Day @Month @YYYY');
// ohc_regex(/(\|\s*date\s*=\s*)(?:[^|}–<]*\D|)@Day\s+@Month\s+@YYYY ?– ?@Day\s+@Month\s+@YYYY[^|}–<]*(?=[\s\n]*[<|}])/gi, "$1@Day1 @Mon1 @Year1 – @Day2 @Mon2 @Year2");
}
// ohc_regex(/(\|\s*date\s*=\s*)[^|}–<]*@Month\s+@Day,\s+@YYYY ?– ?@Month @Day, @YYYY[^|}–<]*(?=[\s\n]*[<|}])/gi, "$1@Mon1 @Day1, @Year1 – @@Mon2 Day2, @Year2");
// regex(/(\|\s*author\s*=\s*)(?:posted|published)(?: by\b| on\b|)[\s:](?=\w)/gi, "$1");
// regex(/(\|\s*(?:date|archive-?date|access-?date|author|year)\s*=\s*)(?:accessed|retrieved|entered|posted|published|(?:last |)updated?|©)(?: by\b| on\b|)[\s:]*(?=\w)/gi, "$1");
regex(/(\|\s*(?:author|first|last)\s*=\s*)(?:by\b|on\b)[\s:]*(?=\w)/gi, "$1");
regex(/(\|\s*(?:date|archive-?date|access-?date|author|first|last)\s*=\s*)(?:(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)day,?)\s/gi, "$1");
regex(/(\|\s*(?:date|archive-?date|access-?date|author|first|last)\s*=\s*)(?:Mon|Tues?|Wed|Thur?|Fri|Sat)[\.,]?\s/gi, "$1"); //<!-- rem "Sun" - false positives -->


  // remove deprecated parameters (|day= and |month)
function ohc_remove_leading_zeroes()
ohc_regex(/(\|\s*)day(?:\s*=\s*)@DD ?\| ?month(?:\s*=\s*)@Month ?\| ?year(?:\s*=\s*)@YYYY(?=[|}\s])/gi, '$1date=@Day @Month @Year');  
{
ohc_regex(/(\|\s*)year(?:\s*=\s*)@YYYY ?\| ?month(?:\s*=\s*)@Month ?\| ?day(?:\s*=\s*)@DD(?=[|}\s])/gi, '$1date=@Month @Day, @Year');  
ohc_regex(/(\D[^\w\/])@Month\s@ZD@th?,?\s@YYYY(?=\W\D)/gi, "$1@LMonth @Day, @LYear");
ohc_regex(/(\D[^\w\/])@Month\s@ZD@th?(?=\W\D)/gi, "$1@LMonth @Day");
// typos
ohc_regex(/(\D[^\w\/])@ZD@th?\s@Month\s@YYYY(?=\W\D)/gi, "$1@Day @LMonth @LYear");
ohc_regex(/(date *= *)@Day @Month ?@th/gi, '$1@Day @Month');  
ohc_regex(/(\D[^\w\/])@ZD@th?\s@Month(?=\W\D)/gi, "$1@Day @LMonth");
ohc_regex(/(date *= *)@Day @Month\w(?= \d{3,4})/gi, '$1@Day @Month');  
}


ohc_regex(/(date *= *(?:[12]?\d|30|31) )(জানুয়ারি|Febr)[\w ]?[aur]{3,4}\w{0,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2uary');  
function ohc_delink_dates()
ohc_regex(/(date *= *(?:[12]?\d|30|31) )J[anu]{3,5}r\w{0,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জানুয়ারি');
{
ohc_regex(/(date *= *(?:[12]?\d) )Febua?r\w{0,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1ফেব্রুয়ারি');
//add missing space between wikilinks
ohc_regex(/(date *= *(?:[12]?\d|30|31) )M\w{2,3}ch(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1মার্চ');
regex(/(\]\])(\[\[)/gi, '$1 $2'); //remove (?!file:) to ensure a space between all links
ohc_regex(/(date *= *(?:[12]?\d|30) )A[bpv\[]\w{2,3}l\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1এপ্রিল');
ohc_regex(/(date *= *(?:[12]?\d|30|31) )Ma[tui](?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1মে');  
// rem redundant quote marks and parentheses
ohc_regex(/(date *= *(?:[12]?\d|30) )J\wn\w(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন');
regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\'\'\'([^|}\[\]]*)\'\'\'(?=\s*[|}])/gi, "$1$2");
ohc_regex(/(date *= *(?:[12]?\d|30) )J\w{1,2}e(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন');
regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\'\'([^|}\[\]]*)\'\'(?=\s*[|}])/gi, "$1$2");
ohc_regex(/(date *= *(?:[12]?\d|30|31) )জুলাই\w{1,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুলাই');  
regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\"([^|}\[\]]*)\"(?=\s*[|}])/gi, "$1$2");
ohc_regex(/(date *= *(?:[12]?\d|30|31) )A[oug]{2,3}\w{1,4}t(?:\w|us)?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1আগষ্ট');
regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\(([^|}\[\]]*)\)(?=\s*[|}])/gi, "$1$2");
ohc_regex(/(date *= *(?:[12]?\d|30|31) )(সেপ্টেম্বর|নভেম্বর|ডিসেম্বর)\w{2,4}b[er]{1,2}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2ember');
ohc_regex(/(date *= *(?:[12]?\d|30) )S\w{0,2}p[ \[]?\w{2,5}[er]{2,3}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1সেপ্টেম্বর');  
ohc_regex(/(date *= *(?:[12]?\d|30|31) )O\w{0,2}t\w{1,3}[er]{2,3}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1অক্টোবর');
ohc_regex(/(date *= *(?:[12]?\d|30) )[MN]\w{1,2}[bv] ?\w{1,3}b[er]{1,2}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1নভেম্বর');
ohc_regex(/(date *= *(?:[12]?\d|30|31) )D[ie]?[cs] ?\w{1,4}b[er]{1,2}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1ডিসেম্বর');  


ohc_regex(/(date *= *)@Month\w(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1@Month'); //rem stray digit at the end of year string
//delink unpiped dates
//delink full dates
ohc_regex(/(date *= *)(জানুয়ারি|Febr)[\w ]?[aur]{3,4}\w{0,2}(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2uary');
ohc_regex(/\[\[@Day[\s_](?:of[\s_])?@Month(?:\]\]\s?\[\[\| )@YYYY\]\]/gi, "@Day @LMonth @YYYY");
ohc_regex(/(date *= *)J[anu]{3,5}r\w{0,2}(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জানুয়ারি');
ohc_regex(/\[\[@Month (?:the\s)?@Day(?:\]\],? \[\[|, )@YYYY\]\]/gi, "@LMonth @Day, @YYYY");
ohc_regex(/(date *= *)Febua?r\w{0,2}(?=(?: (?:[12]?\d),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1ফেব্রুয়ারি');
ohc_regex(/(date *= *)M\w{2,3}ch(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1মার্চ');
ohc_regex(/(date *= *)A[bpv\[]\w{2,3}l\w?(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1এপ্রিল');
ohc_regex(/(date *= *)Ma[tui](?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1মে');
ohc_regex(/(date *= *)J\wn\w(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন');  
ohc_regex(/(date *= *)J\w{1,2}e(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন');
ohc_regex(/(date *= *)জুলাই\w{1,2}(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুলাই');
ohc_regex(/(date *= *)A[oug]{2,3}\w{1,4}t(?:\w|us)?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1আগষ্ট');
ohc_regex(/(date *= *)(সেপ্টেম্বর|নভেম্বর|ডিসেম্বর)\w{2,4}b[er]{1,2}\w?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2ember');
ohc_regex(/(date *= *)S\w{0,2}p[ \[]?\w{2,5}[er]{2,3}\w?(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1সেপ্টেম্বর');
ohc_regex(/(date *= *)O\w{0,2}t\w{1,3}[er]{2,3}\w?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1অক্টোবর');
ohc_regex(/(date *= *)[MN]\w{1,2}[bv] ?\w{1,3}b[er]{1,2}\w?(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1নভেম্বর');
ohc_regex(/(date *= *)D[ie]?[cs] ?\w{1,4}b[er]{1,2}\w?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1ডিসেম্বর');  


//insert comma to separate date from army unit
//delink yyyy-mm-dd dates
ohc_regex(/@FullMonth ((?:the |)\d\d*@th (?:Air(?:borne|)|Arm(?:ou?red|y)|Artillery|Battalion|Brigade|Co(?:mpan|)y|Division|Fleet|Group|Infantry|Land|Panzer|Regiment|Squadron|Sqn)\b)/g, "@Month, $1");
ohc_regex(/\[\[@YYYY(?:\]\]-\[\[|-)@MM-@DD\]\]/gi, "@YYYY-@MM-@DD");
ohc_regex(/@YYYY-\[\[@MM-@DD\]\]/gi, "@YYYY-@MM-@DD");


// remove parasitic metadata - time
//underscore and nbsp in linked dates
ohc_regex(/(\|\s*\w*date\s*=\s*@yyyy-@mm-@dd)\s?(?:T[0-2]\d:[0-5]\d:[0-5]\d(?:\s*|&nbsp;|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|Z))(?=\s*[|}])/g, "$1");
ohc_regex(/\[\[@DD@th?(?:\s|_|&nbsp;)@Month\]\]/gi, "@Day @LMonth");
ohc_regex(/(\|\s*\w*date\s*=\s*@month @day,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1");
ohc_regex(/\[\[@Month(?:\s|_|&nbsp;)@DD@th?\]\]@th?/gi, "@LMonth @Day"); //consolidated regex with flexible removal of ordinal simple date
ohc_regex(/(\|\s*\w*date\s*=\s*@day @month,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1");
ohc_regex(/\[\[@Day @Month\]\]/gi, "@Day @LMonth");
ohc_regex(/(\|\s*\w*date\s*=\s*\w[\w\s]+@month @day,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1");
ohc_regex(/\[\[@Month @YYYY\]\]/gi, "@LMonth @YYYY");
ohc_regex(/(\|\s*\w*date\s*=\s*\w[\w\s]+@day @month,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1");
ohc_regex(/\[\[@YYYY\]\]/gi, "@YYYY");
ohc_regex(/(\|\s*\w*date\s*=[^:|}]*)\s?(?:T?[0-2]\d:[0-5]\d:[0-5]\d(?:\s*|&nbsp;|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|Z))/g, "$1");


// add back spaces or comma or remove other single artefact after date string
//remove leading zero and links from linked date
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:on |)@Day\s{,2}@Month\s{,2}@YYYY[^a-z{}]?(?=\s*[|}\n])/gi, "$1@Day @Month @YYYY$2");
ohc_regex(/\[\[@Month(?:[ _]|&nbsp;)@ZD@th\]\]/gi, "@LMonth @Day");
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:on |)@Month\s{,2}@Day,?\s{,2}@YYYY[^a-z{}]?(?=\s*[|}\n])/gi, "$1@Month @Day, @YYYY$2");
ohc_regex(/\[\[@ZD@th(?:[ _]|&nbsp;)@Month\]\]/gi, "@Day @LMonth");
//long-hand palliative for observed failure to insert spaces
ohc_regex(/(\|\s*(?:archive|access|air)-?date\s*=\s*)(?:on |)([0-2]?\d|30|31)\s*(জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগষ্ট|সেপ্টেম্বর|অক্টোবর|নভেম্বর|ডিসেম্বর)\s*((?:19\d|20[0-1])\d\s?)[^|{}\s<>]*(?=\s*[|}])/gi, "$1$2 $3 $4");
// ohc_regex(/(\|\s*(?:publication|)-?date\s*=\s*)(?:on |)@Day\s*@Month\s*@YYYY([a-z]\s?|\s?)\w*[^|{}<>]*(?=[|}])/gi, "$1@Day @Month @YYYY$2");
// ohc_regex(/(\|\s*(?:publication|)-?date\s*=\s*)(?:on |)@Month\s*@Day,\s*@YYYY([a-z]\s?|\s?)\w*[^|{}<>]*(?=[|}])/gi, "$1@Month @Day, @YYYY$2");


//remove extraneous bracket //from Batty
// remove nowrap template from dm and md dates
ohc_regex(/{{(\s*[Cc]it(?:e|ation))([^}]+)(\s*\|\s*(?:archive-?|access-?|publication-?)?date\s*=\s*)([\w\s-]+)\](?=\s*[\|}<])/gi, '{{$1$2$3$4');
ohc_regex(/(date[ ]*=[ ]*)\{\{(?:j|no ?(?:break|wrap))\|(?:@DD(?:[ _]|&nbsp;)@Month)( @yyyy|)\}\}/gi, '$1@DD @LMonth$2');
ohc_regex(/(date[ ]*=[ ]*)\{\{(?:j|no ?(?:break|wrap))\|(?:@Month(?:[ _]|&nbsp;)@DD)( @yyyy|)\}\}/gi, '$1@LMonth @DD$2');
//delink single dm or 'dth the m'
ohc_regex(/(?:the\s)?\[\[@Day@th?[\s_](?:of[\s_])?@Month\]\]/gi, "@Day @LMonth");
//delink single md or 'm the dth'
ohc_regex(/\[\[@Month[\s_](?:the[\s_])?@Day@th?\]\](?=\W)/gi, "@LMonth @Day");


//fix bda template redirect
//month+day piped
// regex(/\{\{bda\|([^}]+)\}\}/gi, '{{birth date and age|$1}}');
ohc_regex(/\[\[(?:@dd@th?[\s_](?:of[\s_])?@month|@month[\s_]@dd@th?)\|((?:@month |)@day)@th?\]\]/gi, "$1");
// regex(/\{\{dda\|([^}]+)\}\}/gi, '{{death date and age|$1}}');
ohc_regex(/\[\[(?:@dd@th?[\s_](?:of[\s_])?@month|@month[\s_]@dd@th?)\|@Day@th?[\s_](@month|)\]\]/gi, "@Day $1");
 
// ohc_regex(/\[\[@month @dd(?:#[^|]+|)\|([^|\]]+)@th?\]\]/gi, "$1");
// ohc_regex(/\[\[@dd @month(?:#[^|]+|)\|([^|\]]+)@th?\]\]/gi, "$1");
ohc_regex(/\[\[@month @yyyy(?:#[^|]+|)\|([^|\]]+)\]\]/gi, "$1");


//zap redundant {{date}}, {{accessdate}} {{retrieved}}, {{monthname}} and {{#dateformat}}
//month+day+year pseudo-ISO dates
// regex(/({{(?:end|start)[-–]date)\|df=y(?:es|)/gi, "$1"); //rem deprecated parameter - disabled: doesn't work here, so ejected to the formatting script
ohc_regex(/\[\[@Month @DD\|\d\d-\d\d\]\]-(?:\[\[)?(?:@yyyy[^|]*\|)?@YYYY(?:\]\])/gi, "@Day @LMonth @YYYY");
ohc_regex(/{{#formatdate:@YYYY-@MM-@DD(?:[^\}]*)}}/gi, "@Day @Month @YYYY");
ohc_regex(/\[\[@DD\s@Month\|\d\d-\d\d\]\]-(?:\[\[)?(?:@yyyy[^|]*\|)?@YYYY(?:\]\])/gi, "@Day @LMonth @YYYY");
regex(/{{#formatdate:([^}]+)}}/gi, "$1");
regex(/\{\{#dateformat:([^}\|]+)(?:\|dmy|\|mdy)?\}\}/gi, '$1');
// ohc_regex(/(date[ ]*=[ ]*)\{\{(?:Start|End) ?date(?:\|df=y(?:es|)|)\|@YYYY\|@MM\|@DD(?:\|df=y(?:es|)|)\}\}/gi, '$1@Month @DD, @YYYY');  //stripping start/end template notes inside "|date=" parameter (line 72)
ohc_regex(/{{#formatdate:@YYYY-@MM-@DD(?:\|(?:[dmy]{3}|iso)|)}}/gi, "@Day @Month @YYYY");
ohc_regex(/\{\{date\|@YYYY-@MM-@DD\}\}/gi, "@Day @Month @YYYY");
ohc_regex(/\{\{date\|(@DD[\-\s]@Mon|@Mon[\-\s]@DD)\}\}/gi, "@Day @Month");
regex(/\{\{date\|([^}\|]+)(?:\|l?(?:[dmy]{3}|iso|none|link))?\}\}/gi, '$1');
ohc_regex(/[ ]*\{\{accessdate\|@YYYY-@MM-@DD[ ]*\}\}/gi, " Retrieved @YYYY-@MM-@DD");
ohc_regex(/[ ]*\{\{retrieved[ ]*\|[ ]accessdate=([\-\w, ]*)\}\}/gi, " Retrieved $1");
// ohc_regex(/(date[ ]*=[ ]*|\w{2,}[ ]*)\{\{(?:start|end).date[^|}]*(?:\|df=y(?:es|)|)\|@YYYY(?:\|df=y(?:es|)|)\}\}/gi, '$1@YYYY');  //stripping start/end template (disabling to placate Pigsonthewing)
// ohc_regex(/\{\{(?:Start|End) date(?:\|df=y(?:es|)|)\|@YYYY\|@MM\}\}/gi, '@Month @YYYY')  //stripping start/end template notes
// ohc_regex(/<!--(?:Use)? \{\{(?:Start|End) date\|@YYYY\|@MM\|@DD\}\} -->/gi, ''); //stripping start/end template notes
ohc_regex(/(\{\{MONTHNAME\|@MM\}\})/gi, "@Month")


//expand one and two-digit years in ranges
//'[[month day|xxXxx]]Xyyyy ' to 'month day, year'
regex(/(\()@Month @YYYY[-–]@Month @YYNN(\))/gi, '$1@Month1 @YYYY1 – @Month2 @YYYY2$2');
ohc_regex(/\[\[@Month\s@Day\|@dd.@dd\]\].@YYYY/gi, "@LMonth @Day, @YYYY");
regex(/(\(1[789])(\d)(1)[-–]([2-9]\))/gi, '$1$2$3–$2$4');
//'[[day month|xxXxx]]Xyyyy' to 'day month year'
regex(/(\(1[789])(\d)(2)[-–]([3-9]\))/gi, '$1$2$3–$2$4');
ohc_regex(/\[\[@Day\s@Month\|@dd.@dd\]\].@YYYY/gi, "@Day @LMonth @YYYY");
regex(/(\(1[789])(\d)(3)[-]([4-9]\))/gi, '$1$2$3–$2$4');
 
regex(/(\(1[789])(\d)(4)[-–]([5-9]\))/gi, '$1$2$3–$2$4');
// century
regex(/(\(1[789])(\d)(5)[-]([6-9]\))/gi, '$1$2$3–$2$4');
regex(/\[\[((?:first|second|third|(?:four|fif|six|seven|eigh|nin|ten|eleven|twelf|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twentie)th|twenty[\s\-]first[\s\-])centur(?:y|ies)(?:\s(?:AD|BC|CE|BCE))?)\]\]/gi, '$1');
regex(/(\(1[789])(\d)(6)[-–]([7-9]\))/gi, '$1$2$3–$2$4');
regex(/\[\[(?:first|second|third|(?:four|fif|six|seven|eigh|nin|ten|eleven|twelf|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twentie)th|twenty[\s\-]first)[\s\-_]centur(?:y|ies)(?:\s(?:AD|BC|CE|BCE))?\|([^\]]{1,30})\]\]/gi, '$1');
regex(/(\(1[789])(\d)(7)[-–]([8-9]\))/gi, '$1$2$3–$2$4');
regex(/\[\[(\d{1,2}(?:st|[nr]d|th))[\s\-_](centur(?:y|ies))(\s(?:AD|BC|CE|BCE)|)\]\]/gi, '$1 $2$3');
regex(/(\(1[789])(\d)(8)[-–](9\))/gi, '$1$2$3–$2$4');
ohc_regex(/\[\[\d{1,2}@th[\s\-_]centur(?:y|ies)(?:\s(?:AD|BC|CE|BCE)|)\|([^\]]{1,30})\]\]/gi, '$1');
regex(/(\(20)([01])(1)[-–]([2-9]\))/gi, '$1$2$3–$2$4');
regex(/(\(20)([01])(2)[-–]([3-9]\))/gi, '$1$2$3–$2$4');
regex(/(\(20)([01])(3)[-–]([4-9]\))/gi, '$1$2$3–$2$4');
regex(/(\(20)([01])(4)[-–]([5-9]\))/gi, '$1$2$3–$2$4');
regex(/(\(20)([01])(5)[-–]([6-9]\))/gi, '$1$2$3–$2$4');
regex(/(\(20)([01])(6)[-]([7-9]\))/gi, '$1$2$3–$2$4');
regex(/(\(20)([01])(7)[-–]([8-9]\))/gi, '$1$2$3–$2$4');
regex(/(\(20)([01])(8)[-–](9\))/gi, '$1$2$3–$2$4');


ohc_regex(/(\W)@DD@th?, @DD@th?((?:[ ]|&nbsp;)(?:and|&|to|or)(?:[ ]|&nbsp;))@DD@th?(?:\sof\s?)?([ ]|&nbsp;)@Month(?=\W)/gi, '$1@Day1, @Day2$2@Day3$3@LMonth');
// months
ohc_regex(/(\W)@DD@th?((?:[ ]|&nbsp;)(?:and|&|to|or)(?:[ ]|&nbsp;))@DD@th?(?:\sof\s?|)([ ]|&nbsp;)@Month(?=\W)/gi, '$1@Day1$2@Day2$3@LMonth');
ohc_regex(/\[\[@Month\]\]/gi, "@LMonth");
ohc_regex(/(\W)the @DD@th(?:\sof|)\s@Month,? @YYYY(?=\W\D)/g, '$1@Day @LMonth @YYYY');
ohc_regex(/\[\[@FullMonth\|([^\]]{1,30})\]\]/gi, "$1");
ohc_regex(/(\W)the @DD@th(?:\sof|)\s@Month(?=\W\D)/g, '$1@Day @LMonth');
ohc_regex(/(\W)@Day@th?(?:\sof|)([ _]|&nbsp;|{{(?:break|nbsp)}})@Month(?=[^|\]\w])/gi, '$1@Day$2@LMonth');
ohc_regex(/(\W)@Month\s(?:the\s)?@DD@th?,(?:\sthe\s)?(?: |&nbsp;)@DD@th?(\s(?:and|&|to|or)(?:[ _]|&nbsp;))(?:the\s)?@DD@th?(?=[^|\]\w])/gi, '$1@LMonth @Day1, @Day2$2@Day3');
ohc_regex(/(\W)(@month)\s(@day)((?:,\s@day){0,6}),?(\/|\s?[-–]\s?|\s(?:and|&|to|or)\s+?)@Day@th?(?:,?(?:[ _]|&nbsp;)|\sof\s)?(\d{3,4}\W\D)/gi, '$1$2 $3$4$5@Day, $6');
ohc_regex(/(\W)(@month)\s(@day)((?:,\s@day){0,6}),?(\/|\s?[-–]\s?|\s(?:and|&|to|or)\s+?)@Day@th?(?=\W\D)/gi, '$1$2 $3$4$5@Day');
ohc_regex(/(\W)@Month([ _]|&nbsp;|{{(?:break|nbsp)}})(?:the\s)?@DD@th?,? @Year/gi, '$1@LMonth$2@Day, @Year');
ohc_regex(/(\W)@Month @Day(?:\sof|,|)([ _]|&nbsp;|{{(?:break|nbsp)}})@Year(?=[^|\]\w])/gi, '$1@Month @Day,$2@Year');


// consolidating/amalgamating date fields
// decades and years
ohc_regex(/(\|[ ]*date[ ]*=[ ]*@day)\s*\|[ ]*month=[ ]*(@month)\s*\|[ ]*year=[ ]*(@yyyy[ ]*)(?=[|}\s])/gi, "$1 $2 $3");
regex(/(\d{1,3}0)[‘`´’′]?s/g, '$1s');
ohc_regex(/(\|[ ]*date[ ]*=[ ]*@day.?@month)\s*\|[ ]*year=[ ]*(@yyyy[ ]*)(?=[|}\s])/gi, "$1 $2");
regex(/\[\[(\d{1,3}0)\'?s\]\]/g, '$1s');
ohc_regex(/(\|[ ]*date[ ]*=[ ]*@month.?@day)\s*\|[ ]*year=[ ]*(@yyyy[ ]*)(?=[|}\s])/gi, "$1 $2");
regex(/\[\[\d{1,3}0\'?s?\|([^\]]{1,30})\]\]/g, '$1');
regex(/\[\[(\d{1,3}0)\'?(s)?\s(AD|BC|CE|BCE)\]\]/gi, '$1$2 $3');
regex(/\[\[(\d{1,4}[\s_]?)(AD|BC|CE|BCE)\]\]/gi, '$1$2');
regex(/\[\[(AD|BC|CE|BCE)([\s_]?)(\d{1,4})\]\]/gi, '$1$2$3');
ohc_regex(/([-–])\[\[\s?@yyyy\s?\|\s?(\d{2,4})\s?\]\]/gi, '$1$2'); //piped year
regex(/\[\[([12]\d{3}|[1-9]\d{0,2})\]\]/gi, '$1');
regex(/\[\[\d{1,3}0\'?s?\s(?:AD|BC|CE|BCE)\|([^\]]{1,30})\]\]/gi, '$1');
regex(/\[\[\d{1,3}0\'?s?\s\(decade\)\|([^\]]{1,30})\]\]/gi, '$1');


// eliminating dates and time placed in author parameter
//month+year
//removing artefacts from Indian news sites (TNN আগষ্ট 30, 2012, 05.46AM)
//Identify surprise or 'Easter egg' diversions linking month+years to year articles. Turn them into month+year links to be dealt with below
ohc_regex(/(\|\s*author\s*=\s*(?:[A-Z]{2,3}\b))(?:[^|}]*)\d{4}, [\d\.:]{4,5}(&nbsp;|)[AP]M IST(?=[ ]*\|)/g, '$1$2');
ohc_regex(/\[\[@yyyy in[^|\]]+\|@Day @Month @YYYY\]\]/gi, "@Day @LMonth @YYYY");
// ohc_regex(/(\|\s*author=(?:[^\[\]|{}]*))(TNN|PTI) @day @month @yyyy, [\d\.:]{4,5}(&nbsp;|)[AP]M IST(?=[ ]*\|)/g, '$1$2');
ohc_regex(/\[\[@yyyy in[^|\]]+\|@Month @Day,? @YYYY\]\]/gi, "@LMonth @Day, @YYYY");
ohc_regex(/\[\[@yyyy#[^|\]]+\|(@month\s|)(@yyyy)\]\]/gi, "$1$2");
ohc_regex(/\[\[@yyyy#[^|\]]+\|(@month|@yyyy)\]\]/gi, "$1");
ohc_regex(/\[\[(@month\s@yyyy)\]\]/gi, "$1");
ohc_regex(/\[\[@month\s@yyyy\|([^\]]{1,30})\]\]/gi, "$1");
ohc_regex(/\[\[(?:List of |)Bollywood films of @yyyy\|@YYYY\]\](?= [^\[]{2}^B)/gi, "@YYYY");
 
ohc_regex(/(\[\[@yyyy[^|\]]+\|@yyyy)(\]\])( season)/gi, "$1$3$2");


ohc_regex(/(\|\s*author\s*=\s*)@month @day,? @yyyy\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|)|)(?=\|)/g, "$1");
//removed piped years when in full date (excepting disambiguated parentheses - updated 24/2/2012)
ohc_regex(/(\|\s*author\s*=\s*)@day @month,? @yyyy\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|)|)(?=\|)/g, "$1");
// ohc_regex(/\[\[[^|\]\(\)]{1,32}\|@YYYY\]\]/gi, '@Year'); // 23/6/2021 – disabled delinking "other" year-in articles
ohc_regex(/(\|\s*author\s*=\s*\w[\w\s]+)@month @day,? @yyyy(?:[^\[\]|{}]*)(?=[|}])/g, "$1");
ohc_regex(/(\|\s*author\s*=\s*\w[\w\s]+)@day @month,? @yyyy(?:[^\[\]|{}]*)(?=[|}])/g, "$1");
ohc_regex(/(\|\s*author\s*=\s*(?:\w[\w\s]+)?)@dd-@mm-@yyyy/gi, "$1");
ohc_regex(/(\|\s*author\s*=\s*(?:\w[\w\s]+)?)@YYYY-@MM-@DD ?/gi, "$1");
regex(/(\|\s*(?:date|archive-?date|access-?date|author)\s*=\s*(?:\w[\w\s]+)?)[0-2]\d:[0-5]\d(?:[ ]|&nbsp;)?(?:[ap]m|[ap]\.m\.|)(?: ?(?:[A-Z]{1,2}T|UTC)[\.,]?|)/gi, "$1");
// ohc_regex(/(\|\s*author\s*=\s*(?:\w[\w\s]+)?)\s*[0-2]\d[\.:][0-5]\d(?:[\.:][0-5]\d|)/gi, "$1"); //let's see later if we need this


// eliminating mm-dd-yyyy dates
//Identify surprise or 'Easter egg' diversions linking months to year or "year in" articles.
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@MM[-–\/\.=\s](1[3-9]|2\d|3[01])[-–\/\.=\s]@YYYY/gi, "$1@Month $2, @YYYY");
ohc_regex(/\[\[\d{1,4}#[^|\]]+\|@Month\]\]/gi, "@LMonth");
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Mon[-–\/\.=\s](1[3-9]|2\d|3[01])[-–\/\.=\s]@YYYY/gi, "$1@Month $2, @YYYY");
ohc_regex(/\[\[@yyyy \w[^|\]]{3,12}\|@Year\]\]/gi, '@Year');
ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@MM[-–\/\.=\s](1[3-9]|2\d|3[01])[-–\/\.=\s]@YYYY(?=\D)/gi, " Retrieved @Month $1, @YYYY");
// ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@YYYY,? @Month @DD(?=\D)/gi, " Retrieved @Day @Month @YYYY");


ohc_regex(/([ =|])@Mon[-–](1[3-9]|2\d|3[01])[-–]@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");
// month and day piped
ohc_regex(/([ =|])@Mon\/(1[3-9]|2\d|3[01])\/@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");  
ohc_regex(/\[\[@month[\s_]@day\|@MM-@DD\]\]/gi, "@MM-@DD");
ohc_regex(/([ =|])@Mon\.(1[3-9]|2\d|3[01])\.@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");
ohc_regex(/\[\[@month[\s_]@day\|([^\]]{1,30})\]\]/gi, "$1");
ohc_regex(/([ =|])@Mon (1[3-9]|2\d|3[01]) @YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");
ohc_regex(/\[\[@day(?:\s|_|@th )(?:of[\s_]|)?@month\|([^\]]{1,30})\]\]/gi, "$1");
ohc_regex(/([ =|])@MM[-–](1[3-9]|2\d|3[01])[-–]@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");  
ohc_regex(/([ =|])@MM\/(1[3-9]|2\d|3[01])\/@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");
ohc_regex(/([ =|])@MM\.(1[3-9]|2\d|3[01])\.@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");
ohc_regex(/([ =|])@MM (1[3-9]|2\d|3[01]) @YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");  


// eliminating dd-mm-yyyy dates (assumed default)
//years piped
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@DD[-–\/\.=\s]@MM[-–\/\.=\s]@YYYY/gi, "$1@Day @Month @YYYY");
regex(/\[\[\d{1,4}\|([^\]]{1,30})\]\]/gi, '$1');
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@DD[-–\/\.=\s]@Mon[-–\/\.=\s]@YYYY/gi, "$1@Day @Month @YYYY");
}
ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@DD[-–\/\.=\s]@MM[-–\/\.=\s]@YYYY(?=\D)/gi, " Retrieved @Day @Month @YYYY");
ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@YYYY,? @Month @DD(?=\D)/gi, " Retrieved @Day @Month @YYYY");
ohc_regex(/([ =|])@DD[-–]@Mon[-–]@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
ohc_regex(/([ =|])@DD\/@Mon\/@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
ohc_regex(/([ =|])@DD\.@Mon\.@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
ohc_regex(/([ =|])@DD @Mon @YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
ohc_regex(/([ =|])@DD[-–]@MM[-–]@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
ohc_regex(/([ =|])@DD\/@MM\/@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
ohc_regex(/([ =|])@DD\.@MM\.@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
ohc_regex(/([ =|])@DD @MM @YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");  
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@DD[-–\/\.=\s]@Month[-–\/\.=\s]@YYNN(?=\s*[|}\n])/gi, '$1@Day @Month @YYYY');


//convert yyyy-dd-mm to yyyy-mm-dd
function ohc_fix_common_errors()
ohc_regex(/{{(\s*[Cc]it(?:e|ation))([^}]+)(\s*\|\s*(?:publication|archive|access|air|)-?date\s*=\s*(?:1[0-9]|20)\d{2})[-/\.=\s](1[3-9]|2\d|3[01])[-/\.=\s](0?\d|1[0-2])(\s*[\|}<])/gi, '{{$1$2$3-$5-$4$6'); //from Batty
{
ohc_regex(/(\d)<sup>@th<\/sup>/gi, '$1th');
// remove dashbot comment from dates
regex(/<!-- ?DASHBot ?-->/gi, '');
ohc_regex(/(\|\s*(?:date|year)\s*=)\s*c(?:irca|a\.)?\s?((?:@day |)@month @year)(?=[\s\n]*[<|}])/gi, '$1c. $2'); //add space
//common cs1 errors
regex(/(\|\s*(?:date|year)\s*=)\s*(1[7-9]\d|20[0-1])\?(?=[\s\n]*[<|}])/gi, '$1c. $20');
regex(/(\|\s*(?:date|year)\s*=\s*(1[7-9])\d{2})[-–](\d{2})(?=[\s\n]*[<|}])/gi, '$1–$2$3');
// regex(/(\|\s*(?:date|year)\s*=\s*(20)[0-1]\d)[-–]([0-2]\d)(?=[\s\n]*[<|}])/gi, '$1–$2$3');
regex(/(\|\s*(?:date|year)\s*=\s*)@YYYY\s*[-–/]\s*@YYYY(?=[\s\n]*[<|}])/gi, '$1@YYYY1–@YYYY2'); //common cs1 error
regex(/(\|\s*(?:date)\s*=)\s*s(pring|ummer),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1S$2 $3'); //common cs1 error
regex(/(\|\s*(?:date)\s*=)\s*a(utumn),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1A$2 $3'); //common cs1 error
regex(/(\|\s*(?:date)\s*=)\s*f(all),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1F$2 $3'); //common cs1 error
regex(/(\|\s*(?:date)\s*=)\s*w(inter),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1W$2 $3'); //common cs1 error
ohc_regex(/(\|\s*access-?date\s*=)\s*(@month @year)(?=[\s\n]*[<|}])/gi, '$11 $2'); //common cs1 error
// ohc_regex(/(\|\s*date\s*=\s*)@year\?(?=[\s\n]*[<|}])/gi, '$1@Year'); //common cs1 error
// ohc_regex(/(\|\s*(?:date|year)\s*=)\s*@year\?(?=[\s\n]*[<|}])/gi, '$1c. @Year'); //common cs1 error
// ohc_regex(/(\|\s*(?:date|year)\s*=)\s*(@month @year)\?(?=[\s\n]*[<|}])/gi, '$1c. $2'); //common cs1 error
ohc_regex(/(\|\s*access-?date\s*=)\s*@month @day, (1[7-9]\d{2}|2000)(?=[\s\n]*[<|}])/gi, '$1'); //rem access date before Wikipedia (জানুয়ারি 2001)
ohc_regex(/(\|\s*access-?date\s*=)\s*@day @month.? (1[7-9]\d{2}|2000)(?=[\s\n]*[<|}])/gi, '$1'); //rem access date before Wikipedia (জানুয়ারি 2001)
ohc_regex(/(\|\s*access-?date\s*=)\s*31( (?:এপ্রিল|জুন|সেপ্টেম্বর|নভেম্বর) @year)(?=[\s\n]*[<|}])/gi, '$130$2'); //rem nonsense access date (short months)
ohc_regex(/(\|\s*access-?date\s*=)\s*29( ফেব্রুয়ারি (?:200[1235679]|201[1345789]))(?=[\s\n]*[<|}])/gi, '$128$2'); //rem nonsense access date 29 ফেব্রুয়ারি (non-leap year)
ohc_regex(/(\|\s*access-?date\s*=)\s*(?:3[01])( ফেব্রুয়ারি @yyyy)(?=[\s\n]*[<|}])/gi, '$128$2'); //rem nonsense access dates ফেব্রুয়ারি
regex(/(\|\s*access-?date\s*=)\s*(\d{4})(?=[\s\n]*[<|}])/gi, ''); //common cs1 error
//month+day+year pseudo-ISO dates
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*@dd)-@Mon-@YYYY/gi, "$1 @FullMonth @YYYY");
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@YYYY-@DD-@Mon/gi, "$1 @DD @FullMonth @YYYY");


// eliminating other errant formats
regex(/(\|\s*(?:date|year)\s*=)\s*(?:(?:date |)unknown|(?:not? |non-|un)date[ds])(?=[\s\n]*[<|}])/gi, '$1n.d.'); //common cs1 error
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)([0-2]?\d|30|31) @Month \2,? @YYYY(?=\s*[|}])/gi, "$1$2 @Month @YYYY"); //repeated digits
regex(/(\|\s*(?:date|year)\s*=)\s*n\.?d(?=[\s\n]*[<|}])/gi, '$1n.d.'); //common cs1 error
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day ?@Month ?200([01]\d)[^\s|}]?(?=\s*[|}])/gi, "$1@Day @Month 20$2");
regex(/(\|\s*)year(\s*=\s*)(?=n\.?d\.)(?=[\s\n]*[<|}])/gi, '$1date$2'); //common cs1 error
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month ?@Day,? ?200([01]\d)[^\s|}]?(?=\s*[|}])/gi, "$1@Month @Day, 20$2");


ohc_regex(/([ ]\()@DD-@MM-@YYYY(\)\W)/gi, '$1@Day @Month @YYYY$2');
  // remove parasitic metadata -  days of the week/descriptives
ohc_regex(/([ ]\()@DD-@Month-@YYYY(\)\W)/gi, '$1@Day @Month @YYYY$2');
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:[^|}\d]*|)@Day\s+@Month\s+@YYYY((?:[a-z]\b|)\s?)[^|<}]*(?=[\s\n]*[<|}])/gi, "$1@Day @Month @YYYY$2"); //rem negate "<", "hyphens" "dashes" 26/6/2020
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@Month, @DD, @YYYY(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)[^|}]*@Month\s+@Day,\s+@YYYY((?:[a-z]\b|)\s?)[^|<}]*(?=[\s\n]*[<|}])/gi, "$1@Month @Day, @YYYY$2"); //rem negate "<", "hyphens" "dashes" 26/6/2020
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@DD[\.,] @Month,? @YYYY(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
// ohc_regex(/(\|\s*date\s*=\s*)(?:[^|}–<]*\D|)@Day\s+@Month\s+@YYYY ?– ?@Day\s+@Month\s+@YYYY[^|}–<]*(?=[\s\n]*[<|}])/gi, "$1@Day1 @Mon1 @Year1 – @Day2 @Mon2 @Year2");
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY,? @Month @DD(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
// ohc_regex(/(\|\s*date\s*=\s*)[^|}–<]*@Month\s+@Day,\s+@YYYY ?– ?@Month @Day, @YYYY[^|}–<]*(?=[\s\n]*[<|}])/gi, "$1@Mon1 @Day1, @Year1 – @@Mon2 Day2, @Year2");
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY,? @DD @Month(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
// regex(/(\|\s*author\s*=\s*)(?:posted|published)(?: by\b| on\b|)[\s:](?=\w)/gi, "$1");
ohc_regex(/[ ]\(@YYYY,? @Month @DD\)/gi, " (@Day @Month @YYYY)");
// regex(/(\|\s*(?:date|archive-?date|access-?date|author|year)\s*=\s*)(?:accessed|retrieved|entered|posted|published|(?:last |)updated?|©)(?: by\b| on\b|)[\s:]*(?=\w)/gi, "$1");
ohc_regex(/[ ]\(@YYYY @MM @DD\)/gi, " (@Day @Month @YYYY)");
regex(/(\|\s*(?:author|first|last)\s*=\s*)(?:by\b|on\b)[\s:]*(?=\w)/gi, "$1");
ohc_regex(/[ ]\(@YYYY, @DD @Month\)/gi, " (@Day @Month @YYYY)");
regex(/(\|\s*(?:date|archive-?date|access-?date|author|first|last)\s*=\s*)(?:(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)day,?)\s/gi, "$1");
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY,? @Month(?=\s*[|}])/gi, "$1@Month @YYYY");
regex(/(\|\s*(?:date|archive-?date|access-?date|author|first|last)\s*=\s*)(?:Mon|Tues?|Wed|Thur?|Fri|Sat)[\.,]?\s/gi, "$1"); //<!-- rem "Sun" - false positives -->
ohc_regex(/[ ]\(@YYYY, @Month\)/gi, " (@Month @YYYY)");
ohc_regex(/[ ]\(@Mon@YYYY\)/gi, " (@Mon @YYYY)");


//CS1 errors ISO-like dates (too few or too many digits)
  // remove deprecated parameters (|day= and |month)
ohc_regex(/(date\s*=\s*)(?:\[\[)?@YYYY(?:\]\][–—‐]\[\[|[–—‐])@MM[\-–—‐]@DD(?:\]\])?(?=\s*[|}])/gi, "$1@YYYY-@ZM-@ZD"); //ndashes and emdashes
ohc_regex(/(\|\s*)day(?:\s*=\s*)@DD ?\| ?month(?:\s*=\s*)@Month ?\| ?year(?:\s*=\s*)@YYYY(?=[|}\s])/gi, '$1date=@Day @Month @Year');  
ohc_regex(/(\|\s*access-?date\s*=)\s*@YYYY-0[–—]@DD(?=\s*[|}])/gi, ""); //rem nonsense access date
ohc_regex(/(\|\s*)year(?:\s*=\s*)@YYYY ?\| ?month(?:\s*=\s*)@Month ?\| ?day(?:\s*=\s*)@DD(?=[|}\s])/gi, '$1date=@Month @Day, @Year');  
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY[-–—]@MM[-–—]@DD(?=\s*[|}])/gi, "$1@YYYY-@ZM-@ZD"); //ndashes and emdashes
// ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY[\-–—‐]@MM(?=\s*[|}])/gi, "$1@Month @YYYY"); //transform "yyyy-mm" to "month year"
// typos
ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[–—]@MM[–—]@DD([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2@Day @Month @YYYY$3");
ohc_regex(/(date *= *)@Day @Month ?@th/gi, '$1@Day @Month');  
ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-]@MM[-]([1-9])([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2$3 @Month @YYYY$4");
ohc_regex(/(date *= *)@Day @Month\w(?= \d{3,4})/gi, '$1@Day @Month');  


// spaces and commas between month and year
ohc_regex(/(date *= *(?:[12]?\d|30|31) )(জানুয়ারি|Febr)[\w ]?[aur]{3,4}\w{0,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2uary');
ohc_regex(/@Month(?:,?|\s+of|)(\s|&nbsp;)@YYYY(?=\D)/gi, "@LMonth$1@YYYY");
ohc_regex(/(date *= *(?:[12]?\d|30|31) )J[anu]{3,5}r\w{0,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জানুয়ারি');
 
ohc_regex(/(date *= *(?:[12]?\d) )Febua?r\w{0,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1ফেব্রুয়ারি');
// fix month names (capitalize, remove dots)
ohc_regex(/(date *= *(?:[12]?\d|30|31) )M\w{2,3}ch(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1মার্চ');
ohc_regex(/(\W)@DD\s@FullMonth(\s+|\s*,)/gi, "$1@Day @FullMonth$2");
ohc_regex(/(date *= *(?:[12]?\d|30) )A[bpv\[]\w{2,3}l\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1এপ্রিল');
ohc_regex(/(\W)@DD\s@Mon(\s+|\s*,)/gi, "$1@Day @Mon$2");
ohc_regex(/(date *= *(?:[12]?\d|30|31) )Ma[tui](?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1মে');  
ohc_regex(/(\W)@FullMonth\s@DD(\s+|\s*,)/gi, "$1@FullMonth @Day$2");
ohc_regex(/(date *= *(?:[12]?\d|30) )J\wn\w(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন');  
ohc_regex(/(\W)@Mon\s@DD(\s+|\s*,)/gi, "$1@Mon @Day$2");
ohc_regex(/(date *= *(?:[12]?\d|30) )J\w{1,2}e(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন');  
regex(/(\d(?:st|nd|rd|th) )C(entur(?:ies|y))(?=[ ]*(=|BC|AD|CE))/g, '$1c$2');
ohc_regex(/(date *= *(?:[12]?\d|30|31) )জুলাই\w{1,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুলাই');  
// regex(/(\d(?:st|nd|rd|th) )C(entur(?:ies|y))(?![ \-][A-Z]\w*|''|")/g, '$1c$2');
ohc_regex(/(date *= *(?:[12]?\d|30|31) )A[oug]{2,3}\w{1,4}t(?:\w|us)?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1আগষ্ট');
ohc_regex(/(date *= *(?:[12]?\d|30|31) )(সেপ্টেম্বর|নভেম্বর|ডিসেম্বর)\w{2,4}b[er]{1,2}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2ember');  
ohc_regex(/(date *= *(?:[12]?\d|30) )S\w{0,2}p[ \[]?\w{2,5}[er]{2,3}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1সেপ্টেম্বর');
ohc_regex(/(date *= *(?:[12]?\d|30|31) )O\w{0,2}t\w{1,3}[er]{2,3}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1অক্টোবর');
ohc_regex(/(date *= *(?:[12]?\d|30) )[MN]\w{1,2}[bv] ?\w{1,3}b[er]{1,2}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1নভেম্বর');
ohc_regex(/(date *= *(?:[12]?\d|30|31) )D[ie]?[cs] ?\w{1,4}b[er]{1,2}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1ডিসেম্বর');  


//spaces and commas - in date formats
ohc_regex(/(date *= *)@Month\w(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1@Month'); //rem stray digit at the end of year string
ohc_regex(/(\D\W\[?\[?@dd)[ ]+(@month)(\]\])?[ ]*,[ ]*(\[?\[?@yyyy(\sAD|\sBC|\sCE|\sBCE|)\]?\]?\W\D)/gi, "$1 $2$3 $4");
ohc_regex(/(\D\W\[?\[?)(@month)[ ]+(@dd)(\]?\]?)(?:[ ]*,[ ]*)(\[?\[?@yyyy(\sAD|\sBC|\sCE|\sBCE|)\]?\]?\W\D)/gi, "$1$2 $3$4, $5");
ohc_regex(/(date *= *)(জানুয়ারি|Febr)[\w ]?[aur]{3,4}\w{0,2}(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2uary');  
ohc_regex(/(\D\W\[?\[?)(@month)[ ]+(@dd)(\]?\]?)[ ]+(\[?\[?@yyyy(\sAD|\sBC|\sCE|\sBCE|)\]?\]?\W\D)/gi, "$1$2 $3$4, $5");
ohc_regex(/(date *= *)J[anu]{3,5}r\w{0,2}(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জানুয়ারি');
 
ohc_regex(/(date *= *)Febua?r\w{0,2}(?=(?: (?:[12]?\d),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1ফেব্রুয়ারি');
ohc_regex(/(@month)(?:, | of )(@yyyy\w)/gi, "$1 $2"); //repeat after delinking
ohc_regex(/(date *= *)M\w{2,3}ch(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1মার্চ');  
 
ohc_regex(/(date *= *)A[bpv\[]\w{2,3}l\w?(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1এপ্রিল');
// spaces and commas - md-md and dm-dm date ranges
ohc_regex(/(date *= *)Ma[tui](?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1মে');  
ohc_regex(/(\D\W)@Month\s@DD(&nbsp;|\s)(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?@Month\s@DD(?=\W\D)/gi, "$1@LMonth1 @Day1$2– @LMonth2 @Day2");
ohc_regex(/(date *= *)J\wn\w(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন');  
ohc_regex(/(\D\W)@Month\s@DD(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?@Month\s@DD(?=\W\D)/gi, "$1@LMonth1 @Day1 – @LMonth2 @Day2");
ohc_regex(/(date *= *)J\w{1,2}e(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন');  
ohc_regex(/(\D\W)@DD\s@Month(&nbsp;|\s)(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?@DD\s@Month(?=\W\D)/gi, "$1@Day1 @LMonth1$2– @Day2 @LMonth2");
ohc_regex(/(date *= *)জুলাই\w{1,2}(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুলাই');  
ohc_regex(/(\D\W)@DD\s@Month(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?@DD\s@Month(?=\W\D)/gi, "$1@Day1 @LMonth1 – @Day2 @LMonth2");
ohc_regex(/(date *= *)A[oug]{2,3}\w{1,4}t(?:\w|us)?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1আগষ্ট');  
ohc_regex(/(date *= *)(সেপ্টেম্বর|নভেম্বর|ডিসেম্বর)\w{2,4}b[er]{1,2}\w?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2ember');  
ohc_regex(/(date *= *)S\w{0,2}p[ \[]?\w{2,5}[er]{2,3}\w?(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1সেপ্টেম্বর');  
ohc_regex(/(date *= *)O\w{0,2}t\w{1,3}[er]{2,3}\w?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1অক্টোবর');  
ohc_regex(/(date *= *)[MN]\w{1,2}[bv] ?\w{1,3}b[er]{1,2}\w?(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1নভেম্বর');  
ohc_regex(/(date *= *)D[ie]?[cs] ?\w{1,4}b[er]{1,2}\w?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1ডিসেম্বর');  


// spaces and commas - d-dm and md-d date ranges
//insert comma to separate date from army unit
ohc_regex(/(\D\W)@Month(\s|&nbsp;)@DD@th?(?:(?:\s*|&nbsp;|)[-–](?:\s*|&nbsp;|))@DD@th?(?=\W\D)/gi, "$1@LMonth1$2@Day1–@Day2");
ohc_regex(/@FullMonth ((?:the |)\d\d*@th (?:Air(?:borne|)|Arm(?:ou?red|y)|Artillery|Battalion|Brigade|Co(?:mpan|)y|Division|Fleet|Group|Infantry|Land|Panzer|Regiment|Squadron|Sqn)\b)/g, "@Month, $1");
ohc_regex(/(\D\W)@DD@th?(?:(?:\s*|&nbsp;|)[-–](?:\s*|&nbsp;|))@DD@th?(\s|&nbsp;)@Month(?=\W\D)/gi, "$1@Day1–@Day2$2@LMonth1");


// spaces and commas between month and year (again)
// remove parasitic metadata - time
ohc_regex(/@Month(?:,\s+|\s+of\s+)@YYYY(\w)/gi, "@LMonth @YYYY$1");
ohc_regex(/(\|\s*\w*date\s*=\s*@yyyy-@mm-@dd)\s?(?:T[0-2]\d:[0-5]\d:[0-5]\d(?:\s*|&nbsp;|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|Z))(?=\s*[|}])/g, "$1");
}
ohc_regex(/(\|\s*\w*date\s*=\s*@month @day,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1");
ohc_regex(/(\|\s*\w*date\s*=\s*@day @month,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1");
ohc_regex(/(\|\s*\w*date\s*=\s*\w[\w\s]+@month @day,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1");
ohc_regex(/(\|\s*\w*date\s*=\s*\w[\w\s]+@day @month,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1");
ohc_regex(/(\|\s*\w*date\s*=[^:|}]*)\s?(?:T?[0-2]\d:[0-5]\d:[0-5]\d(?:\s*|&nbsp;|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|Z))/g, "$1");


/** ------------------------------------------------------------------------- */
//  add back spaces or comma or remove other single artefact after date string
/// ISO to long format
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:on |)@Day\s{,2}@Month\s{,2}@YYYY[^a-z{}]?(?=\s*[|}\n])/gi, "$1@Day @Month @YYYY$2");
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:on |)@Month\s{,2}@Day,?\s{,2}@YYYY[^a-z{}]?(?=\s*[|}\n])/gi, "$1@Month @Day, @YYYY$2");
//long-hand palliative for observed failure to insert spaces
ohc_regex(/(\|\s*(?:archive|access|air)-?date\s*=\s*)(?:on |)([0-2]?\d|30|31)\s*(জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগষ্ট|সেপ্টেম্বর|অক্টোবর|নভেম্বর|ডিসেম্বর)\s*((?:19\d|20[0-1])\d\s?)[^|{}\s<>]*(?=\s*[|}])/gi, "$1$2 $3 $4");
// ohc_regex(/(\|\s*(?:publication|)-?date\s*=\s*)(?:on |)@Day\s*@Month\s*@YYYY([a-z]\s?|\s?)\w*[^|{}<>]*(?=[|}])/gi, "$1@Day @Month @YYYY$2");
// ohc_regex(/(\|\s*(?:publication|)-?date\s*=\s*)(?:on |)@Month\s*@Day,\s*@YYYY([a-z]\s?|\s?)\w*[^|{}<>]*(?=[|}])/gi, "$1@Month @Day, @YYYY$2");


function ohc_ISO_to_dmy_in_citations()
//remove extraneous bracket //from Batty
{
ohc_regex(/{{(\s*[Cc]it(?:e|ation))([^}]+)(\s*\|\s*(?:archive-?|access-?|publication-?)?date\s*=\s*)([\w\s-]+)\](?=\s*[\|}<])/gi, '{{$1$2$3$4');
//ISO dates within single citation
ohc_regex(/(\|\s*(?:publication|archive|access|air|designation\d?_|)-?date\s*=\s*)@YYYY[-]@MM[-–]@DD(?=\W\D)/gi, "$1@Day @Month @YYYY");
}


function ohc_ISO_to_mdy_in_citations()
//fix bda template redirect
{
// regex(/\{\{bda\|([^}]+)\}\}/gi, '{{birth date and age|$1}}');
//ISO dates within single citation
// regex(/\{\{dda\|([^}]+)\}\}/gi, '{{death date and age|$1}}');
ohc_regex(/(\|\s*(?:publication|archive|access|air|designation\d?_|)-?date\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Month @Day, @YYYY");
}


function ohc_ISO_to_dmy_in_references()
//zap redundant {{date}}, {{accessdate}} {{retrieved}}, {{monthname}} and {{#dateformat}}
{
// regex(/({{(?:end|start)[-–]date)\|df=y(?:es|)/gi, "$1"); //rem deprecated parameter - disabled: doesn't work here, so ejected to the formatting script
//multiple calls for multiple dates within single citation
ohc_regex(/{{#formatdate:@YYYY-@MM-@DD(?:[^\}]*)}}/gi, "@Day @Month @YYYY");
ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2@Day @Month @YYYY$3");
regex(/{{#formatdate:([^}]+)}}/gi, "$1");
ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD(<\/ref>)/gi, "$1$2@Day @Month @YYYY$3");
regex(/\{\{#dateformat:([^}\|]+)(?:\|dmy|\|mdy)?\}\}/gi, '$1');
}
// ohc_regex(/(date[ ]*=[ ]*)\{\{(?:Start|End) ?date(?:\|df=y(?:es|)|)\|@YYYY\|@MM\|@DD(?:\|df=y(?:es|)|)\}\}/gi, '$1@Month @DD, @YYYY');  //stripping start/end template notes inside "|date=" parameter (line 72)
ohc_regex(/{{#formatdate:@YYYY-@MM-@DD(?:\|(?:[dmy]{3}|iso)|)}}/gi, "@Day @Month @YYYY");
ohc_regex(/\{\{date\|@YYYY-@MM-@DD\}\}/gi, "@Day @Month @YYYY");
ohc_regex(/\{\{date\|(@DD[\-\s]@Mon|@Mon[\-\s]@DD)\}\}/gi, "@Day @Month");
regex(/\{\{date\|([^}\|]+)(?:\|l?(?:[dmy]{3}|iso|none|link))?\}\}/gi, '$1');
ohc_regex(/[ ]*\{\{accessdate\|@YYYY-@MM-@DD[ ]*\}\}/gi, " Retrieved @YYYY-@MM-@DD");
ohc_regex(/[ ]*\{\{retrieved[ ]*\|[ ]accessdate=([\-\w, ]*)\}\}/gi, " Retrieved $1");
// ohc_regex(/(date[ ]*=[ ]*|\w{2,}[ ]*)\{\{(?:start|end).date[^|}]*(?:\|df=y(?:es|)|)\|@YYYY(?:\|df=y(?:es|)|)\}\}/gi, '$1@YYYY');  //stripping start/end template (disabling to placate Pigsonthewing)
// ohc_regex(/\{\{(?:Start|End) date(?:\|df=y(?:es|)|)\|@YYYY\|@MM\}\}/gi, '@Month @YYYY')  //stripping start/end template notes
// ohc_regex(/<!--(?:Use)? \{\{(?:Start|End) date\|@YYYY\|@MM\|@DD\}\} -->/gi, ''); //stripping start/end template notes
ohc_regex(/(\{\{MONTHNAME\|@MM\}\})/gi, "@Month")


function ohc_ISO_to_mdy_in_references()
//expand one and two-digit years in ranges
{
regex(/(\()@Month @YYYY[-–]@Month @YYNN(\))/gi, '$1@Month1 @YYYY1 – @Month2 @YYYY2$2');
//multiple calls for multiple dates within single citation
regex(/(\(1[789])(\d)(1)[-–]([2-9]\))/gi, '$1$2$3–$2$4');
ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2@Month @Day, @YYYY$3");
regex(/(\(1[789])(\d)(2)[-–]([3-9]\))/gi, '$1$2$3–$2$4');
ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-]@DD(<\/ref>)/gi, "$1$2@Month @Day, @YYYY$3");
regex(/(\(1[789])(\d)(3)[-–]([4-9]\))/gi, '$1$2$3–$2$4');
}
regex(/(\(1[789])(\d)(4)[-–]([5-9]\))/gi, '$1$2$3–$2$4');
 
regex(/(\(1[789])(\d)(5)[-–]([6-9]\))/gi, '$1$2$3–$2$4');
// currently unused
regex(/(\(1[789])(\d)(6)[-–]([7-9]\))/gi, '$1$2$3–$2$4');
function ohc_ISO_to_dmy_anywhere()
regex(/(\(1[789])(\d)(7)[-–]([8-9]\))/gi, '$1$2$3–$2$4');
{
regex(/(\(1[789])(\d)(8)[-–](9\))/gi, '$1$2$3–$2$4');
//multiple calls for multiple dates within single citation
regex(/(\(20)([01])(1)[-–]([2-9]\))/gi, '$1$2$3–$2$4');
ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Day @Month @YYYY$2');
regex(/(\(20)([01])(2)[-–]([3-9]\))/gi, '$1$2$3–$2$4');
ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Day @Month @YYYY$2');
regex(/(\(20)([01])(3)[-–]([4-9]\))/gi, '$1$2$3–$2$4');
ohc_regex(/([^-\w/])@YYYY[-–]@MM[-]@DD([^-\w/])/gi, '$1@Day @Month @YYYY$2');
regex(/(\(20)([01])(4)[-–]([5-9]\))/gi, '$1$2$3–$2$4');
}
regex(/(\(20)([01])(5)[-–]([6-9]\))/gi, '$1$2$3–$2$4');
regex(/(\(20)([01])(6)[-–]([7-9]\))/gi, '$1$2$3–$2$4');
regex(/(\(20)([01])(7)[-–]([8-9]\))/gi, '$1$2$3–$2$4');
regex(/(\(20)([01])(8)[-–](9\))/gi, '$1$2$3–$2$4');


// currently unused
ohc_regex(/(\W)@DD@th?, @DD@th?((?:[ ]|&nbsp;)(?:and|&|to|or)(?:[ ]|&nbsp;))@DD@th?(?:\sof\s?)?([ ]|&nbsp;)@Month(?=\W)/gi, '$1@Day1, @Day2$2@Day3$3@LMonth');
function ohc_ISO_to_mdy_anywhere()
ohc_regex(/(\W)@DD@th?((?:[ ]|&nbsp;)(?:and|&|to|or)(?:[ ]|&nbsp;))@DD@th?(?:\sof\s?|)([ ]|&nbsp;)@Month(?=\W)/gi, '$1@Day1$2@Day2$3@LMonth');
{
ohc_regex(/(\W)the @DD@th(?:\sof|)\s@Month,? @YYYY(?=\W\D)/g, '$1@Day @LMonth @YYYY');
//multiple calls for multiple dates within single citation
ohc_regex(/(\W)the @DD@th(?:\sof|)\s@Month(?=\W\D)/g, '$1@Day @LMonth');
ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Month @Day, @YYYY$2');
ohc_regex(/(\W)@Day@th?(?:\sof|)([ _]|&nbsp;|{{(?:break|nbsp)}})@Month(?=[^|\]\w])/gi, '$1@Day$2@LMonth');
ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Month @Day, @YYYY$2');
ohc_regex(/(\W)@Month\s(?:the\s)?@DD@th?,(?:\sthe\s)?(?: |&nbsp;)@DD@th?(\s(?:and|&|to|or)(?:[ _]|&nbsp;))(?:the\s)?@DD@th?(?=[^|\]\w])/gi, '$1@LMonth @Day1, @Day2$2@Day3');
ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Month @Day, @YYYY$2');
ohc_regex(/(\W)(@month)\s(@day)((?:,\s@day){0,6}),?(\/|\s?[-–]\s?|\s(?:and|&|to|or)\s+?)@Day@th?(?:,?(?:[ _]|&nbsp;)|\sof\s)?(\d{3,4}\W\D)/gi, '$1$2 $3$4$5@Day, $6');
}
ohc_regex(/(\W)(@month)\s(@day)((?:,\s@day){0,6}),?(\/|\s?[-–]\s?|\s(?:and|&|to|or)\s+?)@Day@th?(?=\W\D)/gi, '$1$2 $3$4$5@Day');
ohc_regex(/(\W)@Month([ _]|&nbsp;|{{(?:break|nbsp)}})(?:the\s)?@DD@th?,? @Year/gi, '$1@LMonth$2@Day, @Year');
ohc_regex(/(\W)@Month @Day(?:\sof|,|)([ _]|&nbsp;|{{(?:break|nbsp)}})@Year(?=[^|\]\w])/gi, '$1@Month @Day,$2@Year');


function ohc_delink_ISO_to_dmy()
// consolidating/amalgamating date fields
{
ohc_regex(/(\|[ ]*date[ ]*=[ ]*@day)\s*\|[ ]*month=[ ]*(@month)\s*\|[ ]*year=[ ]*(@yyyy[ ]*)(?=[|}\s])/gi, "$1 $2 $3");
ohc_ISO_to_dmy_in_citations();
ohc_regex(/(\|[ ]*date[ ]*=[ ]*@day.?@month)\s*\|[ ]*year=[ ]*(@yyyy[ ]*)(?=[|}\s])/gi, "$1 $2");
ohc_ISO_to_dmy_in_references();
ohc_regex(/(\|[ ]*date[ ]*=[ ]*@month.?@day)\s*\|[ ]*year=[ ]*(@yyyy[ ]*)(?=[|}\s])/gi, "$1 $2");
regex(/([^\w\/\-%,])@YYYY-@MM-@DD(<\s?\/ref.*?>)/g, '$1@Day @Month @Year$2');
ohc_regex(/(\|\|[ ]*)@YYYY[-–]@MM[-–]@DD([ ]*\|\|)/gi, '$1{{dts|format=dmy|@YYYY|@MM|@DD}}$2'); //dts template for sortable tables
ohc_regex(/(\{\{dts\|format=)mdy\|/gi, '$1dmy|'); //flip dts template formats
}


function ohc_delink_ISO_to_mdy()
// eliminating dates and time placed in author parameter
{
//removing artefacts from Indian news sites (TNN আগষ্ট 30, 2012, 05.46AM)
ohc_ISO_to_mdy_in_citations();
ohc_regex(/(\|\s*author\s*=\s*(?:[A-Z]{2,3}\b))(?:[^|}]*)\d{4}, [\d\.:]{4,5}(&nbsp;|)[AP]M IST(?=[ ]*\|)/g, '$1$2');
ohc_ISO_to_mdy_in_references();
// ohc_regex(/(\|\s*author=(?:[^\[\]|{}]*))(TNN|PTI) @day @month @yyyy, [\d\.:]{4,5}(&nbsp;|)[AP]M IST(?=[ ]*\|)/g, '$1$2');
regex(/([^\w\/\-%,])@YYYY-@MM-@DD(<\s?\/ref.*?>)/g, '$1@Month @Day, @Year$2');
ohc_regex(/(\|\|[ ]*)@YYYY[-–]@MM[-–]@DD([ ]*\|\|)/gi, '$1{{dts|@YYYY|@MM|@DD}}$2'); //dts template for sortable tables (mdy is default)
ohc_regex(/(\{\{dts\|)format=(?:mdy|dmy|) ?\|/gi, '$1'); //flip dts template formats
}


function ohc_delink_year_in_X()
ohc_regex(/(\|\s*author\s*=\s*)@month @day,? @yyyy\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|)|)(?=\|)/g, "$1");
{
ohc_regex(/(\|\s*author\s*=\s*)@day @month,? @yyyy\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|)|)(?=\|)/g, "$1");
// ohc_regex(/\{\{(?:avyear|by|baseball\syear|fy|ly|mlby|mlb\syear|scy|sdy)\|(@year)\}\}/gi, "$1"); //disabled 3/5/21 discussion at https://en.wikipedia.org/w/index.php?title=Wikipedia_talk:WikiProject_Baseball&oldid=1021203365#Links_to_baseball_year_articles_in_infobox?
ohc_regex(/(\|\s*author\s*=\s*\w[\w\s]+)@month @day,? @yyyy(?:[^\[\]|{}]*)(?=[|}])/g, "$1");
// ohc_regex(/\{\{(?:avyear|by|baseball\syear|fy|ly|mlby|mlb\syear|scy|sdy)\|@year\|(@year)\}\}/gi, "$1");
ohc_regex(/(\|\s*author\s*=\s*\w[\w\s]+)@day @month,? @yyyy(?:[^\[\]|{}]*)(?=[|}])/g, "$1");
ohc_regex(/\[\[@yyyy\sin\s[^|\]]+\|((?:(?:@day |)@month |)@yyyy)\]\]/gi, '$1');
ohc_regex(/(\|\s*author\s*=\s*(?:\w[\w\s]+)?)@dd-@mm-@yyyy/gi, "$1");
regex(/\[\[(?:\d{4}[-]\d{2} in English football)\|((?:(?:@Day |)@Month |)@YYYY)\]\]/gi, '$1');  
ohc_regex(/(\|\s*author\s*=\s*(?:\w[\w\s]+)?)@YYYY-@MM-@DD ?/gi, "$1");
regex(/(\|\s*(?:date|archive-?date|access-?date|author)\s*=\s*(?:\w[\w\s]+)?)[0-2]\d:[0-5]\d(?:[ ]|&nbsp;)?(?:[ap]m|[ap]\.m\.|)(?: ?(?:[A-Z]{1,2}T|UTC)[\.,]?|)/gi, "$1");
// ohc_regex(/(\|\s*author\s*=\s*(?:\w[\w\s]+)?)\s*[0-2]\d[\.:][0-5]\d(?:[\.:][0-5]\d|)/gi, "$1"); //let's see later if we need this


regex(/\[\[\d{4} Major League Baseball season\|(\d{4})(\sseason)?\]\]/gi, '$1$2');
// eliminating mm-dd-yyyy dates
}
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@MM[-–\/\.=\s](1[3-9]|2\d|3[01])[-–\/\.=\s]@YYYY/gi, "$1@Month $2, @YYYY");
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Mon[-–\/\.=\s](1[3-9]|2\d|3[01])[-–\/\.=\s]@YYYY/gi, "$1@Month $2, @YYYY");
ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@MM[-–\/\.=\s](1[3-9]|2\d|3[01])[-–\/\.=\s]@YYYY(?=\D)/gi, " Retrieved @Month $1, @YYYY");
// ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@YYYY,? @Month @DD(?=\D)/gi, " Retrieved @Day @Month @YYYY");


ohc_regex(/([ =|])@Mon[-–](1[3-9]|2\d|3[01])[-–]@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");
ohc_regex(/([ =|])@Mon\/(1[3-9]|2\d|3[01])\/@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");
ohc_regex(/([ =|])@Mon\.(1[3-9]|2\d|3[01])\.@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");
ohc_regex(/([ =|])@Mon (1[3-9]|2\d|3[01]) @YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");
ohc_regex(/([ =|])@MM[-–](1[3-9]|2\d|3[01])[-–]@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");
ohc_regex(/([ =|])@MM\/(1[3-9]|2\d|3[01])\/@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");
ohc_regex(/([ =|])@MM\.(1[3-9]|2\d|3[01])\.@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");
ohc_regex(/([ =|])@MM (1[3-9]|2\d|3[01]) @YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY");


// format parameter must be 'dmy' or 'mdy'
// eliminating dd-mm-yyyy dates (assumed default)
function ohc_fix_dts_template(format)
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@DD[-–\/\.=\s]@MM[-–\/\.=\s]@YYYY/gi, "$1@Day @Month @YYYY");
{
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@DD[-–\/\.=\s]@Mon[-–\/\.=\s]@YYYY/gi, "$1@Day @Month @YYYY");
// dts - format=dmy in this case (per D12000)
ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@DD[-–\/\.=\s]@MM[-–\/\.=\s]@YYYY(?=\D)/gi, " Retrieved @Day @Month @YYYY");
// per {{dts}} doc, remove the obsolete link=off param
ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@YYYY,? @Month @DD(?=\D)/gi, " Retrieved @Day @Month @YYYY");
regex(/(\{\{dts[^}]*)(?:\|link=off)/gi, '$1');
ohc_regex(/([ =|])@DD[-–]@Mon[-–]@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
ohc_regex(/(\{\{dts\s*\|\s*@year\s*\|\s*@month\s*\|\s*@day\s*\|\s*format=)(?:dmy|mdy)(\}\})/gi, '$1'+format+'$2');
ohc_regex(/([ =|])@DD\/@Mon\/@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");  
ohc_regex(/(\{\{dts\s*\|\s*format=)(?:dmy|mdy)(\s*\|\s*@year\s*\|\s*@month\s*\|\s*@day\s*\}\})/gi, '$1'+format+'$2');
ohc_regex(/([ =|])@DD\.@Mon\.@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
ohc_regex(/(\{\{dts\s*\|\s*@year\s*\|\s*@month\s*\|\s*@day\s*)(\}\})/gi, '$1|format='+format+'$2');
ohc_regex(/([ =|])@DD @Mon @YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
ohc_regex(/([ =|])@DD[-–]@MM[-–]@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
ohc_regex(/([ =|])@DD\/@MM\/@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
ohc_regex(/([ =|])@DD\.@MM\.@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
ohc_regex(/([ =|])@DD @MM @YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@DD[-–\/\.=\s]@Month[-–\/\.=\s]@YYNN(?=\s*[|}\n])/gi, '$1@Day @Month @YYYY');
 
//convert yyyy-dd-mm to yyyy-mm-dd
ohc_regex(/{{(\s*[Cc]it(?:e|ation))([^}]+)(\s*\|\s*(?:publication|archive|access|air|)-?date\s*=\s*(?:1[0-9]|20)\d{2})[-/\.=\s](1[3-9]|2\d|3[01])[-/\.=\s](0?\d|1[0-2])(\s*[\|}<])/gi, '{{$1$2$3-$5-$4$6'); //from Batty


  // stripping – {{dts}} serves no purpose inside date parameters
// eliminating other errant formats
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*format=(?:dmy|mdy)\s*\|\s*([|}]*)\}\}(?=\s*[|}])/gi, "$1$2");
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)([0-2]?\d|30|31) @Month \2,? @YYYY(?=\s*[|}])/gi, "$1$2 @Month @YYYY"); //repeated digits
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*([|}]*)(?:\|\s*format=(?:dmy|mdy)\s*|)\}\}(?=\s*[|}])/gi, "$1$2");
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day ?@Month ?200([01]\d)[^\s|}]?(?=\s*[|}])/gi, "$1@Day @Month 20$2");
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*format=(?:dmy|mdy)\s*\|\s*@YYYY(\s*\|\s*|-)@MM(\s*\|\s*|-)@DD\s*\}\}(?=\s*[|}])/gi, "$1@YYYY-@MM-@DD ");
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month ?@Day,? ?200([01]\d)[^\s|}]?(?=\s*[|}])/gi, "$1@Month @Day, 20$2");
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*@YYYY(\s*\|\s*|-)@MM(\s*\|\s*|-)@DD\s*\|\s*format=(?:dmy|mdy)\s*\}\}(?=\s*[|}])/gi, "$1@YYYY-@MM-@DD ");
}


// format parameter must be 'dmy' or 'mdy'
ohc_regex(/([ ]\()@DD-@MM-@YYYY(\)\W)/gi, '$1@Day @Month @YYYY$2');
function ohc_fix_gr_template(format)
ohc_regex(/([ ]\()@DD-@Month-@YYYY(\)\W)/gi, '$1@Day @Month @YYYY$2');
{
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@Month, @DD, @YYYY(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
// GR - date formatting parameter
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@DD[\.,] @Month,? @YYYY(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
// per {GR} doc, insert date formatting param
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY,? @Month @DD(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
regex(/(\{\{GR\|\d\d?)(?!\|date)/gi, '$1|dateform=' + format);
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY,? @DD @Month(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
}
ohc_regex(/[ ]\(@YYYY,? @Month @DD\)/gi, " (@Day @Month @YYYY)");
ohc_regex(/[ ]\(@YYYY @MM @DD\)/gi, " (@Day @Month @YYYY)");
ohc_regex(/[ ]\(@YYYY, @DD @Month\)/gi, " (@Day @Month @YYYY)");
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY,? @Month(?=\s*[|}])/gi, "$1@Month @YYYY");
ohc_regex(/[ ]\(@YYYY, @Month\)/gi, " (@Month @YYYY)");
ohc_regex(/[ ]\(@Mon@YYYY\)/gi, " (@Mon @YYYY)");


function ohc_dates_to_dmy()
//CS1 errors ISO-like dates (too few or too many digits)
{
ohc_regex(/(date\s*=\s*)(?:\[\[)?@YYYY(?:\]\][–—‐]\[\[|[–—‐])@MM[\-–—‐]@DD(?:\]\])?(?=\s*[|}])/gi, "$1@YYYY-@ZM-@ZD"); //ndashes and emdashes
regex(/\|df=[mdy]{3}(?:-all|)(?=\s*[|}])/gi, '');
ohc_regex(/(\|\s*access-?date\s*=)\s*@YYYY-0[–—]@DD(?=\s*[|}])/gi, ""); //rem nonsense access date
regex(/\|format=mdy/gi, '|format=dmy');
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY[-–—]@MM[-–—]@DD(?=\s*[|}])/gi, "$1@YYYY-@ZM-@ZD"); //ndashes and emdashes
//change start and end templates; vgrelease new v=2 or mdy is default
// ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY[\-–—‐]@MM(?=\s*[|}])/gi, "$1@Month @YYYY"); //transform "yyyy-mm" to "month year"
regex(/(\{\{(?:start date|end date)[^|}]*\|)df=ye?s?\|([^}]*df=ye?s?)/gi, '$1$2');
ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[–—]@MM[–—]@DD([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2@Day @Month @YYYY$3");
regex(/(\{\{vgrelease new[^|}]*\|)(?:v=1\||)([A-Z]{2,3}\|)/g, '$1v=2|$2');
ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-]@MM[-]([1-9])([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2$3 @Month @YYYY$4");   
ohc_regex(/(\|\s*(?:begin|end|first|last)\s*=\s*)@YYYY[-]@MM[-]@DD(?=\W\D)/gi, "$1@Day @Month @YYYY"); //spotted at [[Template:Infobox recurring event]]
//change birth and death templates
regex(/(\{\{(?:(?:Birth|Death) date(?: and age|)|launch|release|start)[^}]*\|)m(f=ye?s?)/gi, '$1d$2'); // substitute df for mf
regex(/(\{\{(?:(?:Birth|Death) date(?: and age|)|launch|release|start|film ?date|Wayback)[\|\d]+)(\}\})/gi, '$1|df=y$2'); //insert df parameter
regex(/(\{\{(?:(?:Birth|Death) date(?: and age|)|launch|release|start|film ?date|Wayback)[\|\d]+\|)df=ye?s?\|([^}]*df=ye?s?)/gi, '$1$2'); //put date format parameter at the end
regex(/(\{\{(?:start date|end date)\|)df=ye?s?\|((?:1[789]|20)\d{2}\}\})/gi, '$1$2');  //date format parameter not needed – year only


//convert date ranges (md,d,d-dy to d,d,d-dmy; md,d,d-d to d,d,d-dm; md,d,d to d,d,dm)
// spaces and commas between month and year
ohc_regex(/(\D\W)@Month((?:\s@day?,?){1,6}),?(\/|\s?(?:[-–]|&ndash;)\s?|(?:[ _]|&nbsp;)(?:and|&|to|or)(?:[ _]|&nbsp;)+?)@Day,?\s(?:of\s)?(@yyyy\W\D)/gi, "$1$2$3@Day @LMonth $4");
ohc_regex(/@Month(?:,?|\s+of|)(\s|&nbsp;)@YYYY(?=\D)/gi, "@LMonth$1@YYYY");
ohc_regex(/(\D\W)@Month((?:\s@day?,?){1,6}),?(\/|\s?(?:[-–]|&ndash;)\s?|(?:[ _]|&nbsp;)(?:and|&|to|or)(?:[ _]|&nbsp;)+?)@Day(?=\W\D)/gi, "$1$2$3@Day @LMonth");


// ohc_regex(/(\D\W)@Month((?:\s@day?,?){1,6}) @Day(?=\W\D)/gi, "$1$2 @Day @LMonth"); //disabling as unlikely and ungrammatical constructions causing false positives
// fix month names (capitalize, remove dots)
 
ohc_regex(/(\W)@DD\s@FullMonth(\s+|\s*,)/gi, "$1@Day @FullMonth$2");
//'md, md,' to 'dm, dm,'
ohc_regex(/(\W)@DD\s@Mon(\s+|\s*,)/gi, "$1@Day @Mon$2");
ohc_regex(/(\D\W)@Month @Day, @Month @Day(?=[,\.]\W\D)/gi, "$1@Day1 @LMonth1, @Day2 @LMonth2");
ohc_regex(/(\W)@FullMonth\s@DD(\s+|\s*,)/gi, "$1@FullMonth @Day$2");
ohc_regex(/(\W)@Mon\s@DD(\s+|\s*,)/gi, "$1@Mon @Day$2");
regex(/(\d(?:st|nd|rd|th) )C(entur(?:ies|y))(?=[ ]*(=|BC|AD|CE))/g, '$1c$2');
// regex(/(\d(?:st|nd|rd|th) )C(entur(?:ies|y))(?![ \-][A-Z]\w*|''|")/g, '$1c$2');


//convert simple mdy dates to dmy
//spaces and commas - in date formats
ohc_regex(/(p(?:g?\.?|age) ?\d+|p(?:p\.?|ages) ?\d+[-–]\d+), @Month((?:\s@day?,?){1,6}) @Day(?=\W\D)/gi, "$1. $2 @Day @LMonth");
ohc_regex(/(\D\W\[?\[?@dd)[ ]+(@month)(\]\])?[ ]*,[ ]*(\[?\[?@yyyy(\sAD|\sBC|\sCE|\sBCE|)\]?\]?\W\D)/gi, "$1 $2$3 $4");
ohc_regex(/(\D\W)@Month\s@Day,?\s@Year(\s?(?:AD|BC|CE|BCE)\W\D)/gi, "$1@Day @LMonth @Year$2");
ohc_regex(/(\D\W\[?\[?)(@month)[ ]+(@dd)(\]?\]?)(?:[ ]*,[ ]*)(\[?\[?@yyyy(\sAD|\sBC|\sCE|\sBCE|)\]?\]?\W\D)/gi, "$1$2 $3$4, $5");
ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Month\s@Day,?\s@YYYY(?=\W\D)/gi, "$1@Day @LMonth @Year");
ohc_regex(/(\D\W\[?\[?)(@month)[ ]+(@dd)(\]?\]?)[ ]+(\[?\[?@yyyy(\sAD|\sBC|\sCE|\sBCE|)\]?\]?\W\D)/gi, "$1$2 $3$4, $5");
ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Month\s@Day(?=\W\D)/gi, "$1@Day @LMonth");


//Month+day_number " 7th মার্চ" -> "7 মার্চ"
ohc_regex(/(@month)(?:, | of )(@yyyy\w)/gi, "$1 $2"); //repeat after delinking
ohc_regex(/(\D\W)@Day\s@Month\s@YYYY(?=\W\D)/gi, "$1@Day @LMonth @Year");
ohc_regex(/(\D\W)@Day\s@Month(?=\W\D)/gi, "$1@Day @LMonth");
ohc_regex(/(\D\W)@Month\s@Day,?\s@Year(?=\W\D)/gi, "$1@Day @LMonth @Year");


//dates with embedded nbsp
// spaces and commas - md-md and dm-dm date ranges
ohc_regex(/(\D\W)@Month([ _]|&nbsp;)(\d{1,2},(?: |&nbsp;)\d{1,2}(?:\s(?:and|&|to|or)(?:[ _]|&nbsp;))\d{1,2})(?=[^|\]\w])/gi, '$1$3$2@LMonth ');
ohc_regex(/(\D\W)@Month\s@DD(&nbsp;|\s)(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?@Month\s@DD(?=\W\D)/gi, "$1@LMonth1 @Day1$2– @LMonth2 @Day2");
ohc_regex(/(\D\W)@Month([ _]|&nbsp;|{{(?:break|nbsp)}})@Day,([ _]|&nbsp;|{{(?:break|nbsp)}})@YYYY(?=[^|\]\w])/gi, '$1@Day$2@Month$3@Year');
ohc_regex(/(\D\W)@Month\s@DD(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?@Month\s@DD(?=\W\D)/gi, "$1@LMonth1 @Day1 – @LMonth2 @Day2");
ohc_regex(/(\D\W)@DD\s@Month(&nbsp;|\s)(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?@DD\s@Month(?=\W\D)/gi, "$1@Day1 @LMonth1$2– @Day2 @LMonth2");
ohc_regex(/(\D\W)@DD\s@Month(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?@DD\s@Month(?=\W\D)/gi, "$1@Day1 @LMonth1 – @Day2 @LMonth2");


//remove comma
// spaces and commas - d-dm and md-d date ranges
ohc_regex(/(\D\W)@Day\s@Month,\s?@Year(?=\W\D)/gi, "$1@Day @LMonth @Year");
ohc_regex(/(\D\W)@Month(\s|&nbsp;)@DD@th?(?:(?:\s*|&nbsp;|)[-–](?:\s*|&nbsp;|))@DD@th?(?=\W\D)/gi, "$1@LMonth1$2@Day1–@Day2");
ohc_regex(/(\D\W)@DD@th?(?:(?:\s*|&nbsp;|)[-–](?:\s*|&nbsp;|))@DD@th?(\s|&nbsp;)@Month(?=\W\D)/gi, "$1@Day1–@Day2$2@LMonth1");
 
// spaces and commas between month and year (again)
ohc_regex(/@Month(?:,\s+|\s+of\s+)@YYYY(\w)/gi, "@LMonth @YYYY$1");
}


// remove "the" from "on the dd month"
/** ------------------------------------------------------------------------- */
ohc_regex(/(on |by )the @Day\s@Month(?=[ ,\)\.])/gi, "$1@Day @LMonth");
/// ISO to long format


//remove space from date range conversion
function ohc_ISO_to_dmy_in_citations()
ohc_regex(/(\D ) @Day(\/|\s?(?:[-–]|&ndash;)\s?|(?:[ _]|&nbsp;)(?:and|&|to|or)(?:[ _]|&nbsp;)+?)/gi, "$1@Day$2");
{
//ISO dates within single citation
ohc_regex(/(\|\s*(?:publication|archive|access|air|designation\d?_|)-?date\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Day @Month @YYYY");
}
}


function ohc_dates_to_mdy()
function ohc_ISO_to_mdy_in_citations()
{
{
//change birth and death templates – mf=y is the default; vgrelease new v=2 or mdy is default
//ISO dates within single citation
regex(/\|df=[mdy]{3}(?:-all|)(?=\s*[|}])/gi, '');
ohc_regex(/(\|\s*(?:publication|archive|access|air|designation\d?_|)-?date\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Month @Day, @YYYY");
regex(/\|df=y(?:es|)(?=[|}\s])/gi, '');
}
regex(/(mf=y(?:es|)\|[^}]*\|)(?:mf=y(?:es|)\|)/gi, '$1');
regex(/(\{\{vgrelease new[^|}]*\|)(?:v=2\||)([A-Z]{2,3}\|)/g, '$1$2');
ohc_regex(/(\|\s*(?:begin|end|first|last)\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Month @Day, @YYYY");


//convert date ranges (d,d,d-dmy to md,d,d-dy; d,d,d-dm to md,d,d-d; dm,d,d to md,d,d)
function ohc_ISO_to_dmy_in_references()
ohc_regex(/(\D\W)@Day((?:, @day){0,5})(\/|\s?(?:[-–]|&ndash;)\s?|\s(?:and|&|to|or)\s+?)@Day\s@Month,? @YYYY(?=\W\D)/gi, "$1@LMonth @Day1$2$3@Day2, @YYYY");
{
ohc_regex(/(\D\W)@Day((?:, @day){0,5})(\/|\s?(?:[-–]|&ndash;)\s?|\s(?:and|&|to|or)\s+?)@Day\s@Month(?=\W\D)/gi, "$1@LMonth @Day1$2$3@Day2");
//multiple calls for multiple dates within single citation
// ohc_regex(/(\D\W)@Day((?:, @day){0,5})\s@Month,? @YYYY(?=\W\D)/gi, "$1@LMonth @Day1$2, @YYYY"); //disabling as unlikely and ungrammatical constructions causing false positives
ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2@Day @Month @YYYY$3");
// ohc_regex(/(\D\W)@Day((?:, @day){0,5})\s@Month(?=\W\D)/gi, "$1@LMonth @Day1$2"); //disabling as unlikely and ungrammatical constructions causing false positives
ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD(<\/ref>)/gi, "$1$2@Day @Month @YYYY$3");
}


//'dm, dm,' to 'md, md,'
function ohc_ISO_to_mdy_in_references()
ohc_regex(/(\D\W)@Day @Month, @Day @Month(?=[,\.]?\W\D)/gi, "$1@LMonth1 @Day1, @LMonth2 @Day2");
{
//multiple calls for multiple dates within single citation
ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2@Month @Day, @YYYY$3");
ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD(<\/ref>)/gi, "$1$2@Month @Day, @YYYY$3");
}


//convert simple dmy dates to mdy
// currently unused
ohc_regex(/(p(?:g?\.?|age) ?\d+|p(?:p\.?|ages) ?\d+[-–]\d+), @Month((?:\s@day?,?){1,6}) @Day(?=\W\D)/gi, "$1. @LMonth $2 @Day");
function ohc_ISO_to_dmy_anywhere()
ohc_regex(/(\D\W)@Day(\s|&nbsp;)@Month,?(\s|&nbsp;)@Year(?=\W\D)/gi, "$1@LMonth$2@Day,$3@Year");
{
ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Day[ ]+@Month,?\s@YYYY(?=\W\D)/gi, "$1@LMonth @Day, @Year");
//multiple calls for multiple dates within single citation
ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Day[ ]+@Month(?=\W\D)/gi, "$1@LMonth @Day");
ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Day @Month @YYYY$2');
 
ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Day @Month @YYYY$2');
//Month+day_number "মার্চ 7th" -> "মার্চ 7"
ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Day @Month @YYYY$2');
ohc_regex(/(\D\W)@Month\s@Day@th?,?\s@YYYY(?=\W\D)/gi, "$1@LMonth @Day, @YYYY");
ohc_regex(/(\D\W)@Day@th?(\s|&nbsp;)@Month(\s|&nbsp;)@YYYY(?=\W\D)/gi, "$1@LMonth$2@Day,$3@YYYY");
ohc_regex(/(\D\W)@Month(\s|&nbsp;)@Day(?=\W\D)/gi, "$1@LMonth$2@Day");
ohc_regex(/(\D\W)@Day@th?(\s|&nbsp;)@Month([,\.])(?=\W\D)/gi, "$1@LMonth$2@Day$3");
 
//add comma where missing
ohc_regex(/(\D\W)@Month\s@Day,?\s@YYYY,?(?=\s\w)/gi, "$1@LMonth @Day, @YYYY,");
//rem superfluous comma where applicable
ohc_regex(/(\D[^\w\/])@Month\s@ZD,,(?=\W\D|\b)/gi, "$1@LMonth @Day,");
}
}


function ohc_fix_dmy_redundancies()
// currently unused
function ohc_ISO_to_mdy_anywhere()
{
{
//month-range redundancies (repeating month names)
//multiple calls for multiple dates within single citation
ohc_regex(/([\D]@dd)@th? @Month[ ]{1,2}((?:to|and|-|)[ ]{1,2}@dd)@th? @Month/, "$1 $2 @LMonth", function(d1, d2) {
ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Month @Day, @YYYY$2');
if (d1.m == d2.m) return true;
ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Month @Day, @YYYY$2');
return false;
ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Month @Day, @YYYY$2');
});
}
}
//not currently used
 
function ohc_fix_mdy_redundancies()
function ohc_delink_ISO_to_dmy()
{
{
//month-range redundancies (repeating month names)
ohc_ISO_to_dmy_in_citations();
ohc_regex(/(@Month[ ]{1,2}@dd)@th? (to|and|-|)[ ]{1,2}@Month[ ]{1,2}@DD@th?/, "$1 $2 @LDay", function(d1, d2) {
ohc_ISO_to_dmy_in_references();
if (d1.m == d2.m) return true;
regex(/([^\w\/\-%,])@YYYY-@MM-@DD(<\s?\/ref.*?>)/g, '$1@Day @Month @Year$2');
return false;
ohc_regex(/(\|\|[ ]*)@YYYY[-–]@MM[-–]@DD([ ]*\|\|)/gi, '$1{{dts|format=dmy|@YYYY|@MM|@DD}}$2');  //dts template for sortable tables
});
ohc_regex(/(\{\{dts\|format=)mdy\|/gi, '$1dmy|'); //flip dts template formats
}
}


function ohc_expand_ref_dates()
function ohc_delink_ISO_to_mdy()
{
{
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @YYYY(?=\s*[|}])/gi, "$1@FullMonth @YYYY");
ohc_ISO_to_mdy_in_citations();
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month @YYYY(?=\s*[|}])/gi, "$1@Day @FullMonth @YYYY");
ohc_ISO_to_mdy_in_references();
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day, @YYYY(?=\s*[|}])/gi, "$1@FullMonth @Day, @YYYY");
regex(/([^\w\/\-%,])@YYYY-@MM-@DD(<\s?\/ref.*?>)/g, '$1@Month @Day, @Year$2');
ohc_regex(/(\|\|[ ]*)@YYYY[-–]@MM[-–]@DD([ ]*\|\|)/gi, '$1{{dts|@YYYY|@MM|@DD}}$2'); //dts template for sortable tables (mdy is default)
ohc_regex(/(\{\{dts\|)format=(?:mdy|dmy|) ?\|/gi, '$1'); //flip dts template formats
}


ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)((?:[01-2]?\d|30|31) |)@Month @YYYY ?(?:-||&ndash;) ?((?:[01-3]?\d|30|31) |)@Month @YYYY(?=\s*[|}])/gi, "$1$2 @FullMonth1 @YYYY1 – $3@FullMonth2 @YYYY2");
function ohc_delink_year_in_X()
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day(, (?:19|20)\d\d) ?(?:-||&ndash;) ?@Month @Day, @YYYY(?=\s*[|}])/gi, "$1@FullMonth1 @Day1$2 – @FullMonth2 @Day2, @YYYY");
{
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Day @Month @YYYY(?=\s*[|}])/gi, "$1@Day1 @FullMonth1$2 – @Day2 @FullMonth2 @YYYY");
// ohc_regex(/\{\{(?:avyear|by|baseball\syear|fy|ly|mlby|mlb\syear|scy|sdy)\|(@year)\}\}/gi, "$1"); //disabled 3/5/21 discussion at https://en.wikipedia.org/w/index.php?title=Wikipedia_talk:WikiProject_Baseball&oldid=1021203365#Links_to_baseball_year_articles_in_infobox?
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month,?( (?:19|20)\d\d) ?(?:-||&ndash;) ?@Month,? @YYYY(?=\s*[|}])/gi, "$1@FullMonth1$2 – @FullMonth2 @YYYY");
// ohc_regex(/\{\{(?:avyear|by|baseball\syear|fy|ly|mlby|mlb\syear|scy|sdy)\|@year\|(@year)\}\}/gi, "$1");
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)((?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month @YYYY(?=\s*[|}])/gi, "$1@$2 – @FullMonth @YYYY");
ohc_regex(/\[\[@yyyy\sin\s[^|\]]+\|((?:(?:@day |)@month |)@yyyy)\]\]/gi, '$1');
regex(/\[\[(?:\d{4}[-–]\d{2} in English football)\|((?:(?:@Day |)@Month |)@YYYY)\]\]/gi, '$1');  


ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))((?:[01-2]?\d|30|31) |)@Month @YYYY ?(?:-|–|&ndash;) ?((?:[01-3]?\d|30|31) |)@Month @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2@FullMonth1 @YYYY1 – $3@FullMonth2 @YYYY2");
regex(/\[\[\d{4} Major League Baseball season\|(\d{4})(\sseason)?\]\]/gi, '$1$2');
ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))@Month @Day(, (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month @Day, @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1@FullMonth1 @Day1$2 – @FullMonth2 @Day2, @YYYY");
ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))@Day @Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Day @Month @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1@Day1 @FullMonth1$2 – @Day2 @FullMonth2 @YYYY");
ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))@Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month,? @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1@FullMonth1$2 – @FullMonth2 @YYYY");
ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))((?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2 – @FullMonth @YYYY");
}
}


function ohc_expand_all_dates()
 
// format parameter must be 'dmy' or 'mdy'
function ohc_fix_dts_template(format)
{
{
ohc_regex(/([^-\w/])@Month @YYYY(?=[^-\w/])/gi, '$1@FullMonth @YYYY');
// dts - format=dmy in this case (per D12000)
ohc_regex(/([^-\w/])@Day @Month @YYYY(?=[^-\w/])/gi, '$1@Day @FullMonth @YYYY');
// per {{dts}} doc, remove the obsolete link=off param
ohc_regex(/([^-\w/])@Month @Day, @YYYY(?=[^-\w/])/gi, '$1@FullMonth @Day, @YYYY');
regex(/(\{\{dts[^}]*)(?:\|link=off)/gi, '$1');
ohc_regex(/(\{\{dts\s*\|\s*@year\s*\|\s*@month\s*\|\s*@day\s*\|\s*format=)(?:dmy|mdy)(\}\})/gi, '$1'+format+'$2');
ohc_regex(/(\{\{dts\s*\|\s*format=)(?:dmy|mdy)(\s*\|\s*@year\s*\|\s*@month\s*\|\s*@day\s*\}\})/gi, '$1'+format+'$2');
ohc_regex(/(\{\{dts\s*\|\s*@year\s*\|\s*@month\s*\|\s*@day\s*)(\}\})/gi, '$1|format='+format+'$2');


ohc_regex(/([^-\w/])((?:[01-2]?\d|30|31) |)@Month @YYYY ?(?:-||&ndash;) ?((?:[01-3]?\d|30|31) |)@Month @YYYY(?=[^-\w/])/gi, "$1$2@FullMonth1 @YYYY1 – $3@FullMonth2 @YYYY2");
  // stripping – {{dts}} serves no purpose inside date parameters
ohc_regex(/([^-\w/])@Month @Day(, (?:19|20)\d\d) ?(?:-||&ndash;) ?@Month @Day, @YYYY(?=[^-\w/])/gi, "$1@FullMonth1 @Day1$2 – @FullMonth2 @Day2, @YYYY");
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*format=(?:dmy|mdy)\s*\|\s*([|}]*)\}\}(?=\s*[|}])/gi, "$1$2");
ohc_regex(/([^-\w/])@Day @Month,?( (?:19|20)\d\d) ?(?:-||&ndash;) ?@Day @Month @YYYY(?=[^-\w/])/gi, "$1@Day1 @FullMonth1$2 – @Day2 @FullMonth2 @YYYY");
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*([|}]*)(?:\|\s*format=(?:dmy|mdy)\s*|)\}\}(?=\s*[|}])/gi, "$1$2");
ohc_regex(/([^-\w/])@Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month,? @YYYY(?=[^-\w/])/gi, "$1@FullMonth1$2 – @FullMonth2 @YYYY");
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*format=(?:dmy|mdy)\s*\|\s*@YYYY(\s*\|\s*|-)@MM(\s*\|\s*|-)@DD\s*\}\}(?=\s*[|}])/gi, "$1@YYYY-@MM-@DD ");
ohc_regex(/([^-\w/])((?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month @YYYY(?=[^-\w/])/gi, "$1$2 – @FullMonth @YYYY");
ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*@YYYY(\s*\|\s*|-)@MM(\s*\|\s*|-)@DD\s*\|\s*format=(?:dmy|mdy)\s*\}\}(?=\s*[|}])/gi, "$1@YYYY-@MM-@DD ");
}


ohc_regex(/([ ]\(|\|\s*)@Day @Month @YYYY(?=\)\W|\s*[|\n])/gi, "$1@Day @FullMonth @YYYY");
// format parameter must be 'dmy' or 'mdy'
ohc_regex(/([ ]\(|\|\s*)@Month @Day,? @YYYY(?=\)\W|\s*[|\n])/gi, "$1@FullMonth @Day, @YYYY");
function ohc_fix_gr_template(format)
ohc_regex(/([ ]\((?:c\. |))@Month @YYYY ?(?:-|–|&nbsp;) ?@Day @Month @YYYY(?=\)\W)/gi, "$1@FullMonth1 @YYYY1 – @Day @FullMonth2 @YYYY2");
{
ohc_regex(/([ ]\((?:c\. |))@Month @YYYY ?(?:-|–|&nbsp;) ?@Month @YYYY(?=\)\W)/gi, "$1@FullMonth1 @YYYY1 – @FullMonth2 @YYYY2");
// GR - date formatting parameter
ohc_regex(/([ ]\((?:c\. |))@YYYY ?(?:-|–|&nbsp;) ?@Month @YYYY(?=\)\W)/gi, "$1@YYYY1 – @FullMonth @YYYY2");
// per {GR} doc, insert date formatting param
ohc_regex(/([ ]\((?:c\. |))@Month ?(?:-|–|&nbsp;) ?@Month @YYYY(?=\)\W)/gi, "$1@FullMonth1 – @FullMonth2 @YYYY");
regex(/(\{\{GR\|\d\d?)(?!\|date)/gi, '$1|dateform=' + format);
ohc_regex(/([ ]\((?:c\. |))@Month @YYYY(?=\)\W)/gi, "$1@FullMonth @YYYY");
}
}


function ohc_abbrev_ref_dates()
function ohc_dates_to_dmy()
{
{
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month @YYYY(?=\s*[|}])/gi, "$1@Day @Mon @YYYY");
regex(/\|df=[mdy]{3}(?:-all|)(?=\s*[|}])/gi, '');
ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))([12]?\d|30|31) (জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগষ্ট|অক্টোবর|Oct|নভেম্বর|ডিসেম্বর)(?:r?uary|ch|il|[ey]|ust|(?:t?em|o)ber)( (?:19\d|20[01])\d)(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2 $3$4");
regex(/\|format=mdy/gi, '|format=dmy');
ohc_regex(/([ ]\()@Day @Month @YYYY([^-\w\/])/gi, "$1@Day @Mon @YYYY$2");
//change start and end templates; vgrelease new v=2 or mdy is default
regex(/(\{\{(?:start date|end date)[^|}]*\|)df=ye?s?\|([^}]*df=ye?s?)/gi, '$1$2');
regex(/(\{\{vgrelease new[^|}]*\|)(?:v=1\||)([A-Z]{2,3}\|)/g, '$1v=2|$2');
ohc_regex(/(\|\s*(?:begin|end|first|last)\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Day @Month @YYYY"); //spotted at [[Template:Infobox recurring event]]
   
   
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day, @YYYY(?=\s*[|}])/gi, "$1@Mon @Day, @YYYY");
//change birth and death templates
ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))(জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগষ্ট|অক্টোবর|Oct|নভেম্বর|ডিসেম্বর)(?:r?uary|ch|il|[ey]|ust|(?:t?em|o)ber) ([12]?\d|30|31),( (?:19\d|20[01])\d)(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2 $3,$4");
regex(/(\{\{(?:(?:Birth|Death) date(?: and age|)|launch|release|start)[^}]*\|)m(f=ye?s?)/gi, '$1d$2'); // substitute df for mf
ohc_regex(/([^-\w\/])@Month @Day, @YYYY([^-\w\/])/gi, '$1@Mon @Day, @YYYY$2');
regex(/(\{\{(?:(?:Birth|Death) date(?: and age|)|launch|release|start|film ?date|Wayback)[\|\d]+)(\}\})/gi, '$1|df=y$2'); //insert df parameter
}
regex(/(\{\{(?:(?:Birth|Death) date(?: and age|)|launch|release|start|film ?date|Wayback)[\|\d]+\|)df=ye?s?\|([^}]*df=ye?s?)/gi, '$1$2'); //put date format parameter at the end
   
regex(/(\{\{(?:start date|end date)\|)df=ye?s?\|((?:1[789]|20)\d{2}\}\})/gi, '$1$2');  //date format parameter not needed – year only
//not currently used
 
function ohc_abbrev_all_dates()
//convert date ranges (md,d,d-dy to d,d,d-dmy; md,d,d-d to d,d,d-dm; md,d,d to d,d,dm)
{
ohc_regex(/(\D\W)@Month((?:\s@day?,?){1,6}),?(\/|\s?(?:[-–]|&ndash;)\s?|(?:[ _]|&nbsp;)(?:and|&|to|or)(?:[ _]|&nbsp;)+?)@Day,?\s(?:of\s)?(@yyyy\W\D)/gi, "$1$2$3@Day @LMonth $4");
ohc_regex(/([^-\w/])@Day @Month @YYYY(?=[^-\w/])/gi, '$1@Day @Mon @YYYY');
ohc_regex(/(\D\W)@Month((?:\s@day?,?){1,6}),?(\/|\s?(?:[-–]|&ndash;)\s?|(?:[ _]|&nbsp;)(?:and|&|to|or)(?:[ _]|&nbsp;)+?)@Day(?=\W\D)/gi, "$1$2$3@Day @LMonth");
ohc_regex(/([^-\w/])@Month @Day, @YYYY(?=[^-\w/])/gi, '$1@Mon @Day, @YYYY');
}


//not currently used
// ohc_regex(/(\D\W)@Month((?:\s@day?,?){1,6}) @Day(?=\W\D)/gi, "$1$2 @Day @LMonth"); //disabling as unlikely and ungrammatical constructions causing false positives
function ohc_dmy_publication_dates()
{
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day,? @YYYY/gi, "$1@Day @Month @YYYY"); // conversion of dates in references outside of the protection loop (eg for quotations etc.)
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:\[\[)?@YYYY(?:\]\][-–]\[\[|[-–])@MM[-–]@DD(?:\]\])?(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
//replace ISO dates (within parentheses) only within refs
ohc_regex(/(<ref[^>]*>[^<]+?)([ ]\()@YYYY-@MM-@DD(\))(\W[^<]*?<\/ref>)/gi, "$1$2@Day @Month @YYYY$3$4");
}


function ohc_mdy_publication_dates()
//'md, md,' to 'dm, dm,'
{
ohc_regex(/(\D\W)@Month @Day, @Month @Day(?=[,\.]\W\D)/gi, "$1@Day1 @LMonth1, @Day2 @LMonth2");
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month @YYYY/gi, "$1@Month @Day, @YYYY"); // conversion of dates in references outside of the protection loop (eg for quotations etc.)
 
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:\[\[)?@YYYY(?:\]\][-–]\[\[|[-–])@MM[-–]@DD(?:\]\])?(?=\s*[|}])/gi, "$1@Month @Day, @YYYY");  
//convert simple mdy dates to dmy
//replace ISO dates (within parentheses) only within refs
ohc_regex(/(p(?:g?\.?|age) ?\d+|p(?:p\.?|ages) ?\d+[-–]\d+), @Month((?:\s@day?,?){1,6}) @Day(?=\W\D)/gi, "$1. $2 @Day @LMonth");
ohc_regex(/(<ref[^>]*>[^<]+?)([ ]\()@YYYY-@MM-@DD(\))(\W[^<]*?<\/ref>)/gi, "$1$2@Month @Day, @YYYY$3$4");
ohc_regex(/(\D\W)@Month\s@Day,?\s@Year(\s?(?:AD|BC|CE|BCE)\W\D)/gi, "$1@Day @LMonth @Year$2");
}
ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Month\s@Day,?\s@YYYY(?=\W\D)/gi, "$1@Day @LMonth @Year");
ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Month\s@Day(?=\W\D)/gi, "$1@Day @LMonth");


function ohc_Bigendian_ref_dates() {
//Month+day_number " 7th মার্চ" -> "7 মার্চ"
// Add a tag to the summary box
ohc_regex(/(\D\W)@Day\s@Month\s@YYYY(?=\W\D)/gi, "$1@Day @LMonth @Year");
regex(/(\{\{use (?:mdy|dmy) dates)(?:\|cs1-dates=\w{1,2}|)(\|[^\}\|]+\}\})/gi, '$1|cs1-dates=y$2');
ohc_regex(/(\D\W)@Day\s@Month(?=\W\D)/gi, "$1@Day @LMonth");
}
ohc_regex(/(\D\W)@Month\s@Day,?\s@Year(?=\W\D)/gi, "$1@Day @LMonth @Year");


/** ------------------------------------------------------------------------ **/
//dates with embedded nbsp
/// EDIT SUMMARIES & USE DMY TEMPLATE
ohc_regex(/(\D\W)@Month([ _]|&nbsp;)(\d{1,2},(?: |&nbsp;)\d{1,2}(?:\s(?:and|&|to|or)(?:[ _]|&nbsp;))\d{1,2})(?=[^|\]\w])/gi, '$1$3$2@LMonth ');
// this function modified 2019-03-27 from [[Special:Permalink/846525463]]
ohc_regex(/(\D\W)@Month([ _]|&nbsp;|{{(?:break|nbsp)}})@Day,([ _]|&nbsp;|{{(?:break|nbsp)}})@YYYY(?=[^|\]\w])/gi, '$1@Day$2@Month$3@Year');
// format parameter must be 'dmy' or 'mdy'
function ohc_use_dates_template(format)  
{
var txt = document.editform.wpTextbox1;
// current month-year
var currentDate = new Date();
var currmonth = currentDate.getMonth();
var curryear = currentDate.getFullYear();
var myMonths = ["জানুয়ারি", "ফেব্রুয়ারি", "মার্চ", "এপ্রিল", "মে", "জুন", "জুলাই", "আগষ্ট", "সেপ্টেম্বর", "অক্টোবর", "নভেম্বর", "ডিসেম্বর"];
var curryyyymm = myMonths[currmonth] + ' ' + curryear;


// step 1: normalize redirect template names to canonical template names 'Use dmy dates' or 'Use mdy dates' according to 'format' argument
//remove comma
// rename redirects 'dmy', 'mdy', 'usedmydates', 'usemdydates' ('usedmydates' and 'usemdydates' are not currently listed as redirects but might be encountered?)
ohc_regex(/(\D\W)@Day\s@Month,\s?@Year(?=\W\D)/gi, "$1@Day @LMonth @Year");
regex(/\{\{ *(?:use(?:dmy|mdy)dates|dmy|mdy) *([\|\}])/gi, '{{Use ' + format + ' dates$1');
// rename redirects 'usedmy', 'usemdy', 'use dmy', 'use mdy' to canonical form
regex(/\{\{ *use *(?:dmy|mdy) *([\|\}])/gi, '{{Use ' + format + ' dates$1');
// strip leading / trailing whitespace from 'use xxx dates'
regex(/\{\{ *use (?:dmy|mdy) dates *([\|\}])/gi, '{{Use ' + format + ' dates$1');


// step 2: look for a canonical template name (the above might not have had anthing to work on) ; if found continue, write new template else
// remove "the" from "on the dd month"
var rxpdd = new RegExp("{{Use " + format + " dates", "gi"); // here we search for canonical form {{use xxx dates}} that has current date
ohc_regex(/(on |by )the @Day\s@Month(?=[ ,\)\.])/gi, "$1@Day @LMonth");
var dflagfound = txt.value.search(rxpdd);
if (dflagfound === -1) {
txt.value = '{{Use ' + format + ' dates|date=' + curryyyymm + '}}\r\n' + txt.value; // not found so insert new template at top of wikitext
return; // and done
}


// step 3: rewrite existing canonical templates; add or refresh |date= to current month year; preserve |cs1-dates= as is
//remove space from date range conversion
regex(/(\{\{use (?:dmy|mdy) dates)\| *date *=[^\|]*\| *cs1\-dates *= *([^\|\}]*?) *\}\}/gi, '$1|date=' + curryyyymm + '|cs1-dates=$2}}'); // with |date= followed by |cs1-dates=
ohc_regex(/(\D ) @Day(\/|\s?(?:[-–]|&ndash;)\s?|(?:[ _]|&nbsp;)(?:and|&|to|or)(?:[ _]|&nbsp;)+?)/gi, "$1@Day$2");
regex(/(\{\{use (?:dmy|mdy) dates)\| *cs1\-dates *= *([^\|\}]*?) *\| *date *=[^\}]*\}\}/gi, '$1|date=' + curryyyymm + '|cs1-dates=$2}}'); // with |cs1-dates= followed by |date=
regex(/(\{\{use (?:dmy|mdy) dates)\| *date *=[^\|\}]*\}\}/gi, '$1|date=' + curryyyymm + '}}'); // with |date=
regex(/(\{\{use (?:dmy|mdy) dates)\| *cs1\-dates *= *([^\|\}]*?) \}\}/gi, '$1|date=' + curryyyymm + '|cs1-dates=$2}}'); // with |cs1-dates
regex(/(\{\{use (?:dmy|mdy) dates)\}\}/gi, '$1|date=' + curryyyymm + '}}'); // no parameters so add |date=curryyyymm
regex(/(\{\{[\t_ ]*use[\t_ ]+(?:dmy|mdy)[\t_ ]+dates[^{}]*\}\})([\r\n\t ]*)(\{\{[\t ]*short description[^{}]*\}\})/gi, '$3$2$1'); // repositioning "short description" template at the top
}
}


function ohc_dates_to_mdy()
{
//change birth and death templates – mf=y is the default; vgrelease new v=2 or mdy is default
regex(/\|df=[mdy]{3}(?:-all|)(?=\s*[|}])/gi, '');
regex(/\|df=y(?:es|)(?=[|}\s])/gi, '');
regex(/(mf=y(?:es|)\|[^}]*\|)(?:mf=y(?:es|)\|)/gi, '$1');
regex(/(\{\{vgrelease new[^|}]*\|)(?:v=2\||)([A-Z]{2,3}\|)/g, '$1$2');
ohc_regex(/(\|\s*(?:begin|end|first|last)\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Month @Day, @YYYY");


//convert date ranges (d,d,d-dmy to md,d,d-dy; d,d,d-dm to md,d,d-d; dm,d,d to md,d,d)
ohc_regex(/(\D\W)@Day((?:, @day){0,5})(\/|\s?(?:[-–]|&ndash;)\s?|\s(?:and|&|to|or)\s+?)@Day\s@Month,? @YYYY(?=\W\D)/gi, "$1@LMonth @Day1$2$3@Day2, @YYYY");
ohc_regex(/(\D\W)@Day((?:, @day){0,5})(\/|\s?(?:[-–]|&ndash;)\s?|\s(?:and|&|to|or)\s+?)@Day\s@Month(?=\W\D)/gi, "$1@LMonth @Day1$2$3@Day2");
// ohc_regex(/(\D\W)@Day((?:, @day){0,5})\s@Month,? @YYYY(?=\W\D)/gi, "$1@LMonth @Day1$2, @YYYY"); //disabling as unlikely and ungrammatical constructions causing false positives
// ohc_regex(/(\D\W)@Day((?:, @day){0,5})\s@Month(?=\W\D)/gi, "$1@LMonth @Day1$2"); //disabling as unlikely and ungrammatical constructions causing false positives


/** ------------------------------------------------------------------------ **/
//'dm, dm,' to 'md, md,'
/// DATE PROTECTION
ohc_regex(/(\D\W)@Day @Month, @Day @Month(?=[,\.]?\W\D)/gi, "$1@LMonth1 @Day1, @LMonth2 @Day2");


var linkmap = [];
//convert simple dmy dates to mdy
ohc_regex(/(p(?:g?\.?|age) ?\d+|p(?:p\.?|ages) ?\d+[-–]\d+), @Month((?:\s@day?,?){1,6}) @Day(?=\W\D)/gi, "$1. @LMonth $2 @Day");
ohc_regex(/(\D\W)@Day(\s|&nbsp;)@Month,?(\s|&nbsp;)@Year(?=\W\D)/gi, "$1@LMonth$2@Day,$3@Year");
ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Day[ ]+@Month,?\s@YYYY(?=\W\D)/gi, "$1@LMonth @Day, @Year");
ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Day[ ]+@Month(?=\W\D)/gi, "$1@LMonth @Day");


function ohc_protect_dates()
//Month+day_number "মার্চ 7th" -> "মার্চ 7"
ohc_regex(/(\D\W)@Month\s@Day@th?,?\s@YYYY(?=\W\D)/gi, "$1@LMonth @Day, @YYYY");
ohc_regex(/(\D\W)@Day@th?(\s|&nbsp;)@Month(\s|&nbsp;)@YYYY(?=\W\D)/gi, "$1@LMonth$2@Day,$3@YYYY");
ohc_regex(/(\D\W)@Month(\s|&nbsp;)@Day(?=\W\D)/gi, "$1@LMonth$2@Day");
ohc_regex(/(\D\W)@Day@th?(\s|&nbsp;)@Month([,\.])(?=\W\D)/gi, "$1@LMonth$2@Day$3");
 
//add comma where missing
ohc_regex(/(\D\W)@Month\s@Day,?\s@YYYY,?(?=\s\w)/gi, "$1@LMonth @Day, @YYYY,");
//rem superfluous comma where applicable
ohc_regex(/(\D[^\w\/])@Month\s@ZD,,(?=\W\D|\b)/gi, "$1@LMonth @Day,");
}
 
function ohc_fix_dmy_redundancies()
{
{
// protects dates within links, quotes, etc
//month-range redundancies (repeating month names)
// the sensitive part is stored and replaced with a unique identifier,
ohc_regex(/([\D]@dd)@th? @Month[ ]{1,2}((?:to|and|-|–)[ ]{1,2}@dd)@th? @Month/, "$1 $2 @LMonth", function(d1, d2) {
// which is later replaced with the stored part.
if (d1.m == d2.m) return true;
return false;
var protect_function = function(s, begin, replace, end) {
});
linkmap.push(replace);
}
return begin + "⍌"+(linkmap.length-1)+"⍍" + end;
//not currently used
};
function ohc_fix_mdy_redundancies()
//\|x=
{
regex(/(<timeline>)([\s\S]*?)(<\/timeline>)/gi, protect_function);
//month-range redundancies (repeating month names)
regex(/(<!--)([^<\{\}]*?)(-->)/gi, protect_function);
ohc_regex(/(@Month[ ]{1,2}@dd)@th? (to|and|-|)[ ]{1,2}@Month[ ]{1,2}@DD@th?/, "$1 $2 @LDay", function(d1, d2) {
regex(/(<math>)([\s\S]*?)(<\/math>)/gi, protect_function);
if (d1.m == d2.m) return true;
regex(/((?:{(?:Wikimedia |)Commons ?|C ?))(Cat(?:egory|))\|[^{}*](})/gi, protect_function);
return false;
regex(/(<ref)([^>]+)(>)/gi, protect_function);
});
regex(/((?:Category|Image|File):)([^|\]]*)([|\]])/gi, protect_function);
}
regex(/(\{(?:See ?also|Main))(\|[^}]*)(\})/gi, protect_function);
 
regex(/(\{\{(?:double ?|external ?|wide ?)image\s?\|)([^}]+)(\})/gi, protect_function);
function ohc_expand_ref_dates()
regex(/(\{\{(?:harvnb|r|wikisource)\|)([^}]+)(\})/gi, protect_function);
{
regex(/(\{\{(?:Canadian federal by-election))([^}]+)(\}\})/gi, protect_function);
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @YYYY(?=\s*[|}])/gi, "$1@FullMonth @YYYY");
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month @YYYY(?=\s*[|}])/gi, "$1@Day @FullMonth @YYYY");
regex(/(\[(?:https?:|ftp:))([^\]]*)(\])/gi, protect_function);
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day, @YYYY(?=\s*[|}])/gi, "$1@FullMonth @Day, @YYYY");
regex(/(>[ ]*(?:https?:|ftp:))([^< >\]]*)([ ]*<)/gi, protect_function);
 
// regex(/(https?:|ftp:)([^\s\]]*)([\s\]])/gi, protect_function);
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)((?:[01-2]?\d|30|31) |)@Month @YYYY ?(?:-||&ndash;) ?((?:[01-3]?\d|30|31) |)@Month @YYYY(?=\s*[|}])/gi, "$1$2 @FullMonth1 @YYYY1 – $3@FullMonth2 @YYYY2");
regex(/(<blockquote>)([\s\S]*?)(<\/blockquote>)/gi, protect_function);
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day(, (?:19|20)\d\d) ?(?:-||&ndash;) ?@Month @Day, @YYYY(?=\s*[|}])/gi, "$1@FullMonth1 @Day1$2 – @FullMonth2 @Day2, @YYYY");
regex(/(<noinclude>)([\s\S]*?)(<\/noinclude>)/gi, protect_function);
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Day @Month @YYYY(?=\s*[|}])/gi, "$1@Day1 @FullMonth1$2 – @Day2 @FullMonth2 @YYYY");
regex(/(<gallery)([\s\S]*?)(<\/gallery>)/gi, protect_function);
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month,? @YYYY(?=\s*[|}])/gi, "$1@FullMonth1$2 – @FullMonth2 @YYYY");
regex(/(<poem>)([\s\S]*?)(<\/poem>)/gi, protect_function);
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)((?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month @YYYY(?=\s*[|}])/gi, "$1@$2 – @FullMonth @YYYY");
regex(/(\{[^\{]{0,6}(?:quot[^|]{1,7}\s?|sic)\|)([^}]+)(\})/gi, protect_function);
regex(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _]name|image[ _]file|img|map\d|pic)\s*=)([^|}]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|(?:trans-?|)title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|(?:trans-?|)title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:season)\s*=)(\s*\[\[[^\]]*\]\]\s*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:[xy])\s*=)(\s*[^\|]+\s*)(\|)/gi, protect_function);
regex(/(\{\{navsource\|)([^}]+)(\})/gi, protect_function);
regex(/(\{\{(?:singlechart)\|)([^}]+)(\})/gi, protect_function);
regex(/(\{\{(?:defaultsort|graph):)([^}]+)(\})/gi, protect_function);
regex(/(["“])([^"”\n]*)(["”])/gi, protect_function);
regex(/(.)(\(\{\{by\|[12]\d{3}\}\}[-–]\{\{by\|)([12]\d{3}[ ]*\}\}\))/gi, protect_function);
regex(/(.)(\(\{\{by\|[12]\d{3}\}\}(?:[-–]present|))(\))/gi, protect_function);
regex(/(\[\[)(4AD)(\]\]|\|)/gi, protect_function);


//retraining redirects containing a date
ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))((?:[01-2]?\d|30|31) |)@Month @YYYY ?(?:-|–|&ndash;) ?((?:[01-3]?\d|30|31) |)@Month @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2@FullMonth1 @YYYY1 – $3@FullMonth2 @YYYY2");
regex(/(\[\[)(?:সেপ্টেম্বর 3 Society)(\]\]|\|)/gi, '$1Jiusan Society$2');
ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))@Month @Day(, (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month @Day, @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1@FullMonth1 @Day1$2 – @FullMonth2 @Day2, @YYYY");
regex(/(\[\[)(?:জুন 4th incident)(\]\]|\|)/gi, '$1Tiananmen Square protests of 1989$2');
ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))@Day @Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Day @Month @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1@Day1 @FullMonth1$2 – @Day2 @FullMonth2 @YYYY");
regex(/(\[\[)(?:5@th? অক্টোবর (?:\(Serbia\)|overthrow))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2');
ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))@Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month,? @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1@FullMonth1$2 – @FullMonth2 @YYYY");
regex(/(\[\[)(?:অক্টোবর 5@th?(?: \(Serbia\)| overthrow|, 2000))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2');
ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))((?:19|20)\d\d) ?(?:-||&ndash;) ?@Month @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2 – @FullMonth @YYYY");
}


//protect alternate meanings of 'মে' and 'মার্চ' (note: not case insensitive)
function ohc_expand_all_dates()
// ohc_regex(/([^\w])(@day,?\s{0,3}মে)([^\w][^\d])/g, protect_function); //disabled 26 মে – not case senstitve: false negatives in converting dates in মে
{
ohc_regex(/([^\w])(মার্চ\s@day)(\s(?:mile|kilomet|met))/g, protect_function);
ohc_regex(/([^-\w/])@Month @YYYY(?=[^-\w/])/gi, '$1@FullMonth @YYYY');
ohc_regex(/([^-\w/])@Day @Month @YYYY(?=[^-\w/])/gi, '$1@Day @FullMonth @YYYY');
ohc_regex(/([^-\w/])@Month @Day, @YYYY(?=[^-\w/])/gi, '$1@FullMonth @Day, @YYYY');


//protect all links containing a date and some text
ohc_regex(/([^-\w/])((?:[01-2]?\d|30|31) |)@Month @YYYY ?(?:-|–|&ndash;) ?((?:[01-3]?\d|30|31) |)@Month @YYYY(?=[^-\w/])/gi, "$1$2@FullMonth1 @YYYY1 – $3@FullMonth2 @YYYY2");
ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@day[^\]\|\n]+?@fullmonth[^\]\|\n]*)(\]\]|\|)/gi, protect_function);
ohc_regex(/([^-\w/])@Month @Day(, (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month @Day, @YYYY(?=[^-\w/])/gi, "$1@FullMonth1 @Day1$2 – @FullMonth2 @Day2, @YYYY");
ohc_regex(/(\[\[)([^\]\|\n]*?@day[^\]\|\n]+?@fullmonth(?:,? @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function);
ohc_regex(/([^-\w/])@Day @Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Day @Month @YYYY(?=[^-\w/])/gi, "$1@Day1 @FullMonth1$2 – @Day2 @FullMonth2 @YYYY");
ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@fullmonth[^\]\|\n]+?@day[^\]\|\n]*)(\|)/gi, protect_function);
ohc_regex(/([^-\w/])@Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month,? @YYYY(?=[^-\w/])/gi, "$1@FullMonth1$2 – @FullMonth2 @YYYY");
ohc_regex(/(\[\[)([^\]\|\n]*?@fullmonth[^\]\|\n]+?@day(?:, @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function);
ohc_regex(/([^-\w/])((?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month @YYYY(?=[^-\w/])/gi, "$1$2 – @FullMonth @YYYY");


//protects certain dates
ohc_regex(/([ ]\(|\|\s*)@Day @Month @YYYY(?=\)\W|\s*[|\n])/gi, "$1@Day @FullMonth @YYYY");
regex(/(\[\[)(4AD)([\s\S])/gi, protect_function);
ohc_regex(/([ ]\(|\|\s*)@Month @Day,? @YYYY(?=\)\W|\s*[|\n])/gi, "$1@FullMonth @Day, @YYYY");
regex(/([\s\S])(মার্চ (?:8|14) Alliance)([\s\S])/gi, protect_function);
ohc_regex(/([ ]\((?:c\. |))@Month @YYYY ?(?:-|–|&nbsp;) ?@Day @Month @YYYY(?=\)\W)/gi, "$1@FullMonth1 @YYYY1 – @Day @FullMonth2 @YYYY2");
regex(/([\s\S])(23rd মার্চ 1931: Shaheed)([\s\S])/gi, protect_function);
ohc_regex(/([ ]\((?:c\. |))@Month @YYYY ?(?:-|–|&nbsp;) ?@Month @YYYY(?=\)\W)/gi, "$1@FullMonth1 @YYYY1 – @FullMonth2 @YYYY2");
regex(/([\s\S])(Long মার্চ [1-7])([\s\S])/gi, protect_function);
ohc_regex(/([ ]\((?:c\. |))@YYYY ?(?:-|–|&nbsp;) ?@Month @YYYY(?=\)\W)/gi, "$1@YYYY1 – @FullMonth @YYYY2");
regex(/([\s\S])(National সেপ্টেম্বর 11 Memorial & Museum)([\s\S])/gi, protect_function);
ohc_regex(/([ ]\((?:c\. |))@Month ?(?:-|–|&nbsp;) ?@Month @YYYY(?=\)\W)/gi, "$1@FullMonth1 – @FullMonth2 @YYYY");
regex(/([\s\S])(Queen Elizabeth II সেপ্টেম্বর 11th Garden)([\s\S])/gi, protect_function);
ohc_regex(/([ ]\((?:c\. |))@Month @YYYY(?=\)\W)/gi, "$1@FullMonth @YYYY");
regex(/([\s\S])(Bombay মার্চ 12)([\s\S])/gi, protect_function);
}
regex(/([\s\S])(movement 2 জুন)([\s\S])/gi, protect_function);
regex(/([\s\S])(6th\sof অক্টোবর City)([\s\S])/gi, protect_function);
regex(/([\s\S])(Party Workers' Liberation Front 30th of মে)([\s\S])/gi, protect_function);
regex(/([\s\S])(4th\sof আগষ্ট regime)([\s\S])/gi, protect_function);
regex(/([\s\S])(19th\sof এপ্রিল movement)([\s\S])/gi, protect_function);
regex(/([\s\S])(জুন 4th (?:incident|museum))([\s\S])/gi, protect_function);
regex(/([\s\S])(The Battle Of Marston Moor \(জুলাই 2nd,? 1644\))([\s\S])/gi, protect_function);
regex(/([\s\S])(Night of জানুয়ারি 16th)([\s\S])/gi, protect_function);
regex(/([\s\S])(Observance of 5th নভেম্বর Act)([\s\S])/gi, protect_function);
regex(/(\[\[)(13 মে incident)(\|)/gi, protect_function);
regex(/(\'\'\')(22nd\sof মে)(\'\'\')/gi, protect_function);
regex(/(\[\[)(22nd\sof মে \(film\))([|\]\'])/gi, protect_function);
regex(/(\[\[)(জুলাই 12, 2007, Baghdad airstrike)(\|)/gi, protect_function);
regex(/(\[\[)(নভেম্বর 1828)(\]\])/gi, protect_function);
regex(/(.)(4th\sof জুলাই)(.)/gi, protect_function);
regex(/(\[\[)((?:2300|2000)\s?AD)(\]\])/gi, protect_function);
regex(/(\[\[)(29 ফেব্রুয়ারি)(\]\])/gi, protect_function);
regex(/(\[\[)(ফেব্রুয়ারি 29)(\]\])/gi, protect_function);


// works names
function ohc_abbrev_ref_dates()
// regex(/(.)(protect string)(.)/gi, protect_function);
{
regex(/(.)(11\/22\/63)(.)/gi, protect_function);
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month @YYYY(?=\s*[|}])/gi, "$1@Day @Mon @YYYY");
regex(/(.)(1\.1\.1994)(.)/gi, protect_function);
ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))([12]?\d|30|31) (জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগষ্ট|অক্টোবর|Oct|নভেম্বর|ডিসেম্বর)(?:r?uary|ch|il|[ey]|ust|(?:t?em|o)ber)( (?:19\d|20[01])\d)(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2 $3$4");
regex(/([\s\S])(2\.13\.61)([\s\S])/gi, protect_function);
ohc_regex(/([ ]\()@Day @Month @YYYY([^-\w\/])/gi, "$1@Day @Mon @YYYY$2");
// regex(/(.)(4th of জুলাই, Asbury)(.)/gi, protect_function); //protected above globally
regex(/(.)(26 অক্টোবর 1993)(.)/gi, protect_function);
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day, @YYYY(?=\s*[|}])/gi, "$1@Mon @Day, @YYYY");
regex(/(\[\[|\'\')(জুন 1, 1974)(.)/gi, protect_function);
ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))(জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগষ্ট|অক্টোবর|Oct|নভেম্বর|ডিসেম্বর)(?:r?uary|ch|il|[ey]|ust|(?:t?em|o)ber) ([12]?\d|30|31),( (?:19\d|20[01])\d)(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2 $3,$4");
regex(/(\[\[|\'\')(জুলাই 15, 1972)(.)/gi, protect_function);
ohc_regex(/([^-\w\/])@Month @Day, @YYYY([^-\w\/])/gi, '$1@Mon @Day, @YYYY$2');
regex(/(\[\[|\'\')(আগষ্ট 1914)(.)/gi, protect_function);
}
ohc_regex(/(\[\[|\'\')(@fullmonth @dd@th? \((?:@yyyy |)film\)(?:\|@fullmonth @dd@th?|))([\s\S])/gi, protect_function);
ohc_regex(/(\[\[|\'\')(@dd@th? @fullmonth \((?:@yyyy |)film\)(?:\|@dd@th? @fullmonth|))([\s\S])/gi, protect_function);
//not currently used
// regex(/(Les Bains Douches 18)( ডিসেম্বর 1979)(.)/gi, protect_function);
function ohc_abbrev_all_dates()
regex(/(আগষ্ট)( 7, 4:15)(.)/gi, protect_function);
{
regex(/(In Concert, Zürich, অক্টোবর)( 28, 1979)(.)/gi, protect_function);
ohc_regex(/([^-\w/])@Day @Month @YYYY(?=[^-\w/])/gi, '$1@Day @Mon @YYYY');
regex(/(CBGB OMFUG Masters: Live জুন)( 29, 2001)(.)/gi, protect_function);
ohc_regex(/([^-\w/])@Month @Day, @YYYY(?=[^-\w/])/gi, '$1@Mon @Day, @YYYY');
ohc_regex(/(Live at [\w ]*,? [1-3]\d)( @fullmonth)(.)/gi, protect_function);
}
ohc_regex(/(Live at [\w ]*,? @fullmonth)( @dd)(.)/gi, protect_function);
ohc_regex(/(Bootmoon Series: [\w ]*[-–] @fullmonth)( @day, @YYYY)(.)/gi, protect_function);


// expressions and grammatical strings including modal "মে"
//not currently used
regex(/(\W)((?:\d{1,3}) মে)((?: have(?: \w+|)|) be)/g, protect_function);
function ohc_dmy_publication_dates()
regex(/(\W)((?:\d{3}|3[2-9]|[4-9]\d)\/\d ডিসেম্বর(?:l\.?|))(\W)/gi, protect_function);
{
regex(/(\W)((?:\d{2,3})\/\d ডিসেম্বর(?:l\.?|))( \(\d\d? overs)/gi, protect_function);
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day,? @YYYY/gi, "$1@Day @Month @YYYY"); // conversion of dates in references outside of the protection loop (eg for quotations etc.)
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:\[\[)?@YYYY(?:\]\][-]\[\[|[-])@MM[-–]@DD(?:\]\])?(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
//replace ISO dates (within parentheses) only within refs
ohc_regex(/(<ref[^>]*>[^<]+?)([ ]\()@YYYY-@MM-@DD(\))(\W[^<]*?<\/ref>)/gi, "$1$2@Day @Month @YYYY$3$4");
}
}


/** ------------------------------------------------------------------------ **/
function ohc_mdy_publication_dates()
/// DATE PROTECTION FOR ALL REF SECTION
 
var linkmap = [];
 
function ohc_protect_dates_ref()  
{
{
// protects dates within links, quotes, etc
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month @YYYY/gi, "$1@Month @Day, @YYYY"); // conversion of dates in references outside of the protection loop (eg for quotations etc.)
// the sensitive part is stored and replaced with a unique identifier,
ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:\[\[)?@YYYY(?:\]\][-–]\[\[|[-–])@MM[-–]@DD(?:\]\])?(?=\s*[|}])/gi, "$1@Month @Day, @YYYY");
// which is later replaced with the stored part.
//replace ISO dates (within parentheses) only within refs
ohc_regex(/(<ref[^>]*>[^<]+?)([ ]\()@YYYY-@MM-@DD(\))(\W[^<]*?<\/ref>)/gi, "$1$2@Month @Day, @YYYY$3$4");
}


var protect_function = function (s, begin, replace, end) {
function ohc_Bigendian_ref_dates() {
linkmap.push(replace);
// Add a tag to the summary box
return begin + "⍌" + (linkmap.length - 1) + "⍍" + end;
regex(/(\{\{use (?:mdy|dmy) dates)(?:\|cs1-dates=\w{1,2}|)(\|[^\}\|]+\}\})/gi, '$1|cs1-dates=y$2');
};
}


regex(/(<ref\s?(?:>|name=[^>]+))([^<]+)(<\/ref>)/gi, protect_function);
/** ------------------------------------------------------------------------ **/
regex(/(<timeline>)([\s\S]*?)(<\/timeline>)/gi, protect_function);
/// EDIT SUMMARIES & USE DMY TEMPLATE
regex(/(<math>)([\s\S]*?)(<\/math>)/gi, protect_function);
// this function modified 2019-03-27 from [[Special:Permalink/846525463]]
regex(/((?:{(?:Wikimedia |)Commons ?|C ?))(Cat(?:egory|))\|[^{}*](})/gi, protect_function);
// format parameter must be 'dmy' or 'mdy'
regex(/((?:Category|Image|File):)([^|\]]*)([|\]])/gi, protect_function);
function ohc_use_dates_template(format)  
regex(/(\{(?:See ?also|Main))(\|[^}]*)(\})/gi, protect_function);
{
regex(/(\{\{(?:double ?|external ?|wide ?)image\s?\|)([^}]+)(\})/gi, protect_function);
var txt = document.editform.wpTextbox1;
regex(/(\{\{(?:harvnb|wikisource)\|)([^}]+)(\})/gi, protect_function);
// current month-year
regex(/(\[(?:https?:|ftp:))([^\]]*)(\])/gi, protect_function);
var currentDate = new Date();
regex(/(>[ ]*(?:https?:|ftp:))([^< >\]]*)([ ]*<)/gi, protect_function);
var currmonth = currentDate.getMonth();
//regex(/(https?:|ftp:)([^\s\]]*)([\s\]])/gi, protect_function);
var curryear = currentDate.getFullYear();
regex(/(<blockquote>)([\s\S]*?)(<\/blockquote>)/gi, protect_function);
var myMonths = ["জানুয়ারি", "ফেব্রুয়ারি", "মার্চ", "এপ্রিল", "মে", "জুন", "জুলাই", "আগষ্ট", "সেপ্টেম্বর", "অক্টোবর", "নভেম্বর", "ডিসেম্বর"];
regex(/(\{[^\{]{0,6}(?:quot[^|]{1,7}\s?|sic)\|)([^}]+)(\})/gi, protect_function);
var curryyyymm = myMonths[currmonth] + ' ' + curryear;
regex(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _]name|image[ _]file|img|pic)\s*=)([^|}]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:season)\s*=)(\s*\[\[[^\]]*\]\]\s*)([|}])/gi, protect_function);
regex(/(\{\{navsource\|)([^}]+)(\})/gi, protect_function);
regex(/(\{\{singlechart\|)([^}]+)(\})/gi, protect_function);
regex(/(\{\{defaultsort:)([^}]+)(\})/gi, protect_function);
regex(/([\s\(>]")([^"\n]*)(")/gi, protect_function);
regex(/([\s\(>]“)([^”\n]*)(”)/gi, protect_function);
regex(/(.)(\(\{\{by\|[12]\d{3}\}\}[-–]\{\{by\|)([12]\d{3}[ ]*\}\}\))/gi, protect_function);
regex(/(.)(\(\{\{by\|[12]\d{3}\}\}(?:[-–]present|))(\))/gi, protect_function);


//retraining redirects containing a date
// step 1: normalize redirect template names to canonical template names 'Use dmy dates' or 'Use mdy dates' according to 'format' argument
regex(/(\[\[)(?:সেপ্টেম্বর 3 Society)(\]\]|\|)/gi, '$1Jiusan Society$2');
// rename redirects 'dmy', 'mdy', 'usedmydates', 'usemdydates' ('usedmydates' and 'usemdydates' are not currently listed as redirects but might be encountered?)
regex(/(\[\[)(?:জুন 4th incident)(\]\]|\|)/gi, '$1Tiananmen Square protests of 1989$2');
regex(/\{\{ *(?:use(?:dmy|mdy)dates|dmy|mdy) *([\|\}])/gi, '{{Use ' + format + ' dates$1');
ohc_regex(/(\[\[)(?:5@th? অক্টোবর (?:\(Serbia\)|overthrow))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2');
// rename redirects 'usedmy', 'usemdy', 'use dmy', 'use mdy' to canonical form
ohc_regex(/(\[\[)(?:অক্টোবর 5@th?(?: \(Serbia\)| overthrow|, 2000))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2');
regex(/\{\{ *use *(?:dmy|mdy) *([\|\}])/gi, '{{Use ' + format + ' dates$1');
// strip leading / trailing whitespace from 'use xxx dates'
regex(/\{\{ *use (?:dmy|mdy) dates *([\|\}])/gi, '{{Use ' + format + ' dates$1');
 
// step 2: look for a canonical template name (the above might not have had anthing to work on) ; if found continue, write new template else
var rxpdd = new RegExp("{{Use " + format + " dates", "gi"); // here we search for canonical form {{use xxx dates}} that has current date
var dflagfound = txt.value.search(rxpdd);
if (dflagfound === -1) {
txt.value = '{{Use ' + format + ' dates|date=' + curryyyymm + '}}\r\n' + txt.value; // not found so insert new template at top of wikitext
return; // and done
}
 
// step 3: rewrite existing canonical templates; add or refresh |date= to current month year; preserve |cs1-dates= as is
regex(/(\{\{use (?:dmy|mdy) dates)\| *date *=[^\|]*\| *cs1\-dates *= *([^\|\}]*?) *\}\}/gi, '$1|date=' + curryyyymm + '|cs1-dates=$2}}'); // with |date= followed by |cs1-dates=
regex(/(\{\{use (?:dmy|mdy) dates)\| *cs1\-dates *= *([^\|\}]*?) *\| *date *=[^\}]*\}\}/gi, '$1|date=' + curryyyymm + '|cs1-dates=$2}}'); // with |cs1-dates= followed by |date=
regex(/(\{\{use (?:dmy|mdy) dates)\| *date *=[^\|\}]*\}\}/gi, '$1|date=' + curryyyymm + '}}'); // with |date=
regex(/(\{\{use (?:dmy|mdy) dates)\| *cs1\-dates *= *([^\|\}]*?) \}\}/gi, '$1|date=' + curryyyymm + '|cs1-dates=$2}}'); // with |cs1-dates
regex(/(\{\{use (?:dmy|mdy) dates)\}\}/gi, '$1|date=' + curryyyymm + '}}'); // no parameters so add |date=curryyyymm
regex(/(\{\{[\t_ ]*use[\t_ ]+(?:dmy|mdy)[\t_ ]+dates[^{}]*\}\})([\r\n\t ]*)(\{\{[\t ]*short description[^{}]*\}\})/gi, '$3$2$1'); // repositioning "short description" template at the top
}


//protect alternate meanings of 'মে' and 'মার্চ' (note: not case insensitive)
ohc_regex(/([^\w])(@day,?\s{0,3}মে)([^\w][^\d])/g, protect_function);
ohc_regex(/([^\w])(মার্চ\s@day)(\s(?:mile|kilomet|met))/g, protect_function);


//protect all links containing a date and some text
ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@day[^\]\|\n]+?@fullmonth[^\]\|\n]*)(\]\]|\|)/gi, protect_function);
ohc_regex(/(\[\[)([^\]\|\n]*?@day[^\]\|\n]+?@fullmonth(?:,? @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function);
ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@fullmonth[^\]\|\n]+?@day[^\]\|\n]*)(\|)/gi, protect_function);
ohc_regex(/(\[\[)([^\]\|\n]*?@fullmonth[^\]\|\n]+?@day(?:, @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function);


//protects certain dates
/** ------------------------------------------------------------------------ **/
regex(/(\[\[)(4AD)([\s\S])/gi, protect_function);
/// DATE PROTECTION
regex(/([\s\S])(মার্চ (?:8|14) Alliance)([\s\S])/gi, protect_function);
 
regex(/([\s\S])(23rd মার্চ 1931: Shaheed)([\s\S])/gi, protect_function);
var linkmap = [];
regex(/([\s\S])(Long মার্চ [1-7])([\s\S])/gi, protect_function);
regex(/([\s\S])(Bombay মার্চ 12)([\s\S])/gi, protect_function);
regex(/([\s\S])(movement 2 জুন)([\s\S])/gi, protect_function);
regex(/([\s\S])(6th\sof অক্টোবর City)([\s\S])/gi, protect_function);
regex(/([\s\S])(Party Workers' Liberation Front 30th of মে)([\s\S])/gi, protect_function);
regex(/([\s\S])(4th\sof আগষ্ট regime)([\s\S])/gi, protect_function);
regex(/([\s\S])(19th\sof এপ্রিল movement)([\s\S])/gi, protect_function);
regex(/([\s\S])(জুন 4th incident)([\s\S])/gi, protect_function);
regex(/([\s\S])(The Battle Of Marston Moor \(জুলাই 2nd,? 1644\))([\s\S])/gi, protect_function);
regex(/([\s\S])(Night of জানুয়ারি 16th)([\s\S])/gi, protect_function);
regex(/([\s\S])(Observance of 5th নভেম্বর Act)([\s\S])/gi, protect_function);
regex(/(\[\[)(13 মে incident)(\|)/gi, protect_function);
regex(/(\'\'\')(22nd\sof মে)(\'\'\')/gi, protect_function);
regex(/(\[\[)(22nd\sof মে \(film\))([|\]\'])/gi, protect_function);
regex(/(\[\[)(জুলাই 12, 2007, Baghdad airstrike)(\|)/gi, protect_function);
regex(/(\[\[)(নভেম্বর 1828)(\]\])/gi, protect_function);
regex(/(.)(4th\sof জুলাই)(.)/gi, protect_function);
regex(/(\[\[)((?:2300|2000)\s?AD)(\]\])/gi, protect_function);
regex(/(\[\[)(29 ফেব্রুয়ারি)(\]\])/gi, protect_function);
regex(/(\[\[)(ফেব্রুয়ারি 29)(\]\])/gi, protect_function);


// works names
function ohc_protect_dates()
//regex(/(.)(protect string)(.)/gi, protect_function);
{
regex(/(.)(11\/22\/63)(.)/gi, protect_function);
// protects dates within links, quotes, etc
regex(/(.)(1\.1\.1994)(.)/gi, protect_function);
// the sensitive part is stored and replaced with a unique identifier,
regex(/([\s\S])(2\.13\.61)([\s\S])/gi, protect_function);
// which is later replaced with the stored part.
//regex(/(.)(4th of জুলাই, Asbury)(.)/gi, protect_function); //protected above globally
regex(/(.)(26 অক্টোবর 1993)(.)/gi, protect_function);
var protect_function = function(s, begin, replace, end) {
regex(/(\[\[|\'\')(জুন 1, 1974)(.)/gi, protect_function);
linkmap.push(replace);
regex(/(\[\[|\'\')(জুলাই 15, 1972)(.)/gi, protect_function);
return begin + "⍌"+(linkmap.length-1)+"⍍" + end;
regex(/(\[\[|\'\')(আগষ্ট 1914)(.)/gi, protect_function);
};
ohc_regex(/(\[\[|\'\')(@fullmonth @dd@th? \((?:@yyyy |)film\)(?:\|@fullmonth @dd@th?|))([\s\S])/gi, protect_function);
//\|x=
ohc_regex(/(\[\[|\'\')(@dd@th? @fullmonth \((?:@yyyy |)film\)(?:\|@dd@th? @fullmonth|))([\s\S])/gi, protect_function);
regex(/(<timeline>)([\s\S]*?)(<\/timeline>)/gi, protect_function);
//regex(/(Les Bains Douches 18)( ডিসেম্বর 1979)(.)/gi, protect_function);
regex(/(<!--)([^<\{\}]*?)(-->)/gi, protect_function);
regex(/(আগষ্ট)( 7, 4:15)(.)/gi, protect_function);
regex(/(<math>)([\s\S]*?)(<\/math>)/gi, protect_function);
regex(/(In Concert, Zürich, অক্টোবর)( 28, 1979)(.)/gi, protect_function);
regex(/((?:{(?:Wikimedia |)Commons ?|C ?))(Cat(?:egory|))\|[^{}*](})/gi, protect_function);
regex(/(CBGB OMFUG Masters: Live জুন)( 29, 2001)(.)/gi, protect_function);
regex(/(<ref)([^>]+)(>)/gi, protect_function);
ohc_regex(/(Live at [\w ]*,? [1-3]\d)( @fullmonth)(.)/gi, protect_function);
regex(/((?:Category|Image|File):)([^|\]]*)([|\]])/gi, protect_function);
ohc_regex(/(Live at [\w ]*,? @fullmonth)( @dd)(.)/gi, protect_function);
regex(/(\{(?:See ?also|Main))(\|[^}]*)(\})/gi, protect_function);
ohc_regex(/(Bootmoon Series: [\w ]*[-–] @fullmonth)( @day, @YYYY)(.)/gi, protect_function);
regex(/(\{\{(?:double ?|external ?|wide ?)image\s?\|)([^}]+)(\})/gi, protect_function);
 
regex(/(\{\{(?:harvnb|r|wikisource)\|)([^}]+)(\})/gi, protect_function);
regex(/(\W)((?:\d{3}|3[2-9]|[4-9]\d)\/\d ডিসেম্বর(?:l\.?|))(\W)/gi, protect_function);
regex(/(\{\{(?:Canadian federal by-election))([^}]+)(\}\})/gi, protect_function);
regex(/(\W)((?:\d{2,3})\/\d ডিসেম্বর(?:l\.?|))( \(\d\d? overs)/gi, protect_function);
}
regex(/(\[(?:https?:|ftp:))([^\]]*)(\])/gi, protect_function);
 
regex(/(>[ ]*(?:https?:|ftp:))([^< >\]]*)([ ]*<)/gi, protect_function);
 
// regex(/(https?:|ftp:)([^\s\]]*)([\s\]])/gi, protect_function);
/** ------------------------------------------------------------------------ **/
regex(/(<blockquote>)([\s\S]*?)(<\/blockquote>)/gi, protect_function);
/// DATE PROTECTION FOR SLASH modules
regex(/(<noinclude>)([\s\S]*?)(<\/noinclude>)/gi, protect_function);
 
regex(/(<gallery)([\s\S]*?)(<\/gallery>)/gi, protect_function);
var linkmap = [];
regex(/(<poem>)([\s\S]*?)(<\/poem>)/gi, protect_function);
regex(/(\{[^\{]{0,6}(?:quot[^|]{1,7}\s?|sic)\|)([^}]+)(\})/gi, protect_function);
regex(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _]name|image[ _]file|img|map\d|pic)\s*=)([^|}]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|(?:trans-?|)title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|(?:trans-?|)title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:season)\s*=)(\s*\[\[[^\]]*\]\]\s*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:[xy])\s*=)(\s*[^\|]+\s*)(\|)/gi, protect_function);
regex(/(\{\{navsource\|)([^}]+)(\})/gi, protect_function);
regex(/(\{\{(?:singlechart)\|)([^}]+)(\})/gi, protect_function);
regex(/(\{\{(?:defaultsort|graph):)([^}]+)(\})/gi, protect_function);
regex(/(["“])([^"”\n]*)(["”])/gi, protect_function);
regex(/(.)(\(\{\{by\|[12]\d{3}\}\}[-–]\{\{by\|)([12]\d{3}[ ]*\}\}\))/gi, protect_function);
regex(/(.)(\(\{\{by\|[12]\d{3}\}\}(?:[-–]present|))(\))/gi, protect_function);
regex(/(\[\[)(4AD)(\]\]|\|)/gi, protect_function);


function ohc_protect_dates_slash()  
//retraining redirects containing a date
{
regex(/(\[\[)(?:সেপ্টেম্বর 3 Society)(\]\]|\|)/gi, '$1Jiusan Society$2');
// protects dates within links, quotes, etc
regex(/(\[\[)(?:জুন 4th incident)(\]\]|\|)/gi, '$1Tiananmen Square protests of 1989$2');
// the sensitive part is stored and replaced with a unique identifier,
regex(/(\[\[)(?:5@th? অক্টোবর (?:\(Serbia\)|overthrow))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2');
// which is later replaced with the stored part.
regex(/(\[\[)(?:অক্টোবর 5@th?(?: \(Serbia\)| overthrow|, 2000))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2');


var protect_function = function (s, begin, replace, end) {
//protect alternate meanings of 'মে' and 'মার্চ' (note: not case insensitive)
linkmap.push(replace);
// ohc_regex(/([^\w])(@day,?\s{0,3}মে)([^\w][^\d])/g, protect_function);  //disabled 26 মে – not case senstitve: false negatives in converting dates in মে
return begin + "⍌" + (linkmap.length - 1) + "⍍" + end;
ohc_regex(/([^\w])(মার্চ\s@day)(\s(?:mile|kilomet|met))/g, protect_function);
};


regex(/(<ref\s?(?:>|name=[^>]+))([^<]+)(<\/ref>)/gi, protect_function);
//protect all links containing a date and some text
regex(/(<timeline>)([\s\S]*?)(<\/timeline>)/gi, protect_function);
ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@day[^\]\|\n]+?@fullmonth[^\]\|\n]*)(\]\]|\|)/gi, protect_function);
regex(/(<math>)([\s\S]*?)(<\/math>)/gi, protect_function);
ohc_regex(/(\[\[)([^\]\|\n]*?@day[^\]\|\n]+?@fullmonth(?:,? @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function);
regex(/((?:{(?:Wikimedia |)Commons ?|C ?))(Cat(?:egory|))\|[^{}*](})/gi, protect_function);
ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@fullmonth[^\]\|\n]+?@day[^\]\|\n]*)(\|)/gi, protect_function);
regex(/((?:Category|Image|File):)([^|\]]*)([|\]])/gi, protect_function);
ohc_regex(/(\[\[)([^\]\|\n]*?@fullmonth[^\]\|\n]+?@day(?:, @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function);
regex(/(\{(?:See ?also|Main))(\|[^}]*)(\})/gi, protect_function);
regex(/(\{\{(?:double ?|external ?|wide ?)image\s?\|)([^}]+)(\})/gi, protect_function);
regex(/(\{\{(?:harvnb|wikisource)\|)([^}]+)(\})/gi, protect_function);
regex(/(\[(?:https?:|ftp:))([^\]]*)(\])/gi, protect_function);
regex(/(>[ ]*(?:https?:|ftp:))([^< >\]]*)([ ]*<)/gi, protect_function);
//regex(/(https?:|ftp:)([^\s\]]*)([\s\]])/gi, protect_function);
regex(/(<blockquote>)([\s\S]*?)(<\/blockquote>)/gi, protect_function);
regex(/(\{[^\{]{0,6}(?:quot[^|]{1,7}\s?|sic)\|)([^}]+)(\})/gi, protect_function);
regex(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _]name|image[ _]file|img|pic)\s*=)([^|}]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:season)\s*=)(\s*\[\[[^\]]*\]\]\s*)([|}])/gi, protect_function);
regex(/(\{\{navsource\|)([^}]+)(\})/gi, protect_function);
regex(/(\{\{singlechart\|)([^}]+)(\})/gi, protect_function);
regex(/(\{\{defaultsort:)([^}]+)(\})/gi, protect_function);
regex(/([\s\(>]")([^"\n]*)(")/gi, protect_function);
regex(/([\s\(>]“)([^”\n]*)(”)/gi, protect_function);
regex(/(.)(\(\{\{by\|[12]\d{3}\}\}[-–]\{\{by\|)([12]\d{3}[ ]*\}\}\))/gi, protect_function);
regex(/(.)(\(\{\{by\|[12]\d{3}\}\}(?:[-–]present|))(\))/gi, protect_function);


}
//protects certain dates
regex(/(\[\[)(4AD)([\s\S])/gi, protect_function);
regex(/([\s\S])(মার্চ (?:8|14) Alliance)([\s\S])/gi, protect_function);
regex(/([\s\S])(23rd মার্চ 1931: Shaheed)([\s\S])/gi, protect_function);
regex(/([\s\S])(Long মার্চ [1-7])([\s\S])/gi, protect_function);
regex(/([\s\S])(National সেপ্টেম্বর 11 Memorial & Museum)([\s\S])/gi, protect_function);
regex(/([\s\S])(Queen Elizabeth II সেপ্টেম্বর 11th Garden)([\s\S])/gi, protect_function);
regex(/([\s\S])(Bombay মার্চ 12)([\s\S])/gi, protect_function);
regex(/([\s\S])(movement 2 জুন)([\s\S])/gi, protect_function);
regex(/([\s\S])(6th\sof অক্টোবর City)([\s\S])/gi, protect_function);
regex(/([\s\S])(Party Workers' Liberation Front 30th of মে)([\s\S])/gi, protect_function);
regex(/([\s\S])(4th\sof আগষ্ট regime)([\s\S])/gi, protect_function);
regex(/([\s\S])(19th\sof এপ্রিল movement)([\s\S])/gi, protect_function);
regex(/([\s\S])(জুন 4th (?:incident|museum))([\s\S])/gi, protect_function);
regex(/([\s\S])(The Battle Of Marston Moor \(জুলাই 2nd,? 1644\))([\s\S])/gi, protect_function);
regex(/([\s\S])(Night of জানুয়ারি 16th)([\s\S])/gi, protect_function);
regex(/([\s\S])(Observance of 5th নভেম্বর Act)([\s\S])/gi, protect_function);
regex(/(\[\[)(13 মে incident)(\|)/gi, protect_function);
regex(/(\'\'\')(22nd\sof মে)(\'\'\')/gi, protect_function);
regex(/(\[\[)(22nd\sof মে \(film\))([|\]\'])/gi, protect_function);
regex(/(\[\[)(জুলাই 12, 2007, Baghdad airstrike)(\|)/gi, protect_function);
regex(/(\[\[)(নভেম্বর 1828)(\]\])/gi, protect_function);
regex(/(.)(4th\sof জুলাই)(.)/gi, protect_function);
regex(/(\[\[)((?:2300|2000)\s?AD)(\]\])/gi, protect_function);
regex(/(\[\[)(29 ফেব্রুয়ারি)(\]\])/gi, protect_function);
regex(/(\[\[)(ফেব্রুয়ারি 29)(\]\])/gi, protect_function);


function ohc_unprotect_dates()  
// works names
{
// regex(/(.)(protect string)(.)/gi, protect_function);
//unprotect all dates
regex(/(.)(11\/22\/63)(.)/gi, protect_function);
regex(/[]/g, '');
regex(/(.)(1\.1\.1994)(.)/gi, protect_function);
regex(/([0-9]+)/g, function (x, n) {
regex(/([\s\S])(2\.13\.61)([\s\S])/gi, protect_function);
var res = linkmap[n];
// regex(/(.)(4th of জুলাই, Asbury)(.)/gi, protect_function); //protected above globally
res = res.replace(/([0-9]+)/g, function (x, n) {
regex(/(.)(26 অক্টোবর 1993)(.)/gi, protect_function);
var res = linkmap[n];
regex(/(\[\[|\'\')(জুন 1, 1974)(.)/gi, protect_function);
res = res.replace(/([0-9]+)/g, function (x, n) {
regex(/(\[\[|\'\')(জুলাই 15, 1972)(.)/gi, protect_function);
var res = linkmap[n];
regex(/(\[\[|\'\')(আগষ্ট 1914)(.)/gi, protect_function);
res = res.replace(/([0-9]+)⍍/g, function (x, n) {
ohc_regex(/(\[\[|\'\')(@fullmonth @dd@th? \((?:@yyyy |)film\)(?:\|@fullmonth @dd@th?|))([\s\S])/gi, protect_function);
return linkmap[n];
ohc_regex(/(\[\[|\'\')(@dd@th? @fullmonth \((?:@yyyy |)film\)(?:\|@dd@th? @fullmonth|))([\s\S])/gi, protect_function);
});
// regex(/(Les Bains Douches 18)( ডিসেম্বর 1979)(.)/gi, protect_function);
return res;
regex(/(আগষ্ট)( 7, 4:15)(.)/gi, protect_function);
});
regex(/(In Concert, Zürich, অক্টোবর)( 28, 1979)(.)/gi, protect_function);
return res;
regex(/(CBGB OMFUG Masters: Live জুন)( 29, 2001)(.)/gi, protect_function);
});
ohc_regex(/(Live at [\w ]*,? [1-3]\d)( @fullmonth)(.)/gi, protect_function);
return res;
ohc_regex(/(Live at [\w ]*,? @fullmonth)( @dd)(.)/gi, protect_function);
});
ohc_regex(/(Bootmoon Series: [\w ]*[-] @fullmonth)( @day, @YYYY)(.)/gi, protect_function);
 
// expressions and grammatical strings including modal "মে"
regex(/(\W)((?:\d{1,3}) মে)((?: have(?: \w+|)|) be)/g, protect_function);
regex(/(\W)((?:\d{3}|3[2-9]|[4-9]\d)\/\d ডিসেম্বর(?:l\.?|))(\W)/gi, protect_function);
regex(/(\W)((?:\d{2,3})\/\d ডিসেম্বর(?:l\.?|))( \(\d\d? overs)/gi, protect_function);
}
}


function ohc_MOSNUM_edit_summary()
/** ------------------------------------------------------------------------ **/
{
/// DATE PROTECTION FOR ALL REF SECTION
//Add a tag to the summary box
 
setoptions(minor = 'true');
var linkmap = [];
setreason('date formats per [[MOS:DATEFORMAT]] by [[WP:MOSNUMscript|script]]', 'append');
doaction('diff');
}


function ohc_bigendien_edit_summary()  
function ohc_protect_dates_ref()  
{
{
//Add a tag to the summary box
// protects dates within links, quotes, etc
setoptions(minor = 'true');
// the sensitive part is stored and replaced with a unique identifier,
setreason('ymd ref dates', 'append');
// which is later replaced with the stored part.
doaction('diff');
}


function ohc_expand_edit_summary()  
var protect_function = function (s, begin, replace, end) {
{
linkmap.push(replace);
//Add a tag to the summary box
return begin + "⍌" + (linkmap.length - 1) + "⍍" + end;
setoptions(minor = 'true');
};
setreason('expand month names', 'append');
doaction('diff');
}


function ohc_slash_edit_summary()  
regex(/(<ref\s?(?:>|name=[^>]+))([^<]+)(<\/ref>)/gi, protect_function);
{
regex(/(<timeline>)([\s\S]*?)(<\/timeline>)/gi, protect_function);
//Add a tag to the summary box
regex(/(<math>)([\s\S]*?)(<\/math>)/gi, protect_function);
setoptions(minor = 'true');
regex(/((?:{(?:Wikimedia |)Commons ?|C ?))(Cat(?:egory|))\|[^{}*](})/gi, protect_function);
setreason('resolved slash dates', 'append');
regex(/((?:Category|Image|File):)([^|\]]*)([|\]])/gi, protect_function);
doaction('diff');
regex(/(\{(?:See ?also|Main))(\|[^}]*)(\})/gi, protect_function);
}
regex(/(\{\{(?:double ?|external ?|wide ?)image\s?\|)([^}]+)(\})/gi, protect_function);
regex(/(\{\{(?:harvnb|wikisource)\|)([^}]+)(\})/gi, protect_function);
regex(/(\[(?:https?:|ftp:))([^\]]*)(\])/gi, protect_function);
regex(/(>[ ]*(?:https?:|ftp:))([^< >\]]*)([ ]*<)/gi, protect_function);
//regex(/(https?:|ftp:)([^\s\]]*)([\s\]])/gi, protect_function);
regex(/(<blockquote>)([\s\S]*?)(<\/blockquote>)/gi, protect_function);
regex(/(\{[^\{]{0,6}(?:quot[^|]{1,7}\s?|sic)\|)([^}]+)(\})/gi, protect_function);
regex(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _]name|image[ _]file|img|pic)\s*=)([^|}]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:season)\s*=)(\s*\[\[[^\]]*\]\]\s*)([|}])/gi, protect_function);
regex(/(\{\{navsource\|)([^}]+)(\})/gi, protect_function);
regex(/(\{\{singlechart\|)([^}]+)(\})/gi, protect_function);
regex(/(\{\{defaultsort:)([^}]+)(\})/gi, protect_function);
regex(/([\s\(>]")([^"\n]*)(")/gi, protect_function);
regex(/([\s\(>]“)([^”\n]*)(”)/gi, protect_function);
regex(/(.)(\(\{\{by\|[12]\d{3}\}\}[-–]\{\{by\|)([12]\d{3}[ ]*\}\}\))/gi, protect_function);
regex(/(.)(\(\{\{by\|[12]\d{3}\}\}(?:[-–]present|))(\))/gi, protect_function);
 
//retraining redirects containing a date
regex(/(\[\[)(?:সেপ্টেম্বর 3 Society)(\]\]|\|)/gi, '$1Jiusan Society$2');
regex(/(\[\[)(?:জুন 4th incident)(\]\]|\|)/gi, '$1Tiananmen Square protests of 1989$2');
ohc_regex(/(\[\[)(?:5@th? অক্টোবর (?:\(Serbia\)|overthrow))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2');
ohc_regex(/(\[\[)(?:অক্টোবর 5@th?(?: \(Serbia\)| overthrow|, 2000))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2');


function ohc_abbrev_edit_summary()
//protect alternate meanings of 'মে' and 'মার্চ' (note: not case insensitive)
{
ohc_regex(/([^\w])(@day,?\s{0,3}মে)([^\w][^\d])/g, protect_function);
//Add a tag to the summary box
ohc_regex(/([^\w])(মার্চ\s@day)(\s(?:mile|kilomet|met))/g, protect_function);
setoptions(minor = 'true');
setreason('abbrev month names', 'append');
doaction('diff');
}


/** ------------------------------------------------------------------------ **/
//protect all links containing a date and some text
/// CUSTOMIZATION POINTS
ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@day[^\]\|\n]+?@fullmonth[^\]\|\n]*)(\]\]|\|)/gi, protect_function);
function ohc_customize_all_to_dmy() {
ohc_regex(/(\[\[)([^\]\|\n]*?@day[^\]\|\n]+?@fullmonth(?:,? @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function);
}
ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@fullmonth[^\]\|\n]+?@day[^\]\|\n]*)(\|)/gi, protect_function);
ohc_regex(/(\[\[)([^\]\|\n]*?@fullmonth[^\]\|\n]+?@day(?:, @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function);


function ohc_customize_all_to_mdy() {
//protects certain dates
}
regex(/(\[\[)(4AD)([\s\S])/gi, protect_function);
 
regex(/([\s\S])(মার্চ (?:8|14) Alliance)([\s\S])/gi, protect_function);
function ohc_customize_body_to_dmy() {
regex(/([\s\S])(23rd মার্চ 1931: Shaheed)([\s\S])/gi, protect_function);
}
regex(/([\s\S])(Long মার্চ [1-7])([\s\S])/gi, protect_function);
 
regex(/([\s\S])(Bombay মার্চ 12)([\s\S])/gi, protect_function);
function ohc_customize_body_to_mdy() {
regex(/([\s\S])(movement 2 জুন)([\s\S])/gi, protect_function);
}
regex(/([\s\S])(6th\sof অক্টোবর City)([\s\S])/gi, protect_function);
regex(/([\s\S])(Party Workers' Liberation Front 30th of মে)([\s\S])/gi, protect_function);
regex(/([\s\S])(4th\sof আগষ্ট regime)([\s\S])/gi, protect_function);
regex(/([\s\S])(19th\sof এপ্রিল movement)([\s\S])/gi, protect_function);
regex(/([\s\S])(জুন 4th incident)([\s\S])/gi, protect_function);
regex(/([\s\S])(The Battle Of Marston Moor \(জুলাই 2nd,? 1644\))([\s\S])/gi, protect_function);
regex(/([\s\S])(Night of জানুয়ারি 16th)([\s\S])/gi, protect_function);
regex(/([\s\S])(Observance of 5th নভেম্বর Act)([\s\S])/gi, protect_function);
regex(/(\[\[)(13 মে incident)(\|)/gi, protect_function);
regex(/(\'\'\')(22nd\sof মে)(\'\'\')/gi, protect_function);
regex(/(\[\[)(22nd\sof মে \(film\))([|\]\'])/gi, protect_function);
regex(/(\[\[)(জুলাই 12, 2007, Baghdad airstrike)(\|)/gi, protect_function);
regex(/(\[\[)(নভেম্বর 1828)(\]\])/gi, protect_function);
regex(/(.)(4th\sof জুলাই)(.)/gi, protect_function);
regex(/(\[\[)((?:2300|2000)\s?AD)(\]\])/gi, protect_function);
regex(/(\[\[)(29 ফেব্রুয়ারি)(\]\])/gi, protect_function);
regex(/(\[\[)(ফেব্রুয়ারি 29)(\]\])/gi, protect_function);
 
// works names
//regex(/(.)(protect string)(.)/gi, protect_function);
regex(/(.)(11\/22\/63)(.)/gi, protect_function);
regex(/(.)(1\.1\.1994)(.)/gi, protect_function);
regex(/([\s\S])(2\.13\.61)([\s\S])/gi, protect_function);
//regex(/(.)(4th of জুলাই, Asbury)(.)/gi, protect_function); //protected above globally
regex(/(.)(26 অক্টোবর 1993)(.)/gi, protect_function);
regex(/(\[\[|\'\')(জুন 1, 1974)(.)/gi, protect_function);
regex(/(\[\[|\'\')(জুলাই 15, 1972)(.)/gi, protect_function);
regex(/(\[\[|\'\')(আগষ্ট 1914)(.)/gi, protect_function);
ohc_regex(/(\[\[|\'\')(@fullmonth @dd@th? \((?:@yyyy |)film\)(?:\|@fullmonth @dd@th?|))([\s\S])/gi, protect_function);
ohc_regex(/(\[\[|\'\')(@dd@th? @fullmonth \((?:@yyyy |)film\)(?:\|@dd@th? @fullmonth|))([\s\S])/gi, protect_function);
//regex(/(Les Bains Douches 18)( ডিসেম্বর 1979)(.)/gi, protect_function);
regex(/(আগষ্ট)( 7, 4:15)(.)/gi, protect_function);
regex(/(In Concert, Zürich, অক্টোবর)( 28, 1979)(.)/gi, protect_function);
regex(/(CBGB OMFUG Masters: Live জুন)( 29, 2001)(.)/gi, protect_function);
ohc_regex(/(Live at [\w ]*,? [1-3]\d)( @fullmonth)(.)/gi, protect_function);
ohc_regex(/(Live at [\w ]*,? @fullmonth)( @dd)(.)/gi, protect_function);
ohc_regex(/(Bootmoon Series: [\w ]*[-–] @fullmonth)( @day, @YYYY)(.)/gi, protect_function);
 
regex(/(\W)((?:\d{3}|3[2-9]|[4-9]\d)\/\d ডিসেম্বর(?:l\.?|))(\W)/gi, protect_function);
regex(/(\W)((?:\d{2,3})\/\d ডিসেম্বর(?:l\.?|))( \(\d\d? overs)/gi, protect_function);
}


function ohc_customize_ISO_to_dmy() {
}
function ohc_customize_ISO_to_mdy() {
}


/** ------------------------------------------------------------------------ **/
/** ------------------------------------------------------------------------ **/
function ohc_body_dates_to_dmy()  
/// DATE PROTECTION FOR SLASH modules
 
var linkmap = [];
 
function ohc_protect_dates_slash()  
{
{
ohc_use_dates_template('dmy');
// protects dates within links, quotes, etc
// the sensitive part is stored and replaced with a unique identifier,
// which is later replaced with the stored part.


ohc_fix_common_errors();
var protect_function = function (s, begin, replace, end) {
ohc_fix_dts_template('dmy');
linkmap.push(replace);
ohc_fix_gr_template('dmy');
return begin + "⍌" + (linkmap.length - 1) + "⍍" + end;
ohc_dates_to_dmy();
};
ohc_remove_leading_zeroes();
 
ohc_fix_dmy_redundancies();
regex(/(<ref\s?(?:>|name=[^>]+))([^<]+)(<\/ref>)/gi, protect_function);
}
regex(/(<timeline>)([\s\S]*?)(<\/timeline>)/gi, protect_function);
regex(/(<math>)([\s\S]*?)(<\/math>)/gi, protect_function);
regex(/((?:{(?:Wikimedia |)Commons ?|C ?))(Cat(?:egory|))\|[^{}*](})/gi, protect_function);
regex(/((?:Category|Image|File):)([^|\]]*)([|\]])/gi, protect_function);
regex(/(\{(?:See ?also|Main))(\|[^}]*)(\})/gi, protect_function);
regex(/(\{\{(?:double ?|external ?|wide ?)image\s?\|)([^}]+)(\})/gi, protect_function);
regex(/(\{\{(?:harvnb|wikisource)\|)([^}]+)(\})/gi, protect_function);
regex(/(\[(?:https?:|ftp:))([^\]]*)(\])/gi, protect_function);
regex(/(>[ ]*(?:https?:|ftp:))([^< >\]]*)([ ]*<)/gi, protect_function);
//regex(/(https?:|ftp:)([^\s\]]*)([\s\]])/gi, protect_function);
regex(/(<blockquote>)([\s\S]*?)(<\/blockquote>)/gi, protect_function);
regex(/(\{[^\{]{0,6}(?:quot[^|]{1,7}\s?|sic)\|)([^}]+)(\})/gi, protect_function);
regex(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _]name|image[ _]file|img|pic)\s*=)([^|}]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
regex(/([\|\{]\s*(?:season)\s*=)(\s*\[\[[^\]]*\]\]\s*)([|}])/gi, protect_function);
regex(/(\{\{navsource\|)([^}]+)(\})/gi, protect_function);
regex(/(\{\{singlechart\|)([^}]+)(\})/gi, protect_function);
regex(/(\{\{defaultsort:)([^}]+)(\})/gi, protect_function);
regex(/([\s\(>]")([^"\n]*)(")/gi, protect_function);
regex(/([\s\(>]“)([^”\n]*)(”)/gi, protect_function);
regex(/(.)(\(\{\{by\|[12]\d{3}\}\}[-–]\{\{by\|)([12]\d{3}[ ]*\}\}\))/gi, protect_function);
regex(/(.)(\(\{\{by\|[12]\d{3}\}\}(?:[-–]present|))(\))/gi, protect_function);


function ohc_body_dates_to_mdy()
{
ohc_use_dates_template('mdy');
ohc_fix_common_errors();
ohc_fix_dts_template('mdy');
ohc_fix_gr_template('mdy');
ohc_dates_to_mdy();
ohc_remove_leading_zeroes();
ohc_fix_mdy_redundancies();
}
}


/** ------------------------------------------------------------------------ **/
function ohc_unprotect_dates()  
function ohc_all_to_dmy_driver(e)  
{
{
e.preventDefault();
//unprotect all dates
ohc_delink_dates();
regex(/[♫]/g, '');
ohc_protect_dates();
regex(/⍌([0-9]+)⍍/g, function (x, n) {
ohc_fix_unambiguous_dates();
var res = linkmap[n];
ohc_body_dates_to_dmy();
res = res.replace(/⍌([0-9]+)⍍/g, function (x, n) {
ohc_delink_ISO_to_dmy();
var res = linkmap[n];
ohc_delink_year_in_X();
res = res.replace(/⍌([0-9]+)⍍/g, function (x, n) {
ohc_customize_all_to_dmy();
var res = linkmap[n];
ohc_ISO_to_dmy_in_citations();
res = res.replace(/⍌([0-9]+)⍍/g, function (x, n) {
ohc_unprotect_dates();
return linkmap[n];
});
return res;
});
return res;
});
return res;
});
}


ohc_MOSNUM_edit_summary();
function ohc_MOSNUM_edit_summary()
{
//Add a tag to the summary box
setoptions(minor = 'true');
setreason('date formats per [[MOS:DATEFORMAT]] by [[WP:MOSNUMscript|script]]', 'append');
doaction('diff');
}
}


function ohc_all_to_mdy_driver(e)  
function ohc_bigendien_edit_summary()  
{
{
e.preventDefault();
//Add a tag to the summary box
ohc_delink_dates();
setoptions(minor = 'true');
ohc_protect_dates();
setreason('ymd ref dates', 'append');
ohc_fix_unambiguous_dates();
doaction('diff');
ohc_body_dates_to_mdy();
ohc_delink_ISO_to_mdy();
ohc_delink_year_in_X();
ohc_customize_all_to_mdy();
ohc_ISO_to_mdy_in_citations();
ohc_unprotect_dates();
 
ohc_MOSNUM_edit_summary();
}
}


function ohc_dmy_publication_dates_driver(e)  
function ohc_expand_edit_summary()  
{
{
e.preventDefault();
//Add a tag to the summary box
// ohc_delink_dates();
setoptions(minor = 'true');
ohc_protect_dates();
setreason('expand month names', 'append');
ohc_body_dates_to_dmy();
doaction('diff');
ohc_customize_body_to_dmy();
ohc_dmy_publication_dates();
ohc_unprotect_dates();
 
ohc_MOSNUM_edit_summary();
}
}


function ohc_mdy_publication_dates_driver(e)  
function ohc_slash_edit_summary()  
{
{
e.preventDefault();
//Add a tag to the summary box
// ohc_delink_dates();
setoptions(minor = 'true');
ohc_protect_dates();
setreason('resolved slash dates', 'append');
ohc_body_dates_to_mdy();
doaction('diff');
ohc_customize_body_to_mdy();
ohc_mdy_publication_dates();
ohc_unprotect_dates();
 
ohc_MOSNUM_edit_summary();
 
}
}


function ohc_body_to_dmy_driver(e)  
function ohc_abbrev_edit_summary()  
{
{
e.preventDefault();
//Add a tag to the summary box
// ohc_delink_dates();
setoptions(minor = 'true');
ohc_protect_dates_ref();
setreason('abbrev month names', 'append');
ohc_body_dates_to_dmy();
doaction('diff');
ohc_customize_body_to_dmy();
ohc_unprotect_dates();
 
ohc_MOSNUM_edit_summary();
}
}


function ohc_body_to_mdy_driver(e)
/** ------------------------------------------------------------------------ **/
{
/// CUSTOMIZATION POINTS
e.preventDefault();
function ohc_customize_all_to_dmy() {
// ohc_delink_dates();
}
ohc_protect_dates_ref();
ohc_body_dates_to_mdy();
ohc_customize_body_to_mdy();
ohc_unprotect_dates();


ohc_MOSNUM_edit_summary();
function ohc_customize_all_to_mdy() {
}
}


function ohc_ISO_to_dmy_driver(e)  
function ohc_customize_body_to_dmy() {
{
}
e.preventDefault();
ohc_protect_dates();
ohc_delink_ISO_to_dmy();
ohc_customize_ISO_to_dmy();
ohc_unprotect_dates();


// ohc_MOSNUM_edit_summary();
function ohc_customize_body_to_mdy() {
}
}


function ohc_ISO_to_mdy_driver(e) {
function ohc_customize_ISO_to_dmy() {
e.preventDefault();
}
ohc_protect_dates();
ohc_delink_ISO_to_mdy();
ohc_customize_ISO_to_mdy();
ohc_unprotect_dates();


// ohc_MOSNUM_edit_summary();
function ohc_customize_ISO_to_mdy() {
}
}


function ohc_delink_year_in_X_driver(e)  
/** ------------------------------------------------------------------------ **/
function ohc_body_dates_to_dmy()  
{
{
e.preventDefault();
ohc_use_dates_template('dmy');
ohc_delink_year_in_X();
}


function ohc_expand_ref_dates_driver(e) {
ohc_fix_common_errors();
e.preventDefault();
ohc_fix_dts_template('dmy');
ohc_expand_ref_dates();
ohc_fix_gr_template('dmy');
ohc_protect_dates();
ohc_dates_to_dmy();
ohc_unprotect_dates();
ohc_remove_leading_zeroes();
ohc_expand_edit_summary();
ohc_fix_dmy_redundancies();
}
}


function ohc_expand_all_dates_driver(e)  
function ohc_body_dates_to_mdy()  
{
{
e.preventDefault();
ohc_use_dates_template('mdy');
ohc_expand_ref_dates();
ohc_fix_common_errors();
ohc_protect_dates();
ohc_fix_dts_template('mdy');
ohc_expand_all_dates();
ohc_fix_gr_template('mdy');
ohc_unprotect_dates();
ohc_dates_to_mdy();
ohc_expand_edit_summary();
ohc_remove_leading_zeroes();
ohc_fix_mdy_redundancies();
}
}


function ohc_abbrev_ref_dates_driver(e)  
/** ------------------------------------------------------------------------ **/
function ohc_all_to_dmy_driver(e)  
{
{
e.preventDefault();
e.preventDefault();
ohc_delink_dates();
ohc_protect_dates();
ohc_protect_dates();
ohc_abbrev_ref_dates();
ohc_fix_unambiguous_dates();
ohc_body_dates_to_dmy();
ohc_delink_ISO_to_dmy();
ohc_delink_year_in_X();
ohc_customize_all_to_dmy();
ohc_ISO_to_dmy_in_citations();
ohc_unprotect_dates();
ohc_unprotect_dates();
ohc_slash_edit_summary();
 
ohc_MOSNUM_edit_summary();
}
}


function ohc_UK_slash_dates_driver(e)  
function ohc_all_to_mdy_driver(e)  
{
{
e.preventDefault();
e.preventDefault();
ohc_expand_ref_dates();
ohc_delink_dates();
ohc_protect_dates_slash();
ohc_protect_dates();
ohc_UK_slash_dates_to_dmy();
ohc_fix_unambiguous_dates();
ohc_body_dates_to_mdy();
ohc_delink_ISO_to_mdy();
ohc_delink_year_in_X();
ohc_customize_all_to_mdy();
ohc_ISO_to_mdy_in_citations();
ohc_unprotect_dates();
ohc_unprotect_dates();
ohc_slash_edit_summary();
 
ohc_MOSNUM_edit_summary();
}
}


function ohc_US_slash_dates_driver(e)  
function ohc_dmy_publication_dates_driver(e)  
{
{
e.preventDefault();
e.preventDefault();
ohc_expand_ref_dates();
// ohc_delink_dates();
ohc_protect_dates_slash();
ohc_protect_dates();
ohc_US_slash_dates_to_mdy();
ohc_body_dates_to_dmy();
ohc_customize_body_to_dmy();
ohc_dmy_publication_dates();
ohc_unprotect_dates();
ohc_unprotect_dates();
ohc_expand_edit_summary();
 
ohc_MOSNUM_edit_summary();
}
}


// </pre>
function ohc_mdy_publication_dates_driver(e)  
 
{
//সংশ্লিষ্ট পাতা ত্যাগ না করেই অন্য পাতা থেকে পুনর্নির্দেশ করা যাবে।
e.preventDefault();
//<nowiki>
// ohc_delink_dates();
( function () {
ohc_protect_dates();
var redir = $(mw.util.addPortletLink('p-tb','#','পুনর্নির্দেশক','পুনর্নির্দেশ তৈরিকারী','পুনর্নির্দেশ তৈরিকারী','','#pt-mytalk'));
ohc_body_dates_to_mdy();
$( redir ).click( function() {
ohc_customize_body_to_mdy();
var redirec = prompt("যে পাতা থেকে এই পাতায় পুনর্নির্দেশ করতে চান তার নাম লিখুন:", "");
ohc_mdy_publication_dates();
  if (redirec === null || redirec === "") {
ohc_unprotect_dates();
alert( 'আপনি কোনও নাম প্রবেশ করান নি। দয়া করে আবার চেষ্টা করুন।' );  
 
  } else  {
ohc_MOSNUM_edit_summary();
  var params = {
 
action: 'edit',
}
title: redirec ,
 
createonly: 1,
function ohc_body_to_dmy_driver(e)  
prependtext: '#পুনর্নির্দেশ [[' + mw.config.get("wgPageName") + ']]',
{
appendtext: " \n" + '{{একটি পুনর্নির্দেশ}}',
e.preventDefault();
summary: '[[' + mw.config.get("wgPageName") + ']] পাতায় পুনর্নির্দেশ করা হল' ,
// ohc_delink_dates();
format: 'json'
ohc_protect_dates_ref();
};
ohc_body_dates_to_dmy();
api = new mw.Api();
ohc_customize_body_to_dmy();
api.postWithToken( 'csrf', params ).done( function ( data ) {
ohc_unprotect_dates();
alert( 'সফলভাবে ' + redirec + ' পাতা থেকে একটি পুনর্নির্দেশ তৈরি করা হয়েছে!' );
 
});
ohc_MOSNUM_edit_summary();
  }
}
}
);
}() );
//</nowiki>


//<nowiki>
function ohc_body_to_mdy_driver(e)
( function () {
{
var talkp = $(mw.util.addPortletLink('p-tb','#','স্বাগত জানান','স্বাগত জানান','স্বাগত জানান','','#pt-mytalk'));
e.preventDefault();
$( talkp ).click( function() {
// ohc_delink_dates();
var talk = prompt("কোন ধরনের স্বাগত বার্তা যুক্ত করতে চান এমন টেমপ্লেটটি লিখুন {{Subst:}} সাথে, অন্যথায় পূর্বনির্ধারিত {{Subst:স্বাগতম}} যুক্ত হবে:", "");
ohc_protect_dates_ref();
  if (talk === null || talk === "") {
ohc_body_dates_to_mdy();
    var params1 = {
ohc_customize_body_to_mdy();
action: 'edit',
ohc_unprotect_dates();
title: 'User talk:' + mw.config.get("wgRelevantUserName"),
 
prependtext: '{{Subst:স্বাগতম}}'
ohc_MOSNUM_edit_summary();
,
}
summary: 'ভারতপিডিয়ায় স্বাগতম!',
 
format: 'json'
function ohc_ISO_to_dmy_driver(e)
};
{
api = new mw.Api();
e.preventDefault();
ohc_protect_dates();
api.postWithToken( 'csrf', params1 ).done( function ( data ) {
ohc_delink_ISO_to_dmy();
alert( 'সফলভাবে স্বাগত জানানো হয়েছে!' );
ohc_customize_ISO_to_dmy();
} );
ohc_unprotect_dates();
 
 
  } else {
// ohc_MOSNUM_edit_summary();
  var params = {
}
action: 'edit',
 
title: 'User talk:' + mw.config.get("wgRelevantUserName"),
function ohc_ISO_to_mdy_driver(e) {
prependtext: talk
e.preventDefault();
,
ohc_protect_dates();
summary: 'ভারতপিডিয়ায় স্বাগত!',
ohc_delink_ISO_to_mdy();
format: 'json'
ohc_customize_ISO_to_mdy();
};
ohc_unprotect_dates();
api = new mw.Api();
 
// ohc_MOSNUM_edit_summary();
api.postWithToken( 'csrf', params ).done( function ( data ) {
}
alert( 'সফলভাবে স্বাগত জানানো হয়েছে!' );
 
} );
function ohc_delink_year_in_X_driver(e)
  }
{
}
e.preventDefault();
);
ohc_delink_year_in_X();
}() );
}
//</nowiki>
 
//<nowiki>
function ohc_expand_ref_dates_driver(e) {
console.time('mobileUndo');
e.preventDefault();
$.when(mw.loader.using(['mediawiki.util', 'mediawiki.api', 'oojs-ui-windows', 'oojs-ui-core', 'oojs-ui.styles.icons-editing-core'])).then(function() {
ohc_expand_ref_dates();
    return new mw.Api().getMessages(['editundo', 'Undo-nochange']);
ohc_protect_dates();
}).then(function(globalmessages) {
ohc_unprotect_dates();
    var mobileUndo, i18n_lang = mw.config.get('wgUserLanguage');
ohc_expand_edit_summary();
    var i18n = {
}
        "en": {
 
            "mu-success": "Successful",
function ohc_expand_all_dates_driver(e)  
            "mu-fail": "Failed",
{
            "mu-loading": "Loading...",
e.preventDefault();
            "editsummary-ad": "",
ohc_expand_ref_dates();
            "mu-undo-successful": "Revert successful.... Reloading in a sec",
ohc_protect_dates();
            "mu-empty-reponse-from-server": "An empty response was received from the server",
ohc_expand_all_dates();
            "mu-edit-summary-prompt": "Add a reason to your edit summary !",
ohc_unprotect_dates();
            "mu-edit-summary-prompt-placeholder": "Reason...",
ohc_expand_edit_summary();
            "mu-thank-success": "Thanked",
}
            "mu-thank-confirm": "Send public thanks ?",
 
            "mu-thank-loading": "Thanking...",
function ohc_abbrev_ref_dates_driver(e)
            "mu-thank-successful": "You thanked $1.",
{
            "mu-thank-failed": "Failed to thank $1.",
e.preventDefault();
            "mu-http-error":"HTTP error: "
ohc_protect_dates();
        },
ohc_abbrev_ref_dates();
        "bn": {
ohc_unprotect_dates();
            "mu-success": "সফল",
ohc_slash_edit_summary();
            "mu-fail": "ব্যর্থ হয়েছে",
}
            "mu-loading": "লোড করা হচ্ছে...",
 
            "editsummary-ad": "",
function ohc_UK_slash_dates_driver(e)  
            "mu-undo-successful": "পূর্বাবস্থায় ফেরত যাওয়া সফল হয়েছে.... পুনঃলোড করা হচ্ছে",
{
            "mu-empty-reponse-from-server": "সার্ভার থেকে একটি খালি প্রতিক্রিয়া পাওয়া গেছে।",
e.preventDefault();
            "mu-edit-summary-prompt": "সম্পাদনা সারাংশে কারণ উল্লেখ করুন!",
ohc_expand_ref_dates();
            "mu-edit-summary-prompt-placeholder": "কারণ...",
ohc_protect_dates_slash();
            "mu-thank-success": "ধন্যবাদ দিয়েছেন",
ohc_UK_slash_dates_to_dmy();
            "mu-thank-confirm": "প্রকাশ্য ধন্যবাদ জানাবেন?",
ohc_unprotect_dates();
            "mu-thank-loading": "ধন্যবাদ জানানো হচ্ছে...",
ohc_slash_edit_summary();
            "mu-thank-successful": "আপনি $1 কে ধন্যবাদ জানিয়েছেন।",
}
            "mu-thank-failed": "$1 কে ধন্যবাদ জানানো ব্যর্থ হয়েছে।",
 
            "mu-http-error":"HTTP ত্রুটি: "
function ohc_US_slash_dates_driver(e)
        }
{
    };
e.preventDefault();
if(undefined === i18n[i18n_lang]){
ohc_expand_ref_dates();
i18n_lang = 'en';
ohc_protect_dates_slash();
}
ohc_US_slash_dates_to_mdy();
    if (mw.config.get('wgCanonicalSpecialPageName') === 'MobileDiff') {
ohc_unprotect_dates();
        mw.util.addCSS('#mw-mf-userinfo .mobileUndo-ui .mw-ui-icon.mw-ui-icon-before:before{display:none;}\n#mobileUndo > a > span.oo-ui-iconElement-icon.oo-ui-icon-editUndo.oo-ui-image-invert{display:inline-block; position:initial;}\n#mobileUndo > a{padding:0.57142857em 0.9375em;}'+
ohc_expand_edit_summary();
        '#mw-mf-userinfo > div > div.mobileUndo-ui > a > div{line-height:normal;}');
}
        if (mw.config.get('wgVisualEditor').pageLanguageDir === 'ltr') {
 
             $('#mw-mf-userinfo .post-content').append($('<div>').attr('class', 'mobileUndo-ui').css({
// </pre>
                'display': 'inline-block',
 
                'float': 'right'
//সংশ্লিষ্ট পাতা ত্যাগ না করেই অন্য পাতা থেকে পুনর্নির্দেশ করা যাবে।
             }));
//<nowiki>
        } else {
( function () {
            $('#mw-mf-userinfo .post-content').append($('<div>').attr('class', 'mobileUndo-ui').css({
var redir = $(mw.util.addPortletLink('p-tb','#','পুনর্নির্দেশক','পুনর্নির্দেশ তৈরিকারী','পুনর্নির্দেশ তৈরিকারী','','#pt-mytalk'));
                'display': 'inline-block',
$( redir ).click( function() {
                'float': 'left'
var redirec = prompt("যে পাতা থেকে এই পাতায় পুনর্নির্দেশ করতে চান তার নাম লিখুন:", "");
             }));
  if (redirec === null || redirec === "") {
        }
alert( 'আপনি কোনও নাম প্রবেশ করান নি। দয়া করে আবার চেষ্টা করুন।' );  
        $('.mobileUndo-ui').append($('.mw-mf-action-button').remove().css({
  } else  {
             'clear': 'none'
  var params = {
        }));
action: 'edit',
        if (!$('.warningbox').length && mw.config.get('wgRelevantPageIsProbablyEditable')) {
title: redirec ,
             mobileUndo = new OO.ui.ButtonWidget({
createonly: 1,
                label: (globalmessages.editundo).charAt(0).toUpperCase() + (globalmessages.editundo).slice(1),
prependtext: '#পুনর্নির্দেশ [[' + mw.config.get("wgPageName") + ']]',
                icon: 'editUndo',
appendtext: " \n" + '{{একটি পুনর্নির্দেশ}}',
                title: 'mobileUndo',
summary: '[[' + mw.config.get("wgPageName") + ']] পাতায় পুনর্নির্দেশ করা হল' ,
                flags: ['destructive', 'primary'],
format: 'json'
                id: 'mobileUndo'
};
             });
api = new mw.Api();
            $('.mobileUndo-ui').append(mobileUndo.$element);
api.postWithToken( 'csrf', params ).done( function ( data ) {
             if (mw.config.get('wgVisualEditor').pageLanguageDir === 'ltr') {
alert( 'সফলভাবে ' + redirec + ' পাতা থেকে একটি পুনর্নির্দেশ তৈরি করা হয়েছে!' );
                $('#mobileUndo').css('margin-right', '0.3em');
});
             } else {
  }
                $('#mobileUndo').css('margin-left', '0.3em');
}
             }
);
        }
}() );
        window.wgRelevantUser = function() {
//</nowiki>
            var user;
 
            if ($('.mw-mf-user-link').text() !== '') {
//<nowiki>
                user = $('.mw-mf-user-link').text();
( function () {
             } else {
var talkp = $(mw.util.addPortletLink('p-tb','#','স্বাগত জানান','স্বাগত জানান','স্বাগত জানান','','#pt-mytalk'));
                user = $('#mw-mf-userinfo .post-content div:nth-child(2)').text();
$( talkp ).click( function() {
             }
var talk = prompt("কোন ধরনের স্বাগত বার্তা যুক্ত করতে চান এমন টেমপ্লেটটি লিখুন {{Subst:}} সাথে, অন্যথায় পূর্বনির্ধারিত {{Subst:স্বাগতম}} যুক্ত হবে:", "");
            return user;
  if (talk === null || talk === "") {
        };
    var params1 = {
        window.wgRevId = ($('#mw-mf-diffarea > div.mw-mf-diff-info > h3 > a').attr('href')).split('&oldid=')[1];
action: 'edit',
        var revId = wgRevId;
title: 'User talk:' + mw.config.get("wgRelevantUserName"),
         console.log(revId);
prependtext: '{{Subst:স্বাগতম}}'
        var username = wgRelevantUser();
,
        $('#mw-mf-userinfo .post-content .mobileUndo-ui .mw-mf-action-button').click(function(e) {
summary: 'ভারতপিডিয়ায় স্বাগতম!',
            e.preventDefault();
format: 'json'
            OO.ui.confirm(i18n[i18n_lang]['mu-thank-confirm']).done(function(confirmed) {
};
                if (confirmed) {
api = new mw.Api();
                    $('.mw-mf-action-button').css('pointer-events', 'none').text(i18n[i18n_lang]['mu-thank-loading']);
                    var api = new mw.Api();
api.postWithToken( 'csrf', params1 ).done( function ( data ) {
                    api.postWithToken('csrf', {
alert( 'সফলভাবে স্বাগত জানানো হয়েছে!' );
                        action: "thank",
} );
                        rev: revId,
 
                    }).done(function(result) {
  } else {
                        mw.notify((i18n[i18n_lang]['mu-thank-successful']).replace(/\$1/g, username));
  var params = {
                        $('.mw-mf-action-button').text(i18n[i18n_lang]['mu-thank-success']);
action: 'edit',
                    }).fail(function() {
title: 'User talk:' + mw.config.get("wgRelevantUserName"),
                        mw.notify((i18n[i18n_lang]['mu-thank-failed']).replace(/\$1/g, username));
prependtext: talk
                        $('.mw-mf-action-button').text(i18n[i18n_lang]['mu-failed']);
,
                    });
summary: 'ভারতপিডিয়ায় স্বাগত!',
                }
format: 'json'
            });
};
        });
api = new mw.Api();
        console.timeEnd('mobileUndo');
        mobileUndo.on('click', function() {
api.postWithToken( 'csrf', params ).done( function ( data ) {
             OO.ui.prompt(i18n[i18n_lang]['mu-edit-summary-prompt'], {
alert( 'সফলভাবে স্বাগত জানানো হয়েছে!' );
                textInput: {
} );
                    placeholder: i18n[i18n_lang]['mu-edit-summary-prompt-placeholder']
  }
                }
}
            }).done(function(customEditSummary) {
);
                $.when(mw.loader.using('mediawiki.api')).then(function() {
}() );
                    return new mw.Api().getMessages(['undo-summary'], {
//</nowiki>
                        amlang: mw.config.get('wgServerName').split('.wik')[0]
//<nowiki>
                    });
console.time('mobileUndo');
                 }).then(function(message) {
$.when(mw.loader.using(['mediawiki.util', 'mediawiki.api', 'oojs-ui-windows', 'oojs-ui-core', 'oojs-ui.styles.icons-editing-core'])).then(function() {
                    var editSummaryMessage = message['undo-summary'];
    return new mw.Api().getMessages(['editundo', 'Undo-nochange']);
                    var editSummary = editSummaryMessage.replace(/\$1/g, revId);
}).then(function(globalmessages) {
                    editSummary = editSummary.replace(/\$2/g, username);
    var mobileUndo, i18n_lang = mw.config.get('wgUserLanguage');
                    if (customEditSummary !== null) {
    var i18n = {
                        mobileUndo.setDisabled(true);
        "en": {
                        editSummary = editSummary + ' ' + customEditSummary + (i18n[i18n_lang]['editsummary-ad']);
             "mu-success": "Successful",
                        //call the API
            "mu-fail": "Failed",
                        var api = new mw.Api({
            "mu-loading": "Loading...",
                            ajax: {
            "editsummary-ad": "",
                                headers: {
             "mu-undo-successful": "Revert successful.... Reloading in a sec",
                                    'Api-User-Agent': 'mobileUndo/2.0.2(https://en.wikipedia.org/wiki/User:FR30799386/undo.js)'
            "mu-empty-reponse-from-server": "An empty response was received from the server",
                                }
             "mu-edit-summary-prompt": "Add a reason to your edit summary !",
                            }
            "mu-edit-summary-prompt-placeholder": "Reason...",
                        });
             "mu-thank-success": "Thanked",
                        //Feedback UI
            "mu-thank-confirm": "Send public thanks ?",
                        mobileUndo.setLabel(i18n[i18n_lang]['mu-loading']);
            "mu-thank-loading": "Thanking...",
                        api.postWithToken('csrf', {
             "mu-thank-successful": "You thanked $1.",
                            action: "edit",
            "mu-thank-failed": "Failed to thank $1.",
                            title: mw.config.get('wgRelevantPageName'),
            "mu-http-error":"HTTP error: "
                            summary: editSummary,
        },
                            undo: revId,
        "bn": {
                        }).done(function(result) {
            "mu-success": "সফল",
                            if (result.edit.code === 'abusefilter-warning' || result.edit.code === 'abusefilter-disallowed') {
            "mu-fail": "ব্যর্থ হয়েছে",
                                mobileUndo.setLabel(i18n[i18n_lang]['mu-fail']);
             "mu-loading": "লোড করা হচ্ছে...",
                                OO.ui.alert($('<p>').html(result.edit.warning), {
             "editsummary-ad": "",
                                    title: result.edit.info
            "mu-undo-successful": "পূর্বাবস্থায় ফেরত যাওয়া সফল হয়েছে.... পুনঃলোড করা হচ্ছে",
                                }).done(function() {});
             "mu-empty-reponse-from-server": "সার্ভার থেকে একটি খালি প্রতিক্রিয়া পাওয়া গেছে।",
                                return;
             "mu-edit-summary-prompt": "সম্পাদনা সারাংশে কারণ উল্লেখ করুন!",
                            } else if (typeof result.edit.nochange !== 'undefined') {
            "mu-edit-summary-prompt-placeholder": "কারণ...",
                                mobileUndo.setLabel(i18n[i18n_lang]['mu-fail']);
             "mu-thank-success": "ধন্যবাদ দিয়েছেন",
                                OO.ui.alert($('<p>').html(globalmessages['Undo-nochange'])).done(function() {});
            "mu-thank-confirm": "প্রকাশ্য ধন্যবাদ জানাবেন?",
                                return;
             "mu-thank-loading": "ধন্যবাদ জানানো হচ্ছে...",
                            }
            "mu-thank-successful": "আপনি $1 কে ধন্যবাদ জানিয়েছেন।",
                            console.log(result);
            "mu-thank-failed": "$1 কে ধন্যবাদ জানানো ব্যর্থ হয়েছে।",
                            mobileUndo.setLabel(i18n[i18n_lang]['mu-success']);
            "mu-http-error":"HTTP ত্রুটি: "
                            mw.notify(i18n[i18n_lang]['mu-undo-successful']);
         }
                            setTimeout(function() {
    };
                                location.href = mw.util.getUrl('Special:MobileDiff/' + result.edit.newrevid);
if(undefined === i18n[i18n_lang]){
                            }, 1500);
i18n_lang = 'en';
                        }).fail(function(code, jqxhr) {
}
                            mobileUndo.setLabel(i18n[i18n_lang]['mu-fail']);
    if (mw.config.get('wgCanonicalSpecialPageName') === 'MobileDiff') {
                            var details;
        mw.util.addCSS('#mw-mf-userinfo .mobileUndo-ui .mw-ui-icon.mw-ui-icon-before:before{display:none;}\n#mobileUndo > a > span.oo-ui-iconElement-icon.oo-ui-icon-editUndo.oo-ui-image-invert{display:inline-block; position:initial;}\n#mobileUndo > a{padding:0.57142857em 0.9375em;}'+
                            if (code === 'http' && jqxhr.textStatus === 'error') {
        '#mw-mf-userinfo > div > div.mobileUndo-ui > a > div{line-height:normal;}');
                                details = i18n[i18n_lang]['mu-http-error'] + jqxhr.xhr.status;
        if (mw.config.get('wgVisualEditor').pageLanguageDir === 'ltr') {
                            } else if (code === 'http') {
            $('#mw-mf-userinfo .post-content').append($('<div>').attr('class', 'mobileUndo-ui').css({
                                details = i18n[i18n_lang]['mu-http-error'] + jqxhr.textStatus;
                'display': 'inline-block',
                            } else if (code === 'ok-but-empty') {
                'float': 'right'
                                details = i18n[i18n_lang]['mu-empty response-from-server'];
            }));
                            } else {
        } else {
                                details = jqxhr.error.info;
            $('#mw-mf-userinfo .post-content').append($('<div>').attr('class', 'mobileUndo-ui').css({
                            }
                'display': 'inline-block',
                            OO.ui.alert($('<p>').html(details)).done(function() {});
                'float': 'left'
                        });
             }));
                    }
        }
                });
        $('.mobileUndo-ui').append($('.mw-mf-action-button').remove().css({
            'clear': 'none'
        }));
        if (!$('.warningbox').length && mw.config.get('wgRelevantPageIsProbablyEditable')) {
            mobileUndo = new OO.ui.ButtonWidget({
                label: (globalmessages.editundo).charAt(0).toUpperCase() + (globalmessages.editundo).slice(1),
                 icon: 'editUndo',
                title: 'mobileUndo',
                flags: ['destructive', 'primary'],
                id: 'mobileUndo'
             });
             });
        });
            $('.mobileUndo-ui').append(mobileUndo.$element);
    }
            if (mw.config.get('wgVisualEditor').pageLanguageDir === 'ltr') {
});
                $('#mobileUndo').css('margin-right', '0.3em');
//End of code
            } else {
//</nowiki>
                $('#mobileUndo').css('margin-left', '0.3em');
window.wgRelevantUser = function() {
            }
    var user;
        }
    if ($('.mw-mf-user-link').text() !== '') {
        window.wgRelevantUser = function() {
        user = $('.mw-mf-user-link').text();
            var user;
    } else {
            if ($('.mw-mf-user-link').text() !== '') {
        user = $('#mw-mf-userinfo .post-content div:nth-child(2)').text();
                user = $('.mw-mf-user-link').text();
    }
            } else {
    return user;
                user = $('#mw-mf-userinfo .post-content div:nth-child(2)').text();
    };
            }
var href = ($('#mw-mf-diffarea > div.mw-mf-diff-info > h3 > a').attr('href')) || '';
            return user;
window.wgRevId = href.split('&oldid=')[1];
        };
if( $('#mw-mf-diffarea > ul > li.revision-history-next').length ) {
        window.wgRevId = ($('#mw-mf-diffarea > div.mw-mf-diff-info > h3 > a').attr('href')).split('&oldid=')[1];
$('#mw-mf-diffarea > div.mw-mf-diff-info > h3').append(
        var revId = wgRevId;
$('<a>').attr('id','mobileRestore').attr('href','javascript:void(0)').append(
        console.log(revId);
$('<b>').text('(পুনরুদ্ধার)')
        var username = wgRelevantUser();
)
        $('#mw-mf-userinfo .post-content .mobileUndo-ui .mw-mf-action-button').click(function(e) {
);
            e.preventDefault();
}
            OO.ui.confirm(i18n[i18n_lang]['mu-thank-confirm']).done(function(confirmed) {
$('#mobileRestore').click(function(e){
                if (confirmed) {
e.preventDefault();
                    $('.mw-mf-action-button').css('pointer-events', 'none').text(i18n[i18n_lang]['mu-thank-loading']);
$('#mobileRestore b').text('(লোড হচ্ছে....)');
                    var api = new mw.Api();
$('#mobileRestore').css('pointer-events','none');
                    api.postWithToken('csrf', {
var customEditSummary = prompt('পুনরুদ্ধারের কারণ (ঐচ্ছিক)');
                        action: "thank",
if(customEditSummary === null) {
                        rev: revId,
$('#mobileRestore b').text('(পুনরুদ্ধার)');
                    }).done(function(result) {
$('#mobileRestore').css('pointer-events','auto');
                        mw.notify((i18n[i18n_lang]['mu-thank-successful']).replace(/\$1/g, username));
return;
                        $('.mw-mf-action-button').text(i18n[i18n_lang]['mu-thank-success']);
}
                    }).fail(function() {
var username =wgRelevantUser();
                        mw.notify((i18n[i18n_lang]['mu-thank-failed']).replace(/\$1/g, username));
var editSummary = '[[Special:Contributions/'+username+'|'+username+']] ([[User talk:'+username+'|আলাপ]])-এর করা ' +wgRevId+ 'নং সংস্করণ পুনরুদ্ধার করা হয়েছে';
                        $('.mw-mf-action-button').text(i18n[i18n_lang]['mu-failed']);
editSummary = editSummary + customEditSummary + ' (পুনরুদ্ধারায়ন)';
                    });
$.when(mw.loader.load('mediawiki.api')).then(function(){
                }
var api = new mw.Api();
            });
api.get({
        });
'action':'query',
        console.timeEnd('mobileUndo');
'prop':'revisions',
        mobileUndo.on('click', function() {
'titles':mw.config.get('wgRelevantPageName'),
            OO.ui.prompt(i18n[i18n_lang]['mu-edit-summary-prompt'], {
'rvprop':'ids'
                textInput: {
}).done(function(result){
                    placeholder: i18n[i18n_lang]['mu-edit-summary-prompt-placeholder']
if(result.query.pages) {
                }
var StartRevId = result.query.pages[mw.config.get('wgRelevantArticleId')].revisions[0].revid;
            }).done(function(customEditSummary) {
console.log(StartRevId);
                $.when(mw.loader.using('mediawiki.api')).then(function() {
api.postWithToken('csrf', {
                    return new mw.Api().getMessages(['undo-summary'], {
                    action: "edit",
                        amlang: mw.config.get('wgServerName').split('.wik')[0]
                    title: mw.config.get('wgRelevantPageName'),
                    });
                    summary: editSummary,
                }).then(function(message) {
                    undo:StartRevId,
                    var editSummaryMessage = message['undo-summary'];
undoafter:wgRevId,
                    var editSummary = editSummaryMessage.replace(/\$1/g, revId);
                }).done(function(result) {
                    editSummary = editSummary.replace(/\$2/g, username);
                    if (typeof result.edit.nochange !== 'undefined') {
                    if (customEditSummary !== null) {
                    $('#mobileRestore b').text('(Failed)');
                        mobileUndo.setDisabled(true);
alert( 'No change occured');
                        editSummary = editSummary + ' ' + customEditSummary + (i18n[i18n_lang]['editsummary-ad']);
                        return;
                        //call the API
                    }
                        var api = new mw.Api({
console.log(result);
                            ajax: {
$('#mobileRestore b').text('(সফলভাবে হয়েছে)')
                                headers: {
                    mw.notify('সংস্করণ পুনরুদ্ধার সফল হয়েছে.... পুনঃলোড করা হচ্ছে');
                                    'Api-User-Agent': 'mobileUndo/2.0.2(https://en.wikipedia.org/wiki/User:FR30799386/undo.js)'
setTimeout(function() {
                                }
                      location.href = mw.util.getUrl('Special:MobileDiff/' + result.edit.newrevid);
                            }
                    }, 1500);
                        });
                }).fail(function(code, jqxhr) {
                        //Feedback UI
                $('#mobileRestore b').text('(পুনরুদ্ধার কার্য বাতিল করা হয়েছে)');
                        mobileUndo.setLabel(i18n[i18n_lang]['mu-loading']);
                    var details;
                        api.postWithToken('csrf', {
                    if (code === 'http' && jqxhr.textStatus === 'error') {
                            action: "edit",
                        details = 'HTTP error: ' + jqxhr.xhr.status;
                            title: mw.config.get('wgRelevantPageName'),
                    } else if (code === 'http') {
                            summary: editSummary,
                        details = 'HTTP error: ' + jqxhr.textStatus;
                            undo: revId,
                    } else if (code === 'ok-but-empty') {
                        }).done(function(result) {
                        details = 'An empty response was given the server';
                            if (result.edit.code === 'abusefilter-warning' || result.edit.code === 'abusefilter-disallowed') {
                    } else {
                                mobileUndo.setLabel(i18n[i18n_lang]['mu-fail']);
                        details = jqxhr.error.info;
                                OO.ui.alert($('<p>').html(result.edit.warning), {
                                    title: result.edit.info
                                }).done(function() {});
                                return;
                            } else if (typeof result.edit.nochange !== 'undefined') {
                                mobileUndo.setLabel(i18n[i18n_lang]['mu-fail']);
                                OO.ui.alert($('<p>').html(globalmessages['Undo-nochange'])).done(function() {});
                                return;
                            }
                            console.log(result);
                            mobileUndo.setLabel(i18n[i18n_lang]['mu-success']);
                            mw.notify(i18n[i18n_lang]['mu-undo-successful']);
                            setTimeout(function() {
                                location.href = mw.util.getUrl('Special:MobileDiff/' + result.edit.newrevid);
                            }, 1500);
                        }).fail(function(code, jqxhr) {
                            mobileUndo.setLabel(i18n[i18n_lang]['mu-fail']);
                            var details;
                            if (code === 'http' && jqxhr.textStatus === 'error') {
                                details = i18n[i18n_lang]['mu-http-error'] + jqxhr.xhr.status;
                            } else if (code === 'http') {
                                details = i18n[i18n_lang]['mu-http-error'] + jqxhr.textStatus;
                            } else if (code === 'ok-but-empty') {
                                details = i18n[i18n_lang]['mu-empty response-from-server'];
                            } else {
                                details = jqxhr.error.info;
                            }
                            OO.ui.alert($('<p>').html(details)).done(function() {});
                        });
                     }
                     }
                    alert( details );
                 });
                 });
} else {
            });
alert('Failed to retrieve page details');
        });
}
    }
});
});
});
});
if(mw.config.get('wgCanonicalSpecialPageName') === 'MobileDiff') {
//End of code
mw.loader.using('mediawiki.util', function() {
//</nowiki>
var ele_a = document.createElement('a');
window.wgRelevantUser = function() {
ele_a.setAttribute('href', mw.util.getUrl(mw.config.get('wgRelevantPageName'), {action: 'history'}));
    var user;
ele_a.innerHTML = '(ইতিহাস)';
    if ($('.mw-mf-user-link').text() !== '') {
document.getElementsByTagName('h2')[0].appendChild(ele_a);
        user = $('.mw-mf-user-link').text();
});
    } else {
        user = $('#mw-mf-userinfo .post-content div:nth-child(2)').text();
    }
    return user;
    };
var href = ($('#mw-mf-diffarea > div.mw-mf-diff-info > h3 > a').attr('href')) || '';
window.wgRevId = href.split('&oldid=')[1];
if( $('#mw-mf-diffarea > ul > li.revision-history-next').length ) {
$('#mw-mf-diffarea > div.mw-mf-diff-info > h3').append(
$('<a>').attr('id','mobileRestore').attr('href','javascript:void(0)').append(
$('<b>').text('(পুনরুদ্ধার)')
)
);
}
}
 
$('#mobileRestore').click(function(e){
//my common.js
e.preventDefault();
$.when(mw.loader.using(['mediawiki.util'], $.ready)).done( function() {
$('#mobileRestore b').text('(লোড হচ্ছে....)');
mw.util.addPortletLink("p-tb", mw.config.get('wgArticlePath').replace('$1', "ব্যবহারকারী:রবি/common.js"), "common.js", "tb-awbscript", "Personal common.js");
$('#mobileRestore').css('pointer-events','none');
});
var customEditSummary = prompt('পুনরুদ্ধারের কারণ (ঐচ্ছিক)');
 
if(customEditSummary === null) {
if (mw.config.get('wgCanonicalNamespace')+':'+mw.config.get('wgTitle') === 'ব্যবহারকারী:রবি/common.js' && mw.config.get('wgAction') == 'view');
$('#mobileRestore b').text('(পুনরুদ্ধার)');
 
$('#mobileRestore').css('pointer-events','auto');
//শীর্ষক
return;
(function($, mw) {
var scrollDownButtonId = 'scrollDownButton',
scrollUpButtonId = 'scrollUpButton';
if (mw.config.get('wgServerName').match(/wikimirror\.org$/)) {
scrollDownButtonId += '-zhwiki';
scrollUpButtonId += '-zhwiki'
}
 
var scrollButtonIcon = '//upload.wikimedia.org/wikipedia/commons/7/7f/Font_Awesome_5_regular_arrow-circle-up_green.svg';
if (!document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#Image', '1.1'))
scrollButtonIcon = '//upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Font_Awesome_5_regular_arrow-circle-up_green.svg/32px-Font_Awesome_5_regular_arrow-circle-up_green.svg.png';
 
$scrollDownButton = $('<img>', {
src: scrollButtonIcon,
id: scrollDownButtonId
}).css({
cursor: 'pointer',
opacity: 0.7,
position: 'fixed',
display: 'none',
right: '18px',
transform: 'rotate(180deg)',
'-webkit-transform': 'rotate(180deg)',
'-moz-transform': 'rotate(180deg)',
'-o-transform': 'rotate(180deg)',
'-ms-transform': 'rotate(180deg)'
}).on('click', function() {
$('html, body').animate({
scrollTop: $(document).height() - $(window).height()
}, 660)
}).on('mouseenter mouseleave', function(e) {
this.style.opacity = e.type === 'mouseenter' ? 1 : 0.7
}).appendTo('body');
 
$scrollUpButton = $('<img>', {
src: scrollButtonIcon,
id: scrollUpButtonId
}).css({
cursor: 'pointer',
opacity: 0.7,
position: 'fixed',
display: 'none',
right: '18px'
}).on('click', function() {
$('html, body').animate({
scrollTop: 0
}, 660)
}).on('mouseenter mouseleave', function(e) {
this.style.opacity = e.type === 'mouseenter' ? 1 : 0.7
}).appendTo('body');
 
var scrollButtonTimer;
$(window).on('scroll', function() {
var dingHeight = $('#bluedeck_ding>div').height() ? $('#bluedeck_ding>div').height() : 0;
$('#mw-ge-help-panel-cta-button').length > 0 ? $scrollDownButton.css('bottom', dingHeight + 75 + 'px') && $scrollUpButton.css('bottom', dingHeight + 116 + 'px') : $scrollDownButton.css('bottom', dingHeight + 24 + 'px') && $scrollUpButton.css('bottom', dingHeight + 65 + 'px');
$('#cat_a_lot').length > 0 || $('#proveit').length > 0 || $('.wordcount').length > 0 ? $scrollDownButton.css('left', '10px') && $scrollUpButton.css('left', '10px') : $scrollDownButton.css('left', 'unset') && $scrollUpButton.css('left', 'unset');
$(this).scrollTop() > 60 ? $scrollDownButton.fadeIn('slow') && $scrollUpButton.fadeIn('slow') : $scrollDownButton.fadeOut('slow') && $scrollUpButton.fadeOut('slow');
this.clearTimeout(scrollButtonTimer);
scrollButtonTimer = this.setTimeout(function() {
$scrollDownButton.fadeOut('slow');
$scrollUpButton.fadeOut('slow')
}, 2000)
});
$scrollDownButton.on('mouseenter', function() {
window.clearTimeout(scrollButtonTimer)
});
$scrollUpButton.on('mouseenter', function() {
window.clearTimeout(scrollButtonTimer)
})
})(jQuery, mw);
 
/**
* Add "Purge" content action link.
*
* Dependencies: mediawiki.util, mediawiki.api
*
* @source https://www.mediawiki.org/wiki/Snippets/Purge_action
* @revision 2016-05-22
*/
$( function () {
if ( $( '#ca-purge' ).length || !mw.config.get( 'wgIsArticle' ) ) return;
var node = mw.util.addPortletLink(
'p-cactions',
mw.util.getUrl( null, { action: 'purge' } ),
mw.config.get( 'skin' ) === 'vector' ? 'শোধন' : 'শোধন',
'ca-purge',
'এই পাতার সার্ভার ক্যাশে পরিস্কার করুন',
'শোধন'
);
$(node).on( 'click', function (e) {
new mw.Api().post( { action: 'purge', titles: mw.config.get( 'wgPageName' ) } ).then(function () {
location.reload();
}, function () {
mw.notify( 'শোধন ব্যর্থ হয়েছে', { type: 'error' } );
});
e.preventDefault();
});
});
 
//rollback confirmation
//<nowiki>
(function() {
if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
$(".mw-rollback-link").on('click', function(e) {
var linkText = $(e.target).text(),
count = linkText.match(/\d/) ? linkText.match(/\d+/)[0] : null,
message = 'Rollback ' + (count ? count + ' edits' : 'edit') + ' by ' + mw.util.getParamValue('from',e.target.href) + '?';
if(!confirm(message)) return e.preventDefault();
});
}
}());
//</nowiki>
 
/** Quick Edit **/
 
// Edit sections of a page without leaving the article
// [[en:w:User:BrandonXLF/QuickEdit]]
// By [[en:w:User:BrandonXLF]]
 
(function() {
var mobile = mw.config.get('skin') === 'minerva',
apiSingleton,
titleRegexp = new RegExp(
mw.config.get('wgArticlePath').replace(/[.*+?^${}()|[\]\\]/g, '\\$&').replace(/\\\$1/, '([^?]+)') +
'|[?&]title=([^&#]*)'
);
 
function api(func, params) {
if (!apiSingleton) apiSingleton = new mw.Api();
 
$.extend(params, {
errorformat: 'html',
errorlang: mw.config.get('wgUserLanguage'),
errorsuselocal: true
});
 
return apiSingleton[func](params).fail(function(_, data) {
mw.notify(apiSingleton.getErrorMessage(data), {
type: 'error',
tag: 'quickedit'
});
});
}
 
function getPageInfo(title, sectionID) {
return api('get', {
action: 'query',
curtimestamp: 1,
prop: 'revisions',
indexpageids: 1,
titles: title,
rvprop: ['timestamp', 'content'],
rvslots: 'main',
rvsection: sectionID
}).then(function(res) {
var rev = res.query.pages[res.query.pageids[0]].revisions[0];
 
return {
start: res.curtimestamp,
base: rev.timestamp,
full: rev.slots.main['*']
};
});
}
}
var username =wgRelevantUser();
var editSummary = '[[Special:Contributions/'+username+'|'+username+']] ([[User talk:'+username+'|আলাপ]])-এর করা ' +wgRevId+ 'নং সংস্করণ পুনরুদ্ধার করা হয়েছে';
editSummary = editSummary + customEditSummary + ' (পুনরুদ্ধারায়ন)';
$.when(mw.loader.load('mediawiki.api')).then(function(){
var api = new mw.Api();
api.get({
'action':'query',
'prop':'revisions',
'titles':mw.config.get('wgRelevantPageName'),
'rvprop':'ids'
}).done(function(result){
if(result.query.pages) {
var StartRevId = result.query.pages[mw.config.get('wgRelevantArticleId')].revisions[0].revid;
console.log(StartRevId);
api.postWithToken('csrf', {
                    action: "edit",
                    title: mw.config.get('wgRelevantPageName'),
                    summary: editSummary,
                    undo:StartRevId,
undoafter:wgRevId,
                }).done(function(result) {
                    if (typeof result.edit.nochange !== 'undefined') {
                    $('#mobileRestore b').text('(Failed)');
alert( 'No change occured');
                        return;
                    }
console.log(result);
$('#mobileRestore b').text('(সফলভাবে হয়েছে)')
                    mw.notify('সংস্করণ পুনরুদ্ধার সফল হয়েছে.... পুনঃলোড করা হচ্ছে');
setTimeout(function() {
                      location.href = mw.util.getUrl('Special:MobileDiff/' + result.edit.newrevid);
                    }, 1500);
                }).fail(function(code, jqxhr) {
                $('#mobileRestore b').text('(পুনরুদ্ধার কার্য বাতিল করা হয়েছে)');
                    var details;
                    if (code === 'http' && jqxhr.textStatus === 'error') {
                        details = 'HTTP error: ' + jqxhr.xhr.status;
                    } else if (code === 'http') {
                        details = 'HTTP error: ' + jqxhr.textStatus;
                    } else if (code === 'ok-but-empty') {
                        details = 'An empty response was given the server';
                    } else {
                        details = jqxhr.error.info;
                    }
                    alert( details );
                });
} else {
alert('Failed to retrieve page details');
}
});
});
});


function getPreviewCallback(editor) {
//history
editor.children('.preview').remove();
mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/মোবাইল পার্থক্য ইতিহাস.js&action=raw&ctype=text/javascript');


new OO.ui.ProgressBarWidget().$element.css({
//my common.js
maxWidth: '100%',
$.when(mw.loader.using(['mediawiki.util'], $.ready)).done( function() {
borderRadius: '0',
mw.util.addPortletLink("p-tb", mw.config.get('wgArticlePath').replace('$1', "ব্যবহারকারী:রবি/common.js"), "common.js", "tb-awbscript", "Personal common.js");
boxShadow: 'none',
});
margin: '8px 0'
}).addClass('preview').appendTo(editor);


return function(html) {
if (mw.config.get('wgCanonicalNamespace')+':'+mw.config.get('wgTitle') === 'ব্যবহারকারী:রবি/common.js' && mw.config.get('wgAction') == 'view');
editor.children('.preview').remove();


$('<div>').html(html).css({
//শীর্ষক
margin: '8px 0',
mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/উপর নীচ.js&action=raw&ctype=text/javascript');
border: '1px solid #a2a9b1',
padding: '8px',
overflowX: 'hidden'
}).addClass('preview').appendTo(editor);
};
}


function showCompare(editor, title, from, to) {
//Purge
mw.loader.load('mediawiki.diff.styles');
mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/পুনঃসতেজ.js&action=raw&ctype=text/javascript');


api('post', {
/** Quick Edit **/
action: 'compare',
mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/দ্রুত সম্পাদনা.js&action=raw&ctype=text/javascript');
fromslots: 'main',
'fromtext-main': from,
fromtitle: title,
frompst: 'true',
toslots: 'main',
'totext-main': to,
totitle: title,
topst: 'true'
}).then(function(r) {
return r.compare['*'] ? $('<table>').addClass('diff').append(
$('<colgroup>').append(
$('<col>').addClass('diff-marker'),
$('<col>').addClass('diff-content'),
$('<col>').addClass('diff-marker'),
$('<col>').addClass('diff-content')
)
).append(r.compare['*']) : 'কোন পার্থক্য নেই';
}).then(getPreviewCallback(editor));
}
 
// Parts taken from EditPage::extractSectionTitle and Parser::stripSectionName
function getSectionSummary(text) {
var match = text.match(/^(=+)(.+)\1\s*(\n|$)/);
 
return !match ? '' : '/* ' + match[2].trim()
// Strip internal link markup
.replace(/\[\[:?([^[|]+)\|([^[]+)\]\]/g, '$2')
.replace(/\[\[:?([^[]+)\|?\]\]/g, '$1')
// Strip external link markup
.replace(new RegExp('\\[(?:' + mw.config.get('wgUrlProtocols') + ')([^ ]+?) ([^\\[]+)\\]', 'ig'), '$2')
// Remove wikitext quotes
.replace(/(''|'''|''''')(?!')/g, '')
// Strip HTML tags
.replace(/<[^>]+?>/g, '') + ' */ ';
}
 
function showEditor(el) {
var progress = new OO.ui.ProgressBarWidget(),
heading = el.closest(':header'),
matcher = heading.nextUntil.bind(heading),
inserter = heading.after.bind(heading),
targetEl = el.siblings('.quickedit-target').last(),
titleMatch = targetEl.attr('href').match(titleRegexp),
title = decodeURIComponent(titleMatch[1] || titleMatch[2]),
sectionID = /[?&]v?e?section=T?-?(\d*)/.exec(targetEl.attr('href'))[1];
 
if (!heading.closest('.mw-parser-output').length) {
var articleContent = $('#mw-content-text .mw-parser-output');
 
matcher = function(selector) {
var child = articleContent.children(selector).first();
 
if (child.length) return child.prevAll();
return articleContent.children();
};
inserter = articleContent.prepend.bind(articleContent);
}
 
inserter(progress.$element.css({
maxWidth: '100%',
borderRadius: '0',
boxShadow: 'none'
}));
 
el.addClass('quickedit-loading');
$('.quickedit-hide').removeClass('quickedit-hide');
$('.quickedit-heading').removeClass('quickedit-heading');
$('#quickedit-editor').remove();
 
getPageInfo(title, sectionID).then(function(r) {
var start = r.start,
base = r.base,
full = r.full,
saving = false,
expanded = false,
remainderStart = full.match(/\n=+.+=+(?:\n|$)/),
part =  remainderStart ? full.substring(0, remainderStart.index) : full,
remainder = remainderStart ? full.substring(remainderStart.index) : '',
level = 0,
editor;
 
full.replace(/^(=+).+?(=+)(?:\n|$)/, function(m, a, b) {
level = Math.min(a.length, b.length);
return m;
});
 
var levelMatch = 'h1';
for (var i = 2; i <= level; i++) levelMatch += ',h' + i + ':has(*)';
 
var partSection = matcher(':header:has(*)'),
fullSection = matcher(levelMatch),
textarea = new OO.ui.MultilineTextInputWidget({
rows: 1,
maxRows: 20,
autosize: true,
value: part
}),
summary = new OO.ui.TextInputWidget({
value: getSectionSummary(part)
}),
minor = new OO.ui.CheckboxInputWidget(),
save = new OO.ui.ButtonInputWidget({
label: 'পরিবর্তন প্রকাশ করুন',
title: 'Save your changes',
flags: ['primary', 'progressive']
}),
preview = new OO.ui.ButtonInputWidget({
label: 'প্রাকদর্শন',
title: 'Preview the new wikitext'
}),
compare = new OO.ui.ButtonInputWidget({
label: 'পরিবর্তনসমূহ',
title: 'View the difference between the current revision and your revision'
}),
cancel = new OO.ui.ButtonInputWidget({
useInputTag: true,
label: 'বাতিল',
title: 'Close the edit form and discard changes',
flags: ['secondary', 'destructive']
}),
more = new OO.ui.ButtonInputWidget({
label: '+',
title: 'Edit the entire section (including subsections)'
}),
buttons = new OO.ui.HorizontalLayout({
items: [save, preview, compare, cancel]
});
 
if (part != full) {
buttons.addItems([more], 3);
}
 
partSection.addClass('quickedit-hide');
heading.addClass('quickedit-heading');
el.removeClass('quickedit-loading');
progress.$element.remove();
textarea.$input.css({
borderRadius: '0'
});
 
summary.on('enter', function() {
save.emit('click');
});
 
save.on('click', function() {
if (saving) return;
 
var fullText = textarea.getValue() + (expanded ? '' : remainder);
saving = true;
save.setLabel('সংরক্ষণ করা হচ্ছে...');
compare.setDisabled(true);
preview.setDisabled(true);
cancel.setDisabled(true);
more.setDisabled(true);
 
api('postWithEditToken', {
action: 'edit',
title: title,
section: sectionID,
summary: summary.getValue(),
text: fullText,
minor: minor.isSelected() ? true : undefined,
notminor: minor.isSelected() ? undefined : true,
starttimestamp: start,
basetimestamp: base
}).then(function() {
api('get', {
action: 'parse',
page: mw.config.get('wgPageName'),
prop: ['text', 'categorieshtml']
}).then(function(r) {
var contentText = $('#mw-content-text'),
catLinks = $('#catlinks');
 
contentText.find('.mw-parser-output').replaceWith(r.parse.text['*']);
mw.hook('wikipage.content').fire(contentText);
 
catLinks.replaceWith(r.parse.categorieshtml['*']);
mw.hook('wikipage.categories').fire(catLinks);
 
saving = false;
});
}, function(code) {
if (code == 'editconflict') {
showEditConflict(editor, title, sectionID, fullText).then(function(r) {
start = r.start;
base = r.base;
textarea = r.textarea;
expanded = true;
});
}
 
compare.setDisabled(false);
preview.setDisabled(false);
cancel.setDisabled(false);
more.setDisabled(expanded);
saving = false;
save.setLabel('Save');
});
});
 
preview.on('click', function() {
api('post', {
action: 'parse',
title: title,
prop: 'text',
pst: 'true',
disablelimitreport: 'true',
disableeditsection: 'true',
sectionpreview: 'true',
disabletoc: 'true',
text: textarea.getValue()
}).then(function(r) {
return r.parse.text['*'] + '<div style="clear:both;"></div>';
}).then(getPreviewCallback(editor));
});
 
compare.on('click', function() {
showCompare(editor, title, part + (expanded ? remainder : ''), textarea.getValue());
});
 
cancel.on('click', function() {
editor.remove();
heading.removeClass('quickedit-heading');
fullSection.removeClass('quickedit-hide');
});
 
more.on('click', function() {
expanded = true;
textarea.setValue(textarea.getValue() + remainder);
fullSection.addClass('quickedit-hide');
more.setDisabled(true);
});
 
editor = $('<div id="quickedit-editor">').css({
overflowX: 'hidden'
}).append(
$('<div>').css({
backgroundColor: '#eaecf0',
borderBottom: '1px solid #a2a9b1',
marginBottom: '8px'
}).append(
textarea.$element.css({
width: '100%',
maxWidth: '100%',
fontFamily: 'monospace, monospace'
}).addClass('quickedit-textarea'),
$('<div>').css({
border: '1px solid #a2a9b1',
borderWidth: '0 1px'
}).append(
$('<div>').css({
padding: '8px 4px 8px 8px',
display: 'table-cell',
verticalAlign: 'middle'
}).html('সারাংশ:'),
summary.$element.css({
width: '100%',
maxWidth: '100%',
padding: '8px 0px',
display: 'table-cell',
verticalAlign: 'middle'
}),
new OO.ui.FieldLayout(minor, {
label: new OO.ui.HtmlSnippet('🤏?'),
align: 'inline'
}).$element.css({
padding: '8px 8px 8px 4px',
display: 'table-cell',
verticalAlign: 'middle'
})
),
buttons.$element.css({
border: '1px solid #a2a9b1',
borderWidth: '0 1px',
padding: '0px 8px 0'
}),
title !== mw.config.get('wgPageName') ? $('<div>').css({
border: '1px solid #a2a9b1',
borderWidth: '0 1px',
padding: '0px 8px 8px'
}).append(
'Editing page: ',
$('<a>').attr('href', mw.config.get('wgArticlePath').replace('$1', title)).css({
fontWeight: 'bold'
}).text(title.replace(/_/g, ' '))
) : undefined
)
);
 
inserter(editor);
}, function() {
el.removeClass('quickedit-loading');
progress.$element.remove();
});
}
 
function showEditConflict(editor, title, sectionID, text) {
return getPageInfo(title, sectionID).then(function(r) {
var textarea = new OO.ui.MultilineTextInputWidget({
rows: 1,
maxRows: 20,
autosize: true,
value: r.full
}),
textarea2 = new OO.ui.MultilineTextInputWidget({
rows: 1,
maxRows: 20,
autosize: true,
value: text,
});
 
function syncSize() {
textarea.styleHeight = -1;
textarea.adjustSize(true);
 
textarea2.styleHeight = -1;
textarea2.adjustSize(true);
 
var height = Math.max(textarea.$input.height(), textarea2.$input.height());
textarea.$input.height(height);
textarea2.$input.height(height);
}
 
textarea.$input.css({
borderRadius: '0'
});
editor.find('> :first-child > :first-child').remove();
 
$('<table>').css({
width: '100%',
border: '1px solid #a2a9b1',
borderBottom: 'none',
borderSpacing: '0',
margin: '0 !important'
}).append(
$('<tr>').append(
$('<th>').css({
width: '50%',
paddingTop: '4px'
}).text('Their version (to be saved)'),
$('<th>').css({
width: '50%',
paddingTop: '4px'
}).text('Your version')
),
$('<tr>').append(
$('<td>').css({
width: '50%',
padding: '4px 4px 0 8px'
}).append(
textarea.$element.css({
width: '100%',
maxWidth: '100%',
fontFamily: 'monospace, monospace'
})
),
$('<td>').css({
width: '50%',
padding: '4px 8px 0 4px'
}).append(
textarea2.$element.css({
width: '100%',
maxWidth: '100%',
fontFamily: 'monospace, monospace'
})
)
)
).prependTo(editor.find('> :first-child'));
 
textarea.on('change', syncSize);
textarea2.on('change', syncSize);
syncSize();
showCompare(editor, title, text, r.full);
 
r.textarea = textarea;
return r;
});
}
 
function clickHandler(e) {
var el = $(e.target);
 
if (!el.hasClass('quickedit-editlink') || el.hasClass('quickedit-loading')) return;
 
e.preventDefault();
 
showEditor(el);
}
 
function addLinksToChildren(element) {
element.find('#quickedit-editor, .quickedit-section').remove();
element.find('.mw-editsection').each(function() {
$('[href*="section="]', this).last().after(
mobile ? '' : '<span class="quickedit-section"> | </span>',
$('<a>').html(mobile ? '&nbsp;💨' : 'দ্রুত সম্পাদনা').addClass('quickedit-section quickedit-editlink')
).addClass('quickedit-target');
});
}
 
$.when(mw.loader.using('oojs-ui-core'), $.ready).done(function() {
var body = $(document.body);
 
body.on('click', clickHandler);
addLinksToChildren(body);
mw.hook('wikipage.content').add(addLinksToChildren);
});
 
mw.loader.addStyleTag(
'.skin-minerva .mw-editsection { white-space: nowrap; }' +
'.skin-minerva .content .collapsible-heading .quickedit-section { visibility: hidden; }' +
'.skin-minerva .content .collapsible-heading.open-block .quickedit-section { visibility: visible; }' +
'.quickedit-hide { display: none !important; }' +
'.quickedit-loading, .quickedit-heading { color: #777; }'
);
})();


//খেলাঘর
//page creation
$( document ).ready( function() {
mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/পাতা সৃষ্টিকারক.js&action=raw&ctype=text/javascript');
  mw.util.addPortletLink(
    'p-personal',
    mw.util.getUrl( 'Special:MyPage/খেলাঘর' ), //No need for a variable.
    'খেলাঘর',
    'pt-sandbox2',
    'খেলাঘর',
    null,
    '#pt-sandbox'
  );
});


/***********************************************************************************
//redirect fix
* CatMan:  The category manager for MediaWiki wikis that is simple, lightweight,  *
$(function() { $('#mw-content-text .mw-redirect').after(function() { return this.href.indexOf('action=edit') !== -1 || this.href.indexOf('action=') !== -1 || this.href.indexOf('diff=') !== -1 ? '' : '<a href="' + this.href + (this.href.includes('?') ? '&' : '?') + 'action=edit" title="' + (this.title || this.href) + ' (edit redirect)"><sup>()</sup></a>'; }); });
* and modern.  Nya nya.                                                          *
*                                                                                *
* This script is largely a work in progress and may sometimes not work properly.  *
* Please see the English Wikipedia for known problems that are currently being    *
* fixed.                                                                          *
***********************************************************************************
* IMPORTANT (particularly for those who are viewing a copy of the script):        *
* THIS FILE IS AVAILABLE ON GITHUB AT https://github.com/Awesome-Aasim/CatMan    *
* ALL PULL REQUESTS AND CHANGES MUST BE MADE THERE, OTHERWISE THEY WILL BE LOST  *
* IF THE FILE AT THE REPOSITORY IS CHANGED OR REBUILT.                            *
***********************************************************************************
* LICENSING INFORMATION: Licensed under the MIT license                          *
* MIT License                                                                    *
* Copyright (c) 2021 Aasim Syed                                                  *
* Permission is hereby granted, free of charge, to any person obtaining a copy    *
* of this software and associated documentation files (the "Software"), to deal  *
* in the Software without restriction, including without limitation the rights    *
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell      *
* copies of the Software, and to permit persons to whom the Software is          *
* furnished to do so, subject to the following conditions:                        *
* The above copyright notice and this permission notice shall be included in all  *
* copies or substantial portions of the Software.                                *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR      *
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,        *
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE    *
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER          *
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,  *
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE  *
* SOFTWARE.                                                                      *
***********************************************************************************/
//<nowiki>
if (!Catman && mw.config.get("wgNamespaceNumber") >= 0 && mw.config.get("wgIsProbablyEditable") && mw.config.get("wgArticleId") > 0 && mw.config.get("wgNamespaceNumber") != 10) {
    var Catman = {};
    mw.loader.using(["oojs-ui-core", "oojs-ui-windows", "oojs-ui-widgets", "oojs-ui.styles.icons-moderation", "oojs-ui.styles.icons-interactions", "oojs-ui.styles.icons-editing-core"], function () {
        Catman.start = function () {
            // Create a factory.
            Catman.factory = new OO.Factory();
            Catman.getEditableCategories = function (text, categoryname = "Category") {
                categoryname = categoryname[0].toUpperCase() + categoryname.slice(start = 1);
                var temp = text.split("[[");
                var res = []
                for (var i in temp) {
                    if (temp[i].startsWith(categoryname + ":")) {
                        var temp2 = temp[i].split("]]")[0].slice(start = categoryname.length + 1);
                        res.push(temp2[0].toUpperCase() + temp2.substring(1));
                    }
                }
                /*
                var catlist = mw.config.get("wgCategories");
                var rtn = [];
                for (var i in res) {
                    for (var j in catlist) {
                        if (catlist[j] == res[i]) {
                            rtn.push(res[i]);
                        }
                    }
                }
                */
                return res;
            }
            function CatManDialog(config) {
                CatManDialog.super.call(this, config);
            }
            OO.inheritClass(CatManDialog, OO.ui.ProcessDialog);
            CatManDialog.static.name = 'catmandialog';
            CatManDialog.static.title = 'Category Manager';
            CatManDialog.static.actions = [
                {
                    flags: ['primary', 'progressive'],
                    icon: 'check',
                    title: 'Save changes',
                    action: 'next',
                    disabled: false
                },
                {
                    flags: 'safe',
                    icon: 'close',
                    title: 'Cancel',
                    action: 'back',
                    disabled: false
                }
            ]
            CatManDialog.prototype.getActionProcess = function (action) {
                var categoriestoadd, categoriestoremove, summary, presummary, wikitext;
                switch (action) {
                    case 'next':
                        return new OO.ui.Process(function () {
                            try {
                                categoriestoadd = [];
                                $(".catman-addcategory").each(function () {
                                    categoriestoadd.push($(this).find(".catman-categoryname").text());
                                });
                                categoriestoremove = [];
                                $(".catman-remove").each(function () {
                                    categoriestoremove.push($(this).find(".catman-categoryname").text());
                                });
                                summary = Catman.esinput.getValue();
                                presummary = "Run [[w:en:User:Awesome Aasim/CatMan|CatMan]]" + (summary ? " (reason: " + summary + ")" : "") + ": ";
                                if (categoriestoadd.length == 0 && categoriestoremove.length == 0) {
                                    throw new OO.ui.Error("No categories to add or remove.", { warning: true, recoverable: true });
                                }
                                return $.get(mw.config.get("wgScriptPath") + "/api.php", {
                                    action: "parse",
                                    format: "json",
                                    page: mw.config.get("wgPageName"),
                                    prop: "wikitext"
                                }).then(function (result, status) {
                                    if (status != 'success') {
                                        throw new OO.ui.Error("Connection failed. Please check your Internet and try again.", {recoverable: true});
                                    }
                                    wikitext = result.parse.wikitext["*"];
                                    debugger;
                                    for (var i in categoriestoremove) {
                                        for (var j in Catman.catprefixes) {
                                            if (wikitext.search("\\[\\[" + Catman.catprefixes[j][0].toUpperCase() + Catman.catprefixes[j].slice(start = 1) + ":" + categoriestoremove[i] + "\\]\\]") >= 0 || wikitext.search("\\[\\[" + Catman.catprefixes[j][0].toLowerCase() + Catman.catprefixes[j].slice(start = 1) + ":" + categoriestoremove[i] + "\\]\\]") >= 0) {
                                                presummary += "-cat [[Category:" + categoriestoremove[i].split("|")[0] + "|" + categoriestoremove[i].split("|")[0] + "]]"
                                            }
                                            if (i != categoriestoremove.length - 1) {
                                                presummary += ", "
                                            }
                                            while (wikitext.search("\\[\\[" + Catman.catprefixes[j][0].toUpperCase() + Catman.catprefixes[j].slice(start = 1) + ":" + categoriestoremove[i] + "\\]\\]") >= 0) {
                                                wikitext = wikitext.replace("[[" + Catman.catprefixes[j][0].toUpperCase() + Catman.catprefixes[j].slice(start = 1) + ":" + categoriestoremove[i] + "]]\n", "");
                                                wikitext = wikitext.replace("[[" + Catman.catprefixes[j][0].toUpperCase() + Catman.catprefixes[j].slice(start = 1) + ":" + categoriestoremove[i] + "]]", "");
                                            }
                                            while (wikitext.search("\\[\\[" + Catman.catprefixes[j][0].toLowerCase() + Catman.catprefixes[j].slice(start = 1) + ":" + categoriestoremove[i] + "\\]\\]") >= 0) {
                                                wikitext = wikitext.replace("[[" + Catman.catprefixes[j][0].toLowerCase() + Catman.catprefixes[j].slice(start = 1) + ":" + categoriestoremove[i] + "]]\n", "");
                                                wikitext = wikitext.replace("[[" + Catman.catprefixes[j][0].toLowerCase() + Catman.catprefixes[j].slice(start = 1) + ":" + categoriestoremove[i] + "]]", "");
                                            }
                                        }
                                    }
                                    if (categoriestoadd.length > 0 && categoriestoremove.length > 0) {
                                        presummary += "; "
                                    }
                                    for (var i in categoriestoadd) {
                                            if (wikitext.search("\\[\\[" + mw.config.get("wgFormattedNamespaces")[14] + ":" + categoriestoadd[i] + "\\]\\]") < 0 && wikitext.search("\\[\\[" + mw.config.get("wgFormattedNamespaces")[14] + ":" + categoriestoadd[i] + "\\]\\]") < 0) {
                                                presummary += "+cat [[Category:" + categoriestoadd[i].split("|")[0] + "|" + categoriestoadd[i].split("|")[0] + "]]";
                                            }
                                            if (i != categoriestoadd.length - 1) {
                                                presummary += ", ";
                                            }
                                            while (wikitext.search("\\[\\[" + mw.config.get("wgFormattedNamespaces")[14] + ":" + categoriestoadd[i] + "\\]\\]") < 0 && wikitext.search("\\[\\[" + mw.config.get("wgFormattedNamespaces")[14] + ":" + categoriestoadd[i] + "\\]\\]") < 0) {
                                                wikitext += "\n[[" + mw.config.get("wgFormattedNamespaces")[14] + ":" + categoriestoadd[i] + "]]";
                                                break;
                                            }
                                    }
                                    return $.get(mw.config.get("wgScriptPath") + "/api.php", {
                                        action: "query",
                                        format: "json",
                                        meta: "tokens",
                                        type: "csrf"
                                    }).then(function (result, status) {
                                        if (status != 'success') {
                                            throw new OO.ui.Error("Connection failed. Please check your Internet and try again.", {recoverable: true});
                                        }
                                        if (result.error) {
                                            throw new OO.ui.Error(result.error.info, { recoverable: true });
                                        } else {
                                            return $.post(mw.config.get("wgScriptPath") + "/api.php", {
                                                action: "edit",
                                                format: "json",
                                                title: mw.config.get("wgPageName"),
                                                token: result.query.tokens.csrftoken,
                                                text: wikitext,
                                                summary: presummary
                                            }).then(function (result, status) {
                                                if (status != 'success') {
                                                    throw new OO.ui.Error("Connection failed. Please check your Internet and try again.", {recoverable: true});
                                                }
                                                if (result.error) {
                                                    throw new OO.ui.Error(result.error.info, { recoverable: true });
                                                } else {
                                                    Catman.windowManager.closeWindow('catmandialog');
                                                    Catman.windowManager.$element.remove();
                                                    mw.notify("Categories successfully edited. Reloading...");
                                                    location.reload();
                                                }
                                            });
                                        }
                                    });
                                });
                            } catch (error) {
                                return error;
                            }
                        }, this);
                    case 'back': return new OO.ui.Process(function () {
                        Catman.windowManager.closeWindow('catmandialog');
                        Catman.windowManager.$element.remove();
                    }, this);
                }
                // Fallback to parent handler
                return CatManDialog.super.prototype.getActionProcess.call(this, action);
            };
            function CategoriesLayout(name, config) {
                CategoriesLayout.super.call(this, name, config);
                this.$element.append('<span id="catman-categories"></span>');
            }
            OO.inheritClass(CategoriesLayout, OO.ui.TabPanelLayout);
            CategoriesLayout.prototype.setupTabItem = function () {
                this.tabItem.setLabel('Categories');
            }
            function SummaryLayout(name, config) {
                SummaryLayout.super.call(this, name, config);
                this.$element.append('<span id="catman-summary"></span>');
            }
            OO.inheritClass(SummaryLayout, OO.ui.TabPanelLayout);
            SummaryLayout.prototype.setupTabItem = function () {
                this.tabItem.setLabel('Edit summary');
            }
            CategoriesLayout.prototype.getBodyHeight = function () {
                return "full";
            }
            SummaryLayout.prototype.getBodyHeight = function () {
                return "full";
            }
            CatManDialog.prototype.getBodyHeight = function () {
                return "full";
            }
            CatManDialog.prototype.initialize = function () {
                CatManDialog.super.prototype.initialize.call(this);
                this.content = new OO.ui.PanelLayout({ padded: false, expanded: false, $overlay: this.$overlay });
                var catinput = new OO.ui.ComboBoxInputWidget({ expanded: false, padded: true, placeholder: "Enter category name", options: [], $overlay: this.$overlay });
                var catinputsubmit = new OO.ui.ButtonWidget({ flags: ["primary", "progressive"], icon: "add", title: 'Add category', $overlay: this.$overlay })
                var esinput = new OO.ui.TextInputWidget({ placeholder: "Edit summary", $overlay: this.$overlay });
                var catpage = new CategoriesLayout('categories', { expanded: false, $overlay: this.$overlay });
                var sumpage = new SummaryLayout('summary', { expanded: false, $overlay: this.$overlay });
                var index = new OO.ui.IndexLayout({ expanded: true, $overlay: this.$overlay });
                index.addTabPanels([catpage, sumpage]);
                this.content.$element.append('<span id="catman-loading"><p></p></span><span id="catman"></span>');
                this.$body.append(this.content.$element);
                var progressBar = new OO.ui.ProgressBarWidget( {
                    progress: false,
                    padded: true,
                    $overlay: this.$overlay
                });
                $("#catman-loading").find("p").html(progressBar.$element);
                $("#catman").hide();
                $("#catman").html(index.$element);
                var catinputset = new OO.ui.FieldsetLayout({$overlay: this.$overlay});
                catinputset.addItems([
                    new OO.ui.ActionFieldLayout(catinput, catinputsubmit, {$overlay: this.$overlay})
                ]);
                $("#catman-categories").append(catinputset.$element);
                $("#catman-summary").append(esinput.$element);
                var categorylist = mw.config.get("wgCategories");
                Catman.catinput = catinput;
                Catman.catinputsubmit = catinputsubmit;
                Catman.esinput = esinput;
                Catman.catpage = catpage;
                Catman.sumpage = sumpage;
                Catman.index = index;
                Catman.catinputset = catinputset;
                Catman.$overlay = this.$overlay;
                $.get(mw.config.get("wgScriptPath") + "/api.php", {
                    action: "parse",
                    format: "json",
                    page: mw.config.get("wgPageName"),
                    prop: "wikitext"
                }).then(function (result, status) {
                    if (status != "success") {
                        Catman.windowManager.closeWindow('catmandialog');
                        Catman.windowManager.$element.remove();
                        OO.ui.alert('Failed to load CatMan.');
                    }
                    //find all category links on the page
                    var text = result.parse.wikitext["*"];
                    var catprefixes = [];
                    for (var i in mw.config.get("wgNamespaceIds")) {
                        if (mw.config.get("wgNamespaceIds")[i] == 14) {
                            catprefixes.push(i);
                        }
                    }
                    Catman.catprefixes = catprefixes;
                    var editablelist = [];
                    for (var i of catprefixes) {
                        editablelist = Catman.getEditableCategories(text, i);
                    }
                    Catman.list = editablelist;
                    var uneditablelist = [];
                    for (var i in categorylist) {
                        var editablecategory = false;
                        for (var j in editablelist) {
                            if (categorylist[i] == editablelist[j].split("|")[0]) {
                                editablecategory = true;
                                break;
                            }
                        }
                        if (!editablecategory) {
                            uneditablelist.push(categorylist[i]);
                        }
                    }
                    $("#catman-categories").append("<style>\n.catman-remove {\ntext-decoration:line-through;\n}</style>")
                    $("#catman-categories").append("<table style=\"width:100%\"><caption><b>Categories you can edit</b></caption><tbody id=\"catman-table\"></tbody></table>");
                    for (var i of editablelist) {
                        var $el = $("<tr class=\"catman-category catman-currentcategory\"><td class=\"catman-categoryname\"><a href=\"" + mw.config.get("wgArticlePath").replace("$1", "Category:" + i.split("|")[0]) + "\">" + i.split("|")[0] + "</a>" + (i.split("|").length > 1 ? "<span title=\"This is a category sort key, used to sort category entries when viewing the page in the category.\" style=\"text-decoration-line:underline;text-decoration-style:dotted;\">|" + i.split("|")[1] + "</span>" : "") + "</td><td class=\"catman-categoryremove\"></td></tr>")
                        $("#catman-table").append($el);
                        var removeCat = new OO.ui.ButtonWidget({
                            icon: 'trash',
                            title: 'Remove category',
                            flags: 'destructive',
                            $overlay: Catman.$overlay,
                            classes: ['catman-categoryremovebutton']
                        });
                        $el.find(".catman-categoryremove").append(removeCat.$element);
                        removeCat.$element.click(function (e) {
                            e.preventDefault();
                            $(this).parent().parent().addClass("catman-remove");
                            $(this).parent().parent().find(".catman-undobutton").show();
                            $(this).hide();
                        });
                        var undoCat = new OO.ui.ButtonWidget({
                            icon: 'undo',
                            title: 'Undo remove',
                            $overlay: Catman.$overlay,
                            classes: ['catman-undobutton']
                        });
                        $el.find(".catman-categoryremove").append(undoCat.$element);
                        undoCat.$element.click(function (e) {
                            e.preventDefault();
                            $(this).parent().parent().removeClass("catman-remove");
                            $(this).parent().parent().find(".catman-categoryremovebutton").show();
                            $(this).hide();
                        });
                        undoCat.$element.hide();
                    }
                    if (uneditablelist.length > 0) {
                        $("#catman-categories").append("<table style=\"width:100%\"><caption><b>Categories you cannot edit</b> (<span title=\"These categories cannot be edited with CatMan because they are automatically added with templates or magic words. To remove these categories, remove the templates or magic words that populate these categories.\" style=\"text-decoration-line:underline;text-decoration-style:dotted;\">?</span>)</caption><tbody id=\"catman-uneditable\"></tbody></table>");
                        for (var i of uneditablelist) {
                            var $el = $("<tr><td class=\"catman-categoryname\"><a href=\"" + mw.config.get("wgArticlePath").replace("$1", "Category:" + i.split("|")[0]) + "\">" + i + "</a></td></tr>")
                            $("#catman-uneditable").append($el);
                        }
                    }
                    Catman.addCat = function (e) {
                        e.preventDefault();
                        if (catinput.getValue().length > 0) {
                            var $el = $("<tr class=\"catman-category catman-addcategory\"><td class=\"catman-categoryname\"><a href=\"" + mw.config.get("wgArticlePath").replace("$1", "Category:" + catinput.getValue().split("|")[0]) + "\">" + catinput.getValue().split("|")[0] + "</a>" + (catinput.getValue().split("|").length > 1 ? "<span title=\"This is a category sort key, used to sort category entries when viewing the page in the category.\" style=\"text-decoration-line:underline;text-decoration-style:dotted;\">|" + catinput.getValue().split("|")[1] + "</span>" : "") + "</td><td class=\"catman-categoryremove\"></td></tr>")
                            $("#catman-table").append($el);
                            var removeCat = new OO.ui.ButtonWidget({
                                icon: 'trash',
                                title: 'Remove category',
                                flags: 'destructive',
                                $overlay: Catman.$overlay
                            });
                            $el.find(".catman-categoryremove").append(removeCat.$element);
                            removeCat.$element.click(function (e) {
                                e.preventDefault();
                                $(this).parent().parent().remove();
                            });
                            catinput.setValue("");
                        }
                        $(".catman-categoryname").each(function() {
                            var that = this;
                            $.get(mw.config.get("wgScriptPath") + "/api.php", {
                                action: "parse",
                                format: "json",
                                page: "Category:" + $(this).text().split("|")[0]
                            }).done(function(result) {
                                if (result.error) {
                                    if (result.error.code == "missingtitle") {
                                        $(that).find("a").addClass("new");
                                    }
                                }
                            });
                        });
                    }
                    catinput.$element.keypress(function(e) {
                        if (e.which == 13) {
                            Catman.addCat(e);
                        } else {
                            var key = e.which || e.keyCode;
                            if (key == 91 || key == 93 || (catinput.getValue() == "" && key == 32) || (catinput.getValue().search("\\|") >= 0 && key == 124) || (catinput.getValue() == "" && key == 124) || key == 35 || key == 123 || key == 125 || key == 60 || key == 62) { // stop the input of forbidden wikitext characters (except for pipe which is used for category sorting)
                                e.preventDefault();
                            }
                        }
                    });
                    window.setInterval(function(e) {
                        //populate the combobox
                        var searchterm = catinput.getValue();
                        var splitsearch = searchterm.split("|");
                        $.get(mw.config.get("wgScriptPath") + "/api.php", {
                            "action": "query",
                            "format": "json",
                            "list": "search",
                            "utf8": 1,
                            "srsearch": splitsearch[0],
                            "srnamespace": "14"
                        }).then(function(result, status) {
                            if (status == "success") {
                                if (result.error) {
                                    catinput.setOptions([]);
                                } else {
                                    var options = [], searchresults = result.query.search;
                                    var restofsearchterm = "";
                                    for (var i in splitsearch) {
                                        if (i != 0) {
                                            restofsearchterm += splitsearch[i];
                                        }
                                        if (i != splitsearch.length - 1) {
                                            restofsearchterm += "|";
                                        }
                                    }
                                    for (var i in searchresults) {
                                        options.push({data: searchresults[i].title.split(":")[1] + restofsearchterm, label: searchresults[i].title.split(":")[1]});
                                    }
                                    if (options.length == 0) {
                                        options.push({data: searchterm, label: "No results found."})
                                    }
                                    catinput.setOptions(options);
                                }
                            }
                        })
                    }, 1000);
                    catinputsubmit.$element.click(Catman.addCat);
                    $(".catman-categoryname").each(function() {
                        var that = this;
                        $.get(mw.config.get("wgScriptPath") + "/api.php", {
                            action: "parse",
                            format: "json",
                            page: "Category:" + $(this).text()
                        }).done(function(result) {
                            if (result.error) {
                                if (result.error.code == "missingtitle") {
                                    $(that).find("a").addClass("new");
                                }
                            }
                        });
                    });
                    $("#catman").show();
                    $("#catman-loading").hide();
                });
            };
            // Register the window constructor with the factory.
            Catman.factory.register(CatManDialog);


            // Create a window manager. Specify the name of the factory with the ‘factory’ config.
//cleanup
            Catman.windowManager = new OO.ui.WindowManager({
mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/পরিষ্কারকরণ.js&action=raw&ctype=text/javascript');
                factory: Catman.factory
            });
            $(document.body).append(Catman.windowManager.$element);
            Catman.windowManager.openWindow('catmandialog', { size: "full" });
        };
        if (mw.config.get("skin") == "minerva") {
            mw.util.addPortletLink('p-tb', 'javascript:Catman.start()', 'Start CatMan', 'pt-catman');
        } else {
            mw.util.addPortletLink('p-cactions', 'javascript:Catman.start()', 'Start CatMan', 'pt-catman');
        }
    });
}
//</nowiki>

১৫:৪৭, ১৩ মে ২০২২ তারিখে সম্পাদিত সর্বশেষ সংস্করণ

mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/রোলব্যাক নিশ্চিতকারক.js&action=raw&ctype=text/javascript');
mw.loader.load('//commons.m.wikimedia.org/w/index.php?title=MediaWiki:Gadget-HotCat.js&action=raw&ctype=text/javascript');

$(document).ready(function() {

 function customAlert(msg,duration){
 var pageId = mw.config.get('wgArticleId');
 var div = document.createElement('div');
 div.style ='position: fixed; right:500px; top:100px;height:51px;padding-top:13px;width:300px;font-size:25px; display:block;border: solid 1px black;background-color:white';
 div.innerHTML = "<center><img src='https://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Chulito_verde.jpg/21px-Chulito_verde.jpg'>"+"   "+msg+"</center>";
 setTimeout(function() {
 div.parentNode.removeChild(div);
 },duration);
 document.body.appendChild(div);};
 var bnSpellChecker = function() {
$('#wpTextbox1').wikiEditor('addToToolbar', {
            'section': 'main',
            'group': 'insert',
            'tools': {
                'bnSpellChecker': {
                   label: 'বানান শুদ্ধি করুন',
                   type: 'button',
        	   icon: '//upload.wikimedia.org/wikipedia/commons/thumb/0/01/Lachit_SpellChecker.png/25px-Lachit_SpellChecker.png',
                   action: {
                        type: 'callback',
                        execute: function() {
                        
   getText = $('#wpTextbox1').val();
   x = getText.replace(/  +/g, " ");

   //wiki special
   x = x.replace(/\u09DF/g, 'য়');
   x = x.replace(/{{ /g, '{{');
//   x = x.replace(/ডঃ/g, 'ড°');
   x = x.replace(/ঐতিয্য/g, 'ঐতিহ্য');
   x = x.replace(/নিম্নপ্রদত্ব/g, 'নিম্নপ্রদত্ত');
   x = x.replace(/কাহানি/g, 'কাহিনী');
   x = x.replace(/মনোনিত/g, 'মনোনীত');

   // From Dibya Dutta's Pratishapan
   x = x.replace(/৷/g, "।");
   x = x.replace(/ ।/g, "।");
   x = x.replace(/ ৷/g, "।");
   x = x.replace(/ \?/g, "?");
   x = x.replace(/ ॥/g, "॥");
   x = x.replace(/ !/g, "!");
   x = x.replace(/ ;/g, ";");
   x = x.replace(/ ,/g, ',');
   x = x.replace(/।।/g, '॥');
   x = x.replace(/৷৷/g, "॥");
   x = x.replace(/াে/g, "ো");
   x = x.replace(/ো/g, "ো");
   x = x.replace(/অাা/g, 'আ');
   x = x.replace(/অা/g, 'আ');
   x = x.replace(/আা/g, 'আ');

   //Lachit Spellchecker
    x = x.replace(/য়/g, 'য়');
 //   x = x.replace(/ন্ট/g, 'ণ্ট');
    x = x.replace(/থ্থ/g, 'ত্থ');
    x = x.replace(/ট্ন/g, 'ত্ন');
    x = x.replace(/ধ্ধ/g, 'দ্ধ');
    x = x.replace(/ন্ঠ/g, 'ণ্ঠ');
  //  x = x.replace(/ন্ড/g, 'ণ্ড');
    x = x.replace(/ণ্দ/g, 'ন্দ');
    x = x.replace(/ণ্ধ/g, 'ন্ধ');
    x = x.replace(/ন্ঢ/g, 'ণ্ঢ');
    x = x.replace(/ণ্ত/g, 'ন্ত');
    x = x.replace(/ণ্জ/g, 'ঞ্জ');
    x = x.replace(/ন্জ/g, 'ঞ্জ');
    x = x.replace(/ন্চ/g, 'ঞ্চ');
    x = x.replace(/ন্ছ/g, 'ঞ্ছ');
    x = x.replace(/ণ্চ/g, 'ঞ্চ');
    x = x.replace(/ণ্ছ/g, 'ঞ্ছ');
    x = x.replace(/ণ্স/g, 'ন্স');
    x = x.replace(/ষ্ন/g, 'ষ্ণ');
 //   x = x.replace(/স্ট/g, 'ষ্ট'); (প্রতিবর্ণীতে ভুল ফলাফল দিচ্ছে)
    x = x.replace(/স্হ/g, 'স্থ');
    x = x.replace(/ষ্হ/g, 'স্থ');
    x = x.replace(/ন্হ/g, 'ন্থ');
    x = x.replace(/স্ঠ/g, 'ষ্ঠ'); 
    x = x.replace(/ঙঁ/g, 'ঙ');
    x = x.replace(/ঞঁ/g, 'ঞ');
    x = x.replace(/নঁ/g, 'ন');
    x = x.replace(/ণঁ/g, 'ণ');
    x = x.replace(/মঁ/g, 'ম');
    x = x.replace(/অা/g, 'আ');
    x = x.replace(/অাা/g, 'আ');
    x = x.replace(/অাা/g, 'আ');



    //crucial part starts 
    // do not fiddle here 
    //removes multiple question marks, exclamation

    x = x.replace(/\?\?\?/g, '?'); //removes triple question marks with spaces
    x = x.replace(/\?\?/g, '?'); //removed double question marks with spaces
    // x = x.replace(/!!!/g, '!'); //removes triple exclamation with spaces NOT FOR WIKI
    // x = x.replace(/!!/g, '!'); //removes double exclamation with spaces NOT FOR WIKI

    // crucial part ends

    // brings the question marks, exclamation, full stop before inverted comma
    // new in Version 3.0
//    x = x.replace(/"। /g, '।" ');  // ” = RIGHT DOUBLE QUOTATION MARK “ = LEFT DOUBLE QUOTATION MARK
    x = x.replace(/"\?/g, '?"');  // ” = RIGHT DOUBLE QUOTATION MARK “ = LEFT DOUBLE QUOTATION MARK
    x = x.replace(/"! /g, '!" ');  // ” = RIGHT DOUBLE QUOTATION MARK “ = LEFT DOUBLE QUOTATION MARK


    //corrects commonly mistaken words

  x = x.replace(/অংক/g, 'অঙ্ক');
  x = x.replace(/অংকন/g, 'অঙ্কন');
  x = x.replace(/অংকুর/g, 'অঙ্কুর');
  x = x.replace(/অংগ /g, 'অঙ্গ ');
  x = x.replace(/অংগন/g, 'অঙ্গন');
  x = x.replace(/অংগাংগী/g, 'অঙ্গাঙ্গি');
  x = x.replace(/অকল্যান/g, 'অকল্যাণ');
  x = x.replace(/অকারন/g, 'অকারণ');
  x = x.replace(/অগ্রগন্য/g, 'অগ্রগণ্য');
  x = x.replace(/অগ্রহায়ন/g, 'অগ্রহায়ণ');
  x = x.replace(/অচিন্ত/g, 'অচিন্ত্য');
  x = x.replace(/অচিন্ত্যনীয়/g, 'অচিন্তনীয়');
  x = x.replace(/অঞ্জলী/g, 'অঞ্জলি');
  x = x.replace(/অণ্বেষণ/g, 'অন্বেষণ');
  x = x.replace(/অতিথী/g, 'অতিথি');
  x = x.replace(/অতিব /g, 'অতীব ');
  x = x.replace(/অতিষ্ট/g, 'অতিষ্ঠ');
  x = x.replace(/অত্যাধিক/g, 'অত্যধিক');
  x = x.replace(/অত্যান্ত/g, 'অত্যন্ত');
  x = x.replace(/অদ্ভূত/g, 'অদ্ভুত');
  x = x.replace(/অদ্যপি/g, 'অদ্যাপি');
  x = x.replace(/অদ্যবদি/g, 'অদ্যাবধি');
  x = x.replace(/অধঃস্তন/g, 'অধস্তন');
  x = x.replace(/অধিকরন/g, 'অধিকরণ');
  x = x.replace(/অধীনস্ত/g, 'অধীনস্থ');
  x = x.replace(/অধ্যাবসায়/g, 'অধ্যবসায়');
  x = x.replace(/অধ্যায়ণ/g, 'অধ্যয়ন');
  x = x.replace(/অধ্যূষিত/g, 'অধ্যুষিত');
  x = x.replace(/অনিন্দসুন্দর/g, 'অনিন্দ্যসুন্দর');
  x = x.replace(/অনিষ্ঠ/g, 'অনিষ্ট');
  x = x.replace(/অনু /g, 'অণু ');
  x = x.replace(/অনুকুল/g, 'অনুকূল');
  x = x.replace(/অনুর্ধ্ব/g, 'অনূর্ধ্ব');
  x = x.replace(/অনুসঙ্গ/g, 'অনুষঙ্গ');
  x = x.replace(/অন্তঃসত্তা/g, 'অন্তসত্ত্বা');
  x = x.replace(/অন্তকরণ/g, 'অন্তঃকরণ');
  x = x.replace(/অন্তর্ভূক্ত/g, 'অন্তর্ভুক্ত');
  x = x.replace(/অন্তর্মুখি/g, 'অন্তর্মুখী');
  x = x.replace(/অন্যমনষ্ক/g, 'অন্যমনস্ক');
  x = x.replace(/অপসৃয়মান/g, 'অপসৃয়মাণ');
  x = x.replace(/অপাংক্তেয়/g, 'অপাঙ্‌ক্তেয়');
  x = x.replace(/অপেক্ষমান/g, 'অপেক্ষমাণ');
  x = x.replace(/অভিভুত/g, 'অভিভূত');
  x = x.replace(/অভিমুখি /g, 'অভিমুখী ');
  x = x.replace(/অভ্যন্তরিক/g, 'আভ্যন্তরিক');
  x = x.replace(/অভ্যস্থ/g, 'অভ্যস্ত');
  x = x.replace(/অমানুসিক/g, 'অমানুষিক');
  x = x.replace(/অমাবশ্যা/g, 'অমাবস্যা');
  x = x.replace(/অমিতাক্ষর/g, 'অমিত্রাক্ষর');
  x = x.replace(/অর্ধ্ব/g, 'অর্ধ');
  x = x.replace(/অর্পণা/g, 'অপর্ণা');
  x = x.replace(/অলংঘ/g, 'অলঙ্ঘ্য');
  x = x.replace(/অশিরিরী/g, 'অশরীরী');
  x = x.replace(/অসুয়া/g, 'অসূয়া');
  x = x.replace(/অস্তমান/g, 'অস্তায়মান');
  x = x.replace(/অহঃরহ/g, 'অহরহ');
  x = x.replace(/আঁড়াআড়ি/g, 'আড়াআড়ি');
  x = x.replace(/আঁড়িপাতা/g, 'আড়িপাতা');
  x = x.replace(/আকষ্কিক/g, 'আকস্মিক');
  x = x.replace(/আকাংখা/g, 'আকাঙ্ক্ষা');
  x = x.replace(/আকাবাকা/g, 'আঁকাবাঁকা');
  x = x.replace(/আকুতি/g, 'আকূতি');
  x = x.replace(/আকূল/g, 'আকুল');
  x = x.replace(/আক্রমন/g, 'আক্রমণ');
  x = x.replace(/আটপৌড়ে/g, 'আটপৌরে');
  x = x.replace(/আড়ষ্ঠ/g, 'আড়ষ্ট');
  x = x.replace(/আড়ৎ/g, 'আড়ত');
  x = x.replace(/আতংক/g, 'আতঙ্ক');
  x = x.replace(/আত্মস্যাৎ/g, 'আত্মসাৎ');
  x = x.replace(/আদ্যান্ত/g, 'আদ্যন্ত');
  x = x.replace(/আদ্র/g, 'আর্দ্র');
  x = x.replace(/আনবিক/g, 'আণবিক');
  x = x.replace(/আনুষাঙ্গিক/g, 'আনুষঙ্গিক');
  x = x.replace(/আপাতঃদৃষ্টে/g, 'আপাতদৃষ্টে');
  x = x.replace(/আপাততঃ/g, 'আপাতত');
  x = x.replace(/আপোষ/g, 'আপোস');
  x = x.replace(/আভ্যন্তরীণ/g, 'অভ্যন্তরীণ');
  x = x.replace(/আয়ত্ব/g, 'আয়ত্ত');
  x = x.replace(/আয়ত্বাধীন/g, 'আয়ত্তাধীন');
  x = x.replace(/আরাম্ভ/g, 'আরম্ভ');
  x = x.replace(/আলিংগন/g, 'আলিঙ্গন');
  x = x.replace(/আলোচ্যমান/g, 'আলোচ্য');
  x = x.replace(/আশংকা/g, 'আশঙ্কা');
  x = x.replace(/আশক্তি/g, 'আসক্তি');
  x = x.replace(/আশ্বস্থ/g, 'আশ্বস্ত');
  x = x.replace(/আস্তাকুঁড়/g, 'আঁস্তাকুড়');
  x = x.replace(/ইংগিত/g, 'ইঙ্গিত');
  x = x.replace(/ইতঃস্তত/g, 'ইতস্তত');
  x = x.replace(/ইতিপূর্বে/g, 'ইতঃপূর্বে');
  x = x.replace(/ইতিমধ্যে/g, 'ইতোমধ্যে');
  x = x.replace(/ইদানিং/g, 'ইদানীং');
  x = x.replace(/ইয়ত্বা/g, 'ইয়ত্তা');
  x = x.replace(/ইষ্ঠ/g, 'ইষ্ট');
  x = x.replace(/ইষৎ/g, 'ঈষৎ');
  x = x.replace(/ঈস্পিত/g, 'ঈপ্সিত');
  x = x.replace(/উচিৎ/g, 'উচিত');
  x = x.replace(/উচ্চৈস্বরে/g, 'উচ্চৈঃস্বরে');
  x = x.replace(/উচ্ছ্বল/g, 'উচ্ছল');
  x = x.replace(/উজ্বল/g, 'উজ্জ্বল');
  x = x.replace(/উত্তরন/g, 'উত্তরণ');
  x = x.replace(/উত্তরসুরী/g, 'উত্তরসূরি');
  x = x.replace(/উত্তলন/g, 'উত্তোলন');
  x = x.replace(/উত্যক্ত/g, 'উত্ত্যক্ত');
  x = x.replace(/উদীচি/g, 'উদীচী');
  x = x.replace(/উদ্দান/g, 'উদ্যান');
  x = x.replace(/উদ্দ্যোগ/g, 'উদ্যোগ');
  x = x.replace(/উদ্ধত্য/g, 'ঔদ্ধত্য');
  x = x.replace(/উদ্বিঘ্ন/g, 'উদ্বিগ্ন');
  x = x.replace(/উদ্ভিজ/g, 'উদ্ভিজ্জ');
  x = x.replace(/উদ্ভুত/g, 'উদ্ভূত');
  x = x.replace(/উনবিংশ/g, 'ঊনবিংশ');
  x = x.replace(/উপকুল/g, 'উপকূল');
  x = x.replace(/উপচার্য/g, 'উপাচার্য');
  x = x.replace(/উপরোক্ত/g, 'উপরিউক্ত');
  x = x.replace(/উপলক্ষ্য/g, 'উপলক্ষ');
  x = x.replace(/উভয়চর/g, 'উভচর');
  x = x.replace(/উর্ধ্ব/g, 'ঊর্ধ্ব');
  x = x.replace(/উর্মি/g, 'ঊর্মি');
  x = x.replace(/উশৃঙ্খল/g, 'উচ্ছৃঙ্খল');
  x = x.replace(/উষর/g, 'ঊষর');
  x = x.replace(/উহ্য/g, 'ঊহ্য');
  x = x.replace(/উৎকর্ষতা/g, 'উৎকর্ষ');
  x = x.replace(/ঊনিশ/g, 'উনিশ');
  x = x.replace(/এককৃত/g, 'একীকৃত');
  x = x.replace(/একনিষ্ট/g, 'একনিষ্ঠ');
  x = x.replace(/একভূত/g, 'একীভূত');
  x = x.replace(/একাধিক্রমে/g, 'একাদিক্রমে');
  x = x.replace(/এক্ষুণি/g, 'এক্ষুনি');
  x = x.replace(/এতদ্‌সঙ্গে/g, 'এতৎসঙ্গে');
  x = x.replace(/এতদ্‌সত্ত্বেও/g, 'এতৎসত্ত্বেও');
  x = x.replace(/এশিয় /g, 'এশীয় ');
  x = x.replace(/ঐকবদ্ধ/g, 'ঐক্যবদ্ধ');
  x = x.replace(/ঐক্যতা/g, 'একতা');
  x = x.replace(/ঐক্যতান/g, 'ঐকতান');
  x = x.replace(/ঐক্যমত/g, 'ঐকমত্য');
  x = x.replace(/ওতঃপ্রোত/g, 'ওতপ্রোত');
  x = x.replace(/ঔচিত্ত/g, 'ঔচিত্য');
  x = x.replace(/কংকণ/g, 'কঙ্কণ');
  x = x.replace(/কংকাল/g, 'কঙ্কাল');
  x = x.replace(/কচিৎ/g, 'ক্বচিৎ');
  x = x.replace(/কটুক্তি/g, 'কটূক্তি');
  x = x.replace(/কতৃক/g, 'কর্তৃক');
  x = x.replace(/কতৃত্ত্ব/g, 'কর্তৃত্ব');
  x = x.replace(/কতৃপক্ষ/g, 'কর্তৃপক্ষ');
  x = x.replace(/কথপোকথন/g, 'কথোপকথন');
  x = x.replace(/কদাচিত/g, 'কদাচিৎ');
  x = x.replace(/ কনা/g, ' কণা');
  x = x.replace(/কনিষ্ট/g, 'কনিষ্ঠ');
  x = x.replace(/কন্ঠশিল্পী/g, 'কণ্ঠশিল্পী');
  x = x.replace(/কন্ঠস্ত/g, 'কণ্ঠস্থ');
  x = x.replace(/কয়েদী/g, 'কয়েদি');
  x = x.replace(/করনিক/g, 'করণিক');
  x = x.replace(/কর্তী/g, 'কর্ত্রী');
  x = x.replace(/কর্মচারি/g, 'কর্মচারী');
  x = x.replace(/কলংক/g, 'কলঙ্ক');
  x = x.replace(/কলসী/g, 'কলসি');
  x = x.replace(/কল্যান/g, 'কল্যাণ');
  x = x.replace(/কল্যানীয়াষু/g, 'কল্যাণীয়াসু');
  x = x.replace(/কল্যানীয়েসু/g, 'কল্যাণীয়েষু');
  x = x.replace(/কষ্ঠি/g, 'কষ্টি');
  x = x.replace(/কাঁচ/g, 'কাচ');
  x = x.replace(/কাঁছাকাছি/g, 'কাছাকাছি');
  x = x.replace(/কাংখিত/g, 'কাঙ্খিত');
  x = x.replace(/কাকলী/g, 'কাকলি');
  x = x.replace(/কাচা/g, 'কাঁচা');
  x = x.replace(/কাতলা/g, 'কাৎলা');
  x = x.replace(/কার্যতঃ/g, 'কার্যত');
  x = x.replace(/কিংবদন্তী/g, 'কিংবদন্তি');
  x = x.replace(/কিম্বা/g, 'কিংবা');
  x = x.replace(/কুটনীতি/g, 'কূটনীতি');
  x = x.replace(/কুৎসিৎ/g, 'কুৎসিত');
  x = x.replace(/কূটিল/g, 'কুটিল');
  x = x.replace(/কৃচ্ছতা/g, 'কৃচ্ছ্রতা');
  x = x.replace(/কৃচ্ছসাধন/g, 'কৃচ্ছ্রসাধন');
  x = x.replace(/কৃষিজীবি/g, 'কৃষিজীবী');
  x = x.replace(/কৃষ্টিবান/g, 'কৃষ্টিমান');
  x = x.replace(/কেন্দ্রিয়/g, 'কেন্দ্রীয়');
  x = x.replace(/কেরাণী/g, 'কেরানি');
  x = x.replace(/কোণাকুণি/g, 'কোনাকুনি');
  x = x.replace(/কৌতুহল/g, 'কৌতূহল');
  x = x.replace(/কৌতূক/g, 'কৌতুক');
  x = x.replace(/ক্রুর/g, 'ক্রূর');
  x = x.replace(/ক্ষীয়মান/g, 'ক্ষীয়মাণ');
  x = x.replace(/ক্ষুন্ন/g, 'ক্ষুণ্ণ');
  x = x.replace(/ক্ষুব্দ/g, 'ক্ষুব্ধ');
  x = x.replace(/ক্ষেপন/g, 'ক্ষেপণ');
  x = x.replace(/ক্ষেপনাস্ত্র/g, 'ক্ষেপণাস্ত্র');
  x = x.replace(/খঞ্জনী/g, 'খঞ্জনি');
  x = x.replace(/খুটিনাটি/g, 'খুঁটিনাটি');
  x = x.replace(/খুড়ী/g, 'খুড়ি');
  x = x.replace(/খুশী/g, 'খুশি');
  x = x.replace(/খেতমজুর/g, 'ক্ষেতমজু');
  x = x.replace(/খেলাধূলা/g, 'খেলাধুলা');
  x = x.replace(/খেলোয়ার/g, 'খেলোয়াড়');
  x = x.replace(/খোজ/g, 'খোঁজ');
  x = x.replace(/খোলাখোলি/g, 'খোলাখুলি');
  x = x.replace(/গংগা/g, 'গঙ্গা');
  x = x.replace(/গগণ/g, 'গগন');
  x = x.replace(/গড্ডালিকা/g, 'গড্ডলিকা');
  x = x.replace(/গত্যান্তর/g, 'গত্যন্তর');
  x = x.replace(/ গন /g, ' গণ ');
  x = x.replace(/গননা/g, 'গণনা');
  x = x.replace(/গনিত/g, 'গণিত');
  x = x.replace(/গন্য /g, 'গণ্য ');
  x = x.replace(/গন্‌জ/g, 'গঞ্জ');
  x = x.replace(/গবেষনা/g, 'গবেষণা');
  x = x.replace(/গরীব/g, 'গরিব');
  x = x.replace(/গর্ধব/g, 'গর্ধভ');
  x = x.replace(/গাড়ী/g, 'গাড়ি');
  x = x.replace(/গার্হস্থ /g, 'গার্হস্থ্য ');
  x = x.replace(/গীর্জা/g, 'গির্জা');
  x = x.replace(/গুড়া/g, 'গুঁড়া');
  x = x.replace(/গুড়ো/g, 'গুঁড়ো');
  x = x.replace(/গুণে গুণে/g, 'গুনে গুনে');
  x = x.replace(/গৃহস্ত/g, 'গৃহস্থ');
  x = x.replace(/গৃহিত/g, 'গৃহীত');
  x = x.replace(/গোধুলি/g, 'গোধূলি');
  x = x.replace(/গোষ্ঠি/g, 'গোষ্ঠী');
  x = x.replace(/গোস্পদ/g, 'গোষ্পদ');
  x = x.replace(/গ্রন্থী/g, 'গ্রন্থি');
  x = x.replace(/গ্রহন/g, 'গ্রহণ');
  x = x.replace(/গ্রহিতা/g, 'গ্রহীতা');
  x = x.replace(/গ্রামীন/g, 'গ্রামীণ');
  x = x.replace(/গ্রীক/g, 'গ্রিক');
  x = x.replace(/গ্রীস/g, 'গ্রিস');
  x = x.replace(/ঘনিষ্ট/g, 'ঘনিষ্ঠ');
  x = x.replace(/ঘরণী/g, 'ঘরনি');
  x = x.replace(/ ঘাটি/g, ' ঘাঁটি');
  x = x.replace(/ঘুরাঘুরি/g, 'ঘোরাঘুরি');
  x = x.replace(/ঘুর্ণীয়মান/g, 'ঘূর্ণায়মান');
  x = x.replace(/ঘুর্নি/g, 'ঘূর্ণি');
  x = x.replace(/ঘুসখোর/g, 'ঘুষখোর');
  x = x.replace(/ঘূণ/g, 'ঘুণ');
  x = x.replace(/ঘোষনা/g, 'ঘোষণা');
  x = x.replace(/ঘ্রান/g, 'ঘ্রাণ');
  x = x.replace(/চত্তর/g, 'চত্বর');
  x = x.replace(/চরক/g, 'চড়ক');
  x = x.replace(/চাকরানী/g, 'চাকরানি');
  x = x.replace(/চাকরী/g, 'চাকরি');
  x = x.replace(/চাকুরী/g, 'চাকুরী');
  x = x.replace(/চাতুর্যতা/g, 'চাতুর্য');
  x = x.replace(/চীৎকার/g, 'চিৎকার');
  x = x.replace(/চুড়মার/g, 'চুরমার');
  x = x.replace(/চুড়ান্ত/g, 'চূড়ান্ত');
  x = x.replace(/চূষ্য/g, 'চোষ্য');
  x = x.replace(/চৌচিড়/g, 'চৌচির');
  x = x.replace(/ছাকনি/g, 'ছাঁকনি');
  x = x.replace(/ ছাকা/g, ' ছাঁকা');
  x = x.replace(/ছাত্রীবাস/g, 'ছাত্রীনিবাস');
  x = x.replace(/ছোওয়া/g, 'ছোঁয়া');
  x = x.replace(/ছোকড়া/g, 'ছোকরা');
  x = x.replace(/ছোটখাট /g, 'ছোটোখাটো ');
  x = x.replace(/ছোটাছোটি/g, 'ছোটাছুটি');
  x = x.replace(/জংগল/g, 'জঙ্গল');
  x = x.replace(/জগত/g, 'জগৎ');
  x = x.replace(/জঘণ্য/g, 'জঘন্য');
  x = x.replace(/জটীল/g, 'জটিল');
  x = x.replace(/জবানবন্দী/g, 'জবানবন্দি');
  x = x.replace(/জরুরী/g, 'জরুরি');
  x = x.replace(/জাগরুক/g, 'জাগরূক');
  x = x.replace(/জাতিয়/g, 'জাতীয়');
  x = x.replace(/জাতী /g, 'জাতি ');
  x = x.replace(/জাতীয়করন/g, 'জাতীয়করণ');
  x = x.replace(/জানুয়ারী/g, 'জানুয়ারি');
  x = x.replace(/জিনিষ/g, 'জিনিস');
  x = x.replace(/জীবীকা/g, 'জীবিকা');
  x = x.replace(/জেষ্ঠ্য/g, 'জ্যেষ্ঠ');
  x = x.replace(/জৈষ্ঠ্য/g, 'জ্যৈষ্ঠ');
  x = x.replace(/জ্বরাজীর্ণ/g, 'জরাজীর্ণ');
  x = x.replace(/টাকশাল/g, 'টাঁকশাল');
  x = x.replace(/টেঁকসই/g, 'টেকসই');
  x = x.replace(/ডাইনী/g, 'ডাইনি');
  x = x.replace(/তক্ষুণি/g, 'তক্ষুনি');
  x = x.replace(/তছরূপ/g, 'তছরুপ');
  x = x.replace(/তড়িত/g, 'তড়িৎ');
  x = x.replace(/ততক্ষণাৎ/g, 'তৎক্ষণাৎ');
  x = x.replace(/ততধিক/g, 'ততোধিক');
  x = x.replace(/তত্তজ্ঞান/g, 'তত্ত্বজ্ঞান');
  x = x.replace(/তত্তাবদায়ক/g, 'তত্ত্বাবধায়ক');
  x = x.replace(/তত্তাবধান/g, 'তত্ত্বাবধান');
  x = x.replace(/তদসংক্রান্ত/g, 'তৎসংক্রান্ত');
  x = x.replace(/তদানুসারে/g, 'তদনুসারে');
  x = x.replace(/তদ্রুপ/g, 'তদ্রূপ');
  x = x.replace(/তফাত/g, 'তফাৎ');
  x = x.replace(/তরংগ/g, 'তরঙ্গ');
  x = x.replace(/তরান্বিত/g, 'ত্বরান্বিত');
  x = x.replace(/তর্জনি/g, 'তর্জনী');
  x = x.replace(/তষ্কর/g, 'তস্কর');
  x = x.replace(/তাঁতী/g, 'তাঁতি');
  x = x.replace(/তাবত/g, 'তাবৎ');
  x = x.replace(/তিতীক্ষা/g, 'তিতিক্ষা');
  x = x.replace(/তিরষ্কার/g, 'তিরস্কার');
  x = x.replace(/ত্বরিৎ/g, 'ত্বরিত');
  x = x.replace(/ত্যজ্য/g, 'ত্যাজ্য');
  x = x.replace(/ত্রান/g, 'ত্রাণ');
  x = x.replace(/ত্রিভূজ/g, 'ত্রিভুজ');
  x = x.replace(/তৎবিষয়ক/g, 'তদ্বিষয়ক');
  x = x.replace(/থুত্থুরে/g, 'থুত্থুড়ে');
  x = x.replace(/দক্ষিন/g, 'দক্ষিণ');
  x = x.replace(/দণ্ডবত/g, 'দণ্ডবৎ');
  x = x.replace(/দরকারী/g, 'দরকারি');
  x = x.replace(/দরুণ/g, 'দরুন');
  x = x.replace(/দারিদ্রতা/g, 'দরিদ্রতা, দারিদ্র');
  x = x.replace(/দারুন/g, 'দারুণ');
  x = x.replace(/দিকভ্রান্ত/g, 'দিগভ্রান্ত');
  x = x.replace(/দিক্ষা/g, 'দীক্ষা');
  x = x.replace(/দিঘী/g, 'দিঘি');
  x = x.replace(/দীর্ঘসূত্রিতা/g, 'দীর্ঘসূত্রতা');
  x = x.replace(/দুতাবাস/g, 'দূতাবাস');
  x = x.replace(/দুরবীক্ষন/g, 'দূরবীক্ষণ');
  x = x.replace(/দুরাবস্থা/g, 'দুরবস্থা');
  x = x.replace(/দুষ /g, 'দোষ ');
  x = x.replace(/দুষ্কৃতীকারী/g, 'দুষ্কৃতকারী');
  x = x.replace(/দূরবীক্ষন/g, 'দূরবীক্ষণ');
  x = x.replace(/দূরবীণ/g, 'দূরবীন');
  x = x.replace(/দূরারোগ্য/g, 'দুরারোগ্য');
  x = x.replace(/দূরুহ/g, 'দুরূহ');
  x = x.replace(/দূর্গ/g, 'দুর্গ');
  x = x.replace(/দৃঢ়করণ/g, 'দৃঢ়ীকরণ');
  x = x.replace(/দৃষ্টিকোন/g, 'দৃষ্টিকোণ');
  x = x.replace(/দৃষ্ঠিভঙ্গি/g, 'দৃষ্টিভঙ্গি');
  x = x.replace(/দেদীপ্যমাণ/g, 'দেদীপ্যমান');
  x = x.replace(/দেরী/g, 'দেরি');
  x = x.replace(/দৈনতা/g, 'দীনতা, দৈন্য');
  x = x.replace(/দোষনীয়/g, 'দূষণীয়');
  x = x.replace(/দৌরাত্ম/g, 'দৌরাত্ম্য');
  x = x.replace(/দ্বন্দ/g, 'দ্বন্দ্ব');
  x = x.replace(/দ্বিতীয়তঃ/g, 'দ্বিতীয়ত');
  x = x.replace(/ধজা/g, 'ধ্বজা');
  x = x.replace(/ধরণ/g, 'ধরন');
  x = x.replace(/ধাধা/g, 'ধাঁধা');
  x = x.replace(/ধারন/g, 'ধারণ');
  x = x.replace(/ধারনা/g, 'ধারণা');
  x = x.replace(/ধুমপান/g, 'ধূমপান');
  x = x.replace(/ধুর্ত/g, 'ধূর্ত');
  x = x.replace(/ধুলি/g, 'ধূলি');
  x = x.replace(/ধুসর/g, 'ধূসর');
  x = x.replace(/ধূলা/g, 'ধুলা');
  x = x.replace(/ধ্বনী/g, 'ধ্বনি');
  x = x.replace(/ধ্বস/g, 'ধ্স');
  x = x.replace(/ধ্বস্তাধ্বস্তি/g, 'ধ্স্তাধস্তি');
  x = x.replace(/নচেত/g, 'নচেৎ');
  x = x.replace(/নচ্ছাড়/g, 'নচ্ছাড়');
  x = x.replace(/নবীণ/g, 'নবীন');
  x = x.replace(/নমষ্কার/g, 'নমস্কার');
  x = x.replace(/নিক্কন/g, 'নিক্বণ');
  x = x.replace(/নিন্দ্যনীয়/g, 'নিন্দনীয়');
  x = x.replace(/নিরব/g, 'নীরব');
  x = x.replace(/নিরস /g, 'নীরস ');
  x = x.replace(/নিরুপন/g, 'নিরূপণ');
  x = x.replace(/নিরোগ/g, 'নীরোগ');
  x = x.replace(/নির্দোষী/g, 'নির্দোষ');
  x = x.replace(/নির্ধনী/g, 'নির্ধন');
  x = x.replace(/নির্নয়/g, 'নির্ণয়');
  x = x.replace(/নিস্কাশন/g, 'নিষ্কাশন');
  x = x.replace(/নিস্প্রভ/g, 'নিষ্প্রভ');
  x = x.replace(/নিস্প্রয়োজন/g, 'নিষ্প্রয়োজন');
  x = x.replace(/নিহারীকা/g, 'নীহারিকা');
  x = x.replace(/নীচে/g, 'নিচে');
  x = x.replace(/নীজ/g, 'নিজ');
  x = x.replace(/নীরলস/g, 'নিরলস');
  x = x.replace(/নূন্যতম/g, 'ন্যূনতম');
  x = x.replace(/নৃসংশ/g, 'নৃশংস');
  x = x.replace(/নৈশব্দ্য/g, 'নৈঃশব্দ্য');
  x = x.replace(/ন্যয়/g, 'ন্যায়');
  x = x.replace(/ন্যয্য/g, 'ন্যায্য');
  x = x.replace(/পংক/g, 'পঙ্ক');
  x = x.replace(/পংক্তি/g, 'পঙক্তি');
  x = x.replace(/পক্ক/g, 'পক্ব');
  x = x.replace(/পড়শী/g, 'পড়শি');
  x = x.replace(/পড়াশুনা/g, 'পড়াশোনা');
  x = x.replace(/পথমধ্যে/g, 'পথিমধ্যে');
  x = x.replace(/পথিকৃত/g, 'পথিকৃৎ');
  x = x.replace(/পন্য /g, 'পণ্য ');
  x = x.replace(/পরবর্তীতে /g, 'পরবর্তীকালে ');
  x = x.replace(/পরমানু/g, 'পরমাণু');
  x = x.replace(/পরষ্পর/g, 'পরস্পর');
  x = x.replace(/পরাস্থ/g, 'পরাস্ত');
  x = x.replace(/পরিনাম/g, 'পরিণাম');
  x = x.replace(/পরিবহণ/g, 'পরিবহন');
  x = x.replace(/পরিমান/g, 'পরিমাণ');
  x = x.replace(/পরিষ্ফুট/g, 'পরিস্ফুট');
  x = x.replace(/পরিস্কার/g, 'পরিষ্কার');
  x = x.replace(/পশ্চাদপট/g, 'পশ্চাৎপট');
  x = x.replace(/পশ্চাদপদ/g, 'পশ্চাৎপদ');
  x = x.replace(/পশ্চাৎগামী/g, 'পশ্চাদগামী');
  x = x.replace(/পশ্চাৎভূমি/g, 'পশ্চাদভূমি');
  x = x.replace(/পারদর্শীতা/g, 'পারদর্শিতা');
  x = x.replace(/পারমানবিক/g, 'পারমাণবিক');
  x = x.replace(/পার্বন/g, 'পার্বণ');
  x = x.replace(/পালংক/g, 'পালঙ্ক');
  x = x.replace(/পাষান/g, 'পাষাণ');
  x = x.replace(/পিচাশ/g, 'পিশাচ');
  x = x.replace(/পিঠস্থান/g, 'পীঠস্থান');
  x = x.replace(/পিপিলিকা/g, 'পিপীলিকা');
  x = x.replace(/পুংখানুপুংখ/g, 'পুঙ্খানুপুঙ্খ');
  x = x.replace(/পুজা/g, 'পূজা');
  x = x.replace(/পুণবিবেচনা/g, 'পুনর্বিবেচনা');
  x = x.replace(/পুন্য/g, 'পুণ্য');
  x = x.replace(/পুরষ্কার/g, 'পুরস্কার');
  x = x.replace(/পুর্ন/g, 'পূর্ণ');
  x = x.replace(/পুস্করিনী/g, 'পুষ্করিণী');
  x = x.replace(/পূজো/g, 'পুজো');
  x = x.replace(/পূবালী/g, 'পুবালি');
  x = x.replace(/পূর্ণগঠন/g, 'পুনর্গঠন');
  x = x.replace(/পৈত্রিক/g, 'পৈতৃক');
  x = x.replace(/পোষাক/g, 'পোশাক');
  x = x.replace(/পৌনঃপৌনিক/g, 'পৌনঃপুনিক');
  x = x.replace(/পৌরহিত্য/g, 'পৌরোহিত্য');
  x = x.replace(/প্রজ্জলন/g, 'প্রজ্বলন');
  x = x.replace(/প্রজ্জলিত/g, 'প্রজ্বলিত');
  x = x.replace(/প্রণয়ণ/g, 'প্রণয়ন');
  x = x.replace(/প্রতিকুল/g, 'প্রতিকূল');
  x = x.replace(/প্রতিযোগীতা/g, 'প্রতিযোগিতা');
  x = x.replace(/প্রত্যয়ণ/g, 'প্রত্যায়ন');
  x = x.replace(/প্রথমতঃ/g, 'প্রথমত');
  x = x.replace(/প্রধানতঃ/g, 'প্রধানত');
  x = x.replace(/প্রনালী/g, 'প্রণালী');
  x = x.replace(/প্রনিধান/g, 'প্রণিধান');
  x = x.replace(/প্রবাহমাণ/g, 'প্রবাহমান');
  x = x.replace(/প্রবীন/g, 'প্রবীণ');
  x = x.replace(/প্রভুত/g, 'প্রভূত');
  x = x.replace(/প্রয়ান/g, 'প্রয়াণ');
  x = x.replace(/প্রশস্থ/g, 'প্রশস্ত');
  x = x.replace(/প্রসংগ/g, 'প্রসঙ্গ');
  x = x.replace(/প্রসংশা/g, 'প্রশংসা');
  x = x.replace(/প্রাংগন/g, 'প্রাঙ্গণ');
  x = x.replace(/প্রাণপন/g, 'প্রাণপণ');
  x = x.replace(/প্রানীজগৎ/g, 'প্রাণীজগৎ');
  x = x.replace(/প্রানীবিদ্যা/g, 'প্রাণীবিদ্যা');
  x = x.replace(/ফলতঃ/g, 'ফলত');
  x = x.replace(/ফলপ্রসু/g, 'ফলপ্রসূ');
  x = x.replace(/ফাল্গুণ/g, 'ফাল্গুন');
  x = x.replace(/ফেব্রুয়ারী/g, 'ফেব্রুয়ারি');
  x = x.replace(/বংগ/g, 'বঙ্গ');
  x = x.replace(/বনষ্পতি/g, 'বনস্পতি');
  x = x.replace(/বনিক/g, 'বণিক');
  x = x.replace(/বন্টন/g, 'বণ্টন');
  x = x.replace(/বন্দোপাধ্যায়/g, 'বন্দ্যোপাধ্যায়');
  x = x.replace(/বয়ষ্ক/g, 'বয়স্ক');
  x = x.replace(/বয়োকনিষ্ট/g, 'বয়ঃকনিষ্ঠ');
  x = x.replace(/বর্ণালী/g, 'বর্ণালি');
  x = x.replace(/বর্ত্তমান/g, 'বর্তমান');
  x = x.replace(/বর্ষন/g, 'বর্ষণ');
  x = x.replace(/বাঁশী/g, 'বাঁশি');
  x = x.replace(/বাকদত্তা/g, 'বাগদত্তা');
  x = x.replace(/বাঞ্চনীয়/g, 'বাঞ্ছনীয়');
  x = x.replace(/বাঞ্চা/g, 'বাঞ্ছা');
  x = x.replace(/ বাড়ী/g, ' বাড়ি');
  x = x.replace(/বাদুর/g, 'বাদুড়');
  x = x.replace(/বানিজ্য/g, 'বাণিজ্য');
  x = x.replace(/বিদ্যান/g, 'বিদ্বান');
  x = x.replace(/বিপদগ্রস্থ/g, 'বিপদগ্রস্ত');
  x = x.replace(/বিপদজনক/g, 'বিপজ্জনক');
  x = x.replace(/বিপনন/g, 'বিপণন');
  x = x.replace(/বিপনী/g, 'বিপণী');
  x = x.replace(/বিশ্বস্থ/g, 'বিশ্বস্ত');
  x = x.replace(/বিষ্ফোরণ/g, 'বিস্ফোরণ');
  x = x.replace(/বীভৎস্য/g, 'বীভৎস');
  x = x.replace(/বুদ্ধিজীবি/g, 'বুদ্ধজীবী');
//  x = x.replace(/বেশী/g, 'বেশি'); দ্ব্যর্থক শব্দ, দুটো ভিন্ন অর্থ প্রকাশ করে
  x = x.replace(/ব্যকরণ/g, 'ব্যাকরণ');
  x = x.replace(/ব্যপক/g, 'ব্যাপক');
  x = x.replace(/ব্যহত/g, 'ব্যাহত');
  x = x.replace(/ব্যাতিক্রম/g, 'ব্যতিক্রম');
  x = x.replace(/ব্যাথা/g, 'ব্যথা');
  x = x.replace(/ব্যাপি/g, 'ব্যাপী');
  x = x.replace(/ব্যাবধান/g, 'ব্যবধান');
  x = x.replace(/ব্যাবহার/g, 'ব্যবহার');
  x = x.replace(/ব্যাভিচার/g, 'ব্যভিচার');
  x = x.replace(/ব্যায় /g, 'ব্যয় ');
  x = x.replace(/ব্যার্থ/g, 'ব্যর্থ');
  x = x.replace(/ব্যুৎপত্তি/g, 'বুৎপত্তি');
  x = x.replace(/ব্রাক্ষণ/g, 'ব্রাহ্মণ');
  x = x.replace(/ভংগ/g, 'ভঙ্গ');
  x = x.replace(/ভংগী/g, 'ভঙ্গি');
  x = x.replace(/ভংগুর/g, 'ভঙ্গুর');
  x = x.replace(/ভনিতা/g, 'ভণিতা');
  x = x.replace(/ভবিষ্যৎবাণী/g, 'ভবিষ্যদ্বাণী');
  x = x.replace(/ভরনপোষণ/g, 'ভরণপোষণ');
  x = x.replace(/ভষ্ম/g, 'ভস্ম');
  x = x.replace(/ভাষ্কর/g, 'ভাস্কর');
  x = x.replace(/ভিখারী/g, 'ভিখারি');
  x = x.replace(/ভিরু/g, 'ভীরু');
  x = x.replace(/ভীড়/g, 'ভিড়');
  x = x.replace(/ভুড়ি/g, 'ভুঁড়ি');
  x = x.replace(/ভুতপূর্ব/g, 'ভূতপূর্ব');
  x = x.replace(/ভুমিষ্ট/g, 'ভূমিষ্ঠ');
  x = x.replace(/ভুয়সী/g, 'ভূয়সী');
  x = x.replace(/ভুরিভোজন/g, 'ভূরিভোজন');
  x = x.replace(/ভূবন/g, 'ভুবন');
  x = x.replace(/ভূয়া/g, 'ভুয়া');
  x = x.replace(/ভূল/g, 'ভুল');
  x = x.replace(/ভৌগলিক/g, 'ভৌগোলিক');
  x = x.replace(/ভ্রমন/g, 'ভ্রমণ');
  x = x.replace(/ভ্রাম্যমান/g, 'ভ্রাম্যমাণ');
  x = x.replace(/ভ্রুক্ষেপ/g, 'ভ্রূক্ষেপ');
  x = x.replace(/মজুরী/g, 'মজুরি');
  x = x.replace(/মণিষা/g, 'মনীষা');
  x = x.replace(/মনমালিন্য/g, 'মনোমালিন্য');
  x = x.replace(/মনিষী/g, 'মনীষী');
  x = x.replace(/মন্ত্রনালয়/g, 'মন্ত্রণালয়');
  x = x.replace(/ময়ুর/g, 'ময়ূর');
  x = x.replace(/মরুদ্যান/g, 'মরূদ্যান');
  x = x.replace(/মশারী/g, 'মশারি');
  x = x.replace(/মস্তিস্ক/g, 'মস্তিষ্ক');
  x = x.replace(/মহত্ত/g, 'মহত্ত্ব');
  x = x.replace(/মহামতী/g, 'মহামতি');
  x = x.replace(/মহামারি/g, 'মহামারী');
  x = x.replace(/মহিয়সী/g, 'মহীয়সী');
  x = x.replace(/ মাংশ /g, ' মাংস ');
  x = x.replace(/মানিক্য/g, 'মানিক');
  x = x.replace(/মাসী/g, 'মাসি');
  x = x.replace(/মাহাত্ম/g, 'মাহাত্ম্য');
  x = x.replace(/মিতালী/g, 'মিতালি');
  x = x.replace(/মিমাংসা/g, 'মীমাংসা');
  x = x.replace(/মিরিচিকা/g, 'মরীচিকা');
  x = x.replace(/মুখস্ত/g, 'মুখস্থ');
  x = x.replace(/মুঢ়/g, 'মূঢ়');
  x = x.replace(/মুত্র/g, 'মূত্র');
  x = x.replace(/মুদ্রন/g, 'মুদ্রণ');
  x = x.replace(/মুমুর্ষ/g, 'মুমূর্ষু');
  x = x.replace(/মুর্খ/g, 'মূর্খ');
  x = x.replace(/মুর্তি/g, 'মূর্তি');
  x = x.replace(/মুর্ধন্য/g, 'মূর্ধন্য');
  x = x.replace(/মুষ্ঠি/g, 'মুষ্টি');
  x = x.replace(/মুহুর্ত/g, 'মুহূর্ত');
  x = x.replace(/মুহূর্মুহু/g, 'মুহুর্মুহু');
  x = x.replace(/মুহ্যবান/g, 'মোহ্যমান/মুহ্যমান');
  x = x.replace(/মূখ্য/g, 'মুখ্য');
  x = x.replace(/মূল্যায়ণ/g, 'মূল্যায়ন');
  x = x.replace(/মৃয়মান/g, 'ম্রিয়মাণ');
  x = x.replace(/মোটামোটি/g, 'মোটামুটি');
  x = x.replace(/মৌনতা/g, 'মৌন');
  x = x.replace(/যক্ষা/g, 'যক্ষ্মা');
  x = x.replace(/যথেষ্ঠ/g, 'যথেষ্ট');
  x = x.replace(/যদ্যাপি/g, 'যদ্যপি');
  x = x.replace(/যন্ত্রনা/g, 'যন্ত্রণা');
  x = x.replace(/যাদুঘর/g, 'জাদুঘর');
  x = x.replace(/রংগ/g, 'রঙ্গ');
  x = x.replace(/রঙিণ/g, 'রঙিন');
  x = x.replace(/রঙ্গিণ/g, 'রঙ্গিন');
  x = x.replace(/রথি/g, 'রথী');
  x = x.replace(/রসায়ণ/g, 'রসায়ন');
  x = x.replace(/রাংগামাটি/g, 'রাঙ্গামাটি');
  x = x.replace(/রামায়ন/g, 'রামায়ণ');
  x = x.replace(/রাষ্ট্রিয়/g, 'রাষ্ট্রীয়');
  x = x.replace(/রূপায়ন/g, 'রূপায়ণ');
  x = x.replace(/রোপন/g, 'রোপণ');
  x = x.replace(/লংকা/g, 'লঙ্কা');
  x = x.replace(/লংঘন/g, 'লঙ্ঘন');
  x = x.replace(/লক্ষী/g, 'লক্ষ্মী');
  x = x.replace(/লক্ষ্যণীয়/g, 'লক্ষণীয়');
  x = x.replace(/লঘুকরণ/g, 'লঘূকরণ');
  x = x.replace(/লজ্জাষ্কর/g, 'লজ্জাকর');
  x = x.replace(/লবন/g, 'লবণ');
  x = x.replace(/লাইব্রেরী/g, 'লাইব্রেরি');
  x = x.replace(/লাবন্য/g, 'লাবণ্য');
  x = x.replace(/শংকর/g, 'শঙ্কর');
  x = x.replace(/শংকা/g, 'শঙ্কা');
  x = x.replace(/শংকিত/g, 'শঙ্কিত');
  x = x.replace(/শরীক/g, 'শরিক');
  x = x.replace(/শশাংক/g, 'শশাঙ্ক');
  x = x.replace(/শশুর/g, 'শ্বশুর');
  x = x.replace(/শশ্মান/g, 'শ্মশান');
  x = x.replace(/শাড়ী/g, 'শাড়ি');
  x = x.replace(/শাষণ/g, 'শাসন');
  x = x.replace(/শারীরীক/g, 'শারীরিক');
  x = x.replace(/শাশুড়ী/g, 'শাশুড়ি');
  x = x.replace(/শিক্ষাঙ্গন/g, 'শিক্ষাঙ্গণ');
  x = x.replace(/শিরচ্ছেদ/g, 'শিরশ্ছেদ');
  x = x.replace(/শিরধার্য/g, 'শিরোধার্য');
  x = x.replace(/শিরনাম/g, 'শিরোনাম');
  x = x.replace(/শিরমণি/g, 'শিরোমণি');
  x = x.replace(/শুভাকাংখী/g, 'শুভাকাঙ্খী');
  x = x.replace(/শুশ্রুষা/g, 'শুশ্রূষা');
  x = x.replace(/শূণ্য/g, 'শুন্য');
  x = x.replace(/শৃংখলা/g, 'শৃঙ্খলা');
  x = x.replace(/শ্বাশত/g, 'শাশ্বত');
  x = x.replace(/শ্রদ্ধাঞ্জলী/g, 'শ্রদ্ধাঞ্জলি');
  x = x.replace(/শ্রদ্ধাভাজনীয়/g, 'শ্রদ্ধাভাজন');
  x = x.replace(/শ্রদ্ধাষ্পদ/g, 'শ্রদ্ধাস্পদ');
  x = x.replace(/শ্রমজীবি/g, 'শ্রমজীবী');
  x = x.replace(/শ্রাবন/g, 'শ্রাবণ');
  x = x.replace(/শ্রীমতি/g, 'শ্রীমতী');
  x = x.replace(/শ্রেষ্ট/g, 'শ্রেষ্ঠ');
  x = x.replace(/ষষ্ট/g, 'ষষ্ঠ');
  x = x.replace(/ষষ্ঠদশ/g, 'ষোড়শ');
  x = x.replace(/সংগা/g, 'সংজ্ঞা');
  x = x.replace(/সংগী/g, 'সঙ্গী');
  x = x.replace(/সখ/g, 'শখ');
  x = x.replace(/সতীন/g, 'সতিন');
  x = x.replace(/সত্বেও/g, 'সত্ত্বেও');
  x = x.replace(/সত্যয়িত/g, 'সত্যায়িত');
  x = x.replace(/সদ্যজাত/g, 'সদ্যোজাত');
  x = x.replace(/সদ্যস্নাত/g, 'সদ্যঃস্নাত');
  x = x.replace(/সনাক্ত/g, 'শনাক্ত');
  x = x.replace(/সন্মান/g, 'সম্মান');
  x = x.replace(/সন্মানীত/g, 'সম্মানীত');
  x = x.replace(/সন্মুখ/g, 'সম্মুখ');
  x = x.replace(/সন্মেলন/g, 'সম্মেলন');
  x = x.replace(/সমীচিন/g, 'সমীচীন');
  x = x.replace(/সম্বরণ/g, 'সংবরণ');
  x = x.replace(/সম্বর্ধনা/g, 'সংবর্ধনা');
  x = x.replace(/সম্বলিত/g, 'সংবলিত');
  x = x.replace(/সরকারী/g, 'সরকারি');
  x = x.replace(/সরণী/g, 'সরণি');
  x = x.replace(/সরনী/g, 'সরণি');
  x = x.replace(/সর্বাঙ্গীন/g, 'সর্বাঙ্গীণ');
  x = x.replace(/সলজ্জিত/g, 'সলজ্জ');
  x = x.replace(/সশংকিত/g, 'সশঙ্ক');
  x = x.replace(/সহকারি/g, 'সহকারী');
  x = x.replace(/সাংগ/g, 'সাঙ্গ');
  x = x.replace(/সাক্ষাতকার/g, 'সাক্ষাৎকার');
  x = x.replace(/সাড়াশী/g, 'সাঁড়াশি');
  x = x.replace(/সাধারন/g, 'সাধারণ');
  x = x.replace(/সান্তনা/g, 'সান্ত্বনা');
  x = x.replace(/সামগ্রীক/g, 'সামগ্রিক');
  x = x.replace(/সৌখিন/g, 'শৌখিন');
  x = x.replace(/স্বচ্ছল/g, 'সচ্ছল');
  x = x.replace(/স্বরস্বতী/g, 'সরস্বতী');
  x = x.replace(/স্বস্ত্রীক/g, 'সস্ত্রীক');
  x = x.replace(/স্বাতন্ত্র/g, 'স্বাতন্ত্র্য');
  x = x.replace(/স্বাধীকার/g, 'স্বাধিকার');
  x = x.replace(/স্বায়ত্ত্বশাসন/g, 'স্বায়ত্তশাসন');
  x = x.replace(/স্মরন/g, 'স্মরণ');
  x = x.replace(/স্রোতঃস্বতী/g, 'স্রোতস্বতী');
  x = x.replace(/হীনমন্যতা/g, 'হীনম্মন্যতা');
  x = x.replace(/হৃদপিণ্ড/g, 'হৃৎপিণ্ড');
  x = x.replace(/হৃদস্পন্দন/g, 'হৃৎস্পন্দন');
  x = x.replace(/হৃৎরোগ/g, 'হৃদরোগ');

//added by YAHYA
    x = x.replace(/আঘাট/g, 'আঘাত');
    x = x.replace(/সাংঘাটিক/g, 'সাংঘাতিক');
    x = x.replace(/আবিস্কার/g, 'আবিষ্কার');
    x = x.replace(/আনুসংগিক/g, 'আনুষঙ্গিক');
    x = x.replace(/শীততাপ/g, 'শীতাতপ');
    x = x.replace(/অতীষ্ঠ/g, 'অতিষ্ঠ');
    x = x.replace(/আষ্ফালন/g, 'আস্ফালন');
    x = x.replace(/আয়ত্ব/g, 'আয়ত্ত');
    x = x.replace(/ঐশ্চর্য/g, 'ঐশ্বর্য');
    x = x.replace(/ক্রুটি/g, 'ত্রুটি');
    x = x.replace(/অংকণ/g, 'অঙ্কন');
    x = x.replace(/কোরাণ/g, 'কোরান');
    x = x.replace(/খরছ/g, 'খরচ');
    x = x.replace(/আরো /g, 'আরও ');
    x = x.replace(/বাহ্যিক লিঙ্ক/g, 'বহিঃসংযোগ');
     x = x.replace(/বাহ্যিক লিংক/g, 'বহিঃসংযোগ');

//নতুন শব্দ এই লাইনের উপরে যোগ হবে।

    // wiki formatting
   x = x.replace(/। </g, '।<');
   x = x.replace(/! -/g, '!-');
   x = x.replace(/“।/g, '।”');
   x = x.replace(/। ”/g, '।”');
   x = x.replace(/! \|/g, '!|');
   x = x.replace(/! }/g, '!}');
   x = x.replace(/! !/g, '!!');
   x = x.replace(/। "/g, '।" ');
   x = x.replace(/! "/g, '!" ');

	// some more formatting for bnwiki
   x = x.replace(/ <ref>/g, '<ref>');
   x = x.replace(/ <ref /g, '<ref ');
   x = x.replace(/{{reflist/g, '{{সূত্র তালিকা');
   x = x.replace(/{{Reflist/g, '{{সূত্র তালিকা');
   x = x.replace(/<\/references>/g, '{{সূত্র তালিকা}}');

   // fixing error

     x = x.replace(/বৈচিত্র/g, 'বৈচিত্র্য');
     x = x.replace(/বৈচিত্র্য্য/g, 'বৈচিত্র্য');
     x = x.replace(/তামুল/g, 'তামোল');
     x = x.replace(/ফূর্তি/g, 'স্ফূর্তি');
     x = x.replace(/স্ফুর্তি/g, 'স্ফূর্তি');
     x = x.replace(/স্স্স্ফূর্তি/g, 'স্ফূর্তি');
     x = x.replace(/স্স্ফূর্তি/g, 'স্ফূর্তি');
     x = x.replace(/নৈশব্দ/g, 'নৈঃশব্দ্য');
     x = x.replace(/নৈঃশব্দ/g, 'নৈঃশব্দ্য');
     x = x.replace(/নৈঃশব্দ্য্য্য/g, 'নৈঃশব্দ্য');
     x = x.replace(/নৈঃশব্দ্য্য/g, 'নৈঃশব্দ্য');
     x = x.replace(/নৈঃশব্দ্যতা/g, 'নৈঃশব্দ্য');
     x = x.replace(/বৈশিষ্ট্য্য/g, 'বৈশিষ্ট্য');
     x = x.replace(/নিরালস্য্য/g, 'নিরালস্য');
     x = x.replace(/দৈর্ঘ্য্য/g, 'দৈর্ঘ্য');
     x = x.replace(/কেচাঁ/g, 'কেঁচা');
     x = x.replace(/কেঁচাঁ/g, 'কেঁচা');
     x = x.replace(/অন্তঃসত্বা/g, 'অন্তঃসত্ত্বা');
     x = x.replace(/অন্তসত্তা/g, 'অন্তঃসত্ত্বা');
     x = x.replace(/অন্তঃসত্তা/g, 'অন্তঃসত্ত্বা');
     x = x.replace(/ন্দ্ব্ব/g, 'ন্দ্ব');
     x = x.replace(/ধ্ব্ব/g, 'ধ্ব');
     x = x.replace(/ত্ব্ব/g, 'ত্ব');
     x = x.replace(/ঁঁ/g, 'ঁ');
     x = x.replace(/মাননি\u09DF/g, 'মাননী\u09DF');
     x = x.replace(/মাননিয়/g, 'মাননীয়');
     x = x.replace(/বিদূষী/g, 'বিদুষী');
     x = x.replace(/বয়সীয়াল/g, 'বয়সিয়াল');
     x = x.replace(/রিস্কা/g, 'রিক্সা');
     //x = x.replace(/অনসুয়া/g, 'অনসূয়া');
     x = x.replace(/অনুসূয়া/g, 'অনসুয়া');
     x = x.replace(/মুমূর্ষুু/g, 'মুমূর্ষু');
     x = x.replace(/নিরবিচ্ছিন্ন/g, 'নিরবচ্ছিন্ন');
     x = x.replace(/ণ্ধ/g, 'ন্ধ');

    // removes double space between anything
    x = x.replace(/  /g, ' '); // makes double space into one
    x = x.replace(/   /g, ' '); //makes triple space into one

    x = x.replace(/য়/g, '\u09DF');

   $('#wpTextbox1').val(x);
     customAlert('বানান শুদ্ধি সম্পন্ন!','3000');
                        }
                    }
                }
            }
        });

    };
    
/* Check if view is in edit mode and that the required modules are available. Then, customize the toolbar … */
    if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) !== -1) {
        $.when(mw.loader.using('ext.wikiEditor'), $.ready)
            .then(bnSpellChecker);
    }
});


// This script aligns dates into one of two formats allowed by [[WP:MOSNUM]].
// PLEASE READ THE DOCUMENTATION at [[User:Ohconfucius/script/MOSNUM dates]] (click on the link above) before using.

// Feedback and constructive criticism are welcome

/**
 * TemplateScript adds configurable templates and scripts to the sidebar, and adds an example regex editor.
 * @see https://meta.wikimedia.org/wiki/TemplateScript
 */
// <pre>
if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) !== -1) {
	$.ajax(
		'//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js',
		{dataType: 'script', cache: true}
	).done(function () {
		$.when(
			mw.loader.using(['mediawiki.util']),
			$.ajax('//en.wikipedia.org/w/index.php?title=User:Ohconfucius/script/MOSNUM_utils.js&action=raw&ctype=text/javascript',
				{dataType: 'script', cache: true}),
			$.ready
		).done(function () {
			var add = function() {
            return mw.util.addPortletLink.apply(mw.util, arguments);
			};

			$(add('p-tb', '#', 'DATES to dmy', 'dmy-unitfixer', 'Align all dates to dmy', '', '')).click(ohc_all_to_dmy_driver);
			$(add('p-tb', '#', 'DATES to mdy', 'mdy-unitfixer', 'Align all dates to mdy', '', '')).click(ohc_all_to_mdy_driver);
//			$(add('p-tb', '#', 'Expand ref dates', 't-expandref', 'Expand month names within refs', '', '')).click(ohc_expand_ref_dates_driver);
//			$(add('p-tb', '#', 'Expand all dates', 't-expandall', 'Expand month names throughout', '', '')).click(ohc_expand_all_dates_driver);
			$( add('p-tb', '#', 'US-slash dates', 't-US', 'US-slash', '', '') ).click(ohc_US_slash_dates_driver);
			$( add('p-tb', '#', 'UK-slash dates', 't-UK', 'UK-slash', '', '') ).click(ohc_UK_slash_dates_driver);
		});
	});
}

function ohc_fix_unambiguous_dates()
{
	// resolvable ambiguous date formats
	// UK style
	ohc_regex(/([^-\w/:\.])@DD\.@MM\.@YYYY(?=[^-–/\w&])/gi, "$1@Day @Month @YYYY", function(d) {
		if (d.d == d.m) return true;
		if (d.d > 12) return true;
		return false;
		});
	ohc_regex(/([^-\w/:\.])@DD\/@MM\/@YYYY(?=[^-–/\w&])/gi, "$1@Day @Month @YYYY", function(d) {
		if (d.d == d.m) return true;
		if (d.d > 12) return true;
		return false;
		});

	// US style
	ohc_regex(/([^-\w/:\.])@MM\.@DD\.@YYYY(?=[^-–/\w&])/gi, "$1@Month @Day, @YYYY", function(d) {
		if (d.d > 12) return true;
		return false;
		});
	ohc_regex(/([^-\w/:\.])@MM\/@DD\/@YYYY(?=[^-–/\w&])/gi, "$1@Month @Day, @YYYY", function(d) {
		if (d.d > 12) return true;
		return false;
		});
}

function ohc_US_slash_dates_to_mdy()
{
//ranges
	ohc_regex(/([^-\d/:\.])@MM\/@DD\/@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@MM\/@DD\/@YYNN(?=[^-–/\w&])/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon2 @Day2, @Year2");
	ohc_regex(/([^-\d/:\.])@MM\.@DD\.@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@MM\.@DD\.@YYNN(?=[^-–/\w&])/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon2 @Day2, @Year2");
	ohc_regex(/(\| ?)@MM\/@DD\/@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@MM\/@DD\/@YYNN(?=\s*\|)/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon2 @Day2, @Year2");
	ohc_regex(/(\| ?)@MM\.@DD\.@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@MM\.@DD\.@YYNN(?=\s*\|)/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon @Day2, @Year2");

// resolvable ambiguous date formats
	ohc_regex(/([^-\d/:\.])@MM\/@DD\/@YYNN(?=[^-–/\w&])/gi, '$1@Month @Day, @YYYY');
	ohc_regex(/([^-\d/:\.])@MM\.@DD\.@YYNN(?=[^-–/\w&])/gi, '$1@Month @Day, @YYYY');
	ohc_regex(/([^-\d/:\.])@MM[-–]@DD[-–]@YYNN(?=[^-–/\w&])/gi, '$1@Month @Day, @YYYY');
	ohc_regex(/(\| ?)@MM\/@DD\/@YYNN(?=\s*\|)/gi, '$1@Month @Day, @YYYY');
	ohc_regex(/(\| ?)@MM\.@DD\.@YYNN(?=\s*\|)/gi, '$1@Month @Day, @YYYY');
//	ohc_regex(/(\| ?)@MM[-–]@DD[-–]@YYNN(?=\s*\|)/gi, '$1@Month @Day, @YYYY');
}
 
function ohc_UK_slash_dates_to_dmy()
{
//ranges
	ohc_regex(/([^-\d/:\.])@DD\/@MM\/@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@DD\/@MM\/@YYNN(?=[^-–/\w&])/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");
	ohc_regex(/([^-\d/:\.])@DD\.@MM\.@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@DD\.@MM\.@YYNN(?=[^-–/\w&])/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");
	ohc_regex(/(\| ?)@DD\/@MM\/@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@DD\/@MM\/@YYNN(?=\s*\|)/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");
	ohc_regex(/(\| ?)@DD\.@MM\.@YYNN(&nbsp;|\s)?(?:(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?)@DD\.@MM\.@YYNN(?=\s*\|)/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");

// resolvable ambiguous date formats
	ohc_regex(/([^-\d/:\.])@DD\/@MM\/@YYNN(?=[^-–/\w&])/gi, '$1@Day @Month @YYYY');
	ohc_regex(/([^-\d/:\.])@DD\.@MM\.@YYNN(?=[^-–/\w&])/gi, '$1@Day @Month @YYYY');
	ohc_regex(/([^-\d/:\.])@DD[-–]@MM[-–]@YYNN(?=[^-–/\w&])/gi, '$1@Day @Month @YYYY');
	ohc_regex(/(\| ?)@DD\/@MM\/@YYNN(?=\s*\|)/gi, '$1@Day @Month @YYYY');
	ohc_regex(/(\| ?)@DD\.@MM\.@YYNN(?=\s*\|)/gi, '$1@Day @Month @YYYY');
//	ohc_regex(/(\| ?)@DD[-–]@MM[-–]@YYNN(?=\s*\|)/gi, '$1@Day @Month @YYYY');
}

function ohc_remove_leading_zeroes()
{
	ohc_regex(/(\D[^\w\/])@Month\s@ZD@th?,?\s@YYYY(?=\W\D)/gi, "$1@LMonth @Day, @LYear");
	ohc_regex(/(\D[^\w\/])@Month\s@ZD@th?(?=\W\D)/gi, "$1@LMonth @Day");
	ohc_regex(/(\D[^\w\/])@ZD@th?\s@Month\s@YYYY(?=\W\D)/gi, "$1@Day @LMonth @LYear");
	ohc_regex(/(\D[^\w\/])@ZD@th?\s@Month(?=\W\D)/gi, "$1@Day @LMonth");
}

function ohc_delink_dates()
{
	//add missing space between wikilinks
	regex(/(\]\])(\[\[)/gi, '$1 $2');  //remove (?!file:) to ensure a space between all links
 
	 // rem redundant quote marks and parentheses
	regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\'\'\'([^|}\[\]]*)\'\'\'(?=\s*[|}])/gi, "$1$2");
	regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\'\'([^|}\[\]]*)\'\'(?=\s*[|}])/gi, "$1$2");
	regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\"([^|}\[\]]*)\"(?=\s*[|}])/gi, "$1$2");
	regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\(([^|}\[\]]*)\)(?=\s*[|}])/gi, "$1$2");

//delink unpiped dates
	//delink full dates
	ohc_regex(/\[\[@Day[\s_](?:of[\s_])?@Month(?:\]\]\s?\[\[\| )@YYYY\]\]/gi, "@Day @LMonth @YYYY");
	ohc_regex(/\[\[@Month (?:the\s)?@Day(?:\]\],? \[\[|, )@YYYY\]\]/gi, "@LMonth @Day, @YYYY");

	//delink yyyy-mm-dd dates
	ohc_regex(/\[\[@YYYY(?:\]\]-\[\[|-)@MM-@DD\]\]/gi, "@YYYY-@MM-@DD");
	ohc_regex(/@YYYY-\[\[@MM-@DD\]\]/gi, "@YYYY-@MM-@DD");

	//underscore and nbsp in linked dates
	ohc_regex(/\[\[@DD@th?(?:\s|_|&nbsp;)@Month\]\]/gi, "@Day @LMonth");
	ohc_regex(/\[\[@Month(?:\s|_|&nbsp;)@DD@th?\]\]@th?/gi, "@LMonth @Day"); //consolidated regex with flexible removal of ordinal simple date
	ohc_regex(/\[\[@Day @Month\]\]/gi, "@Day @LMonth");
	ohc_regex(/\[\[@Month @YYYY\]\]/gi, "@LMonth @YYYY");
	ohc_regex(/\[\[@YYYY\]\]/gi, "@YYYY");

	//remove leading zero and links from linked date
	ohc_regex(/\[\[@Month(?:[ _]|&nbsp;)@ZD@th\]\]/gi, "@LMonth @Day");
	ohc_regex(/\[\[@ZD@th(?:[ _]|&nbsp;)@Month\]\]/gi, "@Day @LMonth");

	// remove nowrap template from dm and md dates
	ohc_regex(/(date[ ]*=[ ]*)\{\{(?:j|no ?(?:break|wrap))\|(?:@DD(?:[ _]|&nbsp;)@Month)( @yyyy|)\}\}/gi, '$1@DD @LMonth$2');
	ohc_regex(/(date[ ]*=[ ]*)\{\{(?:j|no ?(?:break|wrap))\|(?:@Month(?:[ _]|&nbsp;)@DD)( @yyyy|)\}\}/gi, '$1@LMonth @DD$2');
	
	//delink single dm or 'dth the m'
	ohc_regex(/(?:the\s)?\[\[@Day@th?[\s_](?:of[\s_])?@Month\]\]/gi, "@Day @LMonth");
	//delink single md or 'm the dth'
	ohc_regex(/\[\[@Month[\s_](?:the[\s_])?@Day@th?\]\](?=\W)/gi, "@LMonth @Day");

//month+day piped
	ohc_regex(/\[\[(?:@dd@th?[\s_](?:of[\s_])?@month|@month[\s_]@dd@th?)\|((?:@month |)@day)@th?\]\]/gi, "$1");
	ohc_regex(/\[\[(?:@dd@th?[\s_](?:of[\s_])?@month|@month[\s_]@dd@th?)\|@Day@th?[\s_](@month|)\]\]/gi, "@Day $1");

//	ohc_regex(/\[\[@month @dd(?:#[^|]+|)\|([^|\]]+)@th?\]\]/gi, "$1");
//	ohc_regex(/\[\[@dd @month(?:#[^|]+|)\|([^|\]]+)@th?\]\]/gi, "$1");
	ohc_regex(/\[\[@month @yyyy(?:#[^|]+|)\|([^|\]]+)\]\]/gi, "$1");

	//month+day+year pseudo-ISO dates
	ohc_regex(/\[\[@Month @DD\|\d\d-\d\d\]\]-(?:\[\[)?(?:@yyyy[^|]*\|)?@YYYY(?:\]\])/gi, "@Day @LMonth @YYYY");
	ohc_regex(/\[\[@DD\s@Month\|\d\d-\d\d\]\]-(?:\[\[)?(?:@yyyy[^|]*\|)?@YYYY(?:\]\])/gi, "@Day @LMonth @YYYY");

	//'[[month day|xxXxx]]Xyyyy ' to 'month day, year'
	ohc_regex(/\[\[@Month\s@Day\|@dd.@dd\]\].@YYYY/gi, "@LMonth @Day, @YYYY");
	 //'[[day month|xxXxx]]Xyyyy' to 'day month year'
	ohc_regex(/\[\[@Day\s@Month\|@dd.@dd\]\].@YYYY/gi, "@Day @LMonth @YYYY");

// century
	regex(/\[\[((?:first|second|third|(?:four|fif|six|seven|eigh|nin|ten|eleven|twelf|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twentie)th|twenty[\s\-]first[\s\-])centur(?:y|ies)(?:\s(?:AD|BC|CE|BCE))?)\]\]/gi, '$1');
	regex(/\[\[(?:first|second|third|(?:four|fif|six|seven|eigh|nin|ten|eleven|twelf|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twentie)th|twenty[\s\-]first)[\s\-_]centur(?:y|ies)(?:\s(?:AD|BC|CE|BCE))?\|([^\]]{1,30})\]\]/gi, '$1');
	regex(/\[\[(\d{1,2}(?:st|[nr]d|th))[\s\-_](centur(?:y|ies))(\s(?:AD|BC|CE|BCE)|)\]\]/gi, '$1 $2$3');
	ohc_regex(/\[\[\d{1,2}@th[\s\-_]centur(?:y|ies)(?:\s(?:AD|BC|CE|BCE)|)\|([^\]]{1,30})\]\]/gi, '$1');

	// months
	ohc_regex(/\[\[@Month\]\]/gi, "@LMonth");
	ohc_regex(/\[\[@FullMonth\|([^\]]{1,30})\]\]/gi, "$1");

	// decades and years
	regex(/(\d{1,3}0)[‘`´’′]?s/g, '$1s');
	regex(/\[\[(\d{1,3}0)\'?s\]\]/g, '$1s');
	regex(/\[\[\d{1,3}0\'?s?\|([^\]]{1,30})\]\]/g, '$1');
	regex(/\[\[(\d{1,3}0)\'?(s)?\s(AD|BC|CE|BCE)\]\]/gi, '$1$2 $3');
	regex(/\[\[(\d{1,4}[\s_]?)(AD|BC|CE|BCE)\]\]/gi, '$1$2');
	regex(/\[\[(AD|BC|CE|BCE)([\s_]?)(\d{1,4})\]\]/gi, '$1$2$3');
	ohc_regex(/([-–])\[\[\s?@yyyy\s?\|\s?(\d{2,4})\s?\]\]/gi, '$1$2'); //piped year
	regex(/\[\[([12]\d{3}|[1-9]\d{0,2})\]\]/gi, '$1');
	regex(/\[\[\d{1,3}0\'?s?\s(?:AD|BC|CE|BCE)\|([^\]]{1,30})\]\]/gi, '$1');
	regex(/\[\[\d{1,3}0\'?s?\s\(decade\)\|([^\]]{1,30})\]\]/gi, '$1');

	//month+year
	//Identify surprise or 'Easter egg' diversions linking month+years to year articles. Turn them into month+year links to be dealt with below
	ohc_regex(/\[\[@yyyy in[^|\]]+\|@Day @Month @YYYY\]\]/gi, "@Day @LMonth @YYYY");
	ohc_regex(/\[\[@yyyy in[^|\]]+\|@Month @Day,? @YYYY\]\]/gi, "@LMonth @Day, @YYYY");
	ohc_regex(/\[\[@yyyy#[^|\]]+\|(@month\s|)(@yyyy)\]\]/gi, "$1$2");
	ohc_regex(/\[\[@yyyy#[^|\]]+\|(@month|@yyyy)\]\]/gi, "$1");
	ohc_regex(/\[\[(@month\s@yyyy)\]\]/gi, "$1");
	ohc_regex(/\[\[@month\s@yyyy\|([^\]]{1,30})\]\]/gi, "$1");
	ohc_regex(/\[\[(?:List of |)Bollywood films of @yyyy\|@YYYY\]\](?= [^\[]{2}^B)/gi, "@YYYY");

	ohc_regex(/(\[\[@yyyy[^|\]]+\|@yyyy)(\]\])( season)/gi, "$1$3$2");

	//removed piped years when in full date (excepting disambiguated parentheses - updated 24/2/2012)
//	ohc_regex(/\[\[[^|\]\(\)]{1,32}\|@YYYY\]\]/gi, '@Year');  // 23/6/2021 – disabled delinking "other" year-in articles

	//Identify surprise or 'Easter egg' diversions linking months to year or "year in" articles.
	ohc_regex(/\[\[\d{1,4}#[^|\]]+\|@Month\]\]/gi, "@LMonth");
	ohc_regex(/\[\[@yyyy \w[^|\]]{3,12}\|@Year\]\]/gi, '@Year');

	// month and day piped
	ohc_regex(/\[\[@month[\s_]@day\|@MM-@DD\]\]/gi, "@MM-@DD");
	ohc_regex(/\[\[@month[\s_]@day\|([^\]]{1,30})\]\]/gi, "$1");
	ohc_regex(/\[\[@day(?:\s|_|@th )(?:of[\s_]|)?@month\|([^\]]{1,30})\]\]/gi, "$1");

	//years piped
	regex(/\[\[\d{1,4}\|([^\]]{1,30})\]\]/gi, '$1');
}

function ohc_fix_common_errors()
{
	ohc_regex(/(\d)<sup>@th<\/sup>/gi, '$1th');
	// remove dashbot comment from dates
	regex(/<!-- ?DASHBot ?-->/gi, '');
	ohc_regex(/(\|\s*(?:date|year)\s*=)\s*c(?:irca|a\.)?\s?((?:@day |)@month @year)(?=[\s\n]*[<|}])/gi, '$1c. $2'); //add space
//common cs1 errors
	regex(/(\|\s*(?:date|year)\s*=)\s*(1[7-9]\d|20[0-1])\?(?=[\s\n]*[<|}])/gi, '$1c. $20'); 
	regex(/(\|\s*(?:date|year)\s*=\s*(1[7-9])\d{2})[-–](\d{2})(?=[\s\n]*[<|}])/gi, '$1–$2$3'); 
//	regex(/(\|\s*(?:date|year)\s*=\s*(20)[0-1]\d)[-–]([0-2]\d)(?=[\s\n]*[<|}])/gi, '$1–$2$3'); 
	regex(/(\|\s*(?:date|year)\s*=\s*)@YYYY\s*[-–/]\s*@YYYY(?=[\s\n]*[<|}])/gi, '$1@YYYY1–@YYYY2'); //common cs1 error
	regex(/(\|\s*(?:date)\s*=)\s*s(pring|ummer),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1S$2 $3'); //common cs1 error
	regex(/(\|\s*(?:date)\s*=)\s*a(utumn),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1A$2 $3'); //common cs1 error
	regex(/(\|\s*(?:date)\s*=)\s*f(all),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1F$2 $3'); //common cs1 error
	regex(/(\|\s*(?:date)\s*=)\s*w(inter),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1W$2 $3'); //common cs1 error
	ohc_regex(/(\|\s*access-?date\s*=)\s*(@month @year)(?=[\s\n]*[<|}])/gi, '$11 $2'); //common cs1 error
//	ohc_regex(/(\|\s*date\s*=\s*)@year\?(?=[\s\n]*[<|}])/gi, '$1@Year'); //common cs1 error
//	ohc_regex(/(\|\s*(?:date|year)\s*=)\s*@year\?(?=[\s\n]*[<|}])/gi, '$1c. @Year'); //common cs1 error
//	ohc_regex(/(\|\s*(?:date|year)\s*=)\s*(@month @year)\?(?=[\s\n]*[<|}])/gi, '$1c. $2'); //common cs1 error
	ohc_regex(/(\|\s*access-?date\s*=)\s*@month @day, (1[7-9]\d{2}|2000)(?=[\s\n]*[<|}])/gi, '$1'); //rem access date before Wikipedia (জানুয়ারি 2001)
	ohc_regex(/(\|\s*access-?date\s*=)\s*@day @month.? (1[7-9]\d{2}|2000)(?=[\s\n]*[<|}])/gi, '$1'); //rem access date before Wikipedia (জানুয়ারি 2001)
	ohc_regex(/(\|\s*access-?date\s*=)\s*31( (?:এপ্রিল|জুন|সেপ্টেম্বর|নভেম্বর) @year)(?=[\s\n]*[<|}])/gi, '$130$2'); //rem nonsense access date (short months)
	ohc_regex(/(\|\s*access-?date\s*=)\s*29( ফেব্রুয়ারি (?:200[1235679]|201[1345789]))(?=[\s\n]*[<|}])/gi, '$128$2'); //rem nonsense access date 29 ফেব্রুয়ারি (non-leap year)
	ohc_regex(/(\|\s*access-?date\s*=)\s*(?:3[01])( ফেব্রুয়ারি @yyyy)(?=[\s\n]*[<|}])/gi, '$128$2'); //rem nonsense access dates ফেব্রুয়ারি
	regex(/(\|\s*access-?date\s*=)\s*(\d{4})(?=[\s\n]*[<|}])/gi, ''); //common cs1 error
	
	//month+day+year pseudo-ISO dates
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*@dd)-@Mon-@YYYY/gi, "$1 @FullMonth @YYYY");
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@YYYY-@DD-@Mon/gi, "$1 @DD @FullMonth @YYYY");

	regex(/(\|\s*(?:date|year)\s*=)\s*(?:(?:date |)unknown|(?:not? |non-|un)date[ds])(?=[\s\n]*[<|}])/gi, '$1n.d.'); //common cs1 error
	regex(/(\|\s*(?:date|year)\s*=)\s*n\.?d(?=[\s\n]*[<|}])/gi, '$1n.d.'); //common cs1 error
	regex(/(\|\s*)year(\s*=\s*)(?=n\.?d\.)(?=[\s\n]*[<|}])/gi, '$1date$2'); //common cs1 error

   // remove parasitic metadata -  days of the week/descriptives
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:[^|}\d]*|)@Day\s+@Month\s+@YYYY((?:[a-z]\b|)\s?)[^|<}]*(?=[\s\n]*[<|}])/gi, "$1@Day @Month @YYYY$2"); //rem negate "<", "hyphens" "dashes" 26/6/2020
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)[^|}]*@Month\s+@Day,\s+@YYYY((?:[a-z]\b|)\s?)[^|<}]*(?=[\s\n]*[<|}])/gi, "$1@Month @Day, @YYYY$2"); //rem negate "<", "hyphens" "dashes" 26/6/2020
//	ohc_regex(/(\|\s*date\s*=\s*)(?:[^|}–<]*\D|)@Day\s+@Month\s+@YYYY ?– ?@Day\s+@Month\s+@YYYY[^|}–<]*(?=[\s\n]*[<|}])/gi, "$1@Day1 @Mon1 @Year1 – @Day2 @Mon2 @Year2");
//	ohc_regex(/(\|\s*date\s*=\s*)[^|}–<]*@Month\s+@Day,\s+@YYYY ?– ?@Month @Day, @YYYY[^|}–<]*(?=[\s\n]*[<|}])/gi, "$1@Mon1 @Day1, @Year1 – @@Mon2 Day2, @Year2");
//	regex(/(\|\s*author\s*=\s*)(?:posted|published)(?: by\b| on\b|)[\s:](?=\w)/gi, "$1");
//	regex(/(\|\s*(?:date|archive-?date|access-?date|author|year)\s*=\s*)(?:accessed|retrieved|entered|posted|published|(?:last |)updated?|©)(?: by\b| on\b|)[\s:]*(?=\w)/gi, "$1");
	regex(/(\|\s*(?:author|first|last)\s*=\s*)(?:by\b|on\b)[\s:]*(?=\w)/gi, "$1");
	regex(/(\|\s*(?:date|archive-?date|access-?date|author|first|last)\s*=\s*)(?:(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)day,?)\s/gi, "$1");
	regex(/(\|\s*(?:date|archive-?date|access-?date|author|first|last)\s*=\s*)(?:Mon|Tues?|Wed|Thur?|Fri|Sat)[\.,]?\s/gi, "$1"); //<!-- rem "Sun" - false positives -->

   // remove deprecated parameters (|day= and |month)
 	ohc_regex(/(\|\s*)day(?:\s*=\s*)@DD ?\| ?month(?:\s*=\s*)@Month ?\| ?year(?:\s*=\s*)@YYYY(?=[|}\s])/gi, '$1date=@Day @Month @Year'); 
 	ohc_regex(/(\|\s*)year(?:\s*=\s*)@YYYY ?\| ?month(?:\s*=\s*)@Month ?\| ?day(?:\s*=\s*)@DD(?=[|}\s])/gi, '$1date=@Month @Day, @Year'); 
 	
// typos
	ohc_regex(/(date *= *)@Day @Month ?@th/gi, '$1@Day @Month'); 
	ohc_regex(/(date *= *)@Day @Month\w(?= \d{3,4})/gi, '$1@Day @Month'); 

	ohc_regex(/(date *= *(?:[12]?\d|30|31) )(জানুয়ারি|Febr)[\w ]?[aur]{3,4}\w{0,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2uary'); 
	ohc_regex(/(date *= *(?:[12]?\d|30|31) )J[anu]{3,5}r\w{0,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জানুয়ারি');
	ohc_regex(/(date *= *(?:[12]?\d) )Febua?r\w{0,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1ফেব্রুয়ারি');
	ohc_regex(/(date *= *(?:[12]?\d|30|31) )M\w{2,3}ch(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1মার্চ'); 
	ohc_regex(/(date *= *(?:[12]?\d|30) )A[bpv\[]\w{2,3}l\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1এপ্রিল');
	ohc_regex(/(date *= *(?:[12]?\d|30|31) )Ma[tui](?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1মে'); 
	ohc_regex(/(date *= *(?:[12]?\d|30) )J\wn\w(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন'); 
	ohc_regex(/(date *= *(?:[12]?\d|30) )J\w{1,2}e(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন'); 
	ohc_regex(/(date *= *(?:[12]?\d|30|31) )জুলাই\w{1,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুলাই'); 
	ohc_regex(/(date *= *(?:[12]?\d|30|31) )A[oug]{2,3}\w{1,4}t(?:\w|us)?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1আগষ্ট'); 
	ohc_regex(/(date *= *(?:[12]?\d|30|31) )(সেপ্টেম্বর|নভেম্বর|ডিসেম্বর)\w{2,4}b[er]{1,2}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2ember'); 
	ohc_regex(/(date *= *(?:[12]?\d|30) )S\w{0,2}p[ \[]?\w{2,5}[er]{2,3}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1সেপ্টেম্বর'); 
	ohc_regex(/(date *= *(?:[12]?\d|30|31) )O\w{0,2}t\w{1,3}[er]{2,3}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1অক্টোবর'); 
	ohc_regex(/(date *= *(?:[12]?\d|30) )[MN]\w{1,2}[bv] ?\w{1,3}b[er]{1,2}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1নভেম্বর'); 
	ohc_regex(/(date *= *(?:[12]?\d|30|31) )D[ie]?[cs] ?\w{1,4}b[er]{1,2}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1ডিসেম্বর'); 

	ohc_regex(/(date *= *)@Month\w(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1@Month'); //rem stray digit at the end of year string
 
	ohc_regex(/(date *= *)(জানুয়ারি|Febr)[\w ]?[aur]{3,4}\w{0,2}(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2uary'); 
	ohc_regex(/(date *= *)J[anu]{3,5}r\w{0,2}(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জানুয়ারি');
	ohc_regex(/(date *= *)Febua?r\w{0,2}(?=(?: (?:[12]?\d),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1ফেব্রুয়ারি');
	ohc_regex(/(date *= *)M\w{2,3}ch(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1মার্চ'); 
	ohc_regex(/(date *= *)A[bpv\[]\w{2,3}l\w?(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1এপ্রিল');
	ohc_regex(/(date *= *)Ma[tui](?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1মে'); 
	ohc_regex(/(date *= *)J\wn\w(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন'); 
	ohc_regex(/(date *= *)J\w{1,2}e(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন'); 
	ohc_regex(/(date *= *)জুলাই\w{1,2}(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুলাই'); 
	ohc_regex(/(date *= *)A[oug]{2,3}\w{1,4}t(?:\w|us)?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1আগষ্ট'); 
	ohc_regex(/(date *= *)(সেপ্টেম্বর|নভেম্বর|ডিসেম্বর)\w{2,4}b[er]{1,2}\w?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2ember'); 
	ohc_regex(/(date *= *)S\w{0,2}p[ \[]?\w{2,5}[er]{2,3}\w?(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1সেপ্টেম্বর'); 
	ohc_regex(/(date *= *)O\w{0,2}t\w{1,3}[er]{2,3}\w?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1অক্টোবর'); 
	ohc_regex(/(date *= *)[MN]\w{1,2}[bv] ?\w{1,3}b[er]{1,2}\w?(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1নভেম্বর'); 
	ohc_regex(/(date *= *)D[ie]?[cs] ?\w{1,4}b[er]{1,2}\w?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1ডিসেম্বর'); 

//insert comma to separate date from army unit
	ohc_regex(/@FullMonth ((?:the |)\d\d*@th (?:Air(?:borne|)|Arm(?:ou?red|y)|Artillery|Battalion|Brigade|Co(?:mpan|)y|Division|Fleet|Group|Infantry|Land|Panzer|Regiment|Squadron|Sqn)\b)/g, "@Month, $1");

	// remove parasitic metadata - time
	ohc_regex(/(\|\s*\w*date\s*=\s*@yyyy-@mm-@dd)\s?(?:T[0-2]\d:[0-5]\d:[0-5]\d(?:\s*|&nbsp;|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|Z))(?=\s*[|}])/g, "$1");
	ohc_regex(/(\|\s*\w*date\s*=\s*@month @day,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1");
	ohc_regex(/(\|\s*\w*date\s*=\s*@day @month,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1");
	ohc_regex(/(\|\s*\w*date\s*=\s*\w[\w\s]+@month @day,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1");
	ohc_regex(/(\|\s*\w*date\s*=\s*\w[\w\s]+@day @month,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1");
	ohc_regex(/(\|\s*\w*date\s*=[^:|}]*)\s?(?:T?[0-2]\d:[0-5]\d:[0-5]\d(?:\s*|&nbsp;|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|Z))/g, "$1");

//  add back spaces or comma or remove other single artefact after date string	
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:on |)@Day\s{,2}@Month\s{,2}@YYYY[^a-z{}]?(?=\s*[|}\n])/gi, "$1@Day @Month @YYYY$2");
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:on |)@Month\s{,2}@Day,?\s{,2}@YYYY[^a-z{}]?(?=\s*[|}\n])/gi, "$1@Month @Day, @YYYY$2");
	//long-hand palliative for observed failure to insert spaces
	ohc_regex(/(\|\s*(?:archive|access|air)-?date\s*=\s*)(?:on |)([0-2]?\d|30|31)\s*(জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগষ্ট|সেপ্টেম্বর|অক্টোবর|নভেম্বর|ডিসেম্বর)\s*((?:19\d|20[0-1])\d\s?)[^|{}\s<>]*(?=\s*[|}])/gi, "$1$2 $3 $4");
//	ohc_regex(/(\|\s*(?:publication|)-?date\s*=\s*)(?:on |)@Day\s*@Month\s*@YYYY([a-z]\s?|\s?)\w*[^|{}<>]*(?=[|}])/gi, "$1@Day @Month @YYYY$2");
//	ohc_regex(/(\|\s*(?:publication|)-?date\s*=\s*)(?:on |)@Month\s*@Day,\s*@YYYY([a-z]\s?|\s?)\w*[^|{}<>]*(?=[|}])/gi, "$1@Month @Day, @YYYY$2");

//remove extraneous bracket //from Batty
	ohc_regex(/{{(\s*[Cc]it(?:e|ation))([^}]+)(\s*\|\s*(?:archive-?|access-?|publication-?)?date\s*=\s*)([\w\s-]+)\](?=\s*[\|}<])/gi, '{{$1$2$3$4');  

	//fix bda template redirect
//	regex(/\{\{bda\|([^}]+)\}\}/gi, '{{birth date and age|$1}}');
//	regex(/\{\{dda\|([^}]+)\}\}/gi, '{{death date and age|$1}}');

	//zap redundant {{date}}, {{accessdate}} {{retrieved}}, {{monthname}} and {{#dateformat}}
//	regex(/({{(?:end|start)[-–]date)\|df=y(?:es|)/gi, "$1"); //rem deprecated parameter - disabled: doesn't work here, so ejected to the formatting script
	ohc_regex(/{{#formatdate:@YYYY-@MM-@DD(?:[^\}]*)}}/gi, "@Day @Month @YYYY");
	regex(/{{#formatdate:([^}]+)}}/gi, "$1");
	regex(/\{\{#dateformat:([^}\|]+)(?:\|dmy|\|mdy)?\}\}/gi, '$1');
//	ohc_regex(/(date[ ]*=[ ]*)\{\{(?:Start|End) ?date(?:\|df=y(?:es|)|)\|@YYYY\|@MM\|@DD(?:\|df=y(?:es|)|)\}\}/gi, '$1@Month @DD, @YYYY');  //stripping start/end template notes inside "|date=" parameter (line 72)
	ohc_regex(/{{#formatdate:@YYYY-@MM-@DD(?:\|(?:[dmy]{3}|iso)|)}}/gi, "@Day @Month @YYYY");
	ohc_regex(/\{\{date\|@YYYY-@MM-@DD\}\}/gi, "@Day @Month @YYYY");
	ohc_regex(/\{\{date\|(@DD[\-\s]@Mon|@Mon[\-\s]@DD)\}\}/gi, "@Day @Month");
	regex(/\{\{date\|([^}\|]+)(?:\|l?(?:[dmy]{3}|iso|none|link))?\}\}/gi, '$1');
	ohc_regex(/[ ]*\{\{accessdate\|@YYYY-@MM-@DD[ ]*\}\}/gi, " Retrieved @YYYY-@MM-@DD");
	ohc_regex(/[ ]*\{\{retrieved[ ]*\|[ ]accessdate=([\-\w, ]*)\}\}/gi, " Retrieved $1");
//	ohc_regex(/(date[ ]*=[ ]*|\w{2,}[ ]*)\{\{(?:start|end).date[^|}]*(?:\|df=y(?:es|)|)\|@YYYY(?:\|df=y(?:es|)|)\}\}/gi, '$1@YYYY');  //stripping start/end template (disabling to placate Pigsonthewing)
//	ohc_regex(/\{\{(?:Start|End) date(?:\|df=y(?:es|)|)\|@YYYY\|@MM\}\}/gi, '@Month @YYYY')  //stripping start/end template notes
//	ohc_regex(/<!--(?:Use)? \{\{(?:Start|End) date\|@YYYY\|@MM\|@DD\}\} -->/gi, '');  //stripping start/end template notes
	ohc_regex(/(\{\{MONTHNAME\|@MM\}\})/gi, "@Month")

//expand one and two-digit years in ranges
	regex(/(\()@Month @YYYY[-–]@Month @YYNN(\))/gi, '$1@Month1 @YYYY1 – @Month2 @YYYY2$2');
	regex(/(\(1[789])(\d)(1)[-–]([2-9]\))/gi, '$1$2$3–$2$4');
	regex(/(\(1[789])(\d)(2)[-–]([3-9]\))/gi, '$1$2$3–$2$4');
	regex(/(\(1[789])(\d)(3)[-–]([4-9]\))/gi, '$1$2$3–$2$4');
	regex(/(\(1[789])(\d)(4)[-–]([5-9]\))/gi, '$1$2$3–$2$4');
	regex(/(\(1[789])(\d)(5)[-–]([6-9]\))/gi, '$1$2$3–$2$4');
	regex(/(\(1[789])(\d)(6)[-–]([7-9]\))/gi, '$1$2$3–$2$4');
	regex(/(\(1[789])(\d)(7)[-–]([8-9]\))/gi, '$1$2$3–$2$4');
	regex(/(\(1[789])(\d)(8)[-–](9\))/gi, '$1$2$3–$2$4');
	regex(/(\(20)([01])(1)[-–]([2-9]\))/gi, '$1$2$3–$2$4');
	regex(/(\(20)([01])(2)[-–]([3-9]\))/gi, '$1$2$3–$2$4');
	regex(/(\(20)([01])(3)[-–]([4-9]\))/gi, '$1$2$3–$2$4');
	regex(/(\(20)([01])(4)[-–]([5-9]\))/gi, '$1$2$3–$2$4');
	regex(/(\(20)([01])(5)[-–]([6-9]\))/gi, '$1$2$3–$2$4');
	regex(/(\(20)([01])(6)[-–]([7-9]\))/gi, '$1$2$3–$2$4');
	regex(/(\(20)([01])(7)[-–]([8-9]\))/gi, '$1$2$3–$2$4');
	regex(/(\(20)([01])(8)[-–](9\))/gi, '$1$2$3–$2$4');

	ohc_regex(/(\W)@DD@th?, @DD@th?((?:[ ]|&nbsp;)(?:and|&|to|or)(?:[ ]|&nbsp;))@DD@th?(?:\sof\s?)?([ ]|&nbsp;)@Month(?=\W)/gi, '$1@Day1, @Day2$2@Day3$3@LMonth');
	ohc_regex(/(\W)@DD@th?((?:[ ]|&nbsp;)(?:and|&|to|or)(?:[ ]|&nbsp;))@DD@th?(?:\sof\s?|)([ ]|&nbsp;)@Month(?=\W)/gi, '$1@Day1$2@Day2$3@LMonth');
	ohc_regex(/(\W)the @DD@th(?:\sof|)\s@Month,? @YYYY(?=\W\D)/g, '$1@Day @LMonth @YYYY');
	ohc_regex(/(\W)the @DD@th(?:\sof|)\s@Month(?=\W\D)/g, '$1@Day @LMonth');
	ohc_regex(/(\W)@Day@th?(?:\sof|)([ _]|&nbsp;|{{(?:break|nbsp)}})@Month(?=[^|\]\w])/gi, '$1@Day$2@LMonth');
	ohc_regex(/(\W)@Month\s(?:the\s)?@DD@th?,(?:\sthe\s)?(?: |&nbsp;)@DD@th?(\s(?:and|&|to|or)(?:[ _]|&nbsp;))(?:the\s)?@DD@th?(?=[^|\]\w])/gi, '$1@LMonth @Day1, @Day2$2@Day3');
	ohc_regex(/(\W)(@month)\s(@day)((?:,\s@day){0,6}),?(\/|\s?[-–]\s?|\s(?:and|&|to|or)\s+?)@Day@th?(?:,?(?:[ _]|&nbsp;)|\sof\s)?(\d{3,4}\W\D)/gi, '$1$2 $3$4$5@Day, $6');
	ohc_regex(/(\W)(@month)\s(@day)((?:,\s@day){0,6}),?(\/|\s?[-–]\s?|\s(?:and|&|to|or)\s+?)@Day@th?(?=\W\D)/gi, '$1$2 $3$4$5@Day');
	ohc_regex(/(\W)@Month([ _]|&nbsp;|{{(?:break|nbsp)}})(?:the\s)?@DD@th?,? @Year/gi, '$1@LMonth$2@Day, @Year');
	ohc_regex(/(\W)@Month @Day(?:\sof|,|)([ _]|&nbsp;|{{(?:break|nbsp)}})@Year(?=[^|\]\w])/gi, '$1@Month @Day,$2@Year');

	// consolidating/amalgamating date fields
	ohc_regex(/(\|[ ]*date[ ]*=[ ]*@day)\s*\|[ ]*month=[ ]*(@month)\s*\|[ ]*year=[ ]*(@yyyy[ ]*)(?=[|}\s])/gi, "$1 $2 $3");
	ohc_regex(/(\|[ ]*date[ ]*=[ ]*@day.?@month)\s*\|[ ]*year=[ ]*(@yyyy[ ]*)(?=[|}\s])/gi, "$1 $2");
	ohc_regex(/(\|[ ]*date[ ]*=[ ]*@month.?@day)\s*\|[ ]*year=[ ]*(@yyyy[ ]*)(?=[|}\s])/gi, "$1 $2");

	// eliminating dates and time placed in author parameter
	//removing artefacts from Indian news sites (TNN আগষ্ট 30, 2012, 05.46AM)
	ohc_regex(/(\|\s*author\s*=\s*(?:[A-Z]{2,3}\b))(?:[^|}]*)\d{4}, [\d\.:]{4,5}(&nbsp;|)[AP]M IST(?=[ ]*\|)/g, '$1$2');
//	ohc_regex(/(\|\s*author=(?:[^\[\]|{}]*))(TNN|PTI) @day @month @yyyy, [\d\.:]{4,5}(&nbsp;|)[AP]M IST(?=[ ]*\|)/g, '$1$2');

	ohc_regex(/(\|\s*author\s*=\s*)@month @day,? @yyyy\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|)|)(?=\|)/g, "$1");
	ohc_regex(/(\|\s*author\s*=\s*)@day @month,? @yyyy\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*|&nbsp;)(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|)|)(?=\|)/g, "$1");
	ohc_regex(/(\|\s*author\s*=\s*\w[\w\s]+)@month @day,? @yyyy(?:[^\[\]|{}]*)(?=[|}])/g, "$1");
	ohc_regex(/(\|\s*author\s*=\s*\w[\w\s]+)@day @month,? @yyyy(?:[^\[\]|{}]*)(?=[|}])/g, "$1");
	ohc_regex(/(\|\s*author\s*=\s*(?:\w[\w\s]+)?)@dd-@mm-@yyyy/gi, "$1");
	ohc_regex(/(\|\s*author\s*=\s*(?:\w[\w\s]+)?)@YYYY-@MM-@DD ?/gi, "$1");
	regex(/(\|\s*(?:date|archive-?date|access-?date|author)\s*=\s*(?:\w[\w\s]+)?)[0-2]\d:[0-5]\d(?:[ ]|&nbsp;)?(?:[ap]m|[ap]\.m\.|)(?: ?(?:[A-Z]{1,2}T|UTC)[\.,]?|)/gi, "$1");
//	ohc_regex(/(\|\s*author\s*=\s*(?:\w[\w\s]+)?)\s*[0-2]\d[\.:][0-5]\d(?:[\.:][0-5]\d|)/gi, "$1"); //let's see later if we need this

	// eliminating mm-dd-yyyy dates
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@MM[-–\/\.=\s](1[3-9]|2\d|3[01])[-–\/\.=\s]@YYYY/gi, "$1@Month $2, @YYYY");
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Mon[-–\/\.=\s](1[3-9]|2\d|3[01])[-–\/\.=\s]@YYYY/gi, "$1@Month $2, @YYYY");
	ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@MM[-–\/\.=\s](1[3-9]|2\d|3[01])[-–\/\.=\s]@YYYY(?=\D)/gi, " Retrieved @Month $1, @YYYY");
//	ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@YYYY,? @Month @DD(?=\D)/gi, " Retrieved @Day @Month @YYYY");

	ohc_regex(/([ =|])@Mon[-–](1[3-9]|2\d|3[01])[-–]@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); 
	ohc_regex(/([ =|])@Mon\/(1[3-9]|2\d|3[01])\/@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); 
	ohc_regex(/([ =|])@Mon\.(1[3-9]|2\d|3[01])\.@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); 
	ohc_regex(/([ =|])@Mon (1[3-9]|2\d|3[01]) @YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); 
	ohc_regex(/([ =|])@MM[-–](1[3-9]|2\d|3[01])[-–]@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); 
	ohc_regex(/([ =|])@MM\/(1[3-9]|2\d|3[01])\/@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); 
	ohc_regex(/([ =|])@MM\.(1[3-9]|2\d|3[01])\.@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); 
	ohc_regex(/([ =|])@MM (1[3-9]|2\d|3[01]) @YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); 

	// eliminating dd-mm-yyyy dates (assumed default)
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@DD[-–\/\.=\s]@MM[-–\/\.=\s]@YYYY/gi, "$1@Day @Month @YYYY");
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@DD[-–\/\.=\s]@Mon[-–\/\.=\s]@YYYY/gi, "$1@Day @Month @YYYY");
	ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@DD[-–\/\.=\s]@MM[-–\/\.=\s]@YYYY(?=\D)/gi, " Retrieved @Day @Month @YYYY");
	ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@YYYY,? @Month @DD(?=\D)/gi, " Retrieved @Day @Month @YYYY");
	ohc_regex(/([ =|])@DD[-–]@Mon[-–]@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); 
	ohc_regex(/([ =|])@DD\/@Mon\/@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); 
	ohc_regex(/([ =|])@DD\.@Mon\.@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
	ohc_regex(/([ =|])@DD @Mon @YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); 
	ohc_regex(/([ =|])@DD[-–]@MM[-–]@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); 
	ohc_regex(/([ =|])@DD\/@MM\/@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); 
	ohc_regex(/([ =|])@DD\.@MM\.@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
	ohc_regex(/([ =|])@DD @MM @YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); 
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@DD[-–\/\.=\s]@Month[-–\/\.=\s]@YYNN(?=\s*[|}\n])/gi, '$1@Day @Month @YYYY');

//convert yyyy-dd-mm to yyyy-mm-dd
	ohc_regex(/{{(\s*[Cc]it(?:e|ation))([^}]+)(\s*\|\s*(?:publication|archive|access|air|)-?date\s*=\s*(?:1[0-9]|20)\d{2})[-/\.=\s](1[3-9]|2\d|3[01])[-/\.=\s](0?\d|1[0-2])(\s*[\|}<])/gi, '{{$1$2$3-$5-$4$6'); //from Batty

// eliminating other errant formats
	ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)([0-2]?\d|30|31) @Month \2,? @YYYY(?=\s*[|}])/gi, "$1$2 @Month @YYYY"); //repeated digits
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day ?@Month ?200([01]\d)[^\s|}]?(?=\s*[|}])/gi, "$1@Day @Month 20$2");
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month ?@Day,? ?200([01]\d)[^\s|}]?(?=\s*[|}])/gi, "$1@Month @Day, 20$2");

	ohc_regex(/([ ]\()@DD-@MM-@YYYY(\)\W)/gi, '$1@Day @Month @YYYY$2');
	ohc_regex(/([ ]\()@DD-@Month-@YYYY(\)\W)/gi, '$1@Day @Month @YYYY$2');
	ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@Month, @DD, @YYYY(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
	ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@DD[\.,] @Month,? @YYYY(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
	ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY,? @Month @DD(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
	ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY,? @DD @Month(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
	ohc_regex(/[ ]\(@YYYY,? @Month @DD\)/gi, " (@Day @Month @YYYY)");
	ohc_regex(/[ ]\(@YYYY @MM @DD\)/gi, " (@Day @Month @YYYY)");
	ohc_regex(/[ ]\(@YYYY, @DD @Month\)/gi, " (@Day @Month @YYYY)");
	ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY,? @Month(?=\s*[|}])/gi, "$1@Month @YYYY");
	ohc_regex(/[ ]\(@YYYY, @Month\)/gi, " (@Month @YYYY)");
	ohc_regex(/[ ]\(@Mon@YYYY\)/gi, " (@Mon @YYYY)");

	//CS1 errors ISO-like dates (too few or too many digits)
	ohc_regex(/(date\s*=\s*)(?:\[\[)?@YYYY(?:\]\][–—‐]\[\[|[–—‐])@MM[\-–—‐]@DD(?:\]\])?(?=\s*[|}])/gi, "$1@YYYY-@ZM-@ZD"); //ndashes and emdashes
	ohc_regex(/(\|\s*access-?date\s*=)\s*@YYYY-0[–—]@DD(?=\s*[|}])/gi, ""); //rem nonsense access date
	ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY[-–—]@MM[-–—]@DD(?=\s*[|}])/gi, "$1@YYYY-@ZM-@ZD"); //ndashes and emdashes
//	ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY[\-–—‐]@MM(?=\s*[|}])/gi, "$1@Month @YYYY"); //transform "yyyy-mm" to "month year"
	ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[–—]@MM[–—]@DD([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2@Day @Month @YYYY$3");
	ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-]@MM[-]([1-9])([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2$3 @Month @YYYY$4");  

	// spaces and commas between month and year
	ohc_regex(/@Month(?:,?|\s+of|)(\s|&nbsp;)@YYYY(?=\D)/gi, "@LMonth$1@YYYY");

// fix month names (capitalize, remove dots)
	ohc_regex(/(\W)@DD\s@FullMonth(\s+|\s*,)/gi, "$1@Day @FullMonth$2");
	ohc_regex(/(\W)@DD\s@Mon(\s+|\s*,)/gi, "$1@Day @Mon$2");
	ohc_regex(/(\W)@FullMonth\s@DD(\s+|\s*,)/gi, "$1@FullMonth @Day$2");
	ohc_regex(/(\W)@Mon\s@DD(\s+|\s*,)/gi, "$1@Mon @Day$2");
	regex(/(\d(?:st|nd|rd|th) )C(entur(?:ies|y))(?=[ ]*(=|BC|AD|CE))/g, '$1c$2');
//	regex(/(\d(?:st|nd|rd|th) )C(entur(?:ies|y))(?![ \-][A-Z]\w*|''|")/g, '$1c$2');

	//spaces and commas - in date formats
	ohc_regex(/(\D\W\[?\[?@dd)[ ]+(@month)(\]\])?[ ]*,[ ]*(\[?\[?@yyyy(\sAD|\sBC|\sCE|\sBCE|)\]?\]?\W\D)/gi, "$1 $2$3 $4");
	ohc_regex(/(\D\W\[?\[?)(@month)[ ]+(@dd)(\]?\]?)(?:[ ]*,[ ]*)(\[?\[?@yyyy(\sAD|\sBC|\sCE|\sBCE|)\]?\]?\W\D)/gi, "$1$2 $3$4, $5");
	ohc_regex(/(\D\W\[?\[?)(@month)[ ]+(@dd)(\]?\]?)[ ]+(\[?\[?@yyyy(\sAD|\sBC|\sCE|\sBCE|)\]?\]?\W\D)/gi, "$1$2 $3$4, $5");

	ohc_regex(/(@month)(?:, | of )(@yyyy\w)/gi, "$1 $2"); //repeat after delinking

	// spaces and commas - md-md and dm-dm date ranges
	ohc_regex(/(\D\W)@Month\s@DD(&nbsp;|\s)(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?@Month\s@DD(?=\W\D)/gi, "$1@LMonth1 @Day1$2– @LMonth2 @Day2");
	ohc_regex(/(\D\W)@Month\s@DD(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?@Month\s@DD(?=\W\D)/gi, "$1@LMonth1 @Day1 – @LMonth2 @Day2");
	ohc_regex(/(\D\W)@DD\s@Month(&nbsp;|\s)(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?@DD\s@Month(?=\W\D)/gi, "$1@Day1 @LMonth1$2– @Day2 @LMonth2");
	ohc_regex(/(\D\W)@DD\s@Month(?:[-–—]|&[mn]dash;)(?:&nbsp;|\s)?@DD\s@Month(?=\W\D)/gi, "$1@Day1 @LMonth1 – @Day2 @LMonth2");

	// spaces and commas - d-dm and md-d date ranges
	ohc_regex(/(\D\W)@Month(\s|&nbsp;)@DD@th?(?:(?:\s*|&nbsp;|)[-–](?:\s*|&nbsp;|))@DD@th?(?=\W\D)/gi, "$1@LMonth1$2@Day1–@Day2");
	ohc_regex(/(\D\W)@DD@th?(?:(?:\s*|&nbsp;|)[-–](?:\s*|&nbsp;|))@DD@th?(\s|&nbsp;)@Month(?=\W\D)/gi, "$1@Day1–@Day2$2@LMonth1");

	// spaces and commas between month and year (again)
	ohc_regex(/@Month(?:,\s+|\s+of\s+)@YYYY(\w)/gi, "@LMonth @YYYY$1");
}

/** ------------------------------------------------------------------------- */
/// ISO to long format

function ohc_ISO_to_dmy_in_citations()
{
	//ISO dates within single citation
	ohc_regex(/(\|\s*(?:publication|archive|access|air|designation\d?_|)-?date\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Day @Month @YYYY");
}

function ohc_ISO_to_mdy_in_citations()
{
	//ISO dates within single citation
	ohc_regex(/(\|\s*(?:publication|archive|access|air|designation\d?_|)-?date\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi,  "$1@Month @Day, @YYYY");
}

function ohc_ISO_to_dmy_in_references()
{
	//multiple calls for multiple dates within single citation
	ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2@Day @Month @YYYY$3");
	ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD(<\/ref>)/gi, "$1$2@Day @Month @YYYY$3");
}

function ohc_ISO_to_mdy_in_references()
{
	//multiple calls for multiple dates within single citation
	ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2@Month @Day, @YYYY$3");
	ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD(<\/ref>)/gi, "$1$2@Month @Day, @YYYY$3");
}

// currently unused
function ohc_ISO_to_dmy_anywhere()
{
	//multiple calls for multiple dates within single citation
	ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Day @Month @YYYY$2');
	ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Day @Month @YYYY$2');
	ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Day @Month @YYYY$2');
}

// currently unused
function ohc_ISO_to_mdy_anywhere()
{
	//multiple calls for multiple dates within single citation
	ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Month @Day, @YYYY$2');
	ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Month @Day, @YYYY$2');
	ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Month @Day, @YYYY$2');
}

function ohc_delink_ISO_to_dmy()
{
	ohc_ISO_to_dmy_in_citations();
	ohc_ISO_to_dmy_in_references();
	regex(/([^\w\/\-%,])@YYYY-@MM-@DD(<\s?\/ref.*?>)/g, '$1@Day @Month @Year$2');
	ohc_regex(/(\|\|[ ]*)@YYYY[-–]@MM[-–]@DD([ ]*\|\|)/gi, '$1{{dts|format=dmy|@YYYY|@MM|@DD}}$2');  //dts template for sortable tables
	ohc_regex(/(\{\{dts\|format=)mdy\|/gi, '$1dmy|');  //flip dts template formats
}

function ohc_delink_ISO_to_mdy()
{
	ohc_ISO_to_mdy_in_citations();
	ohc_ISO_to_mdy_in_references();
	regex(/([^\w\/\-%,])@YYYY-@MM-@DD(<\s?\/ref.*?>)/g, '$1@Month @Day, @Year$2');
	ohc_regex(/(\|\|[ ]*)@YYYY[-–]@MM[-–]@DD([ ]*\|\|)/gi, '$1{{dts|@YYYY|@MM|@DD}}$2');  //dts template for sortable tables (mdy is default)
	ohc_regex(/(\{\{dts\|)format=(?:mdy|dmy|) ?\|/gi, '$1');  //flip dts template formats
}

function ohc_delink_year_in_X()
{
//	ohc_regex(/\{\{(?:avyear|by|baseball\syear|fy|ly|mlby|mlb\syear|scy|sdy)\|(@year)\}\}/gi, "$1"); //disabled 3/5/21 discussion at https://en.wikipedia.org/w/index.php?title=Wikipedia_talk:WikiProject_Baseball&oldid=1021203365#Links_to_baseball_year_articles_in_infobox?
//	ohc_regex(/\{\{(?:avyear|by|baseball\syear|fy|ly|mlby|mlb\syear|scy|sdy)\|@year\|(@year)\}\}/gi, "$1");
	ohc_regex(/\[\[@yyyy\sin\s[^|\]]+\|((?:(?:@day |)@month |)@yyyy)\]\]/gi, '$1');
	regex(/\[\[(?:\d{4}[-–]\d{2} in English football)\|((?:(?:@Day |)@Month |)@YYYY)\]\]/gi, '$1'); 

	regex(/\[\[\d{4} Major League Baseball season\|(\d{4})(\sseason)?\]\]/gi, '$1$2');
}


// format parameter must be 'dmy' or 'mdy'
function ohc_fix_dts_template(format)
{
	// dts - format=dmy in this case (per D12000)
	// per {{dts}} doc, remove the obsolete link=off param
	regex(/(\{\{dts[^}]*)(?:\|link=off)/gi, '$1');
	ohc_regex(/(\{\{dts\s*\|\s*@year\s*\|\s*@month\s*\|\s*@day\s*\|\s*format=)(?:dmy|mdy)(\}\})/gi, '$1'+format+'$2');
	ohc_regex(/(\{\{dts\s*\|\s*format=)(?:dmy|mdy)(\s*\|\s*@year\s*\|\s*@month\s*\|\s*@day\s*\}\})/gi, '$1'+format+'$2');
	ohc_regex(/(\{\{dts\s*\|\s*@year\s*\|\s*@month\s*\|\s*@day\s*)(\}\})/gi, '$1|format='+format+'$2');

   // stripping – {{dts}} serves no purpose inside date parameters
	ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*format=(?:dmy|mdy)\s*\|\s*([|}]*)\}\}(?=\s*[|}])/gi, "$1$2");
	ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*([|}]*)(?:\|\s*format=(?:dmy|mdy)\s*|)\}\}(?=\s*[|}])/gi, "$1$2");
	ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*format=(?:dmy|mdy)\s*\|\s*@YYYY(\s*\|\s*|-)@MM(\s*\|\s*|-)@DD\s*\}\}(?=\s*[|}])/gi, "$1@YYYY-@MM-@DD ");
	ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*@YYYY(\s*\|\s*|-)@MM(\s*\|\s*|-)@DD\s*\|\s*format=(?:dmy|mdy)\s*\}\}(?=\s*[|}])/gi, "$1@YYYY-@MM-@DD ");
}

// format parameter must be 'dmy' or 'mdy'
function ohc_fix_gr_template(format)
{
	// GR - date formatting parameter
	// per {GR} doc, insert date formatting param
	regex(/(\{\{GR\|\d\d?)(?!\|date)/gi, '$1|dateform=' + format);
}

function ohc_dates_to_dmy()
{
	regex(/\|df=[mdy]{3}(?:-all|)(?=\s*[|}])/gi, '');
	regex(/\|format=mdy/gi, '|format=dmy');
	//change start and end templates; vgrelease new v=2 or mdy is default
	regex(/(\{\{(?:start date|end date)[^|}]*\|)df=ye?s?\|([^}]*df=ye?s?)/gi, '$1$2');
	regex(/(\{\{vgrelease new[^|}]*\|)(?:v=1\||)([A-Z]{2,3}\|)/g, '$1v=2|$2');
	ohc_regex(/(\|\s*(?:begin|end|first|last)\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Day @Month @YYYY"); //spotted at [[Template:Infobox recurring event]]
 
	//change birth and death templates
	regex(/(\{\{(?:(?:Birth|Death) date(?: and age|)|launch|release|start)[^}]*\|)m(f=ye?s?)/gi, '$1d$2'); // substitute df for mf 
	regex(/(\{\{(?:(?:Birth|Death) date(?: and age|)|launch|release|start|film ?date|Wayback)[\|\d]+)(\}\})/gi, '$1|df=y$2'); //insert df parameter
	regex(/(\{\{(?:(?:Birth|Death) date(?: and age|)|launch|release|start|film ?date|Wayback)[\|\d]+\|)df=ye?s?\|([^}]*df=ye?s?)/gi, '$1$2'); //put date format parameter at the end
	regex(/(\{\{(?:start date|end date)\|)df=ye?s?\|((?:1[789]|20)\d{2}\}\})/gi, '$1$2');  //date format parameter not needed – year only

	//convert date ranges (md,d,d-dy to d,d,d-dmy; md,d,d-d to d,d,d-dm; md,d,d to d,d,dm)
	ohc_regex(/(\D\W)@Month((?:\s@day?,?){1,6}),?(\/|\s?(?:[-–]|&ndash;)\s?|(?:[ _]|&nbsp;)(?:and|&|to|or)(?:[ _]|&nbsp;)+?)@Day,?\s(?:of\s)?(@yyyy\W\D)/gi, "$1$2$3@Day @LMonth $4");
	ohc_regex(/(\D\W)@Month((?:\s@day?,?){1,6}),?(\/|\s?(?:[-–]|&ndash;)\s?|(?:[ _]|&nbsp;)(?:and|&|to|or)(?:[ _]|&nbsp;)+?)@Day(?=\W\D)/gi, "$1$2$3@Day @LMonth");

//	ohc_regex(/(\D\W)@Month((?:\s@day?,?){1,6}) @Day(?=\W\D)/gi, "$1$2 @Day @LMonth"); //disabling as unlikely and ungrammatical constructions causing false positives

	//'md, md,' to 'dm, dm,'
	ohc_regex(/(\D\W)@Month @Day, @Month @Day(?=[,\.]\W\D)/gi, "$1@Day1 @LMonth1, @Day2 @LMonth2");

	//convert simple mdy dates to dmy
	ohc_regex(/(p(?:g?\.?|age) ?\d+|p(?:p\.?|ages) ?\d+[-–]\d+), @Month((?:\s@day?,?){1,6}) @Day(?=\W\D)/gi, "$1. $2 @Day @LMonth");
	ohc_regex(/(\D\W)@Month\s@Day,?\s@Year(\s?(?:AD|BC|CE|BCE)\W\D)/gi, "$1@Day @LMonth @Year$2");
	ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Month\s@Day,?\s@YYYY(?=\W\D)/gi, "$1@Day @LMonth @Year");
	ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Month\s@Day(?=\W\D)/gi, "$1@Day @LMonth");

	//Month+day_number " 7th মার্চ" -> "7 মার্চ"
	ohc_regex(/(\D\W)@Day\s@Month\s@YYYY(?=\W\D)/gi, "$1@Day @LMonth @Year");
	ohc_regex(/(\D\W)@Day\s@Month(?=\W\D)/gi, "$1@Day @LMonth");
	ohc_regex(/(\D\W)@Month\s@Day,?\s@Year(?=\W\D)/gi, "$1@Day @LMonth @Year");

	//dates with embedded nbsp
	ohc_regex(/(\D\W)@Month([ _]|&nbsp;)(\d{1,2},(?: |&nbsp;)\d{1,2}(?:\s(?:and|&|to|or)(?:[ _]|&nbsp;))\d{1,2})(?=[^|\]\w])/gi, '$1$3$2@LMonth ');
	ohc_regex(/(\D\W)@Month([ _]|&nbsp;|{{(?:break|nbsp)}})@Day,([ _]|&nbsp;|{{(?:break|nbsp)}})@YYYY(?=[^|\]\w])/gi, '$1@Day$2@Month$3@Year');

	//remove comma
	ohc_regex(/(\D\W)@Day\s@Month,\s?@Year(?=\W\D)/gi, "$1@Day @LMonth @Year");

	//	remove "the" from "on the dd month"
	ohc_regex(/(on |by )the @Day\s@Month(?=[ ,\)\.])/gi, "$1@Day @LMonth");

	//remove space from date range conversion
	ohc_regex(/(\D ) @Day(\/|\s?(?:[-–]|&ndash;)\s?|(?:[ _]|&nbsp;)(?:and|&|to|or)(?:[ _]|&nbsp;)+?)/gi, "$1@Day$2");
}

function ohc_dates_to_mdy()
{
	//change birth and death templates – mf=y is the default; vgrelease new v=2 or mdy is default
	regex(/\|df=[mdy]{3}(?:-all|)(?=\s*[|}])/gi, '');
	regex(/\|df=y(?:es|)(?=[|}\s])/gi, '');
	regex(/(mf=y(?:es|)\|[^}]*\|)(?:mf=y(?:es|)\|)/gi, '$1');
	regex(/(\{\{vgrelease new[^|}]*\|)(?:v=2\||)([A-Z]{2,3}\|)/g, '$1$2');
	ohc_regex(/(\|\s*(?:begin|end|first|last)\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Month @Day, @YYYY");

	//convert date ranges (d,d,d-dmy to md,d,d-dy; d,d,d-dm to md,d,d-d; dm,d,d to md,d,d)
	ohc_regex(/(\D\W)@Day((?:, @day){0,5})(\/|\s?(?:[-–]|&ndash;)\s?|\s(?:and|&|to|or)\s+?)@Day\s@Month,? @YYYY(?=\W\D)/gi, "$1@LMonth @Day1$2$3@Day2, @YYYY");
	ohc_regex(/(\D\W)@Day((?:, @day){0,5})(\/|\s?(?:[-–]|&ndash;)\s?|\s(?:and|&|to|or)\s+?)@Day\s@Month(?=\W\D)/gi, "$1@LMonth @Day1$2$3@Day2");
//	ohc_regex(/(\D\W)@Day((?:, @day){0,5})\s@Month,? @YYYY(?=\W\D)/gi, "$1@LMonth @Day1$2, @YYYY"); //disabling as unlikely and ungrammatical constructions causing false positives
//	ohc_regex(/(\D\W)@Day((?:, @day){0,5})\s@Month(?=\W\D)/gi, "$1@LMonth @Day1$2"); //disabling as unlikely and ungrammatical constructions causing false positives

	//'dm, dm,' to 'md, md,'
	ohc_regex(/(\D\W)@Day @Month, @Day @Month(?=[,\.]?\W\D)/gi, "$1@LMonth1 @Day1, @LMonth2 @Day2");

	//convert simple dmy dates to mdy
	ohc_regex(/(p(?:g?\.?|age) ?\d+|p(?:p\.?|ages) ?\d+[-–]\d+), @Month((?:\s@day?,?){1,6}) @Day(?=\W\D)/gi, "$1. @LMonth $2 @Day");
	ohc_regex(/(\D\W)@Day(\s|&nbsp;)@Month,?(\s|&nbsp;)@Year(?=\W\D)/gi, "$1@LMonth$2@Day,$3@Year");
	ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Day[ ]+@Month,?\s@YYYY(?=\W\D)/gi, "$1@LMonth @Day, @Year");
	ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Day[ ]+@Month(?=\W\D)/gi, "$1@LMonth @Day");

	//Month+day_number "মার্চ 7th" -> "মার্চ 7"
	ohc_regex(/(\D\W)@Month\s@Day@th?,?\s@YYYY(?=\W\D)/gi, "$1@LMonth @Day, @YYYY");
	ohc_regex(/(\D\W)@Day@th?(\s|&nbsp;)@Month(\s|&nbsp;)@YYYY(?=\W\D)/gi, "$1@LMonth$2@Day,$3@YYYY");
	ohc_regex(/(\D\W)@Month(\s|&nbsp;)@Day(?=\W\D)/gi, "$1@LMonth$2@Day");
	ohc_regex(/(\D\W)@Day@th?(\s|&nbsp;)@Month([,\.])(?=\W\D)/gi, "$1@LMonth$2@Day$3");

	//add comma where missing
	ohc_regex(/(\D\W)@Month\s@Day,?\s@YYYY,?(?=\s\w)/gi, "$1@LMonth @Day, @YYYY,");
	//rem superfluous comma where applicable
	ohc_regex(/(\D[^\w\/])@Month\s@ZD,,(?=\W\D|\b)/gi, "$1@LMonth @Day,");
}

function ohc_fix_dmy_redundancies()
{
	//month-range redundancies (repeating month names)
	ohc_regex(/([\D]@dd)@th? @Month[ ]{1,2}((?:to|and|-|–)[ ]{1,2}@dd)@th? @Month/, "$1 $2 @LMonth", function(d1, d2) {
		if (d1.m == d2.m) return true;
		return false;
	});
}
//not currently used
function ohc_fix_mdy_redundancies()
{
	//month-range redundancies (repeating month names)
	ohc_regex(/(@Month[ ]{1,2}@dd)@th? (to|and|-|–)[ ]{1,2}@Month[ ]{1,2}@DD@th?/, "$1 $2 @LDay", function(d1, d2) {
		if (d1.m == d2.m) return true;
		return false;
	});
}

function ohc_expand_ref_dates()
{
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @YYYY(?=\s*[|}])/gi, "$1@FullMonth @YYYY");
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month @YYYY(?=\s*[|}])/gi, "$1@Day @FullMonth @YYYY");
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day, @YYYY(?=\s*[|}])/gi, "$1@FullMonth @Day, @YYYY");

	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)((?:[01-2]?\d|30|31) |)@Month @YYYY ?(?:-|–|&ndash;) ?((?:[01-3]?\d|30|31) |)@Month @YYYY(?=\s*[|}])/gi, "$1$2 @FullMonth1 @YYYY1 – $3@FullMonth2 @YYYY2");
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day(, (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month @Day, @YYYY(?=\s*[|}])/gi, "$1@FullMonth1 @Day1$2 – @FullMonth2 @Day2, @YYYY");
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Day @Month @YYYY(?=\s*[|}])/gi, "$1@Day1 @FullMonth1$2 – @Day2 @FullMonth2 @YYYY");
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month,? @YYYY(?=\s*[|}])/gi, "$1@FullMonth1$2 – @FullMonth2 @YYYY");
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)((?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month @YYYY(?=\s*[|}])/gi, "$1@$2 – @FullMonth @YYYY");

	ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))((?:[01-2]?\d|30|31) |)@Month @YYYY ?(?:-|–|&ndash;) ?((?:[01-3]?\d|30|31) |)@Month @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2@FullMonth1 @YYYY1 – $3@FullMonth2 @YYYY2");
	ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))@Month @Day(, (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month @Day, @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1@FullMonth1 @Day1$2 – @FullMonth2 @Day2, @YYYY");
	ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))@Day @Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Day @Month @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1@Day1 @FullMonth1$2 – @Day2 @FullMonth2 @YYYY");
	ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))@Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month,? @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1@FullMonth1$2 – @FullMonth2 @YYYY");
	ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))((?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2 – @FullMonth @YYYY");
}

function ohc_expand_all_dates()
{
	ohc_regex(/([^-\w/])@Month @YYYY(?=[^-\w/])/gi, '$1@FullMonth @YYYY');
	ohc_regex(/([^-\w/])@Day @Month @YYYY(?=[^-\w/])/gi, '$1@Day @FullMonth @YYYY');
	ohc_regex(/([^-\w/])@Month @Day, @YYYY(?=[^-\w/])/gi, '$1@FullMonth @Day, @YYYY');

	ohc_regex(/([^-\w/])((?:[01-2]?\d|30|31) |)@Month @YYYY ?(?:-|–|&ndash;) ?((?:[01-3]?\d|30|31) |)@Month @YYYY(?=[^-\w/])/gi, "$1$2@FullMonth1 @YYYY1 – $3@FullMonth2 @YYYY2");
	ohc_regex(/([^-\w/])@Month @Day(, (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month @Day, @YYYY(?=[^-\w/])/gi, "$1@FullMonth1 @Day1$2 – @FullMonth2 @Day2, @YYYY");
	ohc_regex(/([^-\w/])@Day @Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Day @Month @YYYY(?=[^-\w/])/gi, "$1@Day1 @FullMonth1$2 – @Day2 @FullMonth2 @YYYY");
	ohc_regex(/([^-\w/])@Month,?( (?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month,? @YYYY(?=[^-\w/])/gi, "$1@FullMonth1$2 – @FullMonth2 @YYYY");
	ohc_regex(/([^-\w/])((?:19|20)\d\d) ?(?:-|–|&ndash;) ?@Month @YYYY(?=[^-\w/])/gi, "$1$2 – @FullMonth @YYYY");

	ohc_regex(/([ ]\(|\|\s*)@Day @Month @YYYY(?=\)\W|\s*[|\n])/gi, "$1@Day @FullMonth @YYYY");
	ohc_regex(/([ ]\(|\|\s*)@Month @Day,? @YYYY(?=\)\W|\s*[|\n])/gi, "$1@FullMonth @Day, @YYYY");
	ohc_regex(/([ ]\((?:c\. |))@Month @YYYY ?(?:-|–|&nbsp;) ?@Day @Month @YYYY(?=\)\W)/gi, "$1@FullMonth1 @YYYY1 – @Day @FullMonth2 @YYYY2");
	ohc_regex(/([ ]\((?:c\. |))@Month @YYYY ?(?:-|–|&nbsp;) ?@Month @YYYY(?=\)\W)/gi, "$1@FullMonth1 @YYYY1 – @FullMonth2 @YYYY2");
	ohc_regex(/([ ]\((?:c\. |))@YYYY ?(?:-|–|&nbsp;) ?@Month @YYYY(?=\)\W)/gi, "$1@YYYY1 – @FullMonth @YYYY2");
	ohc_regex(/([ ]\((?:c\. |))@Month ?(?:-|–|&nbsp;) ?@Month @YYYY(?=\)\W)/gi, "$1@FullMonth1 – @FullMonth2 @YYYY");
	ohc_regex(/([ ]\((?:c\. |))@Month @YYYY(?=\)\W)/gi, "$1@FullMonth @YYYY");
}

function ohc_abbrev_ref_dates()
{
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month @YYYY(?=\s*[|}])/gi, "$1@Day @Mon @YYYY");
	ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))([12]?\d|30|31) (জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগষ্ট|অক্টোবর|Oct|নভেম্বর|ডিসেম্বর)(?:r?uary|ch|il|[ey]|ust|(?:t?em|o)ber)( (?:19\d|20[01])\d)(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2 $3$4");
	ohc_regex(/([ ]\()@Day @Month @YYYY([^-\w\/])/gi, "$1@Day @Mon @YYYY$2");
 
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day, @YYYY(?=\s*[|}])/gi, "$1@Mon @Day, @YYYY");
	ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))(জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগষ্ট|অক্টোবর|Oct|নভেম্বর|ডিসেম্বর)(?:r?uary|ch|il|[ey]|ust|(?:t?em|o)ber) ([12]?\d|30|31),( (?:19\d|20[01])\d)(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2 $3,$4");
	ohc_regex(/([^-\w\/])@Month @Day, @YYYY([^-\w\/])/gi, '$1@Mon @Day, @YYYY$2');
}
 
//not currently used
function ohc_abbrev_all_dates()
{
	ohc_regex(/([^-\w/])@Day @Month @YYYY(?=[^-\w/])/gi, '$1@Day @Mon @YYYY');
	ohc_regex(/([^-\w/])@Month @Day, @YYYY(?=[^-\w/])/gi, '$1@Mon @Day, @YYYY');
}

//not currently used
function ohc_dmy_publication_dates()
{
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day,? @YYYY/gi, "$1@Day @Month @YYYY"); // conversion of dates in references outside of the protection loop (eg for quotations etc.)
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:\[\[)?@YYYY(?:\]\][-–]\[\[|[-–])@MM[-–]@DD(?:\]\])?(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
	//replace ISO dates (within parentheses) only within refs
	ohc_regex(/(<ref[^>]*>[^<]+?)([ ]\()@YYYY-@MM-@DD(\))(\W[^<]*?<\/ref>)/gi, "$1$2@Day @Month @YYYY$3$4");
}

function ohc_mdy_publication_dates()
{
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month @YYYY/gi, "$1@Month @Day, @YYYY"); // conversion of dates in references outside of the protection loop (eg for quotations etc.)
	ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:\[\[)?@YYYY(?:\]\][-–]\[\[|[-–])@MM[-–]@DD(?:\]\])?(?=\s*[|}])/gi, "$1@Month @Day, @YYYY"); 
	//replace ISO dates (within parentheses) only within refs
	ohc_regex(/(<ref[^>]*>[^<]+?)([ ]\()@YYYY-@MM-@DD(\))(\W[^<]*?<\/ref>)/gi, "$1$2@Month @Day, @YYYY$3$4");
}

function ohc_Bigendian_ref_dates() {
	// Add a tag to the summary box
	regex(/(\{\{use (?:mdy|dmy) dates)(?:\|cs1-dates=\w{1,2}|)(\|[^\}\|]+\}\})/gi, '$1|cs1-dates=y$2');
}

/** ------------------------------------------------------------------------ **/
/// EDIT SUMMARIES & USE DMY TEMPLATE
// this function modified 2019-03-27 from [[Special:Permalink/846525463]]
// format parameter must be 'dmy' or 'mdy'
function ohc_use_dates_template(format) 
{
	var txt = document.editform.wpTextbox1;
	// current month-year
	var currentDate = new Date();
	var currmonth = currentDate.getMonth();
	var curryear = currentDate.getFullYear();
	var myMonths = ["জানুয়ারি", "ফেব্রুয়ারি", "মার্চ", "এপ্রিল", "মে", "জুন", "জুলাই", "আগষ্ট", "সেপ্টেম্বর", "অক্টোবর", "নভেম্বর", "ডিসেম্বর"];
	var curryyyymm = myMonths[currmonth] + ' ' + curryear;

// step 1: normalize redirect template names to canonical template names 'Use dmy dates' or 'Use mdy dates' according to 'format' argument 
// rename redirects 'dmy', 'mdy', 'usedmydates', 'usemdydates' ('usedmydates' and 'usemdydates' are not currently listed as redirects but might be encountered?)
	regex(/\{\{ *(?:use(?:dmy|mdy)dates|dmy|mdy) *([\|\}])/gi, '{{Use ' + format + ' dates$1');
// rename redirects 'usedmy', 'usemdy', 'use dmy', 'use mdy' to canonical form
	regex(/\{\{ *use *(?:dmy|mdy) *([\|\}])/gi, '{{Use ' + format + ' dates$1');
// strip leading / trailing whitespace from 'use xxx dates'
	regex(/\{\{ *use (?:dmy|mdy) dates *([\|\}])/gi, '{{Use ' + format + ' dates$1');

// step 2: look for a canonical template name (the above might not have had anthing to work on) ; if found continue, write new template else
	var rxpdd = new RegExp("{{Use " + format + " dates", "gi");	// here we search for canonical form {{use xxx dates}} that has current date
	var dflagfound = txt.value.search(rxpdd);
	if (dflagfound === -1) {
		txt.value = '{{Use ' + format + ' dates|date=' + curryyyymm + '}}\r\n' + txt.value;	// not found so insert new template at top of wikitext
		return;																	// and done
	}

// step 3: rewrite existing canonical templates; add or refresh |date= to current month year; preserve |cs1-dates= as is
	regex(/(\{\{use (?:dmy|mdy) dates)\| *date *=[^\|]*\| *cs1\-dates *= *([^\|\}]*?) *\}\}/gi, '$1|date=' + curryyyymm + '|cs1-dates=$2}}');	// with |date= followed by |cs1-dates=
	regex(/(\{\{use (?:dmy|mdy) dates)\| *cs1\-dates *= *([^\|\}]*?) *\| *date *=[^\}]*\}\}/gi, '$1|date=' + curryyyymm + '|cs1-dates=$2}}');	// with |cs1-dates= followed by |date=
	regex(/(\{\{use (?:dmy|mdy) dates)\| *date *=[^\|\}]*\}\}/gi, '$1|date=' + curryyyymm + '}}');												// with |date=
	regex(/(\{\{use (?:dmy|mdy) dates)\| *cs1\-dates *= *([^\|\}]*?) \}\}/gi, '$1|date=' + curryyyymm + '|cs1-dates=$2}}');						// with |cs1-dates
	regex(/(\{\{use (?:dmy|mdy) dates)\}\}/gi, '$1|date=' + curryyyymm + '}}');																	// no parameters so add |date=curryyyymm 
	regex(/(\{\{[\t_ ]*use[\t_ ]+(?:dmy|mdy)[\t_ ]+dates[^{}]*\}\})([\r\n\t ]*)(\{\{[\t ]*short description[^{}]*\}\})/gi, '$3$2$1');			// repositioning "short description" template at the top
}



/** ------------------------------------------------------------------------ **/
/// DATE PROTECTION

var linkmap = [];

function ohc_protect_dates()
{
	// protects dates within links, quotes, etc
	// the sensitive part is stored and replaced with a unique identifier,
	// which is later replaced with the stored part.
 
	var protect_function = function(s, begin, replace, end) {
		linkmap.push(replace);
		return begin + "⍌"+(linkmap.length-1)+"⍍" + end;
	};
//\|x=
	regex(/(<timeline>)([\s\S]*?)(<\/timeline>)/gi, protect_function);
	regex(/(<!--)([^<\{\}]*?)(-->)/gi, protect_function);
	regex(/(<math>)([\s\S]*?)(<\/math>)/gi, protect_function);
	regex(/((?:{(?:Wikimedia |)Commons ?|C ?))(Cat(?:egory|))\|[^{}*](})/gi, protect_function);
	regex(/(<ref)([^>]+)(>)/gi, protect_function);
	regex(/((?:Category|Image|File):)([^|\]]*)([|\]])/gi, protect_function);
	regex(/(\{(?:See ?also|Main))(\|[^}]*)(\})/gi, protect_function);
	regex(/(\{\{(?:double ?|external ?|wide ?)image\s?\|)([^}]+)(\})/gi, protect_function);
	regex(/(\{\{(?:harvnb|r|wikisource)\|)([^}]+)(\})/gi, protect_function);
	regex(/(\{\{(?:Canadian federal by-election))([^}]+)(\}\})/gi, protect_function);
	
	regex(/(\[(?:https?:|ftp:))([^\]]*)(\])/gi, protect_function);
	regex(/(>[ ]*(?:https?:|ftp:))([^< >\]]*)([ ]*<)/gi, protect_function);
//	regex(/(https?:|ftp:)([^\s\]]*)([\s\]])/gi, protect_function);
	regex(/(<blockquote>)([\s\S]*?)(<\/blockquote>)/gi, protect_function);
	regex(/(<noinclude>)([\s\S]*?)(<\/noinclude>)/gi, protect_function);
	regex(/(<gallery)([\s\S]*?)(<\/gallery>)/gi, protect_function);
	regex(/(<poem>)([\s\S]*?)(<\/poem>)/gi, protect_function);
	regex(/(\{[^\{]{0,6}(?:quot[^|]{1,7}\s?|sic)\|)([^}]+)(\})/gi, protect_function);
	regex(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _]name|image[ _]file|img|map\d|pic)\s*=)([^|}]*)([|}])/gi, protect_function);
	regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|(?:trans-?|)title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
	regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|(?:trans-?|)title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
	regex(/([\|\{]\s*(?:season)\s*=)(\s*\[\[[^\]]*\]\]\s*)([|}])/gi, protect_function);
	regex(/([\|\{]\s*(?:[xy])\s*=)(\s*[^\|]+\s*)(\|)/gi, protect_function);
	regex(/(\{\{navsource\|)([^}]+)(\})/gi, protect_function);
	regex(/(\{\{(?:singlechart)\|)([^}]+)(\})/gi, protect_function);
	regex(/(\{\{(?:defaultsort|graph):)([^}]+)(\})/gi, protect_function);
	regex(/(["“])([^"”\n]*)(["”])/gi, protect_function);
	regex(/(.)(\(\{\{by\|[12]\d{3}\}\}[-–]\{\{by\|)([12]\d{3}[ ]*\}\}\))/gi, protect_function);
	regex(/(.)(\(\{\{by\|[12]\d{3}\}\}(?:[-–]present|))(\))/gi, protect_function);
	regex(/(\[\[)(4AD)(\]\]|\|)/gi, protect_function);

	//retraining redirects containing a date
	regex(/(\[\[)(?:সেপ্টেম্বর 3 Society)(\]\]|\|)/gi, '$1Jiusan Society$2');
	regex(/(\[\[)(?:জুন 4th incident)(\]\]|\|)/gi, '$1Tiananmen Square protests of 1989$2');
	regex(/(\[\[)(?:5@th? অক্টোবর (?:\(Serbia\)|overthrow))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2');
	regex(/(\[\[)(?:অক্টোবর 5@th?(?: \(Serbia\)| overthrow|, 2000))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2');

	//protect alternate meanings of 'মে' and 'মার্চ' (note: not case insensitive)
//	ohc_regex(/([^\w])(@day,?\s{0,3}মে)([^\w][^\d])/g, protect_function);  //disabled 26 মে – not case senstitve: false negatives in converting dates in মে
	ohc_regex(/([^\w])(মার্চ\s@day)(\s(?:mile|kilomet|met))/g, protect_function);

	//protect all links containing a date and some text
	ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@day[^\]\|\n]+?@fullmonth[^\]\|\n]*)(\]\]|\|)/gi, protect_function);
	ohc_regex(/(\[\[)([^\]\|\n]*?@day[^\]\|\n]+?@fullmonth(?:,? @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function);
	ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@fullmonth[^\]\|\n]+?@day[^\]\|\n]*)(\|)/gi, protect_function);
	ohc_regex(/(\[\[)([^\]\|\n]*?@fullmonth[^\]\|\n]+?@day(?:, @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function);

	//protects certain dates
	regex(/(\[\[)(4AD)([\s\S])/gi, protect_function);
	regex(/([\s\S])(মার্চ (?:8|14) Alliance)([\s\S])/gi, protect_function);
	regex(/([\s\S])(23rd মার্চ 1931: Shaheed)([\s\S])/gi, protect_function);
	regex(/([\s\S])(Long মার্চ [1-7])([\s\S])/gi, protect_function);
	regex(/([\s\S])(National সেপ্টেম্বর 11 Memorial & Museum)([\s\S])/gi, protect_function);
	regex(/([\s\S])(Queen Elizabeth II সেপ্টেম্বর 11th Garden)([\s\S])/gi, protect_function);
	regex(/([\s\S])(Bombay মার্চ 12)([\s\S])/gi, protect_function);
	regex(/([\s\S])(movement 2 জুন)([\s\S])/gi, protect_function);
	regex(/([\s\S])(6th\sof অক্টোবর City)([\s\S])/gi, protect_function);
	regex(/([\s\S])(Party Workers' Liberation Front 30th of মে)([\s\S])/gi, protect_function);
	regex(/([\s\S])(4th\sof আগষ্ট regime)([\s\S])/gi, protect_function);
	regex(/([\s\S])(19th\sof এপ্রিল movement)([\s\S])/gi, protect_function);
	regex(/([\s\S])(জুন 4th (?:incident|museum))([\s\S])/gi, protect_function);
	regex(/([\s\S])(The Battle Of Marston Moor \(জুলাই 2nd,? 1644\))([\s\S])/gi, protect_function);
	regex(/([\s\S])(Night of জানুয়ারি 16th)([\s\S])/gi, protect_function);
	regex(/([\s\S])(Observance of 5th নভেম্বর Act)([\s\S])/gi, protect_function);
	regex(/(\[\[)(13 মে incident)(\|)/gi, protect_function);
	regex(/(\'\'\')(22nd\sof মে)(\'\'\')/gi, protect_function);
	regex(/(\[\[)(22nd\sof মে \(film\))([|\]\'])/gi, protect_function);
	regex(/(\[\[)(জুলাই 12, 2007, Baghdad airstrike)(\|)/gi, protect_function);
	
	regex(/(\[\[)(নভেম্বর 1828)(\]\])/gi, protect_function);
	regex(/(.)(4th\sof জুলাই)(.)/gi, protect_function);
	regex(/(\[\[)((?:2300|2000)\s?AD)(\]\])/gi, protect_function);
	regex(/(\[\[)(29 ফেব্রুয়ারি)(\]\])/gi, protect_function);
	regex(/(\[\[)(ফেব্রুয়ারি 29)(\]\])/gi, protect_function);

	// works names
//	regex(/(.)(protect string)(.)/gi, protect_function);
	regex(/(.)(11\/22\/63)(.)/gi, protect_function);
	regex(/(.)(1\.1\.1994)(.)/gi, protect_function);
	regex(/([\s\S])(2\.13\.61)([\s\S])/gi, protect_function);
//	regex(/(.)(4th of জুলাই, Asbury)(.)/gi, protect_function); //protected above globally
	regex(/(.)(26 অক্টোবর 1993)(.)/gi, protect_function);
	regex(/(\[\[|\'\')(জুন 1, 1974)(.)/gi, protect_function);
	regex(/(\[\[|\'\')(জুলাই 15, 1972)(.)/gi, protect_function);
	regex(/(\[\[|\'\')(আগষ্ট 1914)(.)/gi, protect_function);
	ohc_regex(/(\[\[|\'\')(@fullmonth @dd@th? \((?:@yyyy |)film\)(?:\|@fullmonth @dd@th?|))([\s\S])/gi, protect_function);
	ohc_regex(/(\[\[|\'\')(@dd@th? @fullmonth \((?:@yyyy |)film\)(?:\|@dd@th? @fullmonth|))([\s\S])/gi, protect_function);
//	regex(/(Les Bains Douches 18)( ডিসেম্বর 1979)(.)/gi, protect_function);
	regex(/(আগষ্ট)( 7, 4:15)(.)/gi, protect_function);
	regex(/(In Concert, Zürich, অক্টোবর)( 28, 1979)(.)/gi, protect_function);
	regex(/(CBGB OMFUG Masters: Live জুন)( 29, 2001)(.)/gi, protect_function);
	ohc_regex(/(Live at [\w ]*,? [1-3]\d)( @fullmonth)(.)/gi, protect_function);
	ohc_regex(/(Live at [\w ]*,? @fullmonth)( @dd)(.)/gi, protect_function);
	ohc_regex(/(Bootmoon Series: [\w ]*[-–] @fullmonth)( @day, @YYYY)(.)/gi, protect_function);

// expressions and grammatical strings including modal "মে"
	regex(/(\W)((?:\d{1,3}) মে)((?: have(?: \w+|)|) be)/g, protect_function);
	regex(/(\W)((?:\d{3}|3[2-9]|[4-9]\d)\/\d ডিসেম্বর(?:l\.?|))(\W)/gi, protect_function);
	regex(/(\W)((?:\d{2,3})\/\d ডিসেম্বর(?:l\.?|))( \(\d\d? overs)/gi, protect_function);
}

/** ------------------------------------------------------------------------ **/
/// DATE PROTECTION FOR ALL REF SECTION

var linkmap = [];

function ohc_protect_dates_ref() 
{
	// protects dates within links, quotes, etc
	// the sensitive part is stored and replaced with a unique identifier,
	// which is later replaced with the stored part.

	var protect_function = function (s, begin, replace, end) {
		linkmap.push(replace);
		return begin + "⍌" + (linkmap.length - 1) + "⍍" + end;
	};

	regex(/(<ref\s?(?:>|name=[^>]+))([^<]+)(<\/ref>)/gi, protect_function);
	regex(/(<timeline>)([\s\S]*?)(<\/timeline>)/gi, protect_function);
	regex(/(<math>)([\s\S]*?)(<\/math>)/gi, protect_function);
	regex(/((?:{(?:Wikimedia |)Commons ?|C ?))(Cat(?:egory|))\|[^{}*](})/gi, protect_function);
	regex(/((?:Category|Image|File):)([^|\]]*)([|\]])/gi, protect_function);
	regex(/(\{(?:See ?also|Main))(\|[^}]*)(\})/gi, protect_function);
	regex(/(\{\{(?:double ?|external ?|wide ?)image\s?\|)([^}]+)(\})/gi, protect_function);
	regex(/(\{\{(?:harvnb|wikisource)\|)([^}]+)(\})/gi, protect_function);
	regex(/(\[(?:https?:|ftp:))([^\]]*)(\])/gi, protect_function);
	regex(/(>[ ]*(?:https?:|ftp:))([^< >\]]*)([ ]*<)/gi, protect_function);
	//regex(/(https?:|ftp:)([^\s\]]*)([\s\]])/gi, protect_function);
	regex(/(<blockquote>)([\s\S]*?)(<\/blockquote>)/gi, protect_function);
	regex(/(\{[^\{]{0,6}(?:quot[^|]{1,7}\s?|sic)\|)([^}]+)(\})/gi, protect_function);
	regex(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _]name|image[ _]file|img|pic)\s*=)([^|}]*)([|}])/gi, protect_function);
	regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
	regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
	regex(/([\|\{]\s*(?:season)\s*=)(\s*\[\[[^\]]*\]\]\s*)([|}])/gi, protect_function);
	regex(/(\{\{navsource\|)([^}]+)(\})/gi, protect_function);
	regex(/(\{\{singlechart\|)([^}]+)(\})/gi, protect_function);
	regex(/(\{\{defaultsort:)([^}]+)(\})/gi, protect_function);
	regex(/([\s\(>]")([^"\n]*)(")/gi, protect_function);
	regex(/([\s\(>]“)([^”\n]*)(”)/gi, protect_function);
	regex(/(.)(\(\{\{by\|[12]\d{3}\}\}[-–]\{\{by\|)([12]\d{3}[ ]*\}\}\))/gi, protect_function);
	regex(/(.)(\(\{\{by\|[12]\d{3}\}\}(?:[-–]present|))(\))/gi, protect_function);

	//retraining redirects containing a date
	regex(/(\[\[)(?:সেপ্টেম্বর 3 Society)(\]\]|\|)/gi, '$1Jiusan Society$2');
	regex(/(\[\[)(?:জুন 4th incident)(\]\]|\|)/gi, '$1Tiananmen Square protests of 1989$2');
	ohc_regex(/(\[\[)(?:5@th? অক্টোবর (?:\(Serbia\)|overthrow))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2');
	ohc_regex(/(\[\[)(?:অক্টোবর 5@th?(?: \(Serbia\)| overthrow|, 2000))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2');

	//protect alternate meanings of 'মে' and 'মার্চ' (note: not case insensitive)
	ohc_regex(/([^\w])(@day,?\s{0,3}মে)([^\w][^\d])/g, protect_function);
	ohc_regex(/([^\w])(মার্চ\s@day)(\s(?:mile|kilomet|met))/g, protect_function);

	//protect all links containing a date and some text
	ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@day[^\]\|\n]+?@fullmonth[^\]\|\n]*)(\]\]|\|)/gi, protect_function);
	ohc_regex(/(\[\[)([^\]\|\n]*?@day[^\]\|\n]+?@fullmonth(?:,? @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function);
	ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@fullmonth[^\]\|\n]+?@day[^\]\|\n]*)(\|)/gi, protect_function);
	ohc_regex(/(\[\[)([^\]\|\n]*?@fullmonth[^\]\|\n]+?@day(?:, @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function);

	//protects certain dates
	regex(/(\[\[)(4AD)([\s\S])/gi, protect_function);
	regex(/([\s\S])(মার্চ (?:8|14) Alliance)([\s\S])/gi, protect_function);
	regex(/([\s\S])(23rd মার্চ 1931: Shaheed)([\s\S])/gi, protect_function);
	regex(/([\s\S])(Long মার্চ [1-7])([\s\S])/gi, protect_function);
	regex(/([\s\S])(Bombay মার্চ 12)([\s\S])/gi, protect_function);
	regex(/([\s\S])(movement 2 জুন)([\s\S])/gi, protect_function);
	regex(/([\s\S])(6th\sof অক্টোবর City)([\s\S])/gi, protect_function);
	regex(/([\s\S])(Party Workers' Liberation Front 30th of মে)([\s\S])/gi, protect_function);
	regex(/([\s\S])(4th\sof আগষ্ট regime)([\s\S])/gi, protect_function);
	regex(/([\s\S])(19th\sof এপ্রিল movement)([\s\S])/gi, protect_function);
	regex(/([\s\S])(জুন 4th incident)([\s\S])/gi, protect_function);
	regex(/([\s\S])(The Battle Of Marston Moor \(জুলাই 2nd,? 1644\))([\s\S])/gi, protect_function);
	regex(/([\s\S])(Night of জানুয়ারি 16th)([\s\S])/gi, protect_function);
	regex(/([\s\S])(Observance of 5th নভেম্বর Act)([\s\S])/gi, protect_function);
	regex(/(\[\[)(13 মে incident)(\|)/gi, protect_function);
	regex(/(\'\'\')(22nd\sof মে)(\'\'\')/gi, protect_function);
	regex(/(\[\[)(22nd\sof মে \(film\))([|\]\'])/gi, protect_function);
	regex(/(\[\[)(জুলাই 12, 2007, Baghdad airstrike)(\|)/gi, protect_function);
	
	regex(/(\[\[)(নভেম্বর 1828)(\]\])/gi, protect_function);
	regex(/(.)(4th\sof জুলাই)(.)/gi, protect_function);
	regex(/(\[\[)((?:2300|2000)\s?AD)(\]\])/gi, protect_function);
	regex(/(\[\[)(29 ফেব্রুয়ারি)(\]\])/gi, protect_function);
	regex(/(\[\[)(ফেব্রুয়ারি 29)(\]\])/gi, protect_function);

	// works names
	//regex(/(.)(protect string)(.)/gi, protect_function);
	regex(/(.)(11\/22\/63)(.)/gi, protect_function);
	regex(/(.)(1\.1\.1994)(.)/gi, protect_function);
	regex(/([\s\S])(2\.13\.61)([\s\S])/gi, protect_function);
	//regex(/(.)(4th of জুলাই, Asbury)(.)/gi, protect_function); //protected above globally
	regex(/(.)(26 অক্টোবর 1993)(.)/gi, protect_function);
	regex(/(\[\[|\'\')(জুন 1, 1974)(.)/gi, protect_function);
	regex(/(\[\[|\'\')(জুলাই 15, 1972)(.)/gi, protect_function);
	regex(/(\[\[|\'\')(আগষ্ট 1914)(.)/gi, protect_function);
	ohc_regex(/(\[\[|\'\')(@fullmonth @dd@th? \((?:@yyyy |)film\)(?:\|@fullmonth @dd@th?|))([\s\S])/gi, protect_function);
	ohc_regex(/(\[\[|\'\')(@dd@th? @fullmonth \((?:@yyyy |)film\)(?:\|@dd@th? @fullmonth|))([\s\S])/gi, protect_function);
	//regex(/(Les Bains Douches 18)( ডিসেম্বর 1979)(.)/gi, protect_function);
	regex(/(আগষ্ট)( 7, 4:15)(.)/gi, protect_function);
	regex(/(In Concert, Zürich, অক্টোবর)( 28, 1979)(.)/gi, protect_function);
	regex(/(CBGB OMFUG Masters: Live জুন)( 29, 2001)(.)/gi, protect_function);
	ohc_regex(/(Live at [\w ]*,? [1-3]\d)( @fullmonth)(.)/gi, protect_function);
	ohc_regex(/(Live at [\w ]*,? @fullmonth)( @dd)(.)/gi, protect_function);
	ohc_regex(/(Bootmoon Series: [\w ]*[-–] @fullmonth)( @day, @YYYY)(.)/gi, protect_function);

	regex(/(\W)((?:\d{3}|3[2-9]|[4-9]\d)\/\d ডিসেম্বর(?:l\.?|))(\W)/gi, protect_function);
	regex(/(\W)((?:\d{2,3})\/\d ডিসেম্বর(?:l\.?|))( \(\d\d? overs)/gi, protect_function);
}


/** ------------------------------------------------------------------------ **/
/// DATE PROTECTION FOR SLASH modules

var linkmap = [];

function ohc_protect_dates_slash() 
{
	// protects dates within links, quotes, etc
	// the sensitive part is stored and replaced with a unique identifier,
	// which is later replaced with the stored part.

	var protect_function = function (s, begin, replace, end) {
		linkmap.push(replace);
		return begin + "⍌" + (linkmap.length - 1) + "⍍" + end;
	};

	regex(/(<ref\s?(?:>|name=[^>]+))([^<]+)(<\/ref>)/gi, protect_function);
	regex(/(<timeline>)([\s\S]*?)(<\/timeline>)/gi, protect_function);
	regex(/(<math>)([\s\S]*?)(<\/math>)/gi, protect_function);
	regex(/((?:{(?:Wikimedia |)Commons ?|C ?))(Cat(?:egory|))\|[^{}*](})/gi, protect_function);
	regex(/((?:Category|Image|File):)([^|\]]*)([|\]])/gi, protect_function);
	regex(/(\{(?:See ?also|Main))(\|[^}]*)(\})/gi, protect_function);
	regex(/(\{\{(?:double ?|external ?|wide ?)image\s?\|)([^}]+)(\})/gi, protect_function);
	regex(/(\{\{(?:harvnb|wikisource)\|)([^}]+)(\})/gi, protect_function);
	regex(/(\[(?:https?:|ftp:))([^\]]*)(\])/gi, protect_function);
	regex(/(>[ ]*(?:https?:|ftp:))([^< >\]]*)([ ]*<)/gi, protect_function);
	//regex(/(https?:|ftp:)([^\s\]]*)([\s\]])/gi, protect_function);
	regex(/(<blockquote>)([\s\S]*?)(<\/blockquote>)/gi, protect_function);
	regex(/(\{[^\{]{0,6}(?:quot[^|]{1,7}\s?|sic)\|)([^}]+)(\})/gi, protect_function);
	regex(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _]name|image[ _]file|img|pic)\s*=)([^|}]*)([|}])/gi, protect_function);
	regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
	regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function);
	regex(/([\|\{]\s*(?:season)\s*=)(\s*\[\[[^\]]*\]\]\s*)([|}])/gi, protect_function);
	regex(/(\{\{navsource\|)([^}]+)(\})/gi, protect_function);
	regex(/(\{\{singlechart\|)([^}]+)(\})/gi, protect_function);
	regex(/(\{\{defaultsort:)([^}]+)(\})/gi, protect_function);
	regex(/([\s\(>]")([^"\n]*)(")/gi, protect_function);
	regex(/([\s\(>]“)([^”\n]*)(”)/gi, protect_function);
	regex(/(.)(\(\{\{by\|[12]\d{3}\}\}[-–]\{\{by\|)([12]\d{3}[ ]*\}\}\))/gi, protect_function);
	regex(/(.)(\(\{\{by\|[12]\d{3}\}\}(?:[-–]present|))(\))/gi, protect_function);

}

function ohc_unprotect_dates() 
{
	//unprotect all dates
	regex(/[♫]/g, '');
	regex(/⍌([0-9]+)⍍/g, function (x, n) {
		var res = linkmap[n];
		res = res.replace(/⍌([0-9]+)⍍/g, function (x, n) {
			var res = linkmap[n];
			res = res.replace(/⍌([0-9]+)⍍/g, function (x, n) {
				var res = linkmap[n];
				res = res.replace(/⍌([0-9]+)⍍/g, function (x, n) {
					return linkmap[n];
				});
				return res;
			});
			return res;
		});
		return res;
	});
}

function ohc_MOSNUM_edit_summary() 
{
	//Add a tag to the summary box
	setoptions(minor = 'true');
	setreason('date formats per [[MOS:DATEFORMAT]] by [[WP:MOSNUMscript|script]]', 'append');
	doaction('diff');
}

function ohc_bigendien_edit_summary() 
{
	//Add a tag to the summary box
	setoptions(minor = 'true');
	setreason('ymd ref dates', 'append');
	doaction('diff');
}

function ohc_expand_edit_summary() 
{
	//Add a tag to the summary box
	setoptions(minor = 'true');
	setreason('expand month names', 'append');
	doaction('diff');
}

function ohc_slash_edit_summary() 
{
	//Add a tag to the summary box
	setoptions(minor = 'true');
	setreason('resolved slash dates', 'append');
	doaction('diff');
}

function ohc_abbrev_edit_summary() 
{
	//Add a tag to the summary box
	setoptions(minor = 'true');
	setreason('abbrev month names', 'append');
	doaction('diff');
}

/** ------------------------------------------------------------------------ **/
/// CUSTOMIZATION POINTS
function ohc_customize_all_to_dmy() {
}

function ohc_customize_all_to_mdy() {
}

function ohc_customize_body_to_dmy() {
}

function ohc_customize_body_to_mdy() {
}

function ohc_customize_ISO_to_dmy() {
}

function ohc_customize_ISO_to_mdy() {
}

/** ------------------------------------------------------------------------ **/
function ohc_body_dates_to_dmy() 
{
	ohc_use_dates_template('dmy');

	ohc_fix_common_errors();
	ohc_fix_dts_template('dmy');
	ohc_fix_gr_template('dmy');
	ohc_dates_to_dmy();
	ohc_remove_leading_zeroes();
	ohc_fix_dmy_redundancies();
}

function ohc_body_dates_to_mdy() 
{
	ohc_use_dates_template('mdy');
	ohc_fix_common_errors();
	ohc_fix_dts_template('mdy');
	ohc_fix_gr_template('mdy');
	ohc_dates_to_mdy();
	ohc_remove_leading_zeroes();
	ohc_fix_mdy_redundancies();
}

/** ------------------------------------------------------------------------ **/
function ohc_all_to_dmy_driver(e) 
{
	e.preventDefault();
	ohc_delink_dates();
	ohc_protect_dates();
	ohc_fix_unambiguous_dates();
	ohc_body_dates_to_dmy();
	ohc_delink_ISO_to_dmy();
	ohc_delink_year_in_X();
	ohc_customize_all_to_dmy();
	ohc_ISO_to_dmy_in_citations();
	ohc_unprotect_dates();

	ohc_MOSNUM_edit_summary();
}

function ohc_all_to_mdy_driver(e) 
{
	e.preventDefault();
	ohc_delink_dates();
	ohc_protect_dates();
	ohc_fix_unambiguous_dates();
	ohc_body_dates_to_mdy();
	ohc_delink_ISO_to_mdy();
	ohc_delink_year_in_X();
	ohc_customize_all_to_mdy();
	ohc_ISO_to_mdy_in_citations();
	ohc_unprotect_dates();

	ohc_MOSNUM_edit_summary();
}

function ohc_dmy_publication_dates_driver(e) 
{
	e.preventDefault();
//	ohc_delink_dates();
	ohc_protect_dates();
	ohc_body_dates_to_dmy();
	ohc_customize_body_to_dmy();
	ohc_dmy_publication_dates();
	ohc_unprotect_dates();

	ohc_MOSNUM_edit_summary();
}

function ohc_mdy_publication_dates_driver(e) 
{
	e.preventDefault();
//	ohc_delink_dates();
	ohc_protect_dates();
	ohc_body_dates_to_mdy();
	ohc_customize_body_to_mdy();
	ohc_mdy_publication_dates();
	ohc_unprotect_dates();

	ohc_MOSNUM_edit_summary();

}

function ohc_body_to_dmy_driver(e) 
{
	e.preventDefault();
//	ohc_delink_dates();
	ohc_protect_dates_ref();
	ohc_body_dates_to_dmy();
	ohc_customize_body_to_dmy();
	ohc_unprotect_dates();

	ohc_MOSNUM_edit_summary();
}

function ohc_body_to_mdy_driver(e) 
{
	e.preventDefault();
//	ohc_delink_dates();
	ohc_protect_dates_ref();
	ohc_body_dates_to_mdy();
	ohc_customize_body_to_mdy();
	ohc_unprotect_dates();

	ohc_MOSNUM_edit_summary();
}

function ohc_ISO_to_dmy_driver(e) 
{
	e.preventDefault();
	ohc_protect_dates();
	ohc_delink_ISO_to_dmy();
	ohc_customize_ISO_to_dmy();
	ohc_unprotect_dates();

//	ohc_MOSNUM_edit_summary();
}

function ohc_ISO_to_mdy_driver(e) {
	e.preventDefault();
	ohc_protect_dates();
	ohc_delink_ISO_to_mdy();
	ohc_customize_ISO_to_mdy();
	ohc_unprotect_dates();

//	ohc_MOSNUM_edit_summary();
}

function ohc_delink_year_in_X_driver(e) 
{
	e.preventDefault();
	ohc_delink_year_in_X();
}

function ohc_expand_ref_dates_driver(e) {
	e.preventDefault();
	ohc_expand_ref_dates();
	ohc_protect_dates();
	ohc_unprotect_dates();
	ohc_expand_edit_summary();
}

function ohc_expand_all_dates_driver(e) 
{
	e.preventDefault();
	ohc_expand_ref_dates();
	ohc_protect_dates();
	ohc_expand_all_dates();
	ohc_unprotect_dates();
	ohc_expand_edit_summary();
}

function ohc_abbrev_ref_dates_driver(e) 
{
	e.preventDefault();
	ohc_protect_dates();
	ohc_abbrev_ref_dates();
	ohc_unprotect_dates();
	ohc_slash_edit_summary();
}

function ohc_UK_slash_dates_driver(e) 
{
	e.preventDefault();
	ohc_expand_ref_dates();
	ohc_protect_dates_slash();
		ohc_UK_slash_dates_to_dmy();
	ohc_unprotect_dates();
	ohc_slash_edit_summary();
}

function ohc_US_slash_dates_driver(e) 
{
	e.preventDefault();
	ohc_expand_ref_dates();
	ohc_protect_dates_slash();
		ohc_US_slash_dates_to_mdy();
	ohc_unprotect_dates();
	ohc_expand_edit_summary();
}

// </pre>

//সংশ্লিষ্ট পাতা ত্যাগ না করেই অন্য পাতা থেকে পুনর্নির্দেশ করা যাবে।
//<nowiki>
( function () {
	var redir = $(mw.util.addPortletLink('p-tb','#','পুনর্নির্দেশক','পুনর্নির্দেশ তৈরিকারী','পুনর্নির্দেশ তৈরিকারী','','#pt-mytalk'));
	$( redir ).click( function() {
			var redirec = prompt("যে পাতা থেকে এই পাতায় পুনর্নির্দেশ করতে চান তার নাম লিখুন:", "");
		  if (redirec === null || redirec === "") {
				alert( 'আপনি কোনও নাম প্রবেশ করান নি। দয়া করে আবার চেষ্টা করুন।' );	  
		  } else  {
			   var params = {
					action: 'edit',
					title: redirec ,
					createonly: 1,
					prependtext: '#পুনর্নির্দেশ [[' + mw.config.get("wgPageName") + ']]',
					appendtext: " \n" + '{{একটি পুনর্নির্দেশ}}',
					summary: '[[' + mw.config.get("wgPageName") + ']] পাতায় পুনর্নির্দেশ করা হল' ,
					format: 'json'
				};
				api = new mw.Api();
			api.postWithToken( 'csrf', params ).done( function ( data ) {
				alert( 'সফলভাবে ' + redirec + ' পাতা থেকে একটি পুনর্নির্দেশ তৈরি করা হয়েছে!' );
			});
		  }
			}
	);
}() );
//</nowiki>

//<nowiki>
( function () {
	var talkp = $(mw.util.addPortletLink('p-tb','#','স্বাগত জানান','স্বাগত জানান','স্বাগত জানান','','#pt-mytalk'));
	$( talkp ).click( function() {
			var talk = prompt("কোন ধরনের স্বাগত বার্তা যুক্ত করতে চান এমন টেমপ্লেটটি লিখুন {{Subst:}} সাথে, অন্যথায় পূর্বনির্ধারিত {{Subst:স্বাগতম}} যুক্ত হবে:", "");
		  if (talk === null || talk === "") {
		    var params1 = {
					action: 'edit',
					title: 'User talk:' + mw.config.get("wgRelevantUserName"),
					prependtext: '{{Subst:স্বাগতম}}'
					,
					summary: 'ভারতপিডিয়ায় স্বাগতম!',
					format: 'json'
				};
				api = new mw.Api();
			
			api.postWithToken( 'csrf', params1 ).done( function ( data ) {
				alert( 'সফলভাবে স্বাগত জানানো হয়েছে!' );
			} );
		  
		  } else {
			   var params = {
					action: 'edit',
					title: 'User talk:' + mw.config.get("wgRelevantUserName"),
					prependtext: talk
					,
					summary: 'ভারতপিডিয়ায় স্বাগত!',
					format: 'json'
				};
				api = new mw.Api();
			
			api.postWithToken( 'csrf', params ).done( function ( data ) {
				alert( 'সফলভাবে স্বাগত জানানো হয়েছে!' );
			} );
		  }
			}
	);
}() );
//</nowiki>
//<nowiki>
console.time('mobileUndo');
$.when(mw.loader.using(['mediawiki.util', 'mediawiki.api', 'oojs-ui-windows', 'oojs-ui-core', 'oojs-ui.styles.icons-editing-core'])).then(function() {
    return new mw.Api().getMessages(['editundo', 'Undo-nochange']);
}).then(function(globalmessages) {
    var mobileUndo, i18n_lang = mw.config.get('wgUserLanguage');
    var i18n = {
        "en": {
            "mu-success": "Successful",
            "mu-fail": "Failed",
            "mu-loading": "Loading...",
            "editsummary-ad": "",
            "mu-undo-successful": "Revert successful.... Reloading in a sec",
            "mu-empty-reponse-from-server": "An empty response was received from the server",
            "mu-edit-summary-prompt": "Add a reason to your edit summary !",
            "mu-edit-summary-prompt-placeholder": "Reason...",
            "mu-thank-success": "Thanked",
            "mu-thank-confirm": "Send public thanks ?",
            "mu-thank-loading": "Thanking...",
            "mu-thank-successful": "You thanked $1.",
            "mu-thank-failed": "Failed to thank $1.",
            "mu-http-error":"HTTP error: "
        },
        "bn": {
            "mu-success": "সফল",
            "mu-fail": "ব্যর্থ হয়েছে",
            "mu-loading": "লোড করা হচ্ছে...",
            "editsummary-ad": "",
            "mu-undo-successful": "পূর্বাবস্থায় ফেরত যাওয়া সফল হয়েছে.... পুনঃলোড করা হচ্ছে",
            "mu-empty-reponse-from-server": "সার্ভার থেকে একটি খালি প্রতিক্রিয়া পাওয়া গেছে।",
            "mu-edit-summary-prompt": "সম্পাদনা সারাংশে কারণ উল্লেখ করুন!",
            "mu-edit-summary-prompt-placeholder": "কারণ...",
            "mu-thank-success": "ধন্যবাদ দিয়েছেন",
            "mu-thank-confirm": "প্রকাশ্য ধন্যবাদ জানাবেন?",
            "mu-thank-loading": "ধন্যবাদ জানানো হচ্ছে...",
            "mu-thank-successful": "আপনি $1 কে ধন্যবাদ জানিয়েছেন।",
            "mu-thank-failed": "$1 কে ধন্যবাদ জানানো ব্যর্থ হয়েছে।",
            "mu-http-error":"HTTP ত্রুটি: "
        }
    };
	if(undefined === i18n[i18n_lang]){
		i18n_lang = 'en';
	}
    if (mw.config.get('wgCanonicalSpecialPageName') === 'MobileDiff') {
        mw.util.addCSS('#mw-mf-userinfo .mobileUndo-ui .mw-ui-icon.mw-ui-icon-before:before{display:none;}\n#mobileUndo > a > span.oo-ui-iconElement-icon.oo-ui-icon-editUndo.oo-ui-image-invert{display:inline-block; position:initial;}\n#mobileUndo > a{padding:0.57142857em 0.9375em;}'+
        '#mw-mf-userinfo > div > div.mobileUndo-ui > a > div{line-height:normal;}');
        if (mw.config.get('wgVisualEditor').pageLanguageDir === 'ltr') {
            $('#mw-mf-userinfo .post-content').append($('<div>').attr('class', 'mobileUndo-ui').css({
                'display': 'inline-block',
                'float': 'right'
            }));
        } else {
            $('#mw-mf-userinfo .post-content').append($('<div>').attr('class', 'mobileUndo-ui').css({
                'display': 'inline-block',
                'float': 'left'
            }));
        }
        $('.mobileUndo-ui').append($('.mw-mf-action-button').remove().css({
            'clear': 'none'
        }));
        if (!$('.warningbox').length && mw.config.get('wgRelevantPageIsProbablyEditable')) {
            mobileUndo = new OO.ui.ButtonWidget({
                label: (globalmessages.editundo).charAt(0).toUpperCase() + (globalmessages.editundo).slice(1),
                icon: 'editUndo',
                title: 'mobileUndo',
                flags: ['destructive', 'primary'],
                id: 'mobileUndo'
            });
            $('.mobileUndo-ui').append(mobileUndo.$element);
            if (mw.config.get('wgVisualEditor').pageLanguageDir === 'ltr') {
                $('#mobileUndo').css('margin-right', '0.3em');
            } else {
                $('#mobileUndo').css('margin-left', '0.3em');
            }
        }
        window.wgRelevantUser = function() {
            var user;
            if ($('.mw-mf-user-link').text() !== '') {
                user = $('.mw-mf-user-link').text();
            } else {
                user = $('#mw-mf-userinfo .post-content div:nth-child(2)').text();
            }
            return user;
        };
        window.wgRevId = ($('#mw-mf-diffarea > div.mw-mf-diff-info > h3 > a').attr('href')).split('&oldid=')[1];
        var revId = wgRevId;
        console.log(revId);
        var username = wgRelevantUser();
        $('#mw-mf-userinfo .post-content .mobileUndo-ui .mw-mf-action-button').click(function(e) {
            e.preventDefault();
            OO.ui.confirm(i18n[i18n_lang]['mu-thank-confirm']).done(function(confirmed) {
                if (confirmed) {
                    $('.mw-mf-action-button').css('pointer-events', 'none').text(i18n[i18n_lang]['mu-thank-loading']);
                    var api = new mw.Api();
                    api.postWithToken('csrf', {
                        action: "thank",
                        rev: revId,
                    }).done(function(result) {
                        mw.notify((i18n[i18n_lang]['mu-thank-successful']).replace(/\$1/g, username));
                        $('.mw-mf-action-button').text(i18n[i18n_lang]['mu-thank-success']);
                    }).fail(function() {
                        mw.notify((i18n[i18n_lang]['mu-thank-failed']).replace(/\$1/g, username));
                        $('.mw-mf-action-button').text(i18n[i18n_lang]['mu-failed']);
                    });
                }
            });
        });
        console.timeEnd('mobileUndo');
        mobileUndo.on('click', function() {
            OO.ui.prompt(i18n[i18n_lang]['mu-edit-summary-prompt'], {
                textInput: {
                    placeholder: i18n[i18n_lang]['mu-edit-summary-prompt-placeholder'] 
                }
            }).done(function(customEditSummary) {
                $.when(mw.loader.using('mediawiki.api')).then(function() {
                    return new mw.Api().getMessages(['undo-summary'], {
                        amlang: mw.config.get('wgServerName').split('.wik')[0]
                    });
                }).then(function(message) {
                    var editSummaryMessage = message['undo-summary'];
                    var editSummary = editSummaryMessage.replace(/\$1/g, revId);
                    editSummary = editSummary.replace(/\$2/g, username);
                    if (customEditSummary !== null) {
                        mobileUndo.setDisabled(true);
                        editSummary = editSummary + ' ' + customEditSummary + (i18n[i18n_lang]['editsummary-ad']);
                        //call the API
                        var api = new mw.Api({
                            ajax: {
                                headers: {
                                    'Api-User-Agent': 'mobileUndo/2.0.2(https://en.wikipedia.org/wiki/User:FR30799386/undo.js)'
                                }
                            }
                        });
                        //Feedback UI
                        mobileUndo.setLabel(i18n[i18n_lang]['mu-loading']);
                        api.postWithToken('csrf', {
                            action: "edit",
                            title: mw.config.get('wgRelevantPageName'),
                            summary: editSummary,
                            undo: revId,
                        }).done(function(result) {
                            if (result.edit.code === 'abusefilter-warning' || result.edit.code === 'abusefilter-disallowed') {
                                mobileUndo.setLabel(i18n[i18n_lang]['mu-fail']);
                                OO.ui.alert($('<p>').html(result.edit.warning), {
                                    title: result.edit.info
                                }).done(function() {});
                                return;
                            } else if (typeof result.edit.nochange !== 'undefined') {
                                mobileUndo.setLabel(i18n[i18n_lang]['mu-fail']);
                                OO.ui.alert($('<p>').html(globalmessages['Undo-nochange'])).done(function() {});
                                return;
                            }
                            console.log(result);
                            mobileUndo.setLabel(i18n[i18n_lang]['mu-success']);
                            mw.notify(i18n[i18n_lang]['mu-undo-successful']);
                            setTimeout(function() {
                                location.href = mw.util.getUrl('Special:MobileDiff/' + result.edit.newrevid);
                            }, 1500);
                        }).fail(function(code, jqxhr) {
                            mobileUndo.setLabel(i18n[i18n_lang]['mu-fail']);
                            var details;
                            if (code === 'http' && jqxhr.textStatus === 'error') {
                                details = i18n[i18n_lang]['mu-http-error'] + jqxhr.xhr.status;
                            } else if (code === 'http') {
                                details = i18n[i18n_lang]['mu-http-error'] + jqxhr.textStatus;
                            } else if (code === 'ok-but-empty') {
                                details = i18n[i18n_lang]['mu-empty response-from-server'];
                            } else {
                                details = jqxhr.error.info;
                            }
                            OO.ui.alert($('<p>').html(details)).done(function() {});
                        });
                    }
                });
            });
        });
    }
});
//End of code
//</nowiki>
window.wgRelevantUser = function() {
    var user;
    	if ($('.mw-mf-user-link').text() !== '') {
        	user = $('.mw-mf-user-link').text();
    	} else {
        	user = $('#mw-mf-userinfo .post-content div:nth-child(2)').text();
    	}
    return user;
    };
var href = ($('#mw-mf-diffarea > div.mw-mf-diff-info > h3 > a').attr('href')) || '';
window.wgRevId = href.split('&oldid=')[1];
if( $('#mw-mf-diffarea > ul > li.revision-history-next').length ) {
	$('#mw-mf-diffarea > div.mw-mf-diff-info > h3').append(
		$('<a>').attr('id','mobileRestore').attr('href','javascript:void(0)').append(
			$('<b>').text('(পুনরুদ্ধার)')
		)
	);
}
$('#mobileRestore').click(function(e){
	e.preventDefault();
	$('#mobileRestore b').text('(লোড হচ্ছে....)');
	$('#mobileRestore').css('pointer-events','none');
	var customEditSummary = prompt('পুনরুদ্ধারের কারণ (ঐচ্ছিক)');
	if(customEditSummary === null) {
		$('#mobileRestore b').text('(পুনরুদ্ধার)');
		$('#mobileRestore').css('pointer-events','auto');
		return;
	}
	var username =wgRelevantUser();
	var editSummary = '[[Special:Contributions/'+username+'|'+username+']] ([[User talk:'+username+'|আলাপ]])-এর করা ' +wgRevId+ 'নং সংস্করণ পুনরুদ্ধার করা হয়েছে';
	editSummary = editSummary + customEditSummary + ' (পুনরুদ্ধারায়ন)';
	$.when(mw.loader.load('mediawiki.api')).then(function(){
		var api = new mw.Api();
		api.get({
			'action':'query',
			'prop':'revisions',
			'titles':mw.config.get('wgRelevantPageName'),
			'rvprop':'ids'
		}).done(function(result){
			if(result.query.pages) {
				var StartRevId = result.query.pages[mw.config.get('wgRelevantArticleId')].revisions[0].revid;
				console.log(StartRevId);
				api.postWithToken('csrf', {
                    action: "edit",
                    title: mw.config.get('wgRelevantPageName'),
                    summary: editSummary,
                    undo:StartRevId,
					undoafter:wgRevId,
                }).done(function(result) {
                    if (typeof result.edit.nochange !== 'undefined') {
                    	$('#mobileRestore b').text('(Failed)');
						alert( 'No change occured');
                        return;
                    }
					console.log(result);
					$('#mobileRestore b').text('(সফলভাবে হয়েছে)')
                    mw.notify('সংস্করণ পুনরুদ্ধার সফল হয়েছে.... পুনঃলোড করা হচ্ছে');
					setTimeout(function() {
                      location.href = mw.util.getUrl('Special:MobileDiff/' + result.edit.newrevid);
                    }, 1500);
                }).fail(function(code, jqxhr) {
                	$('#mobileRestore b').text('(পুনরুদ্ধার কার্য বাতিল করা হয়েছে)');
                    var details;
                    if (code === 'http' && jqxhr.textStatus === 'error') {
                        details = 'HTTP error: ' + jqxhr.xhr.status;
                    } else if (code === 'http') {
                        details = 'HTTP error: ' + jqxhr.textStatus;
                    } else if (code === 'ok-but-empty') {
                        details = 'An empty response was given the server';
                    } else {
                        details = jqxhr.error.info;
                    }
                    alert( details );
                });
			} else {
				alert('Failed to retrieve page details');
			}
		});
	});
});

//history
mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/মোবাইল পার্থক্য ইতিহাস.js&action=raw&ctype=text/javascript');

//my common.js
$.when(mw.loader.using(['mediawiki.util'], $.ready)).done( function() {
	mw.util.addPortletLink("p-tb", mw.config.get('wgArticlePath').replace('$1', "ব্যবহারকারী:রবি/common.js"), "common.js", "tb-awbscript", "Personal common.js");
});

if (mw.config.get('wgCanonicalNamespace')+':'+mw.config.get('wgTitle') === 'ব্যবহারকারী:রবি/common.js' && mw.config.get('wgAction') == 'view');

//শীর্ষক
mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/উপর নীচ.js&action=raw&ctype=text/javascript');

//Purge
mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/পুনঃসতেজ.js&action=raw&ctype=text/javascript');

/** Quick Edit **/
mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/দ্রুত সম্পাদনা.js&action=raw&ctype=text/javascript');

//page creation
mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/পাতা সৃষ্টিকারক.js&action=raw&ctype=text/javascript');

//redirect fix
$(function() { 	$('#mw-content-text .mw-redirect').after(function() { 		return this.href.indexOf('action=edit') !== -1 || this.href.indexOf('action=') !== -1  || this.href.indexOf('diff=') !== -1 ? '' 			: '<a href="' + 			this.href + 			(this.href.includes('?') ? '&' : '?') + 			'action=edit" title="' + 			(this.title || this.href) + 			' (edit redirect)"><sup>(→)</sup></a>'; 	}); });

//cleanup
mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/পরিষ্কারকরণ.js&action=raw&ctype=text/javascript');