Soru & Cevap

Online Metin Editörü ...

04.05.2016 - 09:14

Ben online bir metin editörü yapmak istiyorum bunun için bir textarea koydum fakat içine benim belirttiğim kelimeler yazılırsa yazı kırmızıya dönsün istiyorum bunu nasıl yapabilirim (notepad++ daki gibi) ??

 

152 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-15363-1422127955.jpg
ahmetyaylalioglu
10.05.2016 - 12:46

Anladığım kadarıyla yapmak istediğin işlem text parsing.Kod editörünü kendin sıfırdan yapmak istemezsen TinyMCE tarzı hazır javascript bileşenler faydalı olabilir.Kullanabileceğin buna benzer şeyler istersen burada birkaç tane daha var açıklamalarıyla beraber.Text parsing işlemi,derleyici mimarisinin bir bölümünü oluşturan bir konu.Sen ise bu durumda istediğin işlemi yapabilmek için javascript split metodunu kullanabilirsin.Son kullanıcının text area ya da text box içine yazdıklarını parçalara ayırıp kelime tanıma işlemi yapıp buna göre istediğin renklendirme işlemini yapabilirsin.

Örneğin aşağıdaki gibi tek satırlık bir kodumuz olsun.Burada int kelimesinin rengini değiştirmek istediğimizi varsayalım.

#int sayi1;
 float sayi2; 

Burada int kelimesini tanıyıp işlem yapmak istiyorsak int kelimesini,önündeki # direktifinden anlarız.# işaretinden sonra boşluğa kadar olan kısmı tanı.Bu kısım int kelimesine eşit ise şunları yap diyebiliriz.İkinci kısımda ise bir özel karakter olmadan kelime tanımamız gerekli.

Aşağıda yazmaya çalışacağım kod ile anlatmaya çalışacağım.İfadeleri gerekli şekilde ayırdıktan sonra istediğin işlemleri üzerlerine uygulayabilirsin diye düşünüyorum.

var yazi = ..;
var kelimeler = yazi.split(" "); //yazılanları kelime kelime ayir,aralarında boşluk olup olmamasına göre
var n = kelimeler.length;
var i;
var suanIslenenKisim;
var ifadeDizisi = Array();
var kisimDizisi = Array();

for (i = 0; i < n; i++) {
  var kelime = kelimeler[i];
  if (kelime.indexOf('#') == 1) {
    //örneğin int'li ifadenin başlangıcı burası,bundan sonra aşağıdaki döngüye geçicek
    break;
  } else {
    // Ya da ifadeyi dizi içine alacağız
    ifadeDizisi.push(kelime);
  }
}

for ( ; i < n; i++) {
  var kelime = kelimeler[i];
  if (kelime.indexOf('#') == 1) {
    suanIslenenKisim = kelime;
    kisimDizisi[suanIslenenKisim] = new Array();
  } else {
    kisimDizisi[suanIslenenKisim].push(kelime);
  }
}

Biraz karışık olduğunun farkındayım JS ile ilgili herhangi bir tecrübem yok,mantık olarak aktarmaya çalıştım.Kolay gelsin