1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00
volcanos/lib/core.js
2020-06-15 00:56:38 +08:00

152 lines
5.3 KiB
JavaScript

var core = Volcanos("core", {help: "核心模块",
List: shy("迭代器", function(obj, cb, interval, cbs) {
if (typeof obj == "number") {
var begin = 0, end = obj, step = 1;
if (typeof interval == "number") {
step = interval
}
if (typeof cb == "number") {
begin = obj, end = cb;
}
var list = []
for (var i = begin; i < end; i += step) {
list.push(i)
}
return list
}
obj = typeof obj == "string"? [obj]: (obj || [])
if (interval > 0) {
function loop(i) {if (i >= obj.length) {return typeof cbs == "function" && cbs(obj)}
typeof cb == "function" && cb(obj[i], i, obj), setTimeout(function() {loop(i+1)}, interval);
}
obj.length > 0 && setTimeout(function() {loop(0)}, interval/4);
return obj;
}
var list = [], res;
for (var i = 0; i < obj.length; i++) {
typeof cb == "function"? (res = cb(obj[i], i, obj)) != undefined && list.push(res): list.push(obj[i]);
}
return list;
}),
Item: shy("迭代器", function(obj, cb) {var list = [];
for (var k in obj) {var res;
list.push(typeof cb == "function" && (res = cb(k, obj[k])) != undefined && res || k)
}
return list
}),
Items: shy("迭代器", function(obj, cb) {var list = [];
for (var key in obj) {
list = list.concat(this.List(obj[key], function(value, index, array) {
return typeof cb == "function" && cb(value, index, key, obj)
}))
}
return list
}),
Next: shy("迭代器", function(obj, cb, cbs) {obj = typeof obj == "string"? [obj]: (obj || [])
function next(list, cb, index) {
list && list.length > 0? typeof cb == "function" && cb(list[0], function() {
list.length > 0 && next(list.slice(1), cb, index+1)
}, index): typeof cbs == "function" && cbs()
}
next(obj, cb, 0)
}),
Trim: shy("迭代器", function(obj) {
for (var i = obj.length; i >= 0; i--) {
if (obj[i]) {break}
obj = obj.slice(0, i)
}
return obj
}),
Split: shy("分词器", function(str) { if (!str || !str.length) {return []}
var opt = {simple: false}, arg = []; for (var i = 1; i < arguments.length; i++) {
typeof arguments[i] == "object"? opt=arguments[i]: arg.push(arguments[i])
}
function _list(str) { var res = {}; for (var i = 0; i < str.length; i++) { res[str[i]] = true }; return res }
// 空白符
var seps = _list(arg[0]||"\t ,\n");
// 分隔符
var sups = _list(arg[1]||"{[(.:)]}");
// 引用符
var subs = _list(arg[2]||"'\"`");
// 开始分词
var res = [], list = str;
var left = "", space = true, begin = 0;
for (var i = 0; i < list.length; i++) {
if (seps[list[i]]) {
// 空白符
if (left == "") {
if (!space) {
res.push(list.slice(begin, i))
}
opt.simple || res.push({text: list.slice(i, i+1), type: "space", left: left})
space = true, begin = i+1
}
} else if (subs[list[i]]) {
// 引用符
if (left == "") {
left = list[i], space = false, begin = i+1
} else if (left == list[i]) {
res.push({text: list.slice(begin, i), type: "string", left: left, right: left})
left = "", space = true, begin = i+1
}
} else if (sups[list[i]]) {
// 分隔符
if (left == "") {
if (!space) {
res.push(list.slice(begin, i))
}
res.push(list.slice(i, i+1))
space = true, begin = i+1
}
} else if (list[0] == '\\') {
// 转义符
for (var i = i; i < list.length-1; i++) {
list[i] = list[i+1]
}
list = list.slice(0, list.length-1)
space = false
} else {
space = false
}
}
// 末尾字符
if (left != "") {
res.push({text: list.slice(begin), type: "string", left: left, right: ""})
} else if (begin < list.length) {
res.push(list.slice(begin))
}
return res
}),
Eq: function(obj, other) { var self = arguments.callee
// undefined null
// string number boolen
// object function
if (typeof obj != typeof other) {
return false
}
if (typeof obj == "object") {
if (obj.length != other.length) { return false }
for (var i = 0; i < obj.length; i++) {
if (!self(obj[i], other[i])) {
return false
}
}
for (var k in obj) {
if (!self(obj[k], other[k])) {
return false
}
}
return true
}
return obj === other
}
})