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.
Files changed (130) hide show
  1. {buildz-0.4.8/buildz.egg-info → buildz-0.4.91}/PKG-INFO +5 -1
  2. {buildz-0.4.8 → buildz-0.4.91}/README.md +4 -0
  3. {buildz-0.4.8 → buildz-0.4.91}/buildz/__init__.py +2 -1
  4. {buildz-0.4.8 → buildz-0.4.91}/buildz/argx.py +36 -0
  5. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/myers/deal.py +9 -2
  6. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/help/myers.js +4 -2
  7. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/test.js +1 -0
  8. {buildz-0.4.8 → buildz-0.4.91}/buildz/tz/__init__.py +3 -2
  9. {buildz-0.4.8 → buildz-0.4.91}/buildz/tz/myers_diff.py +14 -0
  10. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/__init__.py +1 -1
  11. buildz-0.4.91/buildz/xf/__main__.py +6 -0
  12. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/base.py +4 -0
  13. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/buffer.py +35 -0
  14. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/lr.py +1 -0
  15. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/reval.py +4 -0
  16. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/spc.py +5 -0
  17. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/strz.py +5 -0
  18. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/mg.py +27 -5
  19. buildz-0.4.91/buildz/xf/loaderz/base.py +34 -0
  20. buildz-0.4.91/buildz/xf/loaderz/buffer.py +101 -0
  21. buildz-0.4.91/buildz/xf/loaderz/deal/listz.py +19 -0
  22. buildz-0.4.91/buildz/xf/loaderz/deal/lr.py +58 -0
  23. buildz-0.4.91/buildz/xf/loaderz/deal/lrval.py +40 -0
  24. buildz-0.4.91/buildz/xf/loaderz/deal/mapz.py +24 -0
  25. buildz-0.4.91/buildz/xf/loaderz/deal/nextz.py +21 -0
  26. buildz-0.4.91/buildz/xf/loaderz/deal/reval.py +30 -0
  27. buildz-0.4.91/buildz/xf/loaderz/deal/setz.py +15 -0
  28. buildz-0.4.91/buildz/xf/loaderz/deal/spc.py +24 -0
  29. buildz-0.4.91/buildz/xf/loaderz/deal/spt.py +38 -0
  30. buildz-0.4.91/buildz/xf/loaderz/deal/strz.py +96 -0
  31. buildz-0.4.91/buildz/xf/loaderz/exp.py +12 -0
  32. buildz-0.4.91/buildz/xf/loaderz/item.py +68 -0
  33. buildz-0.4.91/buildz/xf/loaderz/mg.py +96 -0
  34. buildz-0.4.91/buildz/xf/loaderz/pos.py +51 -0
  35. buildz-0.4.91/buildz/xf/loaderz/test.py +77 -0
  36. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/mapz.py +5 -0
  37. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/read.py +1 -1
  38. buildz-0.4.91/buildz/xf/readz.py +82 -0
  39. buildz-0.4.91/buildz/xf/stack.py +68 -0
  40. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/xargs.py +5 -2
  41. {buildz-0.4.8 → buildz-0.4.91/buildz.egg-info}/PKG-INFO +5 -1
  42. {buildz-0.4.8 → buildz-0.4.91}/buildz.egg-info/SOURCES.txt +20 -0
  43. {buildz-0.4.8 → buildz-0.4.91}/setup.py +1 -1
  44. {buildz-0.4.8 → buildz-0.4.91}/LICENSE +0 -0
  45. {buildz-0.4.8 → buildz-0.4.91}/MANIFEST.in +0 -0
  46. {buildz-0.4.8 → buildz-0.4.91}/buildz/__main__.py +0 -0
  47. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/ioc/deal.py +0 -0
  48. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/ioc/help.py +0 -0
  49. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/myers/help.py +0 -0
  50. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/conf/ioc.js +0 -0
  51. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/conf/main.js +0 -0
  52. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/conf/myers.js +0 -0
  53. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/conf/search.js +0 -0
  54. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/conf/xf.js +0 -0
  55. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/help/default.js +0 -0
  56. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/help/ioc.js +0 -0
  57. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/help/search.js +0 -0
  58. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/res/help/xf.js +0 -0
  59. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/search/deal.py +0 -0
  60. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/search/help.py +0 -0
  61. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/test.py +0 -0
  62. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/xf/deal.py +0 -0
  63. {buildz-0.4.8 → buildz-0.4.91}/buildz/demo/xf/help.py +0 -0
  64. {buildz-0.4.8 → buildz-0.4.91}/buildz/fz/__init__.py +0 -0
  65. {buildz-0.4.8 → buildz-0.4.91}/buildz/fz/dirz.py +0 -0
  66. {buildz-0.4.8 → buildz-0.4.91}/buildz/fz/fio.py +0 -0
  67. {buildz-0.4.8 → buildz-0.4.91}/buildz/fz/lsf.py +0 -0
  68. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/__init__.py +0 -0
  69. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/init.py +0 -0
  70. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc/base.py +0 -0
  71. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc/conf.py +0 -0
  72. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc/confs.py +0 -0
  73. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/base.py +0 -0
  74. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/call.py +0 -0
  75. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/calls.py +0 -0
  76. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
  77. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
  78. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
  79. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
  80. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
  81. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
  82. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
  83. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
  84. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
  85. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
  86. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
  87. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
  88. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
  89. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
  90. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
  91. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
  92. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
  93. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
  94. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
  95. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/demo.py +0 -0
  96. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/env.py +0 -0
  97. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/ioc.py +0 -0
  98. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/join.py +0 -0
  99. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/list.py +0 -0
  100. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/map.py +0 -0
  101. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/mcall.py +0 -0
  102. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/obj.py +0 -0
  103. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/ovar.py +0 -0
  104. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/ref.py +0 -0
  105. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/val.py +0 -0
  106. {buildz-0.4.8 → buildz-0.4.91}/buildz/ioc/ioc_deal/var.py +0 -0
  107. {buildz-0.4.8 → buildz-0.4.91}/buildz/pyz.py +0 -0
  108. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/file.py +0 -0
  109. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/listz.py +0 -0
  110. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/lrval.py +0 -0
  111. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/mapz.py +0 -0
  112. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/nextz.py +0 -0
  113. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/setz.py +0 -0
  114. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/deal/spt.py +0 -0
  115. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/exp.py +0 -0
  116. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/item.py +0 -0
  117. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/loader/pos.py +0 -0
  118. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/write.py +0 -0
  119. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/base.py +0 -0
  120. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/conf.py +0 -0
  121. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/deal/jsonval.py +0 -0
  122. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/deal/listz.py +0 -0
  123. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/deal/mapz.py +0 -0
  124. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/deal/reval.py +0 -0
  125. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/deal/strz.py +0 -0
  126. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/itemz.py +0 -0
  127. {buildz-0.4.8 → buildz-0.4.91}/buildz/xf/writer/mg.py +0 -0
  128. {buildz-0.4.8 → buildz-0.4.91}/buildz.egg-info/dependency_links.txt +0 -0
  129. {buildz-0.4.8 → buildz-0.4.91}/buildz.egg-info/top_level.txt +0 -0
  130. {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.8
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,7 +1,8 @@
1
1
  #coding=utf-8
2
2
 
3
- __version__="0.4.5"
3
+ __version__="0.4.91"
4
4
 
5
+ # 小号多
5
6
  __author__ = "Zzz, emails: 1174534295@qq.com, 1309458652@qq.com"
6
7
 
7
8
  from .argx import fetch as args
@@ -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
- fp_step = args[4]
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
@@ -18,6 +18,7 @@
18
18
  # 字符串里有特殊符合,还是要用引号括起来
19
19
  # if special charater is contained in string, use '' or "" to wrap string
20
20
  'a:b':"{c,d,e,f}"
21
+ <1,int>=<0,bool>
21
22
  }
22
23
  ]
23
24
  }
@@ -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
  """
@@ -1,5 +1,5 @@
1
1
 
2
- from .read import loads, load
2
+ from .readz import loads, load
3
3
  from .write import dumps, dump
4
4
  from .file import *
5
5
  from .mapz import *
@@ -0,0 +1,6 @@
1
+ #coding=utf-8
2
+ from .xargs import test
3
+ if __name__=="__main__":
4
+ test()
5
+
6
+ pass
@@ -1,5 +1,9 @@
1
1
 
2
2
  class BaseDeal:
3
+ def has_prev(self):
4
+ return 1
5
+ def has_deal(self):
6
+ return 1
3
7
  def sp(self):
4
8
  return super(self.__class__, self)
5
9
  def regist(self, mgs):
@@ -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:
@@ -4,6 +4,10 @@ from .. import exp
4
4
  from . import lr
5
5
  import re
6
6
  class ValDeal(base.BaseDeal):
7
+ def has_prev(self):
8
+ return 0
9
+ def has_deal(self):
10
+ return 1
7
11
  """
8
12
  正则表达式匹配
9
13
  """
@@ -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
- self.prevs.append(obj.prev)
23
- self.deals.append(obj.deal)
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
- buff = buffer.Buffer(reader)
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
- stack = []
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