Warning:
This wiki has been archived and is now read-only.

Talk:CSS2

From HTML5 Chinese Interest Group Wiki
Jump to: navigation, search

進度

完成率(已翻譯小節數/總小節數):84/252 ≅ 33.3%

本页的编辑者都来自我介绍一下

Kennyluck 呂康豪 網名kennyluck 郵箱kennyluck@w3.org

xiaohao 吴天豪 网名小豪 邮箱maisui99@gmail.com

EricDum 代立晨 网名EricDum/木匠 邮箱formateric@gmail.com 求指导

貢獻提報

新段落推薦表示各個人覺得值得翻譯的章節。

參與者 達標段落 新段落推薦 目標段落
RainZhai(未登記) 9 可视化格式模型(26 節)
10.1 包含块的定义
kennyluck 1.4 常規(3 節)
6 指配屬性值、層疊與繼承(6 節)
9 可视化格式模型(3 節)
10 視覺布局模型細節(25 節)
11 視覺效果(4 節)
17 表格(4 節)
苦瓜(未登記) 18 使用者界面(用户界面)(6 節)
NiuXG 7 媒介型態(5 節) 7 媒介型態
1.4.2.2 初始 - 1.4.5 CSS 图像和长描述
3 規範符合:要求與建議
8 盒模型
17 表格
Xiaohao(未登記) 5.1 模式匹配 选择器

核心語法(普遍版)

(1) stylesheet : [ ignored | statement ]* selector? EOF+;
(2) statement : ruleset | at-rule;
(3) at-rule : ATKEYWORD [ any | ']' | ')' | '}' | ATKEYWORD | CDO | CDC ]* [ block | ';' | EOF ];
(4) ruleset : selector? '{' declaration? [ ';' declaration? ]* [ '}' | EOF ];
(5) declaration : [ no-close | ']' | ')' ]+;
(6) selector : [ any | ';' | ']' | ')' | '}' ] [ any | ';' | ']' | ')' | '}' | ATKEYWORD | CDO | CDC ]*;
(7) any : [ IDENT | NUMBER | PERCENTAGE | DIMENSION | STRING | DELIM | URI | HASH
  | UNICODE-RANGE | INCLUDES | DASHMATCH | ':' | BAD_STRING
  | [ FUNCTION | '(' | BAD_URI ] [ no-close | ']' | ';' | '}' ]* ')'
  | '['                          [ no-close | ')' | ';' | '}' ]* ']' ]
  | [
FUNCTION | '(' | BAD_URI ] [ no-close | ']' | ';' | '}' ]* EOF
  | '['                          [ no-close | ')' | ';' | '}' ]* EOF
  | [ BAD_STRING | BAD_COMMENT ] EOF;
(8) block :   '{'                          [ no-close | ')' | ';' | ']' ]* [ '}' | EOF ];
(9) no-close : any | block | ATKEYWORD | CDO | CDC;
(10) ignored : [ CDO | CDC ];

其中,EOF 是檔案結尾 token。為了可讀性,已將所有空白 token(S)拿掉,空白 token 可以出現在所有地方。這個核心語法描述 CSS 2.1 解析的幾個規則:

  • 核心語法的目的,是將一個 stylesheet 分成一個 statement 列,再將每一個是 rulesetstatement 的內容分成一個 declaration 列,將這些構造丟給次級語法解析,若是使用者代理不能辨識的構造(@關鍵字不認識、選擇器不認識或是沒有選擇器、屬性不認識),則丟掉整個相應構造。
  • 也就是說,丟棄基本上是找尋該構造的結尾(at-rule 的結尾是一個 block 或是一個分號、ruleset 的結尾是一個 blockdeclaration 的結尾是一個分號或是外圍的右花誇號),但是丟棄過程中遵守 ()、[]、{} 的配對規則(其中 BAD_URI 算作左小誇號)。
  • 決定一個 statementat-rule 還是 ruleset 看第一個 token 是不是 ATKEYWORD
  • 檔案尾端自動補完規則(參考原規範範例)。
  • CDOCDC 只在還沒解析第一個 token 的時候會被省略(其餘就是當作不可辨識的 at-ruleruleset 的一部分),在 ruleset 的宣告塊裡也不會被省略。

TODO

  • 完整測試這個語法的瀏覽器兼容狀況(特別是 BAD_URICDOCDC 的部份)
  • 寫出 @mediablock 內容語法(其實就是 at-ruleruleset 前面都不能有 '}'stylesheet。)也要測試一下有沒有在這個地方不省略 CDOCDC 的瀏覽器。
  • 用 EBNF 的 '-' 號讓這個文法更好讀。
  • 了解這是 L-?
  • 了解各 CSS 解析引擎用(例如:SASS)的合不合這個文法,還是拋錯。

參見

  • 在 public-html-ig-zh 上的說明(附有 bison 程式碼)和 www-style 的發表(英文)
  • 一篇有提到錯誤處理規則 + 把 HTML 當作 CSS 解析造成安全問題的論文