User:Lightmouse/AWB/scripts/units

//add metric units

//

WikiFunctions.Parse.HideText ht = new WikiFunctions.Parse.HideText(true, false, true);

public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)

{

Skip = false;

Summary = "";

//Protect images, quotes etc by removing them

//ArticleText = ht.Hide(ArticleText);

ArticleText = ht.HideMore(ArticleText);

//aviation specifications: protect 'main=' and 'alt=' - undone below

ArticleText=Regex.Replace(ArticleText, @"(?i)((?:main|alt)\s?=\s?)(\d)", "$1xx$2");

//protect 'per unit' - undone below

ArticleText=Regex.Replace(ArticleText, @"(?i)(feet|foot|ft|miles?)(\Wper\W)", "$1xx$2");

//foot

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )foot([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|ft|m|adj=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )ft([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|ft|m|abbr=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )feet([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|ft|m}}$3");

//sq ft

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )(?:sq\.?|square)(?:\s|-| )foot([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|sqft|m2|adj=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )(?:sq\.?|square)(?:\s|-| |)ft([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|sqft|m2|abbr=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )(?:sq\.?|square)(?:\s|-| )feet([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|sqft|m2}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )\[\[square\sfoot\]\]([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|sqft|m2|adj=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )\[\[square\sfoot\|sq\sft\]\]([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|sqft|m2|abbr=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )\[\[square\sfeet\]\]([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|sqft|m2}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)(?:\s|-| )thousand(?:\s|-| )(?:sq|square)\.?(?:\s|-| )ft([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2,000|sqft|m2|abbr=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)(?:\s|-| )thousand(?:\s|-| )(?:sq|square)\.?(?:\s|-| )feet([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2,000|sqft|m2}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)(?:\s|-| )thousand(?:\s|-| )(?:sq|square)\.?(?:\s|-| )foot([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2,000|sqft|m2|adj=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| |)ft([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2,000000|sqft|m2|abbr=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| )feet([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2,000000|sqft|m2}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| )foot([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2,000000|sqft|m2|adj=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)\.(\d)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| |)ft([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2$3,00000|sqft|m2|abbr=on}}$4");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)\.(\d)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| )feet([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2$3,00000|sqft|m2}}$4");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)\.(\d)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| )foot([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2$3,00000|sqft|m2|adj=on}}$4");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)\.(\d\d)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| |)ft([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2$3,0000|sqft|m2|abbr=on}}$4");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)\.(\d\d)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| )feet([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2$3,0000|sqft|m2}}$4");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)\.(\d\d)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| )foot([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2$3,0000|sqft|m2|adj=on}}$4");

//cubic foot

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )(?:cu\.?|cubic)(?:\s|-| )foot([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|cuft|m3|adj=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )(?:cu\.?|cubic)(?:\s|-| |)ft([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|cuft|m3|abbr=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )(?:cu\.?|cubic)(?:\s|-| )feet([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|cuft|m3}}$3");

//mile - lower case to avoid proper names like 'Five Mile Road'

ArticleText=Regex.Replace(ArticleText, @"([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )mile([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|mi|km|adj=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| |)mi([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|mi|km|abbr=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )miles([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|mi|km}}$3");

ArticleText=Regex.Replace(ArticleText, @"([^y]\sone(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (1.6 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\stwo(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (3 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\sthree(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (5 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\sfour(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (6 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\sfive(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (8 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\ssix(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (10 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\sseven(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (11 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\seight(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (13 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\snine(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (14 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\sten(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (16 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\seleven(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (18 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\stwelve(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (19 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\sthirteen(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (19 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\sfourteen(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (21 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\sfifteen(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (24 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\sixteen(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (26 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\sseventeen(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (27 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\seighteen(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (29 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\snineteen(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (30 km)$2");

ArticleText=Regex.Replace(ArticleText, @"([^y]\stwenty(?:\s|-| )miles?)([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1 (32 km)$2");

//sq mi

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )(?:sq\.?|square)(?:\s|-| )mile([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|sqmi|km2|adj=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )(?:sq\.?|square)(?:\s|-| |)mi([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|sqmi|km2|abbr=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )(?:sq\.?|square)(?:\s|-| )miles([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|sqmi|km2}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)(?:\s|-| )thousand(?:\s|-| )(?:sq|square)\.?(?:\s|-| )mi([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2,000|sqmi|km2|abbr=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)(?:\s|-| )thousand(?:\s|-| )(?:sq|square)\.?(?:\s|-| )miles([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2,000|sqmi|km2}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)(?:\s|-| )thousand(?:\s|-| )(?:sq|square)\.?(?:\s|-| )mile([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2,000|sqmi|km2|adj=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| |)mi([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2,000000|sqmi|km2|abbr=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| )miles([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2,000000|sqmi|km2}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| )mile([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2,000000|sqmi|km2|adj=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)\.(\d)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| |)mi([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2$3,00000|sqmi|km2|abbr=on}}$4");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)\.(\d)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| )miles([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2$3,00000|sqmi|km2}}$4");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)\.(\d)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| )mile([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2$3,00000|sqmi|km2|adj=on}}$4");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)\.(\d\d)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| |)mi([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2$3,0000|sqmi|km2|abbr=on}}$4");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)\.(\d\d)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| )miles([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2$3,0000|sqmi|km2}}$4");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,]*)\.(\d\d)(?:\s|-| )million(?:\s|-| )(?:sq|square)\.?(?:\s|-| )mile([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2$3,0000|sqmi|km2|adj=on}}$4");

//cu mi

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )(?:cu\.?|cubic)(?:\s|-| )mile([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|cumi|km3|adj=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )(?:cu\.?|cubic)(?:\s|-| |)mi([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|cumi|km3|abbr=on}}$3");

ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\)\/\\]\s)(\d[\d,\.]*)(?:\s|-| )(?:cu\.?|cubic)(?:\s|-| )miles([^\d\w\(\)\/\\]?(?:\s|-)[^\d\(\/\\])", "$1{{convert|$2|cumi|km3}}$3");

//aviation specifications: unprotect 'main=' and 'alt='

ArticleText=Regex.Replace(ArticleText, @"(?i)((?:main|alt)\s?=\s?)xx(\d)", "$1$2");

//unprotect 'per unit'

ArticleText=Regex.Replace(ArticleText, @"(?i)(feet|foot|ft|miles?)xx(\Wper\W)", "$1 $2");

//fix superscript after convert template

ArticleText=Regex.Replace(ArticleText, @"({{convert\|\d+\|)ft\|m([^}]*}})2<\/sup>", "$1sqft|m2$2");

ArticleText=Regex.Replace(ArticleText, @"({{convert\|\d+\|)ft\|m([^}]*}})3<\/sup>", "$1cuft|m3$2");

ArticleText=Regex.Replace(ArticleText, @"({{convert\|\d+\|)m\|ft([^}]*}})2<\/sup>", "$1m2|sqft$2");

ArticleText=Regex.Replace(ArticleText, @"({{convert\|\d+\|)m\|ft([^}]*}})3<\/sup>", "$1m3|cuft$2");

ArticleText=Regex.Replace(ArticleText, @"({{convert\|\d+\|)mi\|km([^}]*}})2<\/sup>", "$1sqmi|km2$2");

ArticleText=Regex.Replace(ArticleText, @"({{convert\|\d+\|)km\|mi([^}]*}})2<\/sup>", "$1km2|sqmi$2");

//remove commas from numerical values in convert template

ArticleText=Regex.Replace(ArticleText, @"({convert\|[^}]*),", "$1");

ArticleText=Regex.Replace(ArticleText, @"({convert\|[^}]*),", "$1");

ArticleText=Regex.Replace(ArticleText, @"({convert\|[^}]*),", "$1");

ArticleText=Regex.Replace(ArticleText, @"({convert\|[^}]*),", "$1");

ArticleText=Regex.Replace(ArticleText, @"({convert\|[^}]*),", "$1");

//remove leading zeros from convert template

ArticleText=Regex.Replace(ArticleText, @"({convert\|)0(\d)", "$1$2");

ArticleText=Regex.Replace(ArticleText, @"({convert\|)0(\d)", "$1$2");

ArticleText=Regex.Replace(ArticleText, @"({convert\|)0(\d)", "$1$2");

//Unprotect images, quotes etc (i.e. put them back)

return ht.AddBackMore(ArticleText);

//return ht.AddBack(ArticleText);

return ArticleText;

}

//