123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- const mdnAtrules = require('mdn-data/css/at-rules.json');
- const mdnProperties = require('mdn-data/css/properties.json');
- const mdnSyntaxes = require('mdn-data/css/syntaxes.json');
- const patch = require('./patch.json');
- const extendSyntax = /^\s*\|\s*/;
- function preprocessAtrules(dict) {
- const result = Object.create(null);
- for (const atruleName in dict) {
- const atrule = dict[atruleName];
- let descriptors = null;
- if (atrule.descriptors) {
- descriptors = Object.create(null);
- for (const descriptor in atrule.descriptors) {
- descriptors[descriptor] = atrule.descriptors[descriptor].syntax;
- }
- }
- result[atruleName.substr(1)] = {
- prelude: atrule.syntax.trim().match(/^@\S+\s+([^;\{]*)/)[1].trim() || null,
- descriptors
- };
- }
- return result;
- }
- function patchDictionary(dict, patchDict) {
- const result = {};
- // copy all syntaxes for an original dict
- for (const key in dict) {
- result[key] = dict[key].syntax || dict[key];
- }
- // apply a patch
- for (const key in patchDict) {
- if (key in dict) {
- if (patchDict[key].syntax) {
- result[key] = extendSyntax.test(patchDict[key].syntax)
- ? result[key] + ' ' + patchDict[key].syntax.trim()
- : patchDict[key].syntax;
- } else {
- delete result[key];
- }
- } else {
- if (patchDict[key].syntax) {
- result[key] = patchDict[key].syntax.replace(extendSyntax, '');
- }
- }
- }
- return result;
- }
- function unpackSyntaxes(dict) {
- const result = {};
- for (const key in dict) {
- result[key] = dict[key].syntax;
- }
- return result;
- }
- function patchAtrules(dict, patchDict) {
- const result = {};
- // copy all syntaxes for an original dict
- for (const key in dict) {
- const patchDescriptors = (patchDict[key] && patchDict[key].descriptors) || null;
- result[key] = {
- prelude: key in patchDict && 'prelude' in patchDict[key]
- ? patchDict[key].prelude
- : dict[key].prelude || null,
- descriptors: dict[key].descriptors
- ? patchDictionary(dict[key].descriptors, patchDescriptors || {})
- : patchDescriptors && unpackSyntaxes(patchDescriptors)
- };
- }
- // apply a patch
- for (const key in patchDict) {
- if (!hasOwnProperty.call(dict, key)) {
- result[key] = {
- prelude: patchDict[key].prelude || null,
- descriptors: patchDict[key].descriptors && unpackSyntaxes(patchDict[key].descriptors)
- };
- }
- }
- return result;
- }
- module.exports = {
- types: patchDictionary(mdnSyntaxes, patch.syntaxes),
- atrules: patchAtrules(preprocessAtrules(mdnAtrules), patch.atrules),
- properties: patchDictionary(mdnProperties, patch.properties)
- };
|