2012-01-22 22 views
8

Belirli bir dil için sözdizimi vurgulama belirtmeme izin veren bir araç var mı, daha sonra bazı yaygın editörler için sözdizimi vurgulama dosyaları oluşturulsun mu?Syntax Çoklu düzenleyicilerle çalışan vurgulama aracı/dili

Çünkü bir alana özel bir dil geliştirdiğim için ve sözdizimi için sözdizimi vurgulama desteği sağlamak istiyorum. Bununla birlikte, her bir editör (Vim, Notepad ++, Visual Studio, vb.) Için ayrı sözdizimi vurgulama dosyaları yazmak istemiyorum.

Sözdizimi vurgulamak için temel kavramlar genellikle kullandığınız düzenleyiciden bağımsız olarak, bu tür çeviri mümkün görünmektedir. Ben zaten böyle bir şeyin var olup olmadığını bilmiyorum.

cevap

1

Bunun gibi bir şey bilmiyorum, ama bence, üretmek oldukça kolay olurdu. Örneğin, XML tabanlı bir evrensel format (bir DTD/XSL şeması biçiminde) oluşturabilir ve editöre özgü XSLT dönüşümlerini kullanabilir. Daha sonra, her editör yaratıcısı (ya da başka biri) editörüne bir XSLT dosyası oluşturur. Her yeni dil için bir XML oluşturulacaktı.

  • bütünlüğü ile:

    en büyük sorun, en azından bu kriterleri yerine getirmektedirler böyle bir dil belirtmektir o dizim yapılandırmanın mümkün olan tüm özelliklerini içermelidir.

  • Kullanım kolaylığı: Basit diller için aşırı karmaşık olmamalı.
  • Açıklık ve standartlaştırma: yararlı olması popüler olmalıydı. Popüler olmak için açık ve standartlaştırılmalıdır.
+0

Sözdizimi vurgulamak için evrensel bir biçim/dil oluşturma hakkında benzer düşüncelerim vardı. XML de düşünüyordu). 2-yollu çeviriler yapabilecekseniz, gerçekten çok iyi olurdu, böylece eğer birisi zaten bir sözdizimi formatını biliyorsa, bunu 'evrensel' biçime, sonra diğer tüm biçimlere dönüştürebilirdi. Havalı bir fikir gibi görünüyor - belki zaman ayırdığımda daha fazla bakacağım: o) – simplyletgo

2

kaynak kod düzenleme ve dizim editörler kullanım scintilla (http://www.scintilla.org/) Oldukça çok: gnome içinde örnek pencerelerde Notepad ++, gedit için, Code :: blokları. Bu nedenle Scintilla'ya bir sözdizimi tanımı eklemeyi düşünebilirsiniz. Anladığım kadarıyla, bu sizin diliniz için bir lexer xml tanımının yazılması meselesidir (örneğin Code :: Blocks için this page'a bakın)