aboutsummaryrefslogtreecommitdiff
path: root/node_modules/postcss-minify-font-values
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/postcss-minify-font-values
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/postcss-minify-font-values')
-rw-r--r--node_modules/postcss-minify-font-values/LICENSE22
-rw-r--r--node_modules/postcss-minify-font-values/README.md75
-rw-r--r--node_modules/postcss-minify-font-values/index.js38
-rw-r--r--node_modules/postcss-minify-font-values/lib/keywords.js44
-rw-r--r--node_modules/postcss-minify-font-values/lib/minify-family.js101
-rw-r--r--node_modules/postcss-minify-font-values/lib/minify-font.js50
-rw-r--r--node_modules/postcss-minify-font-values/lib/minify-weight.js3
-rw-r--r--node_modules/postcss-minify-font-values/lib/uniqs.js11
-rw-r--r--node_modules/postcss-minify-font-values/package.json42
9 files changed, 386 insertions, 0 deletions
diff --git a/node_modules/postcss-minify-font-values/LICENSE b/node_modules/postcss-minify-font-values/LICENSE
new file mode 100644
index 00000000..6dcaefcb
--- /dev/null
+++ b/node_modules/postcss-minify-font-values/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) Bogdan Chadkin <trysound@yandex.ru>
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/postcss-minify-font-values/README.md b/node_modules/postcss-minify-font-values/README.md
new file mode 100644
index 00000000..35514455
--- /dev/null
+++ b/node_modules/postcss-minify-font-values/README.md
@@ -0,0 +1,75 @@
+# postcss-minify-font-values [![Build Status][ci-img]][ci]
+
+> Minify font declarations with PostCSS.
+
+This module will try to minimise the `font-family`, `font-weight` and `font` shorthand
+properties; it can unquote font families where necessary, detect & remove
+duplicates, and cut short a declaration after it finds a keyword. For more
+examples, see the [tests](test).
+
+```css
+h1 {
+ font:bold 2.2rem/.9 "Open Sans Condensed", sans-serif;
+}
+
+p {
+ font-family: "Helvetica Neue", Arial, sans-serif, Helvetica;
+ font-weight: normal;
+}
+```
+
+```css
+h1 {
+ font:700 2.2rem/.9 Open Sans Condensed,sans-serif
+}
+
+p {
+ font-family: Helvetica Neue,Arial,sans-serif;
+ font-weight: 400;
+}
+```
+
+## API
+
+### minifyFontValues([options])
+
+#### options
+
+##### removeAfterKeyword
+
+Type: `boolean`
+Default: `true`
+
+Pass `false` to disable the module from removing font families after it
+encounters a font keyword, for example `sans-serif`.
+
+##### removeDuplicates
+
+Type: `boolean`
+Default: `true`
+
+Pass `false` to disable the module from removing duplicated font families.
+
+##### removeQuotes
+
+Type: `boolean`
+Default: `true`
+
+Pass `false` to disable the module from removing quotes from font families.
+Note that oftentimes, this is a *safe optimisation* & is done safely. For more
+details, see [Mathias Bynens' article][mathias].
+
+## Usage
+
+```js
+postcss([ require('postcss-minify-font-values') ])
+```
+
+See [PostCSS] docs for examples for your environment.
+
+MIT © [Bogdan Chadkin](mailto:trysound@yandex.ru)
+
+[mathias]: https://mathiasbynens.be/notes/unquoted-font-family
+[PostCSS]: https://github.com/postcss/postcss
+[ci-img]: https://travis-ci.org/TrySound/postcss-minify-font-values.svg
+[ci]: https://travis-ci.org/TrySound/postcss-minify-font-values
diff --git a/node_modules/postcss-minify-font-values/index.js b/node_modules/postcss-minify-font-values/index.js
new file mode 100644
index 00000000..2a6831b3
--- /dev/null
+++ b/node_modules/postcss-minify-font-values/index.js
@@ -0,0 +1,38 @@
+var assign = require('object-assign');
+var postcss = require('postcss');
+var valueParser = require('postcss-value-parser');
+var minifyWeight = require('./lib/minify-weight');
+var minifyFamily = require('./lib/minify-family');
+var minifyFont = require('./lib/minify-font');
+
+function transform(opts) {
+ opts = assign({
+ removeAfterKeyword: true,
+ removeDuplicates: true,
+ removeQuotes: true
+ }, opts);
+
+ return function (decl) {
+ var tree;
+
+ if (decl.type === 'decl') {
+ if (decl.prop === 'font-weight') {
+ decl.value = minifyWeight(decl.value, opts);
+ } else if (decl.prop === 'font-family') {
+ tree = valueParser(decl.value);
+ tree.nodes = minifyFamily(tree.nodes, opts);
+ decl.value = tree.toString();
+ } else if (decl.prop === 'font') {
+ tree = valueParser(decl.value);
+ tree.nodes = minifyFont(tree.nodes, opts);
+ decl.value = tree.toString();
+ }
+ }
+ };
+}
+
+module.exports = postcss.plugin('postcss-minify-font-values', function (opts) {
+ return function (css) {
+ css.walk(transform(opts));
+ };
+});
diff --git a/node_modules/postcss-minify-font-values/lib/keywords.js b/node_modules/postcss-minify-font-values/lib/keywords.js
new file mode 100644
index 00000000..db321726
--- /dev/null
+++ b/node_modules/postcss-minify-font-values/lib/keywords.js
@@ -0,0 +1,44 @@
+var keywords = module.exports = {
+ style: [
+ 'italic',
+ 'oblique'
+ ],
+ variant: [
+ 'small-caps'
+ ],
+ weight: [
+ '100',
+ '200',
+ '300',
+ '400',
+ '500',
+ '600',
+ '700',
+ '800',
+ '900',
+ 'bold',
+ 'lighter',
+ 'bolder'
+ ],
+ stretch: [
+ 'ultra-condensed',
+ 'extra-condensed',
+ 'condensed',
+ 'semi-condensed',
+ 'semi-expanded',
+ 'expanded',
+ 'extra-expanded',
+ 'ultra-expanded'
+ ],
+ size: [
+ 'xx-small',
+ 'x-small',
+ 'small',
+ 'medium',
+ 'large',
+ 'x-large',
+ 'xx-large',
+ 'larger',
+ 'smaller'
+ ]
+};
diff --git a/node_modules/postcss-minify-font-values/lib/minify-family.js b/node_modules/postcss-minify-font-values/lib/minify-family.js
new file mode 100644
index 00000000..3ad601f5
--- /dev/null
+++ b/node_modules/postcss-minify-font-values/lib/minify-family.js
@@ -0,0 +1,101 @@
+var stringify = require('postcss-value-parser').stringify;
+var uniqs = require('./uniqs')('monospace');
+
+// Note that monospace is missing intentionally from this list; we should not
+// remove instances of duplicated monospace keywords, it causes the font to be
+// rendered smaller in Chrome.
+
+var keywords = [
+ 'sans-serif',
+ 'serif',
+ 'fantasy',
+ 'cursive'
+];
+
+function intersection(haystack, array) {
+ return array.some(function (v) {
+ return ~haystack.indexOf(v);
+ });
+};
+
+module.exports = function (nodes, opts) {
+ var family = [];
+ var last = null;
+ var i, max;
+
+ nodes.forEach(function (node, index, nodes) {
+ var value = node.value;
+
+ if (node.type === 'string' || node.type === 'function') {
+ family.push(node);
+ } else if (node.type === 'word') {
+ if (!last) {
+ last = { type: 'word', value: '' };
+ family.push(last);
+ }
+
+ last.value += node.value;
+ } else if (node.type === 'space') {
+ if (last && index !== nodes.length - 1) {
+ last.value += ' ';
+ }
+ } else {
+ last = null;
+ }
+ });
+
+ family = family.map(function (node) {
+ if (node.type === 'string') {
+ if (
+ !opts.removeQuotes ||
+ intersection(node.value, keywords) ||
+ /[0-9]/.test(node.value.slice(0, 1))
+ ) {
+ return stringify(node);
+ }
+
+ var escaped = node.value.split(/\s/).map(function (word, index, words) {
+ var next = words[index + 1];
+ if (next && /^[^a-z]/i.test(next)) {
+ return word + '\\';
+ }
+
+ if (!/^[^a-z\d\xa0-\uffff_-]/i.test(word)) {
+ return word.replace(/([^a-z\d\xa0-\uffff_-])/gi, '\\$1');
+ }
+
+ if (/^[^a-z]/i.test(word) && index < 1) {
+ return '\\' + word;
+ }
+
+ return word;
+ }).join(' ');
+
+ if (escaped.length < node.value.length + 2) {
+ return escaped;
+ }
+ }
+
+ return stringify(node);
+ });
+
+ if (opts.removeAfterKeyword) {
+ for (i = 0, max = family.length; i < max; i += 1) {
+ if (~keywords.indexOf(family[i])) {
+ family = family.slice(0, i + 1);
+ break;
+ }
+ }
+ }
+
+ if (opts.removeDuplicates) {
+ family = uniqs(family);
+ }
+
+ return [
+ {
+ type: 'word',
+ value: family.join()
+ }
+ ];
+};
diff --git a/node_modules/postcss-minify-font-values/lib/minify-font.js b/node_modules/postcss-minify-font-values/lib/minify-font.js
new file mode 100644
index 00000000..3287fd64
--- /dev/null
+++ b/node_modules/postcss-minify-font-values/lib/minify-font.js
@@ -0,0 +1,50 @@
+var unit = require('postcss-value-parser').unit;
+var keywords = require('./keywords');
+var minifyFamily = require('./minify-family');
+var minifyWeight = require('./minify-weight');
+
+module.exports = function (nodes, opts) {
+ var i, max, node, familyStart, family;
+ var hasSize = false;
+
+ for (i = 0, max = nodes.length; i < max; i += 1) {
+ node = nodes[i];
+ if (node.type === 'word') {
+ if (node.value === 'normal' ||
+ ~keywords.style.indexOf(node.value) ||
+ ~keywords.variant.indexOf(node.value) ||
+ ~keywords.stretch.indexOf(node.value)) {
+ if (!hasSize) {
+ familyStart = i;
+ }
+ } else if (~keywords.weight.indexOf(node.value)) {
+ if (!hasSize) {
+ node.value = minifyWeight(node.value, opts);
+ familyStart = i;
+ }
+ } else if (~keywords.size.indexOf(node.value) || unit(node.value)) {
+ if (!hasSize) {
+ familyStart = i;
+ hasSize = true;
+ }
+ }
+ } else if (node.type === 'div') {
+ node.before = '';
+ node.after = '';
+ if (node.value === '/') {
+ familyStart = i + 1;
+ }
+ break;
+ } else if (node.type === 'space') {
+ node.value = ' ';
+ }
+ }
+
+ if (!isNaN(familyStart)) {
+ familyStart += 2;
+ family = minifyFamily(nodes.slice(familyStart), opts);
+ nodes = nodes.slice(0, familyStart).concat(family);
+ }
+
+ return nodes;
+};
diff --git a/node_modules/postcss-minify-font-values/lib/minify-weight.js b/node_modules/postcss-minify-font-values/lib/minify-weight.js
new file mode 100644
index 00000000..6b4cbfb5
--- /dev/null
+++ b/node_modules/postcss-minify-font-values/lib/minify-weight.js
@@ -0,0 +1,3 @@
+module.exports = function (value) {
+ return value === 'normal' ? '400' : value === 'bold' ? '700' : value;
+};
diff --git a/node_modules/postcss-minify-font-values/lib/uniqs.js b/node_modules/postcss-minify-font-values/lib/uniqs.js
new file mode 100644
index 00000000..a555b8e2
--- /dev/null
+++ b/node_modules/postcss-minify-font-values/lib/uniqs.js
@@ -0,0 +1,11 @@
+module.exports = function uniqueExcept (exclude) {
+ return function unique () {
+ var list = Array.prototype.concat.apply([], arguments);
+ return list.filter(function (item, i) {
+ if (item === exclude) {
+ return true;
+ }
+ return i === list.indexOf(item);
+ });
+ };
+};
diff --git a/node_modules/postcss-minify-font-values/package.json b/node_modules/postcss-minify-font-values/package.json
new file mode 100644
index 00000000..88c782b3
--- /dev/null
+++ b/node_modules/postcss-minify-font-values/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "postcss-minify-font-values",
+ "version": "1.0.5",
+ "description": "Minify font declarations with PostCSS",
+ "main": "index.js",
+ "files": [
+ "index.js",
+ "lib"
+ ],
+ "scripts": {
+ "test": "tape test/*.js | tap-spec",
+ "posttest": "eslint index.js lib test"
+ },
+ "author": "Bogdan Chadkin <trysound@yandex.ru>",
+ "license": "MIT",
+ "keywords": [
+ "css",
+ "font",
+ "font-family",
+ "font-weight",
+ "optimise",
+ "postcss-plugin"
+ ],
+ "devDependencies": {
+ "eslint": "^1.3.1",
+ "tap-spec": "^4.1.0",
+ "tape": "^4.2.0"
+ },
+ "dependencies": {
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.2"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/TrySound/postcss-minify-font-values.git"
+ },
+ "bugs": {
+ "url": "https://github.com/TrySound/postcss-minify-font-values/issues"
+ },
+ "homepage": "https://github.com/TrySound/postcss-minify-font-values"
+}