Added logging, changed some directory structure

This commit is contained in:
2018-01-13 21:33:40 -05:00
parent f079a5f067
commit 8e72ffb917
73656 changed files with 35284 additions and 53718 deletions

View File

@@ -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'
]
};

View File

@@ -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()
}
];
};

View File

@@ -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;
};

View File

@@ -0,0 +1,3 @@
module.exports = function (value) {
return value === 'normal' ? '400' : value === 'bold' ? '700' : value;
};

View File

@@ -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);
});
};
};