buildz 0.4.8__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.8/buildz.egg-info → buildz-0.4.91}/PKG-INFO +5 -1
- {buildz-0.4.8 → buildz-0.4.91}/README.md +4 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/__init__.py +2 -1
- {buildz-0.4.8 → buildz-0.4.91}/buildz/argx.py +36 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/myers/deal.py +9 -2
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/help/myers.js +4 -2
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/test.js +1 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/tz/__init__.py +3 -2
- {buildz-0.4.8 → buildz-0.4.91}/buildz/tz/myers_diff.py +14 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/__init__.py +1 -1
- buildz-0.4.91/buildz/xf/__main__.py +6 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/base.py +4 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/buffer.py +35 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/lr.py +1 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/reval.py +4 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/spc.py +5 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/strz.py +5 -0
- {buildz-0.4.8 → 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.8 → buildz-0.4.91}/buildz/xf/mapz.py +5 -0
- {buildz-0.4.8 → 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.8 → buildz-0.4.91}/buildz/xf/xargs.py +5 -2
- {buildz-0.4.8 → buildz-0.4.91/buildz.egg-info}/PKG-INFO +5 -1
- {buildz-0.4.8 → buildz-0.4.91}/buildz.egg-info/SOURCES.txt +20 -0
- {buildz-0.4.8 → buildz-0.4.91}/setup.py +1 -1
- {buildz-0.4.8 → buildz-0.4.91}/LICENSE +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/MANIFEST.in +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/__main__.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/ioc/deal.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/ioc/help.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/myers/help.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/conf/ioc.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/conf/main.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/conf/myers.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/conf/search.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/conf/xf.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/help/default.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/help/ioc.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/help/search.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/help/xf.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/search/deal.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/search/help.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/test.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/xf/deal.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/xf/help.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/fz/__init__.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/fz/dirz.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/fz/fio.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/fz/lsf.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/__init__.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/init.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc/base.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc/conf.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc/confs.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/base.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/call.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/calls.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/demo.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/env.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/ioc.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/join.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/list.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/map.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/mcall.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/obj.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/ovar.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/ref.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/val.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/var.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/pyz.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/file.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/listz.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/lrval.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/mapz.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/nextz.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/setz.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/spt.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/exp.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/item.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/pos.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/write.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/base.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/conf.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/deal/jsonval.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/deal/listz.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/deal/mapz.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/deal/reval.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/deal/strz.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/itemz.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/mg.py +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz.egg-info/dependency_links.txt +0 -0
- {buildz-0.4.8 → buildz-0.4.91}/buildz.egg-info/top_level.txt +0 -0
- {buildz-0.4.8 → 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
|
@@ -10,7 +10,10 @@ class Deal:
|
|
10
10
|
opt = args[1]
|
11
11
|
fp1 = args[2]
|
12
12
|
fp2 = args[3]
|
13
|
-
|
13
|
+
if len(args)>4:
|
14
|
+
fp_step = args[4]
|
15
|
+
else:
|
16
|
+
fp_step = "steps.diff"
|
14
17
|
mark_encode = argx.get(maps, 'e', 1)
|
15
18
|
mark_txt = argx.get(maps, 't', None)
|
16
19
|
if mark_txt:
|
@@ -19,12 +22,16 @@ class Deal:
|
|
19
22
|
nspt = argx.get(maps, 'ns', 0)
|
20
23
|
if nspt:
|
21
24
|
spt = 0
|
22
|
-
if opt == 'diff':
|
25
|
+
if opt == 'diff' or opt == 'count':
|
23
26
|
bs1 = fz.read(fp1).decode("utf-8")
|
24
27
|
bs2 = fz.read(fp2).decode("utf-8")
|
25
28
|
#bs1 = b"text z xxxyzijsa"
|
26
29
|
#bs2 = b"test xxxx afzjcovijsax"
|
27
30
|
stps = tz.m_steps(bs1, bs2,split=spt)
|
31
|
+
if opt == 'count':
|
32
|
+
cnt = tz.m_count(stps)
|
33
|
+
print(f"diff from {fp1} to {fp2}: {cnt}")
|
34
|
+
return
|
28
35
|
if mark_encode:
|
29
36
|
stps = b"e"+tz.m_encode(stps)
|
30
37
|
else:
|
@@ -2,10 +2,11 @@
|
|
2
2
|
text=
|
3
3
|
r"""
|
4
4
|
文件比较(模仿git diff):
|
5
|
-
python -m buildz myers 操作 文件路径1 文件路径2 step文件 [+e/t/s/ns]
|
5
|
+
python -m buildz myers 操作 文件路径1 文件路径2 [step文件] [+e/t/s/ns]
|
6
6
|
操作:
|
7
7
|
diff: 计算文件1到文件2需要的步骤,保存到step文件
|
8
8
|
update: 文件1根据step文件修改,保存到文件2
|
9
|
+
count: 计算文件1到文件2的差异
|
9
10
|
可选:
|
10
11
|
+e: step文件字节保存(默认)
|
11
12
|
+t: step文件字符串保存
|
@@ -19,10 +20,11 @@ r"""
|
|
19
20
|
text.en=
|
20
21
|
r"""
|
21
22
|
file compare:
|
22
|
-
python -m buildz myers opt file1 file2 step_file
|
23
|
+
python -m buildz myers opt file1 file2 [step_file] [+e/t/s/ns]
|
23
24
|
opt:
|
24
25
|
diff: calucate steps from file1 to fiel2, save into step_file
|
25
26
|
update: update file1 by step_file, save into file2
|
27
|
+
count: count differenct from file1 to file2
|
26
28
|
options:
|
27
29
|
+e: step_file save in bytes(default)
|
28
30
|
+t: step_file save by string
|
@@ -1,11 +1,12 @@
|
|
1
1
|
#coding=utf-8
|
2
2
|
#author: Zzz, emails: 1174534295@qq.com, 1309458652@qq.com
|
3
3
|
|
4
|
-
#
|
5
|
-
from .myers_diff import update as m_update, myers as m_steps, encode as m_encode, decode as m_decode
|
4
|
+
# 文件差异
|
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"
|
@@ -116,6 +116,20 @@ def combine(steps):
|
|
116
116
|
rst.append(step)
|
117
117
|
return rst
|
118
118
|
|
119
|
+
pass
|
120
|
+
def count(steps):
|
121
|
+
cnt = 0
|
122
|
+
cadd,cdel = 0,0
|
123
|
+
#print(f"steps: {len(steps)}")
|
124
|
+
for step in steps:
|
125
|
+
if step[0] == ACT_ADD:
|
126
|
+
cnt+=len(step[2])
|
127
|
+
cadd+=len(step[2])
|
128
|
+
else:
|
129
|
+
cnt+=1+step[2]-step[1]
|
130
|
+
cdel +=1+step[2]-step[1]
|
131
|
+
return cnt#,cadd,cdel
|
132
|
+
|
119
133
|
pass
|
120
134
|
def update(s, steps, split=1):
|
121
135
|
"""
|
@@ -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
|