// à copier/coller dans le module à partir d'ici
/*
* Essais de module AWB de corrections des détections projet correction syntaxique :
* - nettoyage des catégories ;
* - nettoyage clé de tri DEFAULTSORT (traite P:CS erreur 006) ;
* - ajout clé de tri DEFAULTSORT si personnalité ;
* Auteur : [[:fr:User:TiChou]] (source [[:fr:User:ZX81-bot/AWB/Modules/Cleanup]])
* Date création : juillet 2007
* Date révision : 18 août 2007
*/
public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
{
Skip = false;
Summary = "";
string ArticleTextOld = ArticleText;
// Correction des retours à la ligne entre bandeaux et catégories
ArticleText = Regex.Replace(ArticleText,
@"(?<=\{\{(?:Multi bandeau\|[^\}]+|Portail [^\|\}]+)\}\})\s*(?=(?:\{\{[ _]*DEFAULTSORT[ _]*:[^\}]+\}\}\s*)?\[\[ *Catégorie *:[^\]]+\]\].*)",
"\r\n\r\n",
RegexOptions.Singleline);
if (ArticleText != ArticleTextOld)
{
Summary += "net. bandeaux, ";
ArticleTextOld = ArticleText;
}
// Nettoyage des catégories
ArticleText = Regex.Replace(ArticleText,
@"(?<=\[\[)[ _]*(?:(:)[ _]*)?" +
@"(?:" + Variables.LangCode.ToString().ToLower() + @"[ _]*:[ _]*)?" +
@"(?:Category|" + Variables.Namespaces[14].Replace(":", "") + @")[ _]*:[ _]*" +
@"(?=[^\]]+\]\])",
"$1" + Variables.Namespaces[14], RegexOptions.IgnoreCase);
// Majuscule de la 1ère lettre des noms de catégorie
ArticleText = Regex.Replace(ArticleText,
@"(?<=\[\[" +
Variables.Namespaces[14] +
@")\p{Ll}",
new MatchEvaluator(UpFirstChar));
if (ArticleText != ArticleTextOld)
{
Summary += "net. catégories, ";
ArticleTextOld = ArticleText;
}
// ajout DEFAULTSORT si personne
Match match;
string key;
if (!Regex.IsMatch(ArticleText, @"\{\{[ _]*DEFAULTSORT[ _]*[:\|][^\}]*\}\}") &&
Regex.IsMatch(ArticleText, @"\[\[" + Variables.Namespaces[14] + @"(?:Naissance|Décès|Pseudonyme|Personnalité)"))
{
// Nettoyage DEFAULTSORT
match = Regex.Match(ArticleText, @"\[\[Catégorie:[^\|\]]+\|((?:[^,\]]+(?=,)|[^\]]{2,})(?:, *[^\]]+)?)\]\]");
if (!match.Success)
{
key = CleanKey(Tools.MakeHumanCatKey(ArticleTitle));
}
else
{
key = CleanKey(match.Groups[1].Value);
}
ArticleText = Regex.Replace(ArticleText,
@"(\[\[Catégorie:[^\]]+\]\].*)",
"{{DEFAULTSORT:" + key + "}}\n$1",
RegexOptions.Singleline);
ArticleText = Regex.Replace(ArticleText,
@"(?<=\[\[Catégorie:[^\|\]]+)\|[^\]]{2,}(?=\]\])",
"");
if (ArticleText != ArticleTextOld)
{
Summary += "ajout defaultsort, ";
ArticleTextOld = ArticleText;
}
}
// Nettoyage DEFAULTSORT
else
{
ArticleText = Regex.Replace(ArticleText,
@"(?<=\{\{)[ _]*DEFAULTSORT[ _]*[:\|][ _]*([^\}]*?)[ _]*(?=\}\})",
new MatchEvaluator(Key),
RegexOptions.IgnoreCase);
ArticleText = Regex.Replace(ArticleText,
@"(?<=\{\{DEFAULTSORT:[^\}]*\}\})\s*(?=\[\[" +
Variables.Namespaces[14] +
@")",
"\r\n",
RegexOptions.Singleline);
if (ArticleText != ArticleTextOld)
{
Summary += "net. defaultsort, ";
ArticleTextOld = ArticleText;
}
}
Summary = Summary.Trim(", ".ToCharArray());
return ArticleText;
}
// fonctions catégories et defaultsort
private string UpFirstChar(Match m)
{
return m.Value.ToUpper();
}
private string CleanKey(string key)
{
key = Regex.Replace(key.Replace("_"," "), @" +", " ");
string[] tr1 = new string[48] { "0⅛¼⅜⅝⅞½¾٠۰", "1١۱", "2٢۲", "3٣۳", "4٤۴", "5٥۵", "6٦۶", "7٧۷", "8٨۸", "9٩۹", "aáàâãäåăąā", "AÁÀÂÃÄÅĂĄĀ", "cçćĉčċ", "CÇĆĈČĊ", "dðďđ", "DÐĎĐ", "eéèêëěėęē", "EÉÈÊËĚĖĘĒ", "gğĝġģ", "GĞĜĠĢ", "hĥħ", "HĤĦ", "iíìîïıĩįī", "IÍÌÎÏİĨĮĪ", "jĵ", "JĴ", "kĸķ", "KĶ", "lĺľłļŀ", "LĹĽŁĻĿ", "nñʼnńňņ", "NÑŃŇŅ", "oóòôõöøőō", "OÓÒÔÕÖØŐŌ", "rŕřŗ", "RŔŘŖ", "sśŝšş", "SŚŜŠŞ", "tťŧţ", "TŤŦŢ", "uúùûüŭůűũųū", "UÚÙÛÜŬŮŰŨŲŪ", "wŵ", "WŴ", "yýÿŷ", "YÝŶŸ", "zźžż", "ZŹŽŻ" };
string[] tr2 = new string[8] { "aeæ", "AEÆ", "oeœ", "OEŒ", "ssß", "ijij", "ngŋ", "NGŊ" };
foreach (string t in tr1)
{
key = Regex.Replace(key, @"[" + t.Substring(1) + @"]", t.Substring(0, 1));
}
foreach (string t in tr2)
{
key = Regex.Replace(key, @"[" + t.Substring(2) + @"]", t.Substring(0, 2));
}
return key;
}
private string Key(Match m)
{
return "DEFAULTSORT:" + CleanKey(m.Groups[1].Value);
}
private string formatnum2(Match m)
{
string number = m.Value;
number = Regex.Replace(number, @"[\. ]|&(?:nb|thin)sp;", "");
number = Regex.Replace(number, @",", ".");
return "{{formatnum:" + number + "}}";
}
private string formatnum1(Match m)
{
string number = m.Value;
number = Regex.Replace(number, @"[, ]|&(?:nb|thin)sp;", "");
return "{{formatnum:" + number + "}}";
}
// à copier/coller dans le module jusqu'ici