You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
3.6 KiB
JavaScript
134 lines
3.6 KiB
JavaScript
10 years ago
|
/*jslint node: true, stupid: true, forin: true */
|
||
|
var yaml = require('js-yaml');
|
||
|
var fs = require('fs');
|
||
|
var camel = require('camel-case');
|
||
|
var isUpper = require('is-upper-case');
|
||
|
|
||
|
|
||
|
// Get document, or throw exception on error
|
||
|
try {
|
||
|
var file = process.argv[2];
|
||
|
var i = 0;
|
||
|
var yml = {};
|
||
|
var group = '';
|
||
|
var rules = [];
|
||
|
var rule = '';
|
||
|
var defs = [];
|
||
|
var predef = '';
|
||
|
var def = '';
|
||
|
var contained = true;
|
||
|
var contains = false;
|
||
|
var hilink = true;
|
||
|
var statics = [];
|
||
|
|
||
|
yml = yaml.safeLoad(fs.readFileSync(file + '.yml', 'utf8'));
|
||
|
|
||
|
var globals = {};
|
||
|
for (group in yml) {
|
||
|
if (/Global/.test(group) || /Cons$/.test(group) || /BOMWindow(Prop|Method)/.test(group) || /BOM$/.test(group)) {
|
||
|
rules = yml[group];
|
||
|
for (i in rules) {
|
||
|
rule = rules[i];
|
||
|
globals[rule] = [];
|
||
|
}
|
||
|
} else {
|
||
|
if (/Static/.test(group)) {
|
||
|
for (i in rules) {
|
||
|
rule = rules[i];
|
||
|
if (group.toLowerCase().indexOf(rule.toLowerCase()) >= 0) {
|
||
|
globals[rule].push(group);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
for (group in yml) {
|
||
|
contained = true;
|
||
|
contains = false;
|
||
|
statics = [];
|
||
|
|
||
|
if (/Global|Cons$/.test(group) || /BOMWindow(Prop|Method)/.test(group) || /BOM$/.test(group)) {
|
||
|
contained = false;
|
||
|
}
|
||
|
|
||
|
rules = yml[group];
|
||
|
rule = rules.shift();
|
||
|
defs = [];
|
||
|
predef = 'syntax keyword ' + group;
|
||
|
if (contained) {
|
||
|
predef += ' contained';
|
||
|
}
|
||
|
def = predef;
|
||
|
|
||
|
while(rule) {
|
||
|
// if (!isUpper(rule.substr(0,1))) {
|
||
|
statics = globals[rule];
|
||
|
if (statics && typeof statics !== 'function' && statics.length) {
|
||
|
console.log(predef + ' ' + rule + ' nextgroup=' + group + rule + 'Dot,javascriptFuncCallArg');
|
||
|
console.log('syntax match ' + group + rule + 'Dot /\\./ contained nextgroup=' + statics.join(','));
|
||
|
} else {
|
||
|
if (/Style/.test(group)) {
|
||
|
rule = camel(rule);
|
||
|
}
|
||
|
if (rule !== 'contains') {
|
||
|
def = def + ' ' + rule;
|
||
|
} else {
|
||
|
contains = true;
|
||
|
}
|
||
|
if (def.length > 80) {
|
||
|
if (/Method/.test(group)) {
|
||
|
if (/Event/.test(group)) {
|
||
|
def = def + ' nextgroup=javascriptEventFuncCallArg';
|
||
|
} else {
|
||
|
def = def + ' nextgroup=javascriptFuncCallArg';
|
||
|
}
|
||
|
}
|
||
|
console.log(def);
|
||
|
def = predef;
|
||
|
}
|
||
|
}
|
||
|
rule = rules.shift();
|
||
|
}
|
||
|
if (def.length > predef.length) {
|
||
|
if (/Method/.test(group)) {
|
||
|
if (/Event/.test(group)) {
|
||
|
def = def + ' nextgroup=javascriptEventFuncCallArg';
|
||
|
} else {
|
||
|
def = def + ' nextgroup=javascriptFuncCallArg';
|
||
|
}
|
||
|
}
|
||
|
console.log(def);
|
||
|
}
|
||
|
|
||
|
if (contains) {
|
||
|
console.log('syntax match ' + group + ' contained /contains/');
|
||
|
}
|
||
|
if (/Prop|Method/.test(group) && !/Static/.test(group)) {
|
||
|
console.log('syntax cluster props add=' + group);
|
||
|
}
|
||
|
if (file === 'event') {
|
||
|
console.log('syntax cluster events add=' + group);
|
||
|
}
|
||
|
|
||
|
hilink = true;
|
||
|
if (group === 'javascriptGlobal' && file !== 'javascript') {
|
||
|
hilink = false;
|
||
|
}
|
||
|
if (hilink) {
|
||
|
if (file === 'event') {
|
||
|
console.log('if exists("did_javascript_hilink") | HiLink ' + group + ' Title');
|
||
|
} else if (contained) {
|
||
|
console.log('if exists("did_javascript_hilink") | HiLink ' + group + ' Keyword');
|
||
|
} else {
|
||
|
console.log('if exists("did_javascript_hilink") | HiLink ' + group + ' Structure');
|
||
|
}
|
||
|
console.log('endif');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
} catch (e) {
|
||
|
console.log(e);
|
||
|
}
|
||
|
|