buildz 0.4.9__tar.gz → 0.4.91__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {buildz-0.4.9/buildz.egg-info → buildz-0.4.91}/PKG-INFO +5 -1
- {buildz-0.4.9 → buildz-0.4.91}/README.md +4 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/__init__.py +2 -1
- {buildz-0.4.9 → buildz-0.4.91}/buildz/argx.py +36 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/res/test.js +1 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/tz/__init__.py +2 -1
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/__init__.py +1 -1
- buildz-0.4.91/buildz/xf/__main__.py +6 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/base.py +4 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/buffer.py +35 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/deal/lr.py +1 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/deal/reval.py +4 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/deal/spc.py +5 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/deal/strz.py +5 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/mg.py +27 -5
- buildz-0.4.91/buildz/xf/loaderz/base.py +34 -0
- buildz-0.4.91/buildz/xf/loaderz/buffer.py +101 -0
- buildz-0.4.91/buildz/xf/loaderz/deal/listz.py +19 -0
- buildz-0.4.91/buildz/xf/loaderz/deal/lr.py +58 -0
- buildz-0.4.91/buildz/xf/loaderz/deal/lrval.py +40 -0
- buildz-0.4.91/buildz/xf/loaderz/deal/mapz.py +24 -0
- buildz-0.4.91/buildz/xf/loaderz/deal/nextz.py +21 -0
- buildz-0.4.91/buildz/xf/loaderz/deal/reval.py +30 -0
- buildz-0.4.91/buildz/xf/loaderz/deal/setz.py +15 -0
- buildz-0.4.91/buildz/xf/loaderz/deal/spc.py +24 -0
- buildz-0.4.91/buildz/xf/loaderz/deal/spt.py +38 -0
- buildz-0.4.91/buildz/xf/loaderz/deal/strz.py +96 -0
- buildz-0.4.91/buildz/xf/loaderz/exp.py +12 -0
- buildz-0.4.91/buildz/xf/loaderz/item.py +68 -0
- buildz-0.4.91/buildz/xf/loaderz/mg.py +96 -0
- buildz-0.4.91/buildz/xf/loaderz/pos.py +51 -0
- buildz-0.4.91/buildz/xf/loaderz/test.py +77 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/mapz.py +5 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/read.py +1 -1
- buildz-0.4.91/buildz/xf/readz.py +82 -0
- buildz-0.4.91/buildz/xf/stack.py +68 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/xargs.py +5 -2
- {buildz-0.4.9 → buildz-0.4.91/buildz.egg-info}/PKG-INFO +5 -1
- {buildz-0.4.9 → buildz-0.4.91}/buildz.egg-info/SOURCES.txt +20 -0
- {buildz-0.4.9 → buildz-0.4.91}/setup.py +1 -1
- {buildz-0.4.9 → buildz-0.4.91}/LICENSE +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/MANIFEST.in +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/__main__.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/ioc/deal.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/ioc/help.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/myers/deal.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/myers/help.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/res/conf/ioc.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/res/conf/main.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/res/conf/myers.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/res/conf/search.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/res/conf/xf.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/res/help/default.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/res/help/ioc.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/res/help/myers.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/res/help/search.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/res/help/xf.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/search/deal.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/search/help.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/test.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/xf/deal.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/demo/xf/help.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/fz/__init__.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/fz/dirz.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/fz/fio.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/fz/lsf.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/__init__.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/init.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc/base.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc/conf.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc/confs.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/base.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/call.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/calls.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/demo.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/env.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/ioc.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/join.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/list.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/map.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/mcall.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/obj.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/ovar.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/ref.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/val.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/ioc/ioc_deal/var.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/pyz.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/tz/myers_diff.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/file.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/deal/listz.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/deal/lrval.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/deal/mapz.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/deal/nextz.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/deal/setz.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/deal/spt.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/exp.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/item.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/loader/pos.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/write.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/writer/base.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/writer/conf.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/writer/deal/jsonval.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/writer/deal/listz.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/writer/deal/mapz.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/writer/deal/reval.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/writer/deal/strz.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/writer/itemz.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz/xf/writer/mg.py +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz.egg-info/dependency_links.txt +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/buildz.egg-info/top_level.txt +0 -0
- {buildz-0.4.9 → buildz-0.4.91}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: buildz
|
3
|
-
Version: 0.4.
|
3
|
+
Version: 0.4.91
|
4
4
|
Summary: a json-base file format's read and write code by python, and codes to read and product object from configure file in such format
|
5
5
|
Home-page: https://github.com/buildCodeZ/buildz
|
6
6
|
Author: Zzz
|
@@ -28,6 +28,8 @@ License-File: LICENSE
|
|
28
28
|
|
29
29
|
运行python -m buildz查看帮助
|
30
30
|
|
31
|
+
PS: 对比了下json.loads(修改了下json的scanner.py,让它在纯python下运行,不然json.loads会更快)和目前的xf.loads(buildz.xf.readz.loads)的速度,xf.loads比json.loads慢7倍,可能是读字符串更频繁,方法调用更多(为了代码更结构化和容易修改),其实有一版更慢(buildz.xf.read.loads,废弃代码,后面看情况删掉),慢100倍,因为只考虑结构化,没考虑列表增减开销
|
32
|
+
|
31
33
|
1, a profile file format base on json, make it easy to write profile file, module is in buildz.xf
|
32
34
|
2, a ioc profile file read function base on xf format, module is in buildz.ioc
|
33
35
|
3, other tools module:
|
@@ -42,4 +44,6 @@ code relationship:
|
|
42
44
|
buildz.demo use all other modules
|
43
45
|
|
44
46
|
run python -m buildz to see help
|
47
|
+
|
48
|
+
PS: testing speed on json.loads(has modified scanner.py in json module to make it purely run on Python, which make it run slower) and xf.loads(real func is buildz.xf.readz.loads), xf.loads takes 7 times longer than json.loads, it may cost by more func calls and more string cutting and reading(to make codes more structuring and easier to update)
|
45
49
|
```
|
@@ -15,6 +15,8 @@
|
|
15
15
|
|
16
16
|
运行python -m buildz查看帮助
|
17
17
|
|
18
|
+
PS: 对比了下json.loads(修改了下json的scanner.py,让它在纯python下运行,不然json.loads会更快)和目前的xf.loads(buildz.xf.readz.loads)的速度,xf.loads比json.loads慢7倍,可能是读字符串更频繁,方法调用更多(为了代码更结构化和容易修改),其实有一版更慢(buildz.xf.read.loads,废弃代码,后面看情况删掉),慢100倍,因为只考虑结构化,没考虑列表增减开销
|
19
|
+
|
18
20
|
1, a profile file format base on json, make it easy to write profile file, module is in buildz.xf
|
19
21
|
2, a ioc profile file read function base on xf format, module is in buildz.ioc
|
20
22
|
3, other tools module:
|
@@ -29,4 +31,6 @@ code relationship:
|
|
29
31
|
buildz.demo use all other modules
|
30
32
|
|
31
33
|
run python -m buildz to see help
|
34
|
+
|
35
|
+
PS: testing speed on json.loads(has modified scanner.py in json module to make it purely run on Python, which make it run slower) and xf.loads(real func is buildz.xf.readz.loads), xf.loads takes 7 times longer than json.loads, it may cost by more func calls and more string cutting and reading(to make codes more structuring and easier to update)
|
32
36
|
```
|
@@ -1,5 +1,41 @@
|
|
1
1
|
#coding=utf-8
|
2
2
|
import sys
|
3
|
+
class Fetch:
|
4
|
+
"""
|
5
|
+
命令行参数读取
|
6
|
+
ft = Fetch("id,name,kind".split(","), {"a":"age"})
|
7
|
+
or
|
8
|
+
ft = Fetch(*xf.loads("[[id,name,kind],{a:age}]"))
|
9
|
+
|
10
|
+
ft("001 zero life -a12".split(" ")) = {'id': '001', 'name': 'zero', 'kind': 'life', 'age': '12'}
|
11
|
+
|
12
|
+
但更简单的方法是:
|
13
|
+
xf.args("{id:'001', name: zero, kind: life, age: 12}".split(" ")) = {'id': '001', 'name': 'zero', 'kind': 'life', 'age': 12}
|
14
|
+
python buildz.xf {id:'001', name: zero, kind: life, age: 12}
|
15
|
+
就是对引号不太适用
|
16
|
+
"""
|
17
|
+
def __init__(self, args = [], maps ={}):
|
18
|
+
self.args = args
|
19
|
+
self.maps = maps
|
20
|
+
def __call__(self, argv = None):
|
21
|
+
args, maps = fetch(argv)
|
22
|
+
rst = {}
|
23
|
+
for i in range(len(args)):
|
24
|
+
if i >= len(self.args):
|
25
|
+
break
|
26
|
+
key = self.args[i]
|
27
|
+
rst[key] = args[i]
|
28
|
+
for key in maps:
|
29
|
+
rst[key] = maps[key]
|
30
|
+
for key in self.maps:
|
31
|
+
rkey = self.maps[key]
|
32
|
+
if key in rst:
|
33
|
+
val = rst[key]
|
34
|
+
rst[rkey] = val
|
35
|
+
del rst[key]
|
36
|
+
return rst
|
37
|
+
|
38
|
+
pass
|
3
39
|
def fetch(argv = None):
|
4
40
|
r"""
|
5
41
|
format: a b c -a 123 -b456 --c=789 +d -x"??? ???" y z
|
@@ -1,11 +1,12 @@
|
|
1
1
|
#coding=utf-8
|
2
2
|
#author: Zzz, emails: 1174534295@qq.com, 1309458652@qq.com
|
3
3
|
|
4
|
-
#
|
4
|
+
# 文件差异
|
5
5
|
from .myers_diff import update as m_update, myers as m_steps, encode as m_encode, decode as m_decode,count as m_count
|
6
6
|
|
7
7
|
"""
|
8
8
|
工具模块
|
9
|
+
toolz简写成tz
|
9
10
|
|
10
11
|
"""
|
11
12
|
__author__ = "Zzz, emails: 1174534295@qq.com, 1309458652@qq.com"
|
@@ -83,3 +83,38 @@ class Buffer:
|
|
83
83
|
self.buffer = self.buffer[:-size]
|
84
84
|
|
85
85
|
pass
|
86
|
+
|
87
|
+
class StrBuffer:
|
88
|
+
def read(self, size = 1, pop = 0):
|
89
|
+
s = self.str[self.read_base:self.read_base+size]
|
90
|
+
if pop:
|
91
|
+
self.read_base+=size
|
92
|
+
return s
|
93
|
+
def pop_read(self, size=1):
|
94
|
+
self.read_base+=size
|
95
|
+
def init(self):
|
96
|
+
self.buffer_base = 0
|
97
|
+
self.buffer_size = 0
|
98
|
+
self.read_base = 0
|
99
|
+
self.read_size = 0
|
100
|
+
#self.buffer = None
|
101
|
+
#self.s_read = None
|
102
|
+
def __init__(self, s):
|
103
|
+
self.str = s
|
104
|
+
self.init()
|
105
|
+
def add(self, arr):
|
106
|
+
# x = self.str[self.buffer_base+self.buffer_size:self.buffer_base+self.buffer_size+len(arr)]
|
107
|
+
# if x!=arr:
|
108
|
+
# print(f"[ERROR] x:({x}), arr:({arr}), bb: {self.buffer_base}, bs:{self.buffer_size}, rb: {self.read_base}")
|
109
|
+
# print("[["+self.str[self.buffer_base:self.read_base+10]+"]]")
|
110
|
+
# raise Exception("")
|
111
|
+
self.buffer_size+=len(arr)
|
112
|
+
def size(self):
|
113
|
+
return self.buffer_size
|
114
|
+
def full(self):
|
115
|
+
return self.str[self.buffer_base:self.buffer_base+self.buffer_size]
|
116
|
+
def clean(self):
|
117
|
+
self.buffer_base = self.read_base
|
118
|
+
self.buffer_size = 0
|
119
|
+
|
120
|
+
pass
|
@@ -27,6 +27,7 @@ class LRDeal(base.BaseDeal):
|
|
27
27
|
if len(rm.strip())>0:
|
28
28
|
pos.update(rm)
|
29
29
|
raise exp.FormatExp(self.err("unexcept char before <lr> left symbol"), pos.get(), rm)
|
30
|
+
buffer.clean()
|
30
31
|
pos.update(cl)
|
31
32
|
queue.append(item.PrevItem(cl, pos.get(), self.id(), left = 1))
|
32
33
|
else:
|
@@ -2,6 +2,10 @@ from .. import base
|
|
2
2
|
|
3
3
|
|
4
4
|
class PrevSpcDeal(base.BaseDeal):
|
5
|
+
def has_prev(self):
|
6
|
+
return 1
|
7
|
+
def has_deal(self):
|
8
|
+
return 0
|
5
9
|
"""
|
6
10
|
去掉左空格
|
7
11
|
"""
|
@@ -13,6 +17,7 @@ class PrevSpcDeal(base.BaseDeal):
|
|
13
17
|
return False
|
14
18
|
if len(c.strip())==0:
|
15
19
|
buffer.pop_read()
|
20
|
+
buffer.clean()
|
16
21
|
return True
|
17
22
|
return False
|
18
23
|
|
@@ -4,6 +4,10 @@ from .. import exp
|
|
4
4
|
from ... import file
|
5
5
|
import json
|
6
6
|
class PrevStrDeal(base.BaseDeal):
|
7
|
+
def has_prev(self):
|
8
|
+
return 1
|
9
|
+
def has_deal(self):
|
10
|
+
return 0
|
7
11
|
def init(self, left = '"', right= '"', single_line = False, note = False, translate = False):
|
8
12
|
self.left = left
|
9
13
|
self.right = right
|
@@ -71,6 +75,7 @@ class PrevStrDeal(base.BaseDeal):
|
|
71
75
|
tmp += c
|
72
76
|
continue
|
73
77
|
ctmp+=c
|
78
|
+
buffer.clean()
|
74
79
|
xtmp = tmp[:-self.lr]
|
75
80
|
if not self.note and self.single_line and xtmp.find(self.like("\n", xtmp))>=0:
|
76
81
|
print("left:",self.left, "right:", self.right)
|
@@ -3,6 +3,7 @@ from . import buffer
|
|
3
3
|
from . import base
|
4
4
|
from . import pos
|
5
5
|
from . import exp
|
6
|
+
from ..stack import Stack
|
6
7
|
class Manager:
|
7
8
|
def fcs(self, fc, *args, **maps):
|
8
9
|
return fc(*self.cs(*args), **maps)
|
@@ -16,11 +17,14 @@ class Manager:
|
|
16
17
|
if self.bts:
|
17
18
|
s = s.encode(self.code)
|
18
19
|
return s
|
20
|
+
# 上面这些没用
|
19
21
|
def add(self,obj):
|
20
22
|
#obj.init()
|
21
23
|
obj.regist(self)
|
22
|
-
|
23
|
-
|
24
|
+
if obj.has_prev():
|
25
|
+
self.prevs.append(obj.prev)
|
26
|
+
if obj.has_deal():
|
27
|
+
self.deals.append(obj.deal)
|
24
28
|
return self
|
25
29
|
def do(self, fcs, *argv, **maps):
|
26
30
|
for fc in fcs:
|
@@ -36,21 +40,39 @@ class Manager:
|
|
36
40
|
self.deals = []
|
37
41
|
self.prevs = []
|
38
42
|
def load(self, reader):
|
39
|
-
|
43
|
+
if type(reader) in [str, bytes]:
|
44
|
+
#print(f"try str, {len(reader)}")
|
45
|
+
buff = buffer.StrBuffer(reader)
|
46
|
+
s = reader.replace(" ", "")
|
47
|
+
queue = Stack(len(s)+1)
|
48
|
+
else:
|
49
|
+
buff = buffer.Buffer(reader)
|
50
|
+
queue = []
|
40
51
|
_pos = pos.PosCal()
|
41
|
-
queue = []
|
42
52
|
self.pos = _pos
|
43
53
|
self.buffer = buff
|
44
54
|
self.queue = queue
|
55
|
+
import time
|
56
|
+
crr = time.time()
|
45
57
|
while self.do(self.prevs, buff, queue, _pos):
|
46
58
|
pass
|
47
|
-
|
59
|
+
now = time.time()
|
60
|
+
#print(f"prev time: {now - crr}, prevs: {len(self.prevs)}, queue: {len(queue)}")
|
61
|
+
#stack = []
|
62
|
+
stack = Stack(len(queue))
|
63
|
+
#stack = []
|
64
|
+
crr = time.time()
|
65
|
+
ns = 0
|
48
66
|
while self.do(self.deals, queue, stack):
|
67
|
+
ns = max(len(stack), ns)
|
49
68
|
pass
|
69
|
+
now = time.time()
|
70
|
+
#print(f"deal time: {now - crr}, deals: {len(self.deals)}, stack: {ns}")
|
50
71
|
if len(stack)==0:
|
51
72
|
raise Exception("ERROR not data")
|
52
73
|
for _item in stack:
|
53
74
|
if not _item.check(is_val=1):
|
75
|
+
print(f"err item: {_item}")
|
54
76
|
raise exp.FormatExp("format error found", _item.pos)
|
55
77
|
if len(stack)==1:
|
56
78
|
return stack[0].val
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
class BaseDeal:
|
3
|
+
def has_prev(self):
|
4
|
+
return 1
|
5
|
+
def has_deal(self):
|
6
|
+
return 1
|
7
|
+
def labels(self):
|
8
|
+
return []
|
9
|
+
def types(self):
|
10
|
+
return []
|
11
|
+
def prepare(self, msg):
|
12
|
+
pass
|
13
|
+
def regist(self, mgs):
|
14
|
+
if self._id is None:
|
15
|
+
self._id = mgs.regist()
|
16
|
+
self.prepare(mgs)
|
17
|
+
def id(self):
|
18
|
+
return self._id
|
19
|
+
def __str__(self):
|
20
|
+
return "BaseDeal"
|
21
|
+
def __repr__(self):
|
22
|
+
return str(self)
|
23
|
+
def __init__(self, *argv, **maps):
|
24
|
+
self._id = None
|
25
|
+
self.init(*argv, **maps)
|
26
|
+
def init(self, *argv, **maps):
|
27
|
+
pass
|
28
|
+
def deal(self, buffer, rst, mg):
|
29
|
+
pass
|
30
|
+
def build(self):
|
31
|
+
pass
|
32
|
+
|
33
|
+
pass
|
34
|
+
|
@@ -0,0 +1,101 @@
|
|
1
|
+
|
2
|
+
class BufferInput:
|
3
|
+
def __init__(self, buf):
|
4
|
+
self.buf = buf
|
5
|
+
def __call__(self, size=1):
|
6
|
+
s = self.buf[:size]
|
7
|
+
self.buf = self.buf[size:]
|
8
|
+
return s
|
9
|
+
|
10
|
+
pass
|
11
|
+
|
12
|
+
class Buffer:
|
13
|
+
def read_cache(self, size = 1):
|
14
|
+
s = self.read(size)
|
15
|
+
self.buffer+=s
|
16
|
+
self.s_read = self.s_read[len(s):]
|
17
|
+
return s
|
18
|
+
def read(self, size = 1):
|
19
|
+
if self.s_read is None:
|
20
|
+
self.s_read = self.input(1)
|
21
|
+
l = len(self.s_read)
|
22
|
+
if l<size:
|
23
|
+
self.s_read += self.input(size-l)
|
24
|
+
rst = self.s_read[:size]
|
25
|
+
if self.buffer is None:
|
26
|
+
self.buffer = self.s_read[:0]
|
27
|
+
return rst
|
28
|
+
def clean2read(self, size = 1):
|
29
|
+
self.s_read = self.s_read[size:]
|
30
|
+
self.clean()
|
31
|
+
def init(self):
|
32
|
+
self.buffer = None
|
33
|
+
self.s_read = None
|
34
|
+
def __init__(self, input):
|
35
|
+
self.input = input
|
36
|
+
self.init()
|
37
|
+
def add(self, size):
|
38
|
+
if self.buffer is None:
|
39
|
+
self.buffer = self.s_read[:size]
|
40
|
+
else:
|
41
|
+
self.buffer += self.s_read[:size]
|
42
|
+
def size(self):
|
43
|
+
if self.buffer is None:
|
44
|
+
return 0
|
45
|
+
return len(self.buffer)
|
46
|
+
def full(self, size = 0, right = 1):
|
47
|
+
return self.buffer
|
48
|
+
def clean(self):
|
49
|
+
self.buffer = self.buffer[:0]
|
50
|
+
def rget(self, size=1):
|
51
|
+
return self.buffer[-size:]
|
52
|
+
def get(self, size=1):
|
53
|
+
return self.buffer[:size]
|
54
|
+
|
55
|
+
pass
|
56
|
+
|
57
|
+
class StrBuffer:
|
58
|
+
def read_cache(self, size = 1):
|
59
|
+
s = self.read(size)
|
60
|
+
l = len(s)
|
61
|
+
self.buffer_size+=l
|
62
|
+
self.read_base+=l
|
63
|
+
return s
|
64
|
+
def read(self, size = 1):
|
65
|
+
s = self.str[self.read_base:self.read_base+size]
|
66
|
+
return s
|
67
|
+
def clean2read(self, size = 1):
|
68
|
+
self.read_base+=size
|
69
|
+
self.clean()
|
70
|
+
def init(self):
|
71
|
+
self.buffer_base = 0
|
72
|
+
self.buffer_size = 0
|
73
|
+
self.read_base = 0
|
74
|
+
self.read_size = 0
|
75
|
+
#self.buffer = None
|
76
|
+
#self.s_read = None
|
77
|
+
def __init__(self, s):
|
78
|
+
self.str = s
|
79
|
+
self.init()
|
80
|
+
def add(self, size):
|
81
|
+
# x = self.str[self.buffer_base+self.buffer_size:self.buffer_base+self.buffer_size+len(arr)]
|
82
|
+
# if x!=arr:
|
83
|
+
# print(f"[ERROR] x:({x}), arr:({arr}), bb: {self.buffer_base}, bs:{self.buffer_size}, rb: {self.read_base}")
|
84
|
+
# print("[["+self.str[self.buffer_base:self.read_base+10]+"]]")
|
85
|
+
# raise Exception("")
|
86
|
+
self.buffer_size+=size
|
87
|
+
def size(self):
|
88
|
+
return self.buffer_size
|
89
|
+
def full(self):
|
90
|
+
return self.str[self.buffer_base:self.buffer_base+self.buffer_size]
|
91
|
+
def clean(self):
|
92
|
+
self.buffer_base = self.read_base
|
93
|
+
self.buffer_size = 0
|
94
|
+
def rget(self, size=1):
|
95
|
+
size = min(size, self.buffer_size)
|
96
|
+
return self.str[self.buffer_base+self.buffer_size-size:self.buffer_base+self.buffer_size]
|
97
|
+
def get(self, size=1):
|
98
|
+
size = min(size, self.buffer_size)
|
99
|
+
return self.str[self.buffer_base:self.buffer_base+size]
|
100
|
+
|
101
|
+
pass
|
@@ -0,0 +1,19 @@
|
|
1
|
+
from .. import base
|
2
|
+
from .. import item
|
3
|
+
from .. import exp
|
4
|
+
from . import lr
|
5
|
+
class ListDeal(lr.LRDeal):
|
6
|
+
"""
|
7
|
+
分隔符,有分隔符后将缓存的数据当作字符串
|
8
|
+
"""
|
9
|
+
def init(self, left, right):
|
10
|
+
super().init(left, right, 'list')
|
11
|
+
def build(self, arr):
|
12
|
+
rst = []
|
13
|
+
for _item in arr:
|
14
|
+
if not _item.is_val:
|
15
|
+
raise Exception("error in list:"+_item)
|
16
|
+
rst.append(_item.val)
|
17
|
+
return item.Item(rst, type='list', is_val = 1)
|
18
|
+
|
19
|
+
pass
|
@@ -0,0 +1,58 @@
|
|
1
|
+
from .. import base
|
2
|
+
from .. import item
|
3
|
+
from .. import exp
|
4
|
+
class LRDeal(base.BaseDeal):
|
5
|
+
def labels(self):
|
6
|
+
return [self.left]
|
7
|
+
def types(self):
|
8
|
+
return []
|
9
|
+
def deal(self, buffer, rst, mg):
|
10
|
+
cl = buffer.read(self.ll)
|
11
|
+
if self.left!=cl:
|
12
|
+
return False
|
13
|
+
_arr = []
|
14
|
+
rm = buffer.full().strip()
|
15
|
+
buffer.clean2read(self.ll)
|
16
|
+
if len(rm)>0:
|
17
|
+
arr.append(item.Item(rm, type="", is_val=False))
|
18
|
+
while True:
|
19
|
+
cr = buffer.read(self.lr)
|
20
|
+
if cr == self.right:
|
21
|
+
rm = buffer.full().strip()
|
22
|
+
buffer.clean2read(self.lr)
|
23
|
+
break
|
24
|
+
if not mg.deal(buffer, _arr):
|
25
|
+
raise Exception("Error lr")
|
26
|
+
buffer.clean()
|
27
|
+
if len(rm)>0:
|
28
|
+
_arr.append(item.Item(rm ,type = '', is_val=False))
|
29
|
+
dts = []
|
30
|
+
for k in _arr:
|
31
|
+
_k = mg.build(k)
|
32
|
+
if item.is_null(_k):
|
33
|
+
continue
|
34
|
+
dts.append(_k)
|
35
|
+
#dts = [mg.build(k) for k in _arr]
|
36
|
+
obj = self.build(dts)
|
37
|
+
rst.append(obj)
|
38
|
+
return True
|
39
|
+
def build(self, obj):
|
40
|
+
return item.Item(obj, type = self.type, is_val=True)
|
41
|
+
"""
|
42
|
+
分隔符,有分隔符后将缓存的数据当作字符串
|
43
|
+
"""
|
44
|
+
def prepare(self, mg):
|
45
|
+
self.left = mg.like(self.left)
|
46
|
+
self.right = mg.like(self.right)
|
47
|
+
self.ll = len(self.left)
|
48
|
+
self.lr = len(self.right)
|
49
|
+
def init(self, left, right, name= "lr"):
|
50
|
+
self.left = left
|
51
|
+
self.right = right
|
52
|
+
self.ll = len(left)
|
53
|
+
self.lr = len(right)
|
54
|
+
self.name = name
|
55
|
+
def err(self, s):
|
56
|
+
return s.replace("<lr>", self.name)
|
57
|
+
|
58
|
+
pass
|
@@ -0,0 +1,40 @@
|
|
1
|
+
from .. import base
|
2
|
+
from .. import item
|
3
|
+
from .. import exp
|
4
|
+
from . import lr
|
5
|
+
from . import reval
|
6
|
+
class Fcs:
|
7
|
+
def __init__(self):
|
8
|
+
self.maps = {}
|
9
|
+
def set(self, _type, fc):
|
10
|
+
self.maps[_type] = fc
|
11
|
+
def __call__(self, val, _type):
|
12
|
+
if _type not in self.maps:
|
13
|
+
raise Exception("unreginize type:"+_type)
|
14
|
+
return self.maps[_type](val)
|
15
|
+
|
16
|
+
pass
|
17
|
+
|
18
|
+
|
19
|
+
class LRValDeal(lr.LRDeal):
|
20
|
+
"""
|
21
|
+
"""
|
22
|
+
def init(self, left, right, fc):
|
23
|
+
super().init(left, right, 'lrval')
|
24
|
+
self.fc = fc
|
25
|
+
def build(self, arr):
|
26
|
+
rst = []
|
27
|
+
if len(arr)!=2:
|
28
|
+
raise Exception("error in lrval:"+arr)
|
29
|
+
for _item in arr:
|
30
|
+
if not _item.is_val:
|
31
|
+
raise Exception("error in list:"+_item)
|
32
|
+
rst.append(_item.val)
|
33
|
+
try:
|
34
|
+
val = self.fc(rst[0], rst[1])
|
35
|
+
except Exception as exp1:
|
36
|
+
print("exp:", exp1)
|
37
|
+
raise Exception(f"error in lrval fc: {self.fc}({rst}): {exp1} ")
|
38
|
+
return item.Item(val, type='val', is_val = 1)
|
39
|
+
|
40
|
+
pass
|
@@ -0,0 +1,24 @@
|
|
1
|
+
from .. import base
|
2
|
+
from .. import item
|
3
|
+
from .. import exp
|
4
|
+
from . import lr
|
5
|
+
class MapDeal(lr.LRDeal):
|
6
|
+
"""
|
7
|
+
分隔符,有分隔符后将缓存的数据当作字符串
|
8
|
+
"""
|
9
|
+
def init(self, left, right):
|
10
|
+
super().init(left, right, "map")
|
11
|
+
def build(self, arr):
|
12
|
+
rst = {}
|
13
|
+
if len(arr)%3!=0:
|
14
|
+
raise Exception(f"u f in map: {arr}")
|
15
|
+
for i in range(0, len(arr), 3):
|
16
|
+
k = arr[i]
|
17
|
+
v = arr[i+2]
|
18
|
+
opt = arr[i+1]
|
19
|
+
if opt.type != "kv":
|
20
|
+
raise Exception(f"u f opt in map: {opt}")
|
21
|
+
rst[k.val] = v.val
|
22
|
+
return item.Item(rst, type='map', is_val = 1)
|
23
|
+
|
24
|
+
pass
|
@@ -0,0 +1,21 @@
|
|
1
|
+
from .. import base
|
2
|
+
|
3
|
+
|
4
|
+
class PrevNextDeal(base.BaseDeal):
|
5
|
+
def labels(self):
|
6
|
+
return ['']
|
7
|
+
def types(self):
|
8
|
+
return [""]
|
9
|
+
def build(self, obj):
|
10
|
+
obj.is_val = 1
|
11
|
+
return obj
|
12
|
+
"""
|
13
|
+
读取下一个字符放缓存里,应放最低优先级
|
14
|
+
"""
|
15
|
+
def deal(self, buffer, arr, mg):
|
16
|
+
c = buffer.read_cache(1)
|
17
|
+
if len(c)==0:
|
18
|
+
return False
|
19
|
+
return True
|
20
|
+
|
21
|
+
pass
|
@@ -0,0 +1,30 @@
|
|
1
|
+
from .. import base
|
2
|
+
from .. import item
|
3
|
+
from .. import exp
|
4
|
+
from . import lr
|
5
|
+
import re
|
6
|
+
class ValDeal(base.BaseDeal):
|
7
|
+
def prepare(self,mg):
|
8
|
+
self.pt = mg.like(self.pt)
|
9
|
+
def types(self):
|
10
|
+
return [""]
|
11
|
+
"""
|
12
|
+
正则表达式匹配
|
13
|
+
"""
|
14
|
+
def init(self, pt, fc):
|
15
|
+
st = "^"
|
16
|
+
ed = "$"
|
17
|
+
if pt[0]!=st:
|
18
|
+
pt = st+pt
|
19
|
+
if pt[-1]!=ed:
|
20
|
+
pt = pt+ed
|
21
|
+
self.pt = pt
|
22
|
+
self.fc = fc
|
23
|
+
def build(self, obj):
|
24
|
+
val = obj.val
|
25
|
+
if re.match(self.pt, val) is None:
|
26
|
+
return None
|
27
|
+
val = self.fc(val)
|
28
|
+
return item.Item(val, type = "val", is_val = 1)
|
29
|
+
|
30
|
+
pass
|
@@ -0,0 +1,15 @@
|
|
1
|
+
from .. import base
|
2
|
+
from .. import item
|
3
|
+
from .. import exp
|
4
|
+
from . import spt
|
5
|
+
class SetDeal(spt.PrevSptDeal):
|
6
|
+
"""
|
7
|
+
Map里的key-val读取
|
8
|
+
"""
|
9
|
+
|
10
|
+
def init(self, spt):
|
11
|
+
super().init(spt, True,"kv")
|
12
|
+
def build(self, obj):
|
13
|
+
return obj
|
14
|
+
|
15
|
+
pass
|