Участник:Carn/код
JS скрипты, которые я использую:
- User:Jack who built the house/convenientDiscussions.js
- User:Dibot/pat.js
- User:Dhārmikatva/hate.js
- User:Carn/toolbar.js
- User:Jack who built the house/canonicalPageName.js
- User:Carn/case numbering.js
- User:Jack who built the house/findAddition.js
- User:Jack who built the house/alignTemplateParameters.js
Data
[править | править код]<svg width="40" height="45" viewBox="0 0 40 45" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M24.904 0.799999C24.904 0.799999 29.2987 0.991999 38.088 1.376L38.472 13.024H36.424L34.248 4.64C31.944 3.65867 29.2133 3.168 26.056 3.168C20.8933 3.168 16.6053 4.87467 13.192 8.288C9.82133 11.6587 8.136 16.5867 8.136 23.072C8.136 29.5573 9.77867 34.3573 13.064 37.472C16.392 40.544 20.6373 42.08 25.8 42.08C29.256 42.08 32.3493 41.568 35.08 40.544L37.448 33.184L39.24 33.248L38.856 42.848C33.9493 43.872 29.7253 44.384 26.184 44.384C22.6853 44.384 19.784 44.192 17.48 43.808C15.2187 43.424 13 42.7413 10.824 41.76C8.648 40.7787 6.792 39.52 5.256 37.984C3.76267 36.448 2.54667 34.464 1.608 32.032C0.712 29.5573 0.264 26.5493 0.264 23.008C0.264 19.4667 0.946667 16.2027 2.312 13.216C3.72 10.1867 5.61867 7.79733 8.008 6.048C12.744 2.54933 18.376 0.799999 24.904 0.799999Z" fill="black"/> </svg>
mw:Manual:$wgAllowImageTag:<img src="data:image/jpeg;base64,/9j/4QA0RXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAAAAIdpAAQAAAABAAAAJgAAAAAAAAAAAAD/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAnAFQDASIAAhEBAxEB/8QAHgAAAgICAwEBAAAAAAAAAAAAAAcGCAUJAgMEAQr/xAA0EAABBAECBQIFAwMEAwAAAAABAgMEBQYHEQAIEiExExQJFSJBUSMycUJhgRczUpGx4fD/xAAaAQEBAAMBAQAAAAAAAAAAAAADBAIFBgAB/8QALREAAQIEBAUEAgMBAAAAAAAAAREhAAIDQQQSMVFhcYGR8BMiobEUwSNS0fH/2gAMAwEAAhEDEQA/AP0tx65nYdaepfbZO6U9RAOwBV9Kdz/UrZI8ntxjb2fjuNRfmN9b1FHB32Nhdy66qYbXv wTXlBpwed olJAJVsCeJq3FQGt2wlewJCSrpB2G 3V4SPIKj48nxxpf0JyBHOvz78yFlnRN/pBywyabT/T3B7Mqexx3I3kT4dpl8uChSUSL9b1M6lBe6mUMy0OKG2/HA4PDy15CSAglVOgPIX47R29fEeizKUF7ptZ42zVc/HcggGypLWrtKxX0e9gWMOwjPOK7JDDteS0FKJ2QSSAogkbcRrU6jzNeAZh/poqrjagoobCRi0i4i 5hu3yVbxossAgGM44lpD47fpFf570x5pOXayxjU/l21a0WdvsSr4GtOMwdVcHxh5 Ni2YU1oJUSptbmoilbbRxx3qUpwdLSjMbLm4AIuxrRnLOlekmeZ4iOmdIx3H31VUNLnSuyvZcj5XjlQ2o HrK8kRISD5KnR2JA49LhsKTLKCSSZQNXcADR1 OkTnEICU0BPZ94UvLnmF9q5pzEus5w6Theo1HMexXUPGpTJ9GszCrcJtzWukDrr5amkWFLY90yKWdFjJJ3B4dcigYUtYDO4III7AbkH d9vPjig3ws9fdQNX9MNTMS1rkSF606N6qZFiOZMySDcuMSXU2dG5KShKVelBhy1VrLyklajXAA9gB1/ER5i9f VZOkuV6Z3 H2dZqdqtjela8PzDF2rBqkeuhMT8ziXlZIo56kH2xelx3pjiihK0g7nfhKuBXEzUCEMqkoyAIbXvfZrJSxuXDS15i0zNxys6h zbtF7ncVjlI3jg7kbjYbkbgd//AF4/g8YqVhMJ7c z27Hv0jbbY T46fH4I4qXrTzM6x8plZgeYa 1OnOV6WZZllNhWSZhp9CvsdvsOtLv1PbW9hXX1pkjcylHQGpT8OfGUWUOFmOVEJLJ5sOa9nlY0yga0ytOLXP9Lvc1i8lvqC5Yj2NHDuHYsOpmSK XAQ7ax3BMQ6C0pCmUjfqChvwf4A4rZj5qkPQxuHTULZVV0Syp5aGYvTuI4hakxmd rbbbtufA3879hvv/ANcYaTpfAd39WEyDsQPHk P/AL eGRhmo2K59pzU6qYnITkWLZHjzOVVC6xIkv2EGRFCoYiNAlL1glovQXWNylcgbEb7cK7QTmh0k5jLHJqvT9eT 9w xerspj3WNT68U9zHe9B2mlPyB7NN60El9xpogiJ9YTv5D8FArs90 R9woxqkPLr5aI6vR6tU4s xaP1H nf/ABv2/wDHBxad9qtbX sspUsFY9AbpKepSQVd/wDc3SQr BwcSmghOnflsv3fklHrHj2ETFtpIB lSBt 4dyn8kDbbcedu4Pbv dIvw5ced0P54OfLRjK9q67yrJKXU3Gkv7 na4xaP2kgzawnu64y3Niqf8A O53 75kq9MH1R9juo9IBHfckbkfgqA3AG438cIPVrlrwXVbIsd1BYnWuC6q4eyqNjeouIvoiX1bBWQXqqY76TrF7WTdg0/X2TbjK2VKZICCeNxg64oyGVR7ghOzAcl1Y9bmNPjKJEw5hw mXl50hnZzm9LglZXW2QNrf aX9LQQ4UZCVyn7W7sGK2FAhoVslSIq5DcyYslJbaCldSQNxUbmwyyzstSNGNMMcwbJdSKmovhq1qbQYs5EYsBTY2zNg4XGdRaWMeK8JWavR7wNNuJ600LgStJ7hz0OgN45k9NlWquqNvqnPxWRJmYlDlVVLRY9WWk2OYz12aiojMsWE8sH025z/aNJSHgkFI4XWA6Ca5YXzFZrrJbau0OYUOfs1mP2mMTMVerXKGkxw2kmnj47YwpTeyvc2DfvFyGSzIUSVJUFEFaZwsss0ylZZMw5gKEuHGwRG1gpws4G80g7kfqNeOA6gHSL4qcyacBzjTfDebzT9hD0LNq trG5eouKK9WWqI7VW9jAkyHGW1upceWJK/eIHcniX/ABsW7JWmHK05UtxnLlHNlpuqobmFQiOzfZTlREyikFQjrkFCZCkgq9IqI4evxCOWLmA5hbDQ2/0Jj4NX32i oddqPT5NklzPrrgyYCW2LHHvSYbKBX2sZmIw6tf0BL5cUO3CT IXpRzc8xWLcv8AT47ojDfd0v1bxLUnJptdnFbL YR8dS8ZlXVwpUGI4tapLynGg7LIUFJQtYQdxTTretUwWJCEGkSdX9o1F1D67xLUHo08ZLaarKOSzABHYcH YhnNXXasc0moOkfJVr4nC9GMTyyTWagVORYvMssla1QXiC1Sp2K0lnITATSTmo0pSpkeyhvrHWfavKUEni8XO9pxjl1y0V2l9jFdnYhYZzpBikxl1wvvzaN7O8arXo7vT3HrxEuNE QFkj 1XPiEYXrFm9Jyi8xmlemGX2GVaGarwMjyXA47bAy9rFZcirjXqIrMeX7d6LNbp5yUKaWrqE5Gx3I4kPNVzI5JXcvumMzPNLM8jZpm rGC5mxi OYndXruH4VR57CvA7kljXR5iY9hEx2AUuQ/US4uXJlNpIU2NsT/ACjNogJTkARxsOtozQURlb3MFAVSguoRD3ZlhZcpFzdcjfMjkvIvqBPkSNJdQZtrm/LDlFkolpiFPdlz7PAXXVEgO1xacMJKSEhwKdSAmY3xfblQpa6HL5kTChtxVyOZTU91bsdpCQ8tM9kI6yhIKiEkoSo7kJJA278LLnP0Kp cfl5qcv0wnPwtTMKaiah6M5WqDJrLeFktWuNK WSmXkosG2rSMwuuU06EtqWvZaTud8H8K/M8 z/l6ybMtT6x6pzzINYtQJOUVj6PTWzaxLNdbPa6dgepU K9KIPco2HHyoPyMKqMhALLoHXRU6OeUZ4ab0JpVUuC40Cgni6IwCcHjZEmtQsrW2hKkqXuT0p7K6UhQ7j89 3bv d DjLxwwlK0ockt7OHqSFBCeopST0pPfp7gA/fY8HGtp0RJJJIp9soHYdfsxdUqZ6k8/8AaYzXGqceHjIq6bVHDLxpL9VYrksK2IX8vsYrhG 6kvMAd9 /Y9t 324mUfIqlYKWZCwFfqn9F77d/JZSfG/j8bfjg4OCw9GnpluBqdx5/wRXXJVF8Qf7GdjTGnmwtKkKb6SEnpcCkg fKd9vuQOxI8d MshxtRSAEr3bO24UO 3ZXcfY9J8fj8cHBxaaNMAkS6BdTZD9jxkAuEsW87DtHIpB3 lO5BBP32IAI/b42A3H9h BxwH0nZSUkDcAHvtuO w22G/n/A4ODiYZvaM86KiZmQZW8/ZUjQoiVfSkV7XGUg66qPkx0Kbb9RWyNj0dAO/cIH7Ujt2SlXhI7DyB9 PDJgtupUl1tp1ABHS4hLiewJ26VAjyT/buT9zwcHCZJbBOvLddkicTEmVULjUDflHgTDaZCWo7LTSU7BCG0IbQnvukdKAAE79 wBG/wCd PlZUVVc24zU18GuS5IclSRFjIjpdlPLLjzxS0lKS88tRW46oFa1kqWoknc4OIwSLlrK0bQgEInngHYR65dZXzHELkAvLbaS0lalOoV0hS19JCCASFOKHUe5Gw32A4ODg4eJBICAXcDb/I//2Q=="></img>
{{#scite:Byrne 2008 |type=journal |author=Byrne, A |year=2008 |title=Web 2.0 strategies in libraries and information services |journal=The Australian Library Journal |volume=57 |number=4 |pages=365-376 }}
- Модуль для составления списков статей, когда регулярное выражение слишком сложное, чтобы делать это поиском insource:/regexp/ (может пропускать некоторые значения почему-то):
public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip) { Skip = false; Summary = " "; Regex Findthis = new Regex(@"(.) "); string old = ArticleText; ArticleText = Findthis.Replace(ArticleText, "$1" ); if(old.Equals(ArticleText)) Skip = true; else { Skip = true; System.IO.StreamWriter sw = System.IO.File.AppendText("C:/Documents/list.txt"); sw.WriteLine(ArticleTitle); sw.Close(); } return ArticleText; }
- Модуль для извлечения из шаблона строки с параметром (не оптимизирован, возвращает всю строку), есть решения лучше
public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
{ Skip = true;
Summary = "test";
String outStr = ArticleTitle ";";
if (ArticleText.Length < 10) {
outStr = outStr " " "none" ";";
}
else {}
Match m = Regex.Match(ArticleText, @"(\|\s*?alias\s*?=\s*?(.*?)\n)");
while (m.Success) {
outStr = outStr " " m.Result("$1") ";";
m = m.NextMatch();
}
System.IO.StreamWriter sw = System.IO.File.AppendText("C:/Documents/list.txt");
sw.WriteLine(outStr);
sw.Close();
return ArticleText;
}
- Модуль для составления списка статей с встречающимися внутри модулями и категориями (потом файл множно переименовать в .csv и работать как с таблицей)
public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
{ Summary = "test";
String outStr = ArticleTitle ";";
if (ArticleText.Length < 10) {
outStr = outStr " " "none" ";";
}
else {}
Match m = Regex.Match(ArticleText, @"(?:\{\{#invoke:)([^|] )");
while (m.Success) {
outStr = outStr " " m.Value ";";
m = m.NextMatch();
}
m = Regex.Match(ArticleText, @"(?:\{\{#invoke:[^|] \|)([^|] )");
while (m.Success) {
outStr = outStr " " m.Value ";";
m = m.NextMatch();
}
m = Regex.Match(ArticleText, @"(?:\{\{#invoke:[^|] \|[^|] )([^}] )");
while (m.Success) {
outStr = outStr " " m.Value ";";
m = m.NextMatch();
}
System.IO.StreamWriter sw = System.IO.File.AppendText("C:/Documents/list.txt");
sw.WriteLine(outStr);
sw.Close();
Skip = true;
return ArticleText;
}
private static readonly Regex TemplateString = Tools.NestedTemplateRegex(new List<string>("СС,OldStyleDate,СС2,OldStyleDate2,СС4,cc4,OldStyleDate4".Split(',')));
public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
{
Skip = true;
Summary = "";
String outStr = ArticleTitle ";";
string arg1="", arg2="", arg3="", arg4="", arg5="", arg6="", year="";
System.IO.StreamWriter sw = System.IO.File.AppendText("C:/Documents/list.txt");
foreach(Match m in TemplateString.Matches(ArticleText))
{
string ParameterCall = m.Value;
arg1 = WikiFunctions.Tools.GetTemplateArgument(ParameterCall, 1);
arg2 = WikiFunctions.Tools.GetTemplateArgument(ParameterCall, 2);
arg3 = WikiFunctions.Tools.GetTemplateArgument(ParameterCall, 3);
arg4 = WikiFunctions.Tools.GetTemplateArgument(ParameterCall, 4);
arg5 = WikiFunctions.Tools.GetTemplateArgument(ParameterCall, 5);
arg6 = WikiFunctions.Tools.GetTemplateArgument(ParameterCall, 6);
year = WikiFunctions.Tools.GetTemplateParameterValue(ParameterCall,"Год");
}
outStr = outStr arg1 "; " arg2 "; " arg3 "; " arg4 "; " arg5 "; " arg6 "; " year;
sw.WriteLine(outStr);
sw.Close();
return ArticleText;
}
private static readonly Regex TemplateString = Tools.NestedTemplateRegex(new List<string>("НП,НП-Австралия,НП-Армения,НП-Белоруссия,НП-Великобритания,НП-Грузия,НП-Израиль,НП-Ирландия,НП-Казахстан,НП-Канада,НП-Киргизия,НП-Мексика,НП-Молдавия,НП-Нидерланды,НП-ОАЭ,НП-Польша,НП-Россия,НП Россия,НП-США,НП-Северная Ирландия,НП-Таиланд,НП-Турция,НП-Украина,НП-Франция,НП-Южная Корея,НП-Япония,НП-Крым,НП-Донбасс,НП-Майотта,НП-ПНА,НП-ПМР,НП-НКР,НП-Абхазия,НП-Тайвань,НП-Южная Осетия".Split(',')));
public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
{
Skip = true;
Summary = "";
String outStr = ArticleTitle ";";
string utc="", dts="";
System.IO.StreamWriter sw = System.IO.File.AppendText("C:/Documents/list.txt");
foreach(Match m in TemplateString.Matches(ArticleText))
{
string ParameterCall = m.Value;
// nonameprmtr = WikiFunctions.Tools.GetTemplateArgument(ParameterCall, 1); нумерованный безымянный параметр
utc = WikiFunctions.Tools.GetTemplateParameterValue(ParameterCall,"часовой пояс");
dts = WikiFunctions.Tools.GetTemplateParameterValue(ParameterCall,"DST");
}
outStr = outStr utc "; " dts;
sw.WriteLine(outStr);
sw.Close();
return ArticleText;
}
В помощь шпаргалка, песочница, поиск регулярок по Википедии при помощи insource необходимо сочетать с поискам по ключевым словам, причём многие функции в рамках регулярок в поиске не работают, внутри стандартного AWB тоже не всё работает, поэтому зачастую необходимо задействование модулей на C#
[\.\(\)\,\:\{\}\|\-\ \←\→\«\»\…\!\#\=\\\/\=\[\]\'\"]
→▄
;[\w]
→█
;[^█\s]
→▄
(?<!\<nowiki\>)\<ref\>[\s<br\/>]*?\<\/ref\>(?!.*\<\/nowiki\>)
— нахождение пустых (с пробелами и тегами<br/>
и похожим мусором, не отлажено) сносок, не внутри теговnowiki
(\[\[([Фф]айл|[Ff]ile|[Ii]mage|[Ии]зображение):[^\]]*?)\|(ссылка|link)=https:\/\/([a-z]{2,3})\.wikipedia\.org\/wiki\/[^\]\|] [\|\]]
→$1|
- AWB
(\[\[(:?[Фф]айл|[Ff]ile|[Ii]mage|[Ии]зображение):. ?)\|(:?ссылка|link)=(:?https:\/\/(:?[a-z]{2,3})\.wikipedia\.org\/wiki\/|(:?[Фф]айл|[Ff]ile|[Ii]mage|[Ии]зображение):)([^\]\|] ?(\||\]\]))
→$1$8
- Тут нужна более сложная логика - если сам файл и ссылка на него отличаются см. en:Norwich City F.C. и en:Wave function
- AWB
\[\[:(aa|ab|ace|ady|af|ak|als|am|an|ang|ar|arc|ary|arz|as|ast|atj|av|avk|awa|ay|az|azb|ba|ban|bar|bat-smg|bcl|be|be-tarask|be-x-old|bg|bh|bi|bjn|bm|bn|bo|bpy|br|bs|bug|bxr|ca|cbk-zam|cdo|ce|ceb|ch|cho|chr|chy|ckb|co|cr|crh|cs|csb|cu|cv|cy|da|de|din|diq|dsb|dty|dv|dz|ee|el|eml|en|eo|es|et|eu|ext|fa|ff|fi|fiu-vro|fj|fo|fr|frp|frr|fur|fy|ga|gag|gan|gcr|gd|gl|glk|gn|gom|gor|got|gu|gv|ha|hak|haw|he|hi|hif|ho|hr|hsb|ht|hu|hy|hyw|hz|ia|id|ie|ig|ii|ik|ilo|inh|io|is|it|iu|ja|jam|jbo|jv|ka|kaa|kab|kbd|kbp|kg|ki|kj|kk|kl|km|kn|ko|koi|kr|krc|ks|ksh|ku|kv|kw|ky|la|lad|lb|lbe|lez|lfn|lg|li|lij|lmo|ln|lo|lrc|lt|ltg|lv|mai|map-bms|mdf|mg|mh|mhr|mi|min|mk|ml|mn|mnw|mo|mr|mrj|ms|mt|mus|mwl|my|myv|mzn|na|nah|nap|nds|nds-nl|ne|new|ng|nl|nn|no|nov|nqo|nrm|nso|nv|ny|oc|olo|om|or|os|pa|pag|pam|pap|pcd|pdc|pfl|pi|pih|pl|pms|pnb|pnt|ps|pt|qu|rm|rmy|rn|ro|roa-rup|roa-tara|ru|rue|rw|sa|sah|sat|sc|scn|sco|sd|se|sg|sh|shn|si|simple|sk|sl|sm|sn|so|sq|sr|srn|ss|st|stq|su|sv|sw|szl|szy|ta|tcy|te|tet|tg|th|ti|tk|tl|tn|to|tpi|tr|ts|tt|tum|tw|ty|tyv|udm|ug|uk|ur|uz|ve|vec|vep|vi|vls|vo|wa|war|wo|wuu|xal|xh|xmf|yi|yo|yue|za|zea|zh|zh-classical|zh-min-nan|zh-yue|zu|nb|zh-cn|zh-tw|nan|vro|lzh|rup|gsw|sgs|egl):([\w\s_\(\)] ?)\|([\w\s_] ?)\]]
→{{iw|$3||$1|$2}}
((?:(?:\{\{[Мм]узыкант(?:.|\n)*?)\|(?:\s|)[Сc]трана(?:\s*?|)=(?:\s*|))(?:|(?:\{\{флагификация\|(?:[a-zа-яА-Я0-9\s\-]{3,60})\}\}|,|\<br\>|\s) ))(Социалистическая Республика Босния и Герцеговина|Народная Социалистическая Республика Албания|Объединённое княжество Валахии и Молдавии|Демократическая Республика Афганистан|Социалистическая Республика Румыния|Хорватская республика Герцег-Босна|Ломбардо-Венецианское королевство|Демократическая Республика Конго|Центральноафриканская Республика|Белорусская Народная Республика|Венгерская Народная Республика|Федеративные Штаты Микронезии|Народная Республика Болгария|Великое княжество Литовское|Французская Верхняя Вольта|Республика Сербская Краина|Соединённые Штаты Америки|Священная Римская империя|Республика Верхняя Вольта|Королевство Обеих Сицилий|Третье Болгарское царство|Доминиканская Республика|Сент-Винсент и Гренадины|Австрийская республика|Экваториальная Гвинея|Веймарская республика|Босния и Герцеговина|Папуа — Новая Гвинея|Босния и Герцеговина|Сан-Томе и Принсипи|Британский Гондурас|Австрийская империя|Бразильская империя|Азербайджанская ССР|Республика Сербская|Королевство Румыния|Республика Беларусь|Королевство Бавария|Королевство Франция|Российская империя|Маршалловы острова|Соломоновы острова|Британская империя|Западная Австралия|Республика Дагомея|Германская империя|Карело-Финская ССР|Антигуа и Барбуда|Багамские Острова|Коморские Острова|Саудовская Аравия|Сент-Китс и Невис|Тринидад и Тобаго|Новый Южный Уэльс|Республика Косово|Северная Ирландия|Республика Корея|Республика Конго|Германский союз|Восточный Тимор|Южная Австралия|Белорусская ССР|Туркменская ССР|Папская область|Республика Кипр|Великобритания|Новая Зеландия|Австро-Венгрия|Грузинская ССР|Киргизская ССР|Латвийская ССР|Молдавская ССР|Таджикская ССР|Украинская ССР|Рейнский союз|Армянская ССР|Казахская ССР|Литовская ССР|Узбекская ССР|Эстонская ССР|Страна Басков|Буркина-Фасо|Гвинея-Бисау|Сьерра-Леоне|Чехословакия|Азербайджан|Южная Корея|Кот-д’Ивуар|Лихтенштейн|Таджикистан|Южный Судан|Третий рейх|Пуэрто-Рико|Афганистан|Белоруссия|Кабо-Верде|Коста-Рика|Люксембург|Мавритания|Мадагаскар|Нидерланды|Португалия|Сан-Марино|Сент-Люсия|Узбекистан|Черногория|Австралия|Аргентина|Бангладеш|Венесуэла|Гватемала|Индонезия|Казахстан|Никарагуа|Сальвадор|Македония|Туркмения|Филиппины|Финляндия|Швейцария|Шри-Ланка|Квинсленд|Шотландия|Голландия|Барбадос|Болгария|Ботсвана|Бразилия|Беларусь|Германия|Гондурас|Доминика|Зимбабве|Иордания|Ирландия|Исландия|Камбоджа|Киргизия|Кирибати|Колумбия|Маврикий|Малайзия|Мальдивы|Мозамбик|Молдавия|Монголия|Норвегия|Пакистан|Парагвай|Сингапур|Словакия|Словения|Танзания|Хорватия|Эсватини|Виктория|Тасмания|Австрия|Албания|Андорра|Армения|Бахрейн|Бельгия|Боливия|Бурунди|Вануату|Венгрия|Вьетнам|Гренада|Джибути|Израиль|Испания|Камерун|Либерия|Марокко|Мексика|Намибия|Нигерия|Румыния|Сейшелы|Сенегал|Суринам|Таиланд|Украина|Уругвай|Франция|Эквадор|Эритрея|Эстония|Эфиопия|Тайвань|Ангола|Бруней|Гайана|Гамбия|Гвинея|Греция|Грузия|Египет|Замбия|Италия|Канада|Кувейт|Латвия|Лесото|Малави|Мальта|Монако|Мьянма|Панама|Польша|Россия|Руанда|Сербия|Сомали|Тувалу|Турция|Уганда|Швеция|Ямайка|Япония|Англия|Алжир|Белиз|Бенин|Бутан|Габон|Гаити|Дания|Индия|Йемен|Катар|Кения|Китай|Ливан|Ливия|Литва|Науру|Непал|Нигер|Палау|Самоа|Сирия|Судан|Тонга|Тунис|Фиджи|Чехия|РСФСР|Гана|Ирак|Иран|Кипр|КНДР|Куба|Лаос|Мали|Оман|Перу|Того|Чили|СССР|ГСХС|СФРЮ|ОАЭ|США|Чад|ЮАР|ФРГ|ГДР|ВНР|НРБ|ПНР|(?:[a-zа-яЁёА-Я]{1,15}[\s\-]{0,1}[a-zа-яЁёА-Я]{1,15}[\s\-]{0,1}[a-zа-яЁёА-Я]{1,15}))
→$1{{флагификация|$2}}
\[https://ru.wikipedia.org/w/index.php\?title=(. ?)&type=revision&diff=([0-9] ?)&oldid=([0-9] ?)(:?\s)(. ?)\]
→[[Special:Diff/$3/$2|$5]]<!--$1-->
Lua
[править | править код]Свалка того, что может оказаться полезным
mw.ustring.isutf8( s )
mw.text.split( 'a b\tc\nd', '%s' )
mw.text.tag{ name = string, attrs = table, content = string|false }
mw.text.trim( s, charset )
mw.allToString( ... )
local value = mw.ustring.char( 0x41f, 0x440, 0x438, 0x432, 0x435, 0x442, 0x21 ) -- value is now 'Привет!'
-- {{#tag:nowiki|some text}}
frame:callParserFunction( '#tag:nowiki', 'some text' )
frame:expandTemplate{ title = title, args = table }
mw.logObject( object, prefix )
mw.clearLogBuffer()
mw.getLogBuffer()
mw.addWarning( text )
Election data
[править | править код]io.input("votings_full.txt")
-- \A\d{4}. ?\n .*?\n .*?$
local vote_data = {}
while true do
local vote_name, list_pro, list_con = io.read("*line", "*line", "*line")
if not vote_name then break end
local vote_year=tonumber(string.match(vote_name,"(%d )"))
table.insert(vote_data,{vote_name,vote_year,list_pro,list_con})
end
-- перевод формата данных
local voters = {}
local elections = {}
local default = {__index = function() return 0 end}
local sep = " "
for _,portion in ipairs(vote_data) do
local vote_name, vote_year = portion[1], portion[2]
local list_pro, list_con = portion[3], portion[4]
if vote_year > 2016 then
elections[vote_name] = elections[vote_name] or {}
setmetatable(elections[vote_name], default)
for voter_nick in string.gmatch(list_pro, "([^"..sep.."] )") do
voters[voter_nick] = voters[voter_nick] or {}
voters[voter_nick][vote_name] = 1
elections[vote_name][voter_nick] = 1
end
for voter_nick in string.gmatch(list_con, "([^"..sep.."] )") do
voters[voter_nick] = voters[voter_nick] or {}
voters[voter_nick][vote_name] = -1
elections[vote_name][voter_nick] = -1
end
end
end
-- упрощение структуры
-- voters [voter_nick][vote_name]
-- elections[vote_name] [voter_nick]
local vote_names = {}
for k,v in pairs(elections) do
table.insert(vote_names,k)
end
local ivot = {}
local evot = {}
for voter_nick,nick_votes in pairs(voters) do
ivot[voter_nick] = ivot[voter_nick] or {}
evot[voter_nick] = evot[voter_nick] or 0
for i, name_vote in ipairs(vote_names) do
local value = nick_votes[name_vote]
if value then
evot[voter_nick] = 1 evot[voter_nick]
end
ivot[voter_nick][i] = value or 0
end
end
for k,v in pairs(evot) do
if v < 10 then
ivot[k] = nil
end
end
local file = assert(io.open("output2017.txt", "w"))
io.output(file)
for voter_nick, values in pairs(ivot) do
io.write(voter_nick .. ", " .. table.concat(values,", "), "\n")
end