source: imaps-frontend/node_modules/css-tree/data/index.js@ d565449

main
Last change on this file since d565449 was d565449, checked in by stefan toskovski <stefantoska84@…>, 4 weeks ago

Update repo after prototype presentation

  • Property mode set to 100755
File size: 2.9 KB
RevLine 
[d565449]1const mdnAtrules = require('mdn-data/css/at-rules.json');
2const mdnProperties = require('mdn-data/css/properties.json');
3const mdnSyntaxes = require('mdn-data/css/syntaxes.json');
4const patch = require('./patch.json');
5const extendSyntax = /^\s*\|\s*/;
6
7function preprocessAtrules(dict) {
8 const result = Object.create(null);
9
10 for (const atruleName in dict) {
11 const atrule = dict[atruleName];
12 let descriptors = null;
13
14 if (atrule.descriptors) {
15 descriptors = Object.create(null);
16
17 for (const descriptor in atrule.descriptors) {
18 descriptors[descriptor] = atrule.descriptors[descriptor].syntax;
19 }
20 }
21
22 result[atruleName.substr(1)] = {
23 prelude: atrule.syntax.trim().match(/^@\S+\s+([^;\{]*)/)[1].trim() || null,
24 descriptors
25 };
26 }
27
28 return result;
29}
30
31function patchDictionary(dict, patchDict) {
32 const result = {};
33
34 // copy all syntaxes for an original dict
35 for (const key in dict) {
36 result[key] = dict[key].syntax || dict[key];
37 }
38
39 // apply a patch
40 for (const key in patchDict) {
41 if (key in dict) {
42 if (patchDict[key].syntax) {
43 result[key] = extendSyntax.test(patchDict[key].syntax)
44 ? result[key] + ' ' + patchDict[key].syntax.trim()
45 : patchDict[key].syntax;
46 } else {
47 delete result[key];
48 }
49 } else {
50 if (patchDict[key].syntax) {
51 result[key] = patchDict[key].syntax.replace(extendSyntax, '');
52 }
53 }
54 }
55
56 return result;
57}
58
59function unpackSyntaxes(dict) {
60 const result = {};
61
62 for (const key in dict) {
63 result[key] = dict[key].syntax;
64 }
65
66 return result;
67}
68
69function patchAtrules(dict, patchDict) {
70 const result = {};
71
72 // copy all syntaxes for an original dict
73 for (const key in dict) {
74 const patchDescriptors = (patchDict[key] && patchDict[key].descriptors) || null;
75
76 result[key] = {
77 prelude: key in patchDict && 'prelude' in patchDict[key]
78 ? patchDict[key].prelude
79 : dict[key].prelude || null,
80 descriptors: dict[key].descriptors
81 ? patchDictionary(dict[key].descriptors, patchDescriptors || {})
82 : patchDescriptors && unpackSyntaxes(patchDescriptors)
83 };
84 }
85
86 // apply a patch
87 for (const key in patchDict) {
88 if (!hasOwnProperty.call(dict, key)) {
89 result[key] = {
90 prelude: patchDict[key].prelude || null,
91 descriptors: patchDict[key].descriptors && unpackSyntaxes(patchDict[key].descriptors)
92 };
93 }
94 }
95
96 return result;
97}
98
99module.exports = {
100 types: patchDictionary(mdnSyntaxes, patch.syntaxes),
101 atrules: patchAtrules(preprocessAtrules(mdnAtrules), patch.atrules),
102 properties: patchDictionary(mdnProperties, patch.properties)
103};
Note: See TracBrowser for help on using the repository browser.