Utilisateur:A2/cs

Une page de Wikipédia, l'encyclopédie libre.
// à 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