Kullanıcı:ToprakBot/AWB modülleri/kaynakça

Kaynakça ekleme modülü

Sayfada kaynak varsa ancak kaynakça yoksa, ya da not varsa ancak not listesi yoksa kaynakçayı ve/veya not listesini mümkün olan en doğru yere ekler.

//AutoWikiBrowser - Kaynakça modülü V3.2
//Yazar: ToprakM
	public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip) {

		Skip = false;
		Summary = "";
			
		//Kaynakça
		Match kat = Regex.Match(ArticleText, @"\[\[[KkCc]ategor[yi]\s*?:");
		Match disbag = Regex.Match(ArticleText, @"==\s*?d[ıiİ][Şşs]\s*ba[Ğğg]lant[İiı]lar\s*?==", RegexOptions.IgnoreCase);
		Match taslak = Regex.Match(ArticleText, @"{{(?:.{1,}\-|)[Tt]aslak\s*?}}");

		Regex one = new Regex(@"(kaynak[çÇ]a|==\s*?kaynak\s*?==)", RegexOptions.IgnoreCase);
		Regex two = new Regex(@"(R|r)eferences", RegexOptions.IgnoreCase);
		Regex three = new Regex(@"==\s*(R|r)eferans(lar)\s*==", RegexOptions.IgnoreCase);
		Regex four = new Regex(@"{{\s*reflist", RegexOptions.IgnoreCase);
		Regex five = new Regex(@"==\s*[Kk]aynaklar\s*==", RegexOptions.IgnoreCase);

		Regex six = new Regex(@"\={2,}\s*(?:Kaynakça|Kaynaklar)\s*\={2,}(?:\r\n){1,}\[\[(Kategori|Category)\:\s*", RegexOptions.Singleline);
		Regex seven = new Regex(@"\={2,}\s*(?:Kaynakça|Kaynaklar)\s*\={2,}(?:\n)*?\={2,}.*?\={2,}", RegexOptions.Singleline);

		Regex eight = new Regex(@"\{\{\s*([Kk]aynakça|[Rr]eflist|[Rr]eferences|[Rr]eference|[Kk]aynak listesi|[Rr]eferanslar|[Rr]efs)\s*(\||\}\})");
		Regex nine = new Regex(@"<\s*references\s*(\/|)\s*\>");

		if(ArticleText.Contains("<ref")&&(!(eight.Match(ArticleText).Success||nine.Match(ArticleText).Success))) {
			if(!(one.Match(ArticleText).Success||two.Match(ArticleText).Success||three.Match(ArticleText).Success||four.Match(ArticleText).Success||five.Match(ArticleText).Success)) {
				if(disbag.Success) ArticleText = ArticleText.Insert(disbag.Index, "== Kaynakça ==\n{{kaynakça}}\r\n\n");
				else if(taslak.Success) ArticleText = ArticleText.Insert(taslak.Index, "\n== Kaynakça ==\n{{kaynakça}}\r\n\n");
				else if(kat.Success) ArticleText = ArticleText.Insert(kat.Index, "== Kaynakça ==\n{{kaynakça}}\r\n\n");
				else ArticleText += "\r\n\r\n== Kaynakça ==\n{{kaynakça}}";

				ArticleText = ArticleText.Replace("\n\n== Kaynakça ==", "\n== Kaynakça ==");
				Summary += "Kaynakça başlığı ekleniyor";
			}

			if(six.Match(ArticleText).Success||seven.Match(ArticleText).Success) {
				Regex R1 = new Regex(@"\={2,}\s*(?:Kaynakça|Kaynaklar)\s*\={2,}", RegexOptions.IgnoreCase);
				ArticleText = R1.Replace(ArticleText, "== Kaynakça ==\r\n{{kaynakça}}");
				Summary = "Kaynakça şablonu ekleniyor";
			}

			Regex kaydz = new Regex(@"(\S\n{1})(\=\= Kaynakça ==)");
			ArticleText = kaydz.Replace(ArticleText, "$1\n$2");
		}
		
		//Not listesi
		Regex şablon = new Regex(@"{{\s*?(efn|adn|adn\-la|adş)\s*?(\||\})", RegexOptions.IgnoreCase);
		Regex notlistesi = new Regex(@"{{\s*?(not\slistesi|notlar|notes|notelist)\s*?(\||\})", RegexOptions.IgnoreCase);
		Regex notbaslik = new Regex(@"==\s*(not listesi|notlar|note list|notes|notelist)\s*==", RegexOptions.IgnoreCase);
		Regex refgroup = new Regex(@"(\<|{{)\s*?(references|ref|kaynakça)\s*?\|?(group|grup)", RegexOptions.IgnoreCase);
			
		if (şablon.Match(ArticleText).Success) {
			if (!notlistesi.Match(ArticleText).Success&&!refgroup.Match(ArticleText).Success&&!notbaslik.Match(ArticleText).Success) {
			
				Match kategori = Regex.Match(ArticleText, @"\[\[\s*?[kc]ategor[iy]\s*?\:", RegexOptions.IgnoreCase);
				Match dışbağ = Regex.Match(ArticleText, @"\=\=\s*?Dış\sbağlantılar\s*?\=\=", RegexOptions.IgnoreCase);
				Match kaynakça = Regex.Match(ArticleText, @"\=\=\s*?Kaynakça\s*?\=\=", RegexOptions.IgnoreCase);
				//Match taslak = Regex.Match(ArticleText, @"{{.*(-|)taslak(\s*|)}}", RegexOptions.IgnoreCase);
			
				if (kaynakça.Success) ArticleText = ArticleText.Insert(kaynakça.Index, "== Not listesi ==\n{{not listesi}}\r\n\n");
				else if (dışbağ.Success) ArticleText = ArticleText.Insert(dışbağ.Index, "== Not listesi ==\n{{not listesi}}\r\n\n");
				else if (taslak.Success) ArticleText = ArticleText.Insert(taslak.Index, "== Not listesi ==\n{{not listesi}}\r\n\n");
				else if (kategori.Success) ArticleText = ArticleText.Insert(kategori.Index, "== Not listesi ==\n{{not listesi}}\r\n\n");
				else ArticleText += "\r\n\r\n== Not listesi ==\n{{not listesi}}";
				Summary = "Not listesi ekleniyor";

				Regex notdz = new Regex(@"(\S\n{1})(\=\= Not listesi ==)");
				ArticleText = notdz.Replace(ArticleText, "$1\n$2");
			}
		}
		
		return ArticleText;
	}