diff --git a/CHANGELOG.md b/CHANGELOG.md index 61913b4..326aa8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # 更新日志 +## 0.3.7 + +* 完善伪类选择器支持 +* 给部分不支持的 CSS 规则显示警告信息 + ## 0.3.6 * 修复 BUG [#43](https://github.com/aui/font-spider/issues/43) diff --git a/README.md b/README.md index 64c9fb9..5fd10b2 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ font-spider --ignore *-icon.css,*.eot dest/*.html ``` shell -h, --help 输出帮助信息 -V, --version 输出当前版本号 ---info 仅提取 WebFont 信息显示,不压缩与转码 +--info 输出 WebFont 的 JSON 描述信息,不压缩与转码 --ignore 忽略的文件配置(可以是字体、CSS、HTML) --map 映射 CSS 内部 HTTP 路径到本地(支持正则表达式) --no-backup 关闭字体备份功能 @@ -101,10 +101,10 @@ font-spider --ignore *-icon.css,*.eot dest/*.html - 仅支持 `link` 与 `style` 标签引入的样式,不支持元素行内样式 - 仅支持固定的文本与样式,不支持 javascript 动态插入的元素与样式 +- 不支持字体继承(例如 CSS `content` 属性插入的字符需要声明 `font-family`) - .otf 字体需要转换成 .ttf 才能被压缩 - 仅支持 `utf-8` 编码 - 不支持 CSS `unicode-range` 属性 -- 不支持字体继承(例如 CSS `content` 属性插入的字符需要定义 `font-family`) ## 字体兼容性参考 diff --git a/package.json b/package.json index 3bd11ce..993a329 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "font-spider", "description": "Webfont optimizer", - "version": "0.3.6", + "version": "0.3.7", "homepage": "https://github.com/aui/font-spider", "author": { "name": "aui", @@ -48,6 +48,10 @@ "devDependencies": { "mocha": "=2.2.5" }, + "license": { + "type": "MIT", + "url": "http://creativecommons.org/licenses/MIT/" + }, "keywords": [ "font", "fontforge", diff --git a/src/compress/index.js b/src/compress/index.js index 5640032..6031b6e 100644 --- a/src/compress/index.js +++ b/src/compress/index.js @@ -132,7 +132,8 @@ Compress.prototype = { var fontmin = new Fontmin().src(source); var temp = path.join(dirname, TEMP + number); - + // 有些 webfont 使用 content 属性加字体继承,查询不到 chars + // 不压缩,避免意外将 fonticon 干掉了 if (webFont.chars) { fontmin.use(Fontmin.glyph({ text: webFont.chars diff --git a/src/spider/css-parser.js b/src/spider/css-parser.js index 787c0cb..024ab7c 100644 --- a/src/spider/css-parser.js +++ b/src/spider/css-parser.js @@ -210,7 +210,7 @@ CssParser.Parser.prototype = { var url = utils.unquotation(rule.href.trim()); url = utils.resolve(base, url); - url = this._uri(url); + url = this._getUrl(url); if (!url) { @@ -298,7 +298,7 @@ CssParser.Parser.prototype = { var urls = []; src.forEach(function (file) { file = utils.resolve(base, file); - file = that._uri(file); + file = that._getUrl(file); if (file) { urls.push(file); } @@ -321,7 +321,20 @@ CssParser.Parser.prototype = { var selectorText = rule.selectorText; - var content = utils.unquotation(style.content || ''); + var content = style.content || ''; + + // CSS content 属性 + // @see https://developer.mozilla.org/en-US/docs/Web/CSS/content + if (/^['"]|['"]$/.test(content)) { + content = utils.unquotation(content); + } else if (/^(?:open|close)-quote$/.test(content)) { + + console.warn('[WARN]', 'does not support `content: ' + content + '`', + 'from:', this.file, + 'selector:', selectorText); + + } + var model = new CssParser .Model('CSSStyleRule') @@ -369,6 +382,13 @@ CssParser.Parser.prototype = { }); + // 不支持继承的字体 + if (model.family.indexOf('inherit') !== -1) { + console.warn('[WARN]', 'does not support `font-family: inherit`', + 'from:', this.file, + 'selector:', selectorText); + } + return model; }, @@ -387,7 +407,7 @@ CssParser.Parser.prototype = { // 转换文件地址 // 执行顺序:ignore > map > normalize - _uri: function (file) { + _getUrl: function (file) { if (!this.ignore(file)) { file = this.map(file); file = utils.normalize(file); diff --git a/src/spider/html-parser.js b/src/spider/html-parser.js index a262e6e..f74d6c2 100644 --- a/src/spider/html-parser.js +++ b/src/spider/html-parser.js @@ -112,7 +112,7 @@ HtmlParser.Parser.prototype = { var href = $this.attr('href'); cssFile = utils.resolve(base, href); - cssFile = uri(cssFile); + cssFile = getUrl(cssFile); // 注意:为空也得放进去,保持与 link 标签一一对应 files.push(cssFile); @@ -121,7 +121,7 @@ HtmlParser.Parser.prototype = { // 转换 file 地址 // 执行顺序:ignore > map > normalize - function uri (file) { + function getUrl (file) { if (!that.ignore(file)) { file = that.map(file); @@ -192,11 +192,11 @@ HtmlParser.Parser.prototype = { var $elem; var $ = this.$; - var RE_SPURIOUS = /\:(link|visited|hover|active|focus)\b/ig; + var RE_DPSEUDOS = /\:(link|visited|target|active|focus|hover|checked|disabled|enabled|selected|lang\(([-\w]{2,})\)|not\(([^()]*|.*)\))?(.*)/i; // 剔除状态伪类 - selector = selector.replace(RE_SPURIOUS, ''); + selector = selector.replace(RE_DPSEUDOS, ''); // 使用选择器查找节点 diff --git a/test/css/test.css b/test/css/test.css index cacfb65..d63af55 100644 --- a/test/css/test.css +++ b/test/css/test.css @@ -45,6 +45,7 @@ h1 { font-weight: ft; + font-family: inherit; } #content > h3 {