diff --git a/CHANGELOG.md b/CHANGELOG.md index 326aa8c..6e79dd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # 更新日志 +## 0.3.8 + +* 修复 CSS `@charset` 可能导致无法解析的 BUG + ## 0.3.7 * 完善伪类选择器支持 diff --git a/README.md b/README.md index 5fd10b2..2a2a6d4 100644 --- a/README.md +++ b/README.md @@ -56,19 +56,19 @@ font-spider [options] #### 示例 -1. 使用通配符压缩多个 HTML 文件关联的 WebFont: +1\. 使用通配符压缩多个 HTML 文件关联的 WebFont: ``` shell font-spider dest/*.html ``` -2. 使用 `--map ` 参数将线上的页面的 WebFont 映射到本地来进行压缩: +2\. 使用 `--map ` 参数将线上的页面的 WebFont 映射到本地来进行压缩: ``` shell font-spider --map http://font-spider.org/font,./font http://font-spider.org/index.html ``` -3. 使用 `--ignore ` 忽略文件: +3\. 使用 `--ignore ` 忽略文件: ``` shell font-spider --ignore *-icon.css,*.eot dest/*.html diff --git a/package.json b/package.json index 993a329..d872776 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "font-spider", "description": "Webfont optimizer", - "version": "0.3.7", + "version": "0.3.8", "homepage": "https://github.com/aui/font-spider", "author": { "name": "aui", @@ -14,12 +14,6 @@ "bugs": { "url": "https://github.com/aui/font-spider/issues" }, - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/aui/font-spider/blob/master/LICENSE-MIT" - } - ], "bin": { "fs": "bin/font-spider", "font-spider": "bin/font-spider" diff --git a/src/spider/css-parser.js b/src/spider/css-parser.js index 024ab7c..16eaf39 100644 --- a/src/spider/css-parser.js +++ b/src/spider/css-parser.js @@ -47,9 +47,7 @@ function CssParser (resource /*,importLength*/) { } - // CSSOM BUG? - content = content.replace(/@charset\b.+;/g, ''); - + content = getContent(content); try { ast = CSSOM.parse(content); @@ -342,6 +340,8 @@ CssParser.Parser.prototype = { id: [], family: [], files: [], + // TODO [data-name="ss,ss"] + // /((?:[^,"']|"[^"]*"|'[^']*')+)/ selectors: utils.commaToArray(selectorText), chars: content.split(''), options: {} @@ -457,7 +457,13 @@ getFontId.alias = { - +function getContent (content) { + // 去掉 @charset,因为它可能触发 cssom 库的 bug + // 使用空格占位避免改动代码位置 + return content.replace(/^(\@charset\b.+?;)(.*?)/i, function ($0, $1, $2) { + return Array($1.length).join(' ') + $2 + }); +}