Bütünleşik Biçembentler, 2. Aşama | ||
---|---|---|
Önceki | Yukarı | Sonraki |
Bu ek bölüm uyulması zorunlu bölümlerden biridir.
Aşağıdaki dilbilgisi kuralları BB2'nin sözdizimini tanımlar. Bazı bakımlardan, belirtimin kendisi bu dilbilgisi içinde ifade edilmemiş ek anlambilgisi içermektedir. Belirtime uyumlu bir kullanıcı arayüzünün ayrıca, Sözdizimi, BB nitelik tanımları ve birim gösterimlerine de uyması gerekir. Ek olarak, belge dili de kısıtlamalar getirebilir; örneğin HTML 'class' özniteliğinin olası değerleri üzerinde kısıtlamalara sahiptir.
Aşağıdaki sözdizimi tanımları, çözümleme uzlaşımlarını ifade etmediğinden kullanıcı arayüzlerinin kullanması için değildir, sadece BB2 sözdizimini belirtir. Sözdizimi tanımları insanlar tarafından kullanılabilsin diye eniyilenmiş olup bazı kısa gösterimler için [YACC] gösterimleri kullanılmıştır:
[1] | Biçembent | ::= | [ |
[ | |||
[ [ | |||
[2] | İçeren | ::= |
|
[3] | Ortam | ::= |
|
[4] | OrtamAdı | ::= |
|
[5] | YazıcıOrtamı | ::= |
|
[6] | SözdeSayfa | ::= | ':' |
[7] | Yazıtipi | ::= |
|
[8] | İşleç | ::= | '/' |
[9] | Birleştirici | ::= | '+' |
[10] | TekTerimli | ::= | '-' | '+' |
[11] | Nitelik | ::= |
|
[12] | KuralKümesi | ::= |
|
[13] | Blok | ::= | '{' |
[14] | Seçici | ::= |
|
[15] | BasitSeçici | ::= |
|
[16] | Sınıf | ::= | '.' |
[17] | ElemanAdı | ::= |
|
[18] | Öznitelik | ::= | '[' |
[ | |||
[19] | SözdeBirŞey | ::= | ':' [ |
[20] | Bildirim | ::= |
|
[21] | Önem | ::= |
|
[22] | İfade | ::= |
|
[23] | Terim | ::= |
|
[ | |||
[24] | İşlev | ::= |
|
[25] | Renk | ::= |
|
Renk
değerleri üzerinde bir kısıtlama vardır: bir '#' karakterinden hemen sonra gelen ya 3 ya da 6 adet onaltılık rakamdan (yani, [0-9a-fA-F]) oluşmaları gerekir; örneğin, "#000" geçerlidir ama "#abcd" geçerli değildir.
[26] | Onaltı | ::= | [0-9a-f] | |
[27] | AsciiDışı | ::= | [\80-\10ffff] | |
[28] | Unicode | ::= | '\' | |
[29] | Öncelem | ::= |
| |
[30] | AdBaşl | ::= | [_a-z] | | |
[31] | AdKark | ::= | [_a-z0-9-] | | |
[32] | Dizge1 | ::= | '"' ([\t !#$%&(-~] | | |
[33] | Dizge2 | ::= | "'" ([\t !#$%&(-~] | | |
[34] | Betimleyici | ::= |
| |
[35] | Ad | ::= |
| |
[36] | Sayı | ::= | [0-9]+ | [0-9]* '.' [0-9]+ | |
[37] | Dizge | ::= |
| |
[38] | URL | ::= | ([!#$%&*-~] | | |
[39] | KBoş | ::= | [ \t\r\n\f]* | |
[40] | SatırSonu | ::= | \n | \r\n | \r | \f | |
[41] | Aralık | ::= | '?'{1,6} | | |
[42] | B | ::= | [ \t\r\n\f]+ | |
[43] | Açıklama | ::= | \/\*[^*]*\*+([^/][^*]*\*+)*\/ | /* ignore comments */ |
[44] | AçkBaşEtk | ::= | '<!--' | |
[45] | AçkBitEtk | ::= | '-->' | |
[46] | BoşlukluEşlem | ::= | '~=' | |
[47] | TireliEşlem | ::= | '|=' | |
[48] | Diyez | ::= | '#' | |
[49] | Import_İmi | ::= | '@import' | |
[50] | Page_İmi | ::= | '@page' | |
[51] | Media_İmi | ::= | '@media' | |
[52] | FontFace_İmi | ::= | '@font-face' | |
[53] | Charset_İmi | ::= | '@charset' | |
[54] | Önemli_İmi | ::= | '!' | |
[55] | EmUzunluk | ::= |
| |
[56] | EksUzunluk | ::= |
| |
[57] | Uzunluk | ::= |
| |
| ||||
| ||||
| ||||
| ||||
| ||||
[58] | Açı | ::= |
| |
| ||||
| ||||
[59] | Süre | ::= |
| |
| ||||
[60] | Frekans | ::= |
| |
| ||||
[61] | Boyut | ::= |
| |
[62] | YüzdeDeğeri | ::= |
| |
[63] | TanımYeri | ::= | 'url(' | |
'url(' | ||||
[64] | İşlevBaşı | ::= |
| |
[65] | UnicodeAralığı | ::= | 'U+' |
Aşağıdaki dizgecikler [FLEX] gösterimiyle yazılmıştır ve harf büyüklüğüne duyarlı değillerdir.
Aşağıda yer alan her iki "\377" değeri de Flex'in çalışabildiği en büyük karakter numarasını (onluk tabanda 255) göstermektedir. Bunlar Unicode/ISO-10646'da en büyük karakter kodu olan ve BB2'de geçerli bir karakter öncelemi olarak "\10FFFF" şeklinde okunmalıdır.
%option case-insensitive h [0-9a-f] nonascii [\200-\377] unicode \\{h}{1,6}[ \t\r\n\f]? escape {unicode}|\\[ -~\200-\377] nmstart [a-z]|{nonascii}|{escape} nmchar [a-z0-9-]|{nonascii}|{escape} string1 \"([\t !#$%&(-~]|\\{nl}|\'|{nonascii}|{escape})*\" string2 \'([\t !#$%&(-~]|\\{nl}|\"|{nonascii}|{escape})*\' ident {nmstart}{nmchar}* name {nmchar}+ num [0-9]+|[0-9]*"."[0-9]+ string {string1}|{string2} url ([!#$%&*-~]|{nonascii}|{escape})* w [ \t\r\n\f]* nl \n|\r\n|\r|\f range \?{1,6}|{h}(\?{0,5}|{h}(\?{0,4}|{h}(\?{0,3}|{h}(\?{0,2}|{h}(\??|{h}))))) %% [ \t\r\n\f]+ {return S;} \/\*[^*]*\*+([^/][^*]*\*+)*\/ /* ignore comments */ "<!--" {return CDO;} "-->" {return CDC;} "~=" {return INCLUDES;} "|=" {return DASHMATCH;} {string} {return STRING;} {ident} {return IDENT;} "#"{name} {return HASH;} "@import" {return IMPORT_SYM;} "@page" {return PAGE_SYM;} "@media" {return MEDIA_SYM;} "@font-face" {return FONT_FACE_SYM;} "@charset" {return CHARSET_SYM;} "@"{ident} {return ATKEYWORD;} "!{w}important" {return IMPORTANT_SYM;} {num}em {return EMS;} {num}ex {return EXS;} {num}px {return LENGTH;} {num}cm {return LENGTH;} {num}mm {return LENGTH;} {num}in {return LENGTH;} {num}pt {return LENGTH;} {num}pc {return LENGTH;} {num}deg {return ANGLE;} {num}rad {return ANGLE;} {num}grad {return ANGLE;} {num}ms {return TIME;} {num}s {return TIME;} {num}Hz {return FREQ;} {num}kHz {return FREQ;} {num}{ident} {return DIMEN;} {num}% {return PERCENTAGE;} {num} {return NUMBER;} "url("{w}{string}{w}")" {return URI;} "url("{w}{url}{w}")" {return URI;} {ident}"(" {return FUNCTION;} U\+{range} {return UNICODERANGE;} U\+{h}{1,6}-{h}{1,6} {return UNICODERANGE;} . {return *yytext;}
BB1 önergesinde ([CSS1]) belirtilen sözdizimi yukarıdakinden biraz farklıdır. Çoğu BB2'deki bazı dizgeciklerin BB1'de bulunmayışındandır. Diğerleri dilbilgisinin daha okunabilir olması için yeniden yazılmasından kaynaklanmıştır. Bununla birlikte, BB1 ile uyumlu olmayan ve BB1'de hatalara yol açabilecek bazı değişiklikler de vardır. Bunlara burada değinilmiştir.
BB1 biçembentlerinde karakterler sadece 1 bayt uzunlukta olabilmektedir (ASCII ve ISO-8859-1'de olduğu gibi). BB2 için böyle bir sınırlama yoktur. Uygulamada zaten BB1 dizgeciklerini tahminde küçük zorluklar yaşanmaktaydı ve bazı kullanıcı arayüzleri 2 baytlık kodlamaları kabul etmekteydi.
BB1'de Unicode karakterlerine atıfta bulunmak için tersbölüden sonra dört adet onaltılık rakama izin verilmekteydi, BB2'de altı rakama izin verilmektedir. Örneğin, BB1'de "\abcdef" dizgesi üç Unicode karakterini ifade etmesine (\abcd, e ve f) karşın, BB2'de aynı dizi tek bir karakteri ifade eder. Bundan başka, BB2 karakter öncelemlerini sınırlamak için boşluk karakterlerinin kullanımına da izin vermektedir.
Dizgelerde sekme karakterlerine (ASCII 9) izin verilmezdi. Bununla birlikte, BB1'de dizgelere sadece yazıtipi isimlerinde ve tanım-yerlerinde izin verilmekteydi. Bu bakımdan, BB2 ile BB1 arasındaki uyumsuzluk isminde sekme karakteri bulunan bir yazıtipi ismi kullanıldığında ortaya çıkacaktır.
Benzer şekilde, satırsonu karakterlerine de (tersbölü ile öncelenmiş olarak) BB1 dizgelerinde izin verilmezdi.
BB2 hemen ardından bir betimleyici gelen bir sayıyı bir Boyut
dizgeciği olarak çözümlerken (örn, bilinmeyen bir birim olarak), BB1 bunu bir sayı ve bir betimleyici olarak çözümlerdi. Bu, şu anlama gelir: BB1'de 'font: 10pt/1.2serif
' bildirimi doğruydu; BB2'de "serif" dizgesinden önce bir boşluk gerekir; BB2'de 'font: 10pt/12pt serif
' bildirimi doğrudur. (Bazı kullanıcı arayüzleri birinci bildirimi kabul eder, ikincisini değil.)
BB1'de bir sınıf ismi, bir boyut olmadıkça (".55in") bir rakamla başlayamaz (".55ft"). BB2'de böyle sınıflar bilinmeyen boyutlar olarak çözümlenir (belirtimin ileri aşamalarında yeni birimleri mümkün kılabilmek için). ".55ft" isminin geçerli bir sınıf olabilmesi için BB2'de ilk rakamın öncelenmesi (".\35 5ft") gerekir.
Önceki | Yukarı | Sonraki |
Implementation and performance notes for fonts | Bir Linux Kitaplığı Sayfası | References |