IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
11Beğeni(ler)
  • 6 Post By CesuryureK
  • 1 Post By Entrance
  • 4 Post By CesuryureK

Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 23 Eylül 2009, 13:26   #1
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Regex ile Yazı Tipleri




Bu Ders Bir mIRCScripting.NET Dökümanıdır.

Yazan: L4roXyL - (Hasan AYDENİZ)
Emeğe Saygı!
-

son zamanlarda özellikle yazı tipleri ile ilgili birçok kez sorular gelmekte ve birbirinden farklı yazı seçenekleri istenilmektedir..
bu istenilen özellikleri yazabilmek için nerden bakılırsa loop döngüsü ile en az 25 satır kod yazılacaktır. Ki buda az bir satır olmamakla birlikte zaman kaybına da neden olacaktır.
Regex ile ince kalın yazı tipi yapmak pek zor bir durum değil lakin başka durumlar için mesela kırmızı-siyah yazı tipi için biraz mantık ve çıkış yolu gerekmektedir ki bu loop döngüsü ile dediğim gibi 20-25 satır kod bulacaktır.
bu yüzden Hasan Aydeniz (L4roXyL) arkadaşımla bu konuyu konuşup regex ile farklı bir mantık yürütülüp yapılabilir mi, yapılırsa loop döngüsünden daha pratik ve kısa olabilir mi diye konuşurken kollar sıvandı ve şu ders yazıldı.

Bildiğiniz üzere bir çoğu script-de, kalın/ince yazı, renkli yazı(bir harf belirtilen renk, diğer harf diğer belirttiğiniz renk) ve büyük/küçük yazım şekli şeklinde kod-lar mevcut.
Bu tarz kodlar/işlevler genellike uzun, bol loop-lu kodlar ile yazılmaktadır ve olduğunca uzun olmaktadır(bunu en yeni çıkan scriptleri dahi gözlemleyerek söylüyorum)
-
Erdem arkadaşımız "bunu regex(regular expression) ile yapabilirmiyiz?" dediğinde, kalın/ince yazı için aklımda hemen bir mantık oluştu. Çünki daha önceden-de yazdığımı hatırlıyorum. Lâkin renkli ve büyük/küçük yazı şekli için duraksadım. Çünki kalın/ince yazının mantığı basittir; her harf arasına CTRL+B[old]($chr(2)) koymanız yeterli olur. Ama renkli yazı ve büyük/küçük yazı şekli için aynı şey geçerli değil tabiki. Farklı kullanımlar mevcut olduğu için farklı bir mantık geliştirmeniz gerekiyor. Her zaman dediğim gibi mIRC Scripting-de en iyi, en işlevsel, en hızlı ve en kısa kodu yazabilmek mantığınıza bağlıdır. Bilginizde önemlidir tabiki. Fazla uzatmadan mantıkları açıklayayım size.

-

Kalın/ince yazı mantığı yukarıdada dediğim gibi basittir.
Ben regex kullandığım için, regex-daki mantığını açıklayacağım. Zaten diğer yollarla yine yukarıda dediğim gibi bir ton gereksiz external loop kullanmanız lazım. Buna gerek duymuyorum gerek olduğunuda bu saatten sonra zannetmiyorum.
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.

Regex-da aranılan verideki eşleşmeleri yakalamak için "(veri)" kullandığımızı biliyorsunuz.

-

Örnekler:

Ö1: //echo -: $regex(r,deneme,e) => 1
Yakalama: //echo -: $regml(r,0) => 0
Açıklaması: Eşleşme var, yakalama işlevi yok. () kullanmadık.
-
Ö2: //echo -: $regex(r,deneme,(e)) => 1
Yakalama: //echo -: $regml(r,0) => 1
Açıklaması: Eşleşme ve yakalama işlevi var. Lâkin sadece d harfinden sonra gelen "e" harfini yakalar. Bu yüzden sonuç 1 olarak döner ve $regml(r,1) "e" olarak döner. Bunun sebebi /g/ anahtarını kullanmadık.
-
Ö3: //echo -: $regex(r,deneme,/(e)/g) => 3
Yakalama: //echo -: $regml(r,0) => 3
Açıklaması: Eşleşme ve yakalama işlevi var. Deneme text-i içerisindeki tüm "e" harfleri başarıyla yakalandı.
Eşleşmeleri görmek için: //var %1 = 1 | while ($regml(r,%1)) { echo -: %1 - $v1 | inc %1 }

Sanırım buraya kadar anlaşılmayan birşey yok.
Şimdi gelelim, kalın/ince yazı şeklini nasıl yazacağız?
Söyleki;

mIRC Scripting-de $regsubex([name], text, re, subtext) tanımını bilirsiniz. Yani regex-i bilen herkez bu tanımında ne işe yaradığını az/çok bilir.
Kısaca text içerisindeki belirtilen veriyi, yine belirtilen şekilde değiştirmenizi sağlıyor. Aklınıza $replace(x) vs. gelmesin bu çok daha fazla gelişmiş şeklidir.
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Neyse daha fazla uzatmadan açıklamak istiyorum.
-
Kalın/ince yazmamanın yolu regsubex ile sadece bu kadar. .)
Kod: $regsubex(deneme,$1-,/(.)/g,$+($chr(2),\1))
-
Açıklaması: /(.)/g bu kısımda "." herhangi bir karakter demektir. Burada yaptığımız işlev veri içerisindeki her karakteri yakalıyoruz. Yani text içerisindeki tüm karakterler $regml(deneme,[N]) şeklinde görülebilir. Buradaki "deneme" regex-e verdiğimz isimdir, karışma olmasın diye belirttim. "\1" kısmı ise yakalan veri olarak döner. Yani kısacası text içerisindeki tüm verileri yakalıyor ve onları $chr(2)(bold karakteri) ile re-text ediyoruz.
Görmek için: //var %1 = 1 | while ($regml(deneme,%1)) { echo -: $v1 | inc %1 }

Sanırım buraya kadarda anlaşılmayan birşey yok.

-

Şimdi gelelim; büyük/küçük ve renkli/renksiz yazma olayına.
-
Bu olayda yukarıdaki gibi, lâkin kullanacağımız mantık biraz daha farklı olacak. Yukarıyı okuduysanız bu bölümden sonra ne dediğimi gayet iyi anlayacaksınızdır diyerek konuya giriyorum.
-
Bildiğiniz gibi IF sorgusunda; "//" operatörü mevcut. Bu operatör, belirtilen saysının; diğer belirtilen sayının katları olduğunda eşleşme gerçekleştirir.
Örneğin: //if (2 // 4) echo -: $v1
Gibi. Burada belirtilen "4" rakamı belirtilen "2" sayısının kat sayılarından birisidir. //if (2 // 3) echo -: $v1 yaptığınızda pozitif sonuç dönmez. Çünki "3" rakamı "2" rakamının kat sayısı değildir. Aynı şekilde bir diğer operatör olan "\\" ise aynı işlevin tam tersini yapar. Yani yazılan ilk sayı, yazılan ikinci sayının kat sayısı ise sonuç pozitif dönecektir.
Örneğin: //if (4 \\ 2) echo -: $v1
Gibi.
-
Yani şimdi diyebilirsiniz; "bu adam neden bunları anlatıyor bize?" bende size cevap olarak; mIRC Scripting bir mantık işidir. Yapabilecekleriniz mantık + bilgi ile sınırlıdır ve her ikisinin seviyesine göre kodlar yazabilirsiniz. Mantık + bilgi ne kadar iyi ise, sizde o kadar iyi bir coder-sınız demektir.
-
Diyelimki şöyle bir istek yapılıyor(ki yukarıda dediğim gibi script-lerin çoğunda bu vazgeçilmez bir özelliktir); yazdığım yazının harflerinin birisi kırmızı, diğeri siyah olsun?

Mantık olarak ne yapacağız? Yukarıdaki örneklerde yaptığımız gibi yine text içerisindeki tüm karakterleri (yakalayacağız) ve son olarak re-text edeceğiz.
AMA; bu işlevi tam olarak yukarıdaki gibi yaparsak, text-in tamamı ilk belirlediğimiz renk ile görülecektir. Peki biz bu konumda ne yapabiliriz? Nasıl yapacağız? Şu konumda loop(while vs.)lara girmeden işin içinden çıkılamaz gibi geliyor.
Şöyle birşey yapsak? Regex-da "\n" yakalanan verinin numarasını veriyordu biliyorsunuz. "\1" veya "\t" ise yakalanan verinin kendisini veriyordu.
-
Daha iyi anlamak için verdiğim iki küçük örneğe bakınız:

Ö1: //echo -: $regsubex(deneme,/(e)/g,\n)
Sonuç: d1n2m3 (yakalanan veriler yakalam sırasına göre numaralandırıldı)
-
Ö2: //echo -: $regsubex(deneme,/(e)/g,\1)
Sonuç: deneme (yakalanan veriler(tüm e harfleri oluyor bunlar) aynı biçimde gösterildi.

Buraya kadar anlaşılmayan birşey yok sanırım.
En son yapmamız gereken küçük bir IF sorgusu. Diyeceğizki; yakalanan veri numarası "2" sayısının katları ise, belirtilen rengi re-text edeceğiz. Eğer değilse, normal bir şekilde re-text edeceğiz. Yani kısacası şu şekilde olacak; "d1n2[burayı re-text et]m3" şeklinde. Ben artık daha fazla uzatmadan size yazdığım kodu veriyorum.
-
Kod: $regsubex($1-,/(.)/g,$iif(2 \\ \n,$+($chr(3),4,\1,$chr(3),1),\1))
-
Demekki neymiş?
Bu veya buna benzer(büyük/küçük harf mesela) bir kod için 3/5 tane loop kullanmaya ve en az 25 satır kod yazmaya gerek yokmuş.
Ve bir süpriz daha, aynı mantığı kullanarak harflerin büyük/küçük olmasınıda sağlayabiliyoruz.
-
Kod: $regsubex($1-,/(.)/g,$iif(2 \\ \n,$upper(\1),$lower(\1)))
-

Son olarak hepsini bir arada toparla*****, bir kod yazıyorum ve ders niteliğinde olan makalemizi sonlandırıyorum.

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
alias _t { if ($isid && $regex(+t,$1,^(caps|color|bold)$)) { var %_t = $regml(+t,1),%_r = return,%_2 = $iif($2,$v1),%_3 = $iif($3,$v1) if ($(,%_t) = caps) %_r $regsubex($$2-,/(.)/g,$iif(2 \\ \n,$upper(\1),$lower(\1))) if ($(,%_t) = bold) %_r $regsubex($$2-,/(.)/g,$+($chr(2),\1)) if ($(,%_t) = color) %_r $regsubex($$4-,/(.)/g,$iif(2 \\ \n,$+($chr(3),%_2,\1,$chr(3),%_3),\1)) } }

Kullanım: $_t(bold|caps|color,text)
Kullanım(color hakkında): 2 renk belirlemelisiniz. Bu belirlediğiniz 2 renk sayesinde re-text olacaktır. Örneğin: $_t(color,4,2,deneme)
Açıklama: 4 ilk rengin, 2 ise ikinci rengin kodudur. Tabiki siz bunları değiştirip istediğiniz renk yapabilirsiniz. Bu sadece bir örnektir. Renk kodlarını görmek/öğrenmek için; CTRL+K yapınız.
-
Örnek kullanımlar:
-
Büyük/küçük yazı: //echo -: $_t(caps,Deneme yapıyoruz.)
Sonuç: DeNeMe yApıyOrUz.
-
Kalın/ince yazı: //echo -: $_t(bold,Deneme yapıyoruz.)
Sonuç: Deneme yapıyoruz.
-
Renkli yazı: //echo -: $_t(color,4,2,Deneme yapıyoruz.)
Sonuç: Deneme yapıyoruz.

-
Makalemiz sona ermiştir.

NOT: hiçbir platformu düşünmeden sadece kişinin birşey öğrenmesini istediğim(iz) için paylaşıma sunuldu.
dilerimki amacımıza ulaşırız.

__________________
Şimdi Saat Sensizliğin Ertesi..

Konu L4roXyL tarafından (08 Haziran 2011 Saat 06:31 ) değiştirilmiştir.
 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklam ver Benimmekan Mobil Sohbet
Alt 23 Eylül 2009, 13:52   #2
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: Regex ile Yazı Tipleri




bu input'ların çakışmasınıda ortadan kaldırıcaktır.muhteşemsiniz.

 
Alıntı ile Cevapla

Alt 06 Kasım 2011, 20:26   #3
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: Regex ile Yazı Tipleri




Büyük/küçük yazı: //echo -: $_t(caps,Deneme yapıyoruz.)
Sonuç: DeNeMe yApıyOrUz.
-
Kalın/ince yazı: //echo -: $_t(bold,Deneme yapıyoruz.)
Sonuç: Deneme yapıyoruz.
-
Renkli yazı: //echo -: $_t(color,4,2,Deneme yapıyoruz.)
Sonuç: Deneme yapıyoruz.


Ben bunları deniyorum ama olmuyor.

* /echo: Yetersiz veya eksik parametre

Böyle hata veriyor.

 
Alıntı ile Cevapla

Alt 06 Kasım 2011, 22:08   #4
Çevrimiçi
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: Regex ile Yazı Tipleri




Minstrel Nickli Üyeden Alıntı
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Büyük/küçük yazı: //echo -: $_t(caps,Deneme yapıyoruz.)
Sonuç: DeNeMe yApıyOrUz.
-
Kalın/ince yazı: //echo -: $_t(bold,Deneme yapıyoruz.)
Sonuç: Deneme yapıyoruz.
-
Renkli yazı: //echo -: $_t(color,4,2,Deneme yapıyoruz.)
Sonuç: Deneme yapıyoruz.


Ben bunları deniyorum ama olmuyor.

* /echo: Yetersiz veya eksik parametre

Böyle hata veriyor.

Denemiş olduğun komutların, aktif olması için anladığım kadarıyla makale bitimin de, yazılan kod'un script'inin remote bölümün de, ekli olması gerekiyor.

__________________
-
 
Alıntı ile Cevapla

Alt 06 Kasım 2011, 22:36   #5
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: Regex ile Yazı Tipleri




Regex normalde oluyordu, sadece komutla. Tam anlamadım konuyu birşeyleri eksik yapıyor olabilirim.

 
Alıntı ile Cevapla

Alt 07 Kasım 2011, 07:08   #6
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: Regex ile Yazı Tipleri




Minstrel Nickli Üyeden Alıntı
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Regex normalde oluyordu, sadece komutla. Tam anlamadım konuyu birşeyleri eksik yapıyor olabilirim.


_t ile oluşturulan aliasın mirce ekli olması dahilinde çalışabilecek bir kod. Evet regex vb identifierlar echo ile döndürebiliriz ancak ve ancak yukarıdaki gibi bir alias ile oluşturulan kod mevcutsa o alias kodu mirce ekli değilse netice alamazsınız.

alias _t {
if ($isid && $regex(+t,$1,^(caps|color|bold)$)) {
var %_t = $regml(+t,1),%_r = return,%_2 = $iif($2,$v1),%_3 = $iif($3,$v1)
if ($(,%_t) = caps) %_r $regsubex($$2-,/(.)/g,$iif(2 \\ \n,$upper(\1),$lower(\1)))
if ($(,%_t) = bold) %_r $regsubex($$2-,/(.)/g,$+($chr(2),\1))
if ($(,%_t) = color) %_r $regsubex($$4-,/(.)/g,$iif(2 \\ \n,$+($chr(3),%_2,\1,$chr(3),%_3),\1))
}
}


bu kodu remoteye ekleyip yeniden echo komutunu deneyin.

__________________
Şimdi Saat Sensizliğin Ertesi..
 
Alıntı ile Cevapla

Alt 16 Nisan 2020, 23:03   #7
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: Regex ile Yazı Tipleri




sadece kalın yazmak istiyorum nasıl bir kod gerekiyor ?

 
Alıntı ile Cevapla

Alt 16 Haziran 2021, 10:04   #8
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: Regex ile Yazı Tipleri




CesuryureK Nickli Üyeden Alıntı
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
_t ile oluşturulan aliasın mirce ekli olması dahilinde çalışabilecek bir kod. Evet regex vb identifierlar echo ile döndürebiliriz ancak ve ancak yukarıdaki gibi bir alias ile oluşturulan kod mevcutsa o alias kodu mirce ekli değilse netice alamazsınız.

alias _t {
if ($isid && $regex(+t,$1,^(caps|color|bold)$)) {
var %_t = $regml(+t,1),%_r = return,%_2 = $iif($2,$v1),%_3 = $iif($3,$v1)
if ($(,%_t) = caps) %_r $regsubex($$2-,/(.)/g,$iif(2 \\ \n,$upper(\1),$lower(\1)))
if ($(,%_t) = bold) %_r $regsubex($$2-,/(.)/g,$+($chr(2),\1))
if ($(,%_t) = color) %_r $regsubex($$4-,/(.)/g,$iif(2 \\ \n,$+($chr(3),%_2,\1,$chr(3),%_3),\1))
}
}


bu kodu remoteye ekleyip yeniden echo komutunu deneyin.


Selamün Aleyküm..

üstad benim istediğin ise farklı. Nicki normal yazacak, devamında yazılar ince olacak. Nick yazmadığımda da ince yazmasını istiyorum. Yapabilir miyiz?
Örnek:
StyLe Merhaba hoşgeldin

 
Alıntı ile Cevapla

Alt 17 Haziran 2021, 17:48   #9
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: Regex ile Yazı Tipleri




DeLiKanLl Nickli Üyeden Alıntı
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
Selamün Aleyküm..

üstad benim istediğin ise farklı. Nicki normal yazacak, devamında yazılar ince olacak. Nick yazmadığımda da ince yazmasını istiyorum. Yapabilir miyiz?
Örnek:
StyLe Merhaba hoşgeldin

İstediğiniz ile yazılan makale arasında bir ilişki bulunmamakla birlikte bu tarz isteklerinizi "mIRC Scripting Sorunları" bölümünde konu açarak talepte bulunabilirsiniz.

Lakin buna rağmen vaktiğim olduğundan istediğini yazdım. Aşağıdaki kodu remote bölümüne kopyalıyorsunuz. Başka input eventi ile çakışmadığından emin olunuz.

NOT: Kod hem özelde hem de kanalda çalışmaktadır. (Bu arada aradan 12 yıl geçmiş..)


Kod:   Kodu kopyalamak için üzerine çift tıklayın!
on *:input:*: { if (!$inpaste && !$ctrlenter && !$regex($1,/^\//)) { if ($target == $chan) { msg $chan $+($chr(2),$regsubex($1-,/(\S+)/gi,$iif(\1 ison #,$+($chr(2),\1,$chr(2)),\1))) | halt } else { if ($active != Status Window) { msg $target $+($chr(2),$regsubex($1-,/(\S+)/gi,$iif(\1 == $active,$+($chr(2),\1,$chr(2)),\1))) | halt } } } }


__________________
Şimdi Saat Sensizliğin Ertesi..

Konu CesuryureK tarafından (17 Haziran 2021 Saat 17:52 ) değiştirilmiştir.
 
Alıntı ile Cevapla

Cevapla

Etiketler
ile, mirc, mirc download, mirc indir, regex, tipleri, yazi, yazı


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Degişik yazı tipleri kısayol nick tablama Eksen mIRC Scripting Sorunları 1 15 Ekim 2013 04:48
Özgür Yazı Tipleri Ocean GNU, Linux ve UNIX 0 26 Ocak 2011 12:48
Sekiz farklı yazı stili(regex) dennis mIRC Scripting Hazır Kodlar 1 03 Ocak 2011 18:43
Mirc ta yazı tipleri addonu Maniack mIRC Scripting Hazır Kodlar 3 07 Aralık 2010 14:39
Yazı tipleri yönetimi değişiyor Ocean Windows 0 12 Kasım 2008 10:19