buildz 0.6.1__tar.gz → 0.6.2__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 (157) hide show
  1. {buildz-0.6.1/buildz.egg-info → buildz-0.6.2}/PKG-INFO +1 -1
  2. buildz-0.6.2/buildz/xf/code.py +71 -0
  3. buildz-0.6.2/buildz/xf/code_modify.py +71 -0
  4. buildz-0.6.2/buildz/xf/loaderz/deal/strz.py +284 -0
  5. buildz-0.6.1/buildz/xf/loaderz/deal/strz.py → buildz-0.6.2/buildz/xf/loaderz/deal/strz_new.py +1 -0
  6. buildz-0.6.2/buildz/xf/loaderz/deal/strz_old.py +197 -0
  7. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/test.py +4 -3
  8. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/readz.py +5 -0
  9. {buildz-0.6.1 → buildz-0.6.2/buildz.egg-info}/PKG-INFO +1 -1
  10. {buildz-0.6.1 → buildz-0.6.2}/buildz.egg-info/SOURCES.txt +4 -0
  11. {buildz-0.6.1 → buildz-0.6.2}/setup.py +1 -1
  12. {buildz-0.6.1 → buildz-0.6.2}/LICENSE +0 -0
  13. {buildz-0.6.1 → buildz-0.6.2}/MANIFEST.in +0 -0
  14. {buildz-0.6.1 → buildz-0.6.2}/README.md +0 -0
  15. {buildz-0.6.1 → buildz-0.6.2}/buildz/__init__.py +0 -0
  16. {buildz-0.6.1 → buildz-0.6.2}/buildz/__main__.py +0 -0
  17. {buildz-0.6.1 → buildz-0.6.2}/buildz/argx.py +0 -0
  18. {buildz-0.6.1 → buildz-0.6.2}/buildz/cmd.py +0 -0
  19. {buildz-0.6.1 → buildz-0.6.2}/buildz/db/__main__.py +0 -0
  20. {buildz-0.6.1 → buildz-0.6.2}/buildz/db/dv/basez.py +0 -0
  21. {buildz-0.6.1 → buildz-0.6.2}/buildz/db/dv/clickhousez.py +0 -0
  22. {buildz-0.6.1 → buildz-0.6.2}/buildz/db/dv/lib/readme +0 -0
  23. {buildz-0.6.1 → buildz-0.6.2}/buildz/db/dv/mysqlz.py +0 -0
  24. {buildz-0.6.1 → buildz-0.6.2}/buildz/db/dv/oraclez.py +0 -0
  25. {buildz-0.6.1 → buildz-0.6.2}/buildz/db/dv/structz.py +0 -0
  26. {buildz-0.6.1 → buildz-0.6.2}/buildz/db/install.txt +0 -0
  27. {buildz-0.6.1 → buildz-0.6.2}/buildz/db/run.conf +0 -0
  28. {buildz-0.6.1 → buildz-0.6.2}/buildz/db/runz.py +0 -0
  29. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/ioc/deal.py +0 -0
  30. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/ioc/help.py +0 -0
  31. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/myers/deal.py +0 -0
  32. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/myers/help.py +0 -0
  33. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/res/conf/ioc.js +0 -0
  34. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/res/conf/main.js +0 -0
  35. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/res/conf/myers.js +0 -0
  36. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/res/conf/search.js +0 -0
  37. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/res/conf/xf.js +0 -0
  38. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/res/help/default.js +0 -0
  39. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/res/help/ioc.js +0 -0
  40. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/res/help/myers.js +0 -0
  41. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/res/help/search.js +0 -0
  42. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/res/help/xf.js +0 -0
  43. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/res/test.js +0 -0
  44. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/search/deal.py +0 -0
  45. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/search/help.py +0 -0
  46. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/test.py +0 -0
  47. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/xf/deal.py +0 -0
  48. {buildz-0.6.1 → buildz-0.6.2}/buildz/demo/xf/help.py +0 -0
  49. {buildz-0.6.1 → buildz-0.6.2}/buildz/fz/__init__.py +0 -0
  50. {buildz-0.6.1 → buildz-0.6.2}/buildz/fz/dirz.py +0 -0
  51. {buildz-0.6.1 → buildz-0.6.2}/buildz/fz/fhs.py +0 -0
  52. {buildz-0.6.1 → buildz-0.6.2}/buildz/fz/fio.py +0 -0
  53. {buildz-0.6.1 → buildz-0.6.2}/buildz/fz/lsf.py +0 -0
  54. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/__init__.py +0 -0
  55. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/base.py +0 -0
  56. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/init.py +0 -0
  57. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc/base.py +0 -0
  58. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc/conf.py +0 -0
  59. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc/confs.py +0 -0
  60. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc/single.py +0 -0
  61. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/base.py +0 -0
  62. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/call.py +0 -0
  63. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/calls.py +0 -0
  64. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
  65. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
  66. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
  67. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
  68. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
  69. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
  70. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
  71. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
  72. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
  73. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
  74. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
  75. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
  76. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
  77. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
  78. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
  79. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
  80. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
  81. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
  82. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
  83. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
  84. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
  85. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
  86. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
  87. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/deal.py +0 -0
  88. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/demo.py +0 -0
  89. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/env.py +0 -0
  90. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/ioc.py +0 -0
  91. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/iocf.py +0 -0
  92. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/join.py +0 -0
  93. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/list.py +0 -0
  94. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/map.py +0 -0
  95. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/mcall.py +0 -0
  96. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/obj.py +0 -0
  97. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/ovar.py +0 -0
  98. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/ref.py +0 -0
  99. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/val.py +0 -0
  100. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/var.py +0 -0
  101. {buildz-0.6.1 → buildz-0.6.2}/buildz/ioc/ioc_deal/xfile.py +0 -0
  102. {buildz-0.6.1 → buildz-0.6.2}/buildz/pyz.py +0 -0
  103. {buildz-0.6.1 → buildz-0.6.2}/buildz/tz/__init__.py +0 -0
  104. {buildz-0.6.1 → buildz-0.6.2}/buildz/tz/myers_diff.py +0 -0
  105. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/__init__.py +0 -0
  106. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/__main__.py +0 -0
  107. /buildz-0.6.1/buildz/xf/code.py → /buildz-0.6.2/buildz/xf/copy_old.py +0 -0
  108. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/file.py +0 -0
  109. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/base.py +0 -0
  110. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/buffer.py +0 -0
  111. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/deal/listz.py +0 -0
  112. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/deal/lr.py +0 -0
  113. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/deal/lrval.py +0 -0
  114. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/deal/mapz.py +0 -0
  115. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/deal/nextz.py +0 -0
  116. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/deal/reval.py +0 -0
  117. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/deal/setz.py +0 -0
  118. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/deal/spc.py +0 -0
  119. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/deal/spt.py +0 -0
  120. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/deal/strz.py +0 -0
  121. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/exp.py +0 -0
  122. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/item.py +0 -0
  123. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/mg.py +0 -0
  124. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loader/pos.py +0 -0
  125. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/base.py +0 -0
  126. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/buffer.py +0 -0
  127. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/deal/listz.py +0 -0
  128. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/deal/lr.py +0 -0
  129. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/deal/lrval.py +0 -0
  130. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/deal/mapz.py +0 -0
  131. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/deal/nextz.py +0 -0
  132. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/deal/reval.py +0 -0
  133. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/deal/setz.py +0 -0
  134. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/deal/spc.py +0 -0
  135. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/deal/spt.py +0 -0
  136. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/exp.py +0 -0
  137. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/item.py +0 -0
  138. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/mg.py +0 -0
  139. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/pos.py +0 -0
  140. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/loaderz/test1.py +0 -0
  141. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/mapz.py +0 -0
  142. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/read.py +0 -0
  143. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/stack.py +0 -0
  144. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/write.py +0 -0
  145. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/writer/base.py +0 -0
  146. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/writer/conf.py +0 -0
  147. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/writer/deal/jsonval.py +0 -0
  148. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/writer/deal/listz.py +0 -0
  149. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/writer/deal/mapz.py +0 -0
  150. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/writer/deal/reval.py +0 -0
  151. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/writer/deal/strz.py +0 -0
  152. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/writer/itemz.py +0 -0
  153. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/writer/mg.py +0 -0
  154. {buildz-0.6.1 → buildz-0.6.2}/buildz/xf/xargs.py +0 -0
  155. {buildz-0.6.1 → buildz-0.6.2}/buildz.egg-info/dependency_links.txt +0 -0
  156. {buildz-0.6.1 → buildz-0.6.2}/buildz.egg-info/top_level.txt +0 -0
  157. {buildz-0.6.1 → buildz-0.6.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buildz
3
- Version: 0.6.1
3
+ Version: 0.6.2
4
4
  Summary: 配置读写(基于json格式进行简化)、ioc、以及其他工具代码。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(ioc), and other tool codes
5
5
  Home-page: https://github.com/buildCodeZ/buildz
6
6
  Author: Zzz
@@ -0,0 +1,71 @@
1
+ #coding=utf-8
2
+
3
+ maps = {
4
+ '"': '"', '\\': '\\', '/': '/',
5
+ 'b': '\b', 'f': '\f', 'n': '\n', 'r': '\r', 't': '\t',
6
+ }
7
+ bmaps = {k.encode()[0]:v.encode()[0] for k,v in maps.items()}
8
+ barr = [-1]*256
9
+ for k,v in bmaps.items():
10
+ barr[k] = v
11
+
12
+ pass
13
+ def ustr(s):
14
+ i = 0
15
+ l=len(s)
16
+ rs = ""
17
+ while i<l:
18
+ c = s[i]
19
+ i+=1
20
+ if c == '\\':
21
+ x = s[i]
22
+ i+=1
23
+ if x == 'u':
24
+ v = int(s[i:i+4], 16)
25
+ r = chr(v)
26
+ rs+=r
27
+ i+=4
28
+ continue
29
+ elif x in maps:
30
+ r = maps[x]
31
+ rs+=r
32
+ continue
33
+ rs+=c
34
+ return rs
35
+
36
+ pass
37
+ bl2,bu = b'\\u'
38
+ def ubytes(s, code = "utf-8"):
39
+ i = 0
40
+ l=len(s)
41
+ rs = b""
42
+ rs = []
43
+ while i<l:
44
+ c = s[i]
45
+ i+=1
46
+ if c != bl2:
47
+ rs.append(c)
48
+ continue
49
+ x = s[i]
50
+ i+=1
51
+ rx = barr[x]
52
+ if rx>=0:
53
+ rs.append(rx)
54
+ continue
55
+ elif x == bu:
56
+ v = int(s[i:i+4], 16)
57
+ r = chr(v).encode(code)
58
+ rs+=list(r)
59
+ i+=4
60
+ continue
61
+ rs.append(c)
62
+ rs.append(x)
63
+ #print(rs)
64
+ rs = bytes(rs)
65
+ return rs
66
+
67
+ pass
68
+ def ub2s(s, code = "utf-8"):
69
+ return ubytes(s, code).decode(code)
70
+
71
+ pass
@@ -0,0 +1,71 @@
1
+ #coding=utf-8
2
+
3
+ maps = {
4
+ '"': '"', '\\': '\\', '/': '/',
5
+ 'b': '\b', 'f': '\f', 'n': '\n', 'r': '\r', 't': '\t',
6
+ }
7
+ bmaps = {k.encode()[0]:v.encode()[0] for k,v in maps.items()}
8
+ barr = [-1]*256
9
+ for k,v in bmaps.items():
10
+ barr[k] = v
11
+
12
+ pass
13
+ def ustr(s):
14
+ i = 0
15
+ l=len(s)
16
+ rs = ""
17
+ while i<l:
18
+ c = s[i]
19
+ i+=1
20
+ if c == '\\':
21
+ x = s[i]
22
+ i+=1
23
+ if x == 'u':
24
+ v = int(s[i:i+4], 16)
25
+ r = chr(v)
26
+ rs+=r
27
+ i+=4
28
+ continue
29
+ elif x in maps:
30
+ r = maps[x]
31
+ rs+=r
32
+ continue
33
+ rs+=c
34
+ return rs
35
+
36
+ pass
37
+ bl2,bu = b'\\u'
38
+ def ubytes(s, code = "utf-8"):
39
+ i = 0
40
+ l=len(s)
41
+ rs = b""
42
+ rs = []
43
+ while i<l:
44
+ c = s[i]
45
+ i+=1
46
+ if c != bl2:
47
+ rs.append(c)
48
+ continue
49
+ x = s[i]
50
+ i+=1
51
+ rx = barr[x]
52
+ if rx>=0:
53
+ rs.append(rx)
54
+ continue
55
+ elif x == bu:
56
+ v = int(s[i:i+4], 16)
57
+ r = chr(v).encode(code)
58
+ rs+=list(r)
59
+ i+=4
60
+ continue
61
+ rs.append(c)
62
+ rs.append(x)
63
+ #print(rs)
64
+ rs = bytes(rs)
65
+ return rs
66
+
67
+ pass
68
+ def ub2s(s, code = "utf-8"):
69
+ return ubytes(s, code).decode(code)
70
+
71
+ pass
@@ -0,0 +1,284 @@
1
+ from .. import base
2
+ from .. import item
3
+ from .. import exp
4
+ from ... import file
5
+ from ... import code as codez
6
+ from . import lr
7
+
8
+ def init():
9
+ cs = "abfnrtv\\'\"?0123456789xcde"
10
+ maps = {k:k.encode()[0] for k in cs}
11
+ global c2b
12
+ c2b = maps
13
+ global special_keys
14
+ special_keys = [-1]*256
15
+ s = "abfnrtv\\'\""
16
+ ts = b"\a\b\f\n\r\t\v\\\'\""
17
+ for c,t in zip(s, ts):
18
+ special_keys[c2b[c]] = t
19
+ symbal_a = [False]*256
20
+ for c in s:
21
+ symbal_a[c2b[c]] = True
22
+ global id_0,id_a,id_x,id_A
23
+ global c2nums
24
+ c2nums = [-1]*256
25
+ id_0,id_a,id_A,id_x,id_u = b'0aAxu'
26
+ for i in range(128):
27
+ v = i-id_0
28
+ if v>=0 and v<=9:
29
+ c2nums[i] = v
30
+ continue
31
+ v = i-id_a
32
+ if v>=0 and v<=5:
33
+ c2nums[i]=v+10
34
+ continue
35
+ v = i-id_A
36
+ if v>=0 and v<=5:
37
+ c2nums[i]=v+10
38
+
39
+ pass
40
+ init()
41
+ def cs2num(bts, base, min, max, oct = False):
42
+ cnt = 0
43
+ rst = 0
44
+ mv = 4
45
+ if oct:
46
+ mv = 3
47
+ for i in range(max):
48
+ if base+i>=len(bts):
49
+ if i<min:
50
+ return -1,0
51
+ else:
52
+ break
53
+ bt = bts[base+i]
54
+ v = c2nums[bt]
55
+ if v<0 or (oct and v>9):
56
+ if i<min:
57
+ return -1,0
58
+ else:
59
+ break
60
+ cnt+=1
61
+ rst = (rst<<mv)|v
62
+ return rst, cnt
63
+
64
+ pass
65
+ def decode_u(val):
66
+ """
67
+ 1 byte: 7 0?
68
+ 2 byte: 11 110? 10?
69
+ 3 byte: 16 1110? 10? 10?
70
+ 4 byte: 21 11110? 10? 10? 10?
71
+ """
72
+ if val<0x80:
73
+ return [val]
74
+ elif val<0x800:
75
+ b0 = 0x80|(val&0x7f)
76
+ b1 = 0x60|(val>>6)
77
+ return [b1, b0]
78
+ elif val<0x10000:
79
+ b0 = 0x80|(val&0x3f)
80
+ val>>=6
81
+ b1 = 0x80|(val&0x3f)
82
+ b2 = 0xe0|(val>>6)
83
+ return [b2,b1,b0]
84
+ else:
85
+ b0 = 0x80|(val&0x3f)
86
+ val>>=6
87
+ b1 = 0x80|(val&0x3f)
88
+ val>>=6
89
+ b2 = 0x80|(val&0x3f)
90
+ b3 = 0xf0|(val>>6)
91
+ return [b3,b2,b1,b0]
92
+
93
+ pass
94
+ def translate_bts(bts, octs = None, hexs = None):
95
+ i = 0
96
+ rs = []
97
+ while i<len(bts):
98
+ c = bts[i]
99
+ i+=1
100
+ if c!=c2b['\\']:
101
+ rs.append(c)
102
+ continue
103
+ x0 = bts[i]
104
+ i+=1
105
+ if special_keys[x0]>=0:
106
+ rs.append(special_keys[x0])
107
+ continue
108
+ if x0==b'u'[0]:
109
+ c_val, c_cnt = cs2num(bts, i, 4,4, 0)
110
+ if c_cnt==0:
111
+ raise Exception("\\uXXXX error")
112
+ tmp = decode_u(c_val)
113
+ i+=c_cnt
114
+ rs+=tmp
115
+ continue
116
+ if x0==id_x:
117
+ c_val, c_cnt = cs2num(bts, i, 2, 2, 0)
118
+ if c_cnt==0:
119
+ raise Exception("\\xXX error")
120
+ if hexs is not None:
121
+ tmp = hexs[c_val]
122
+ else:
123
+ tmp = [c_val]
124
+ rs+=tmp
125
+ i+=c_cnt
126
+ continue
127
+ c_val,c_cnt = cs2num(bts, i-1, 1, 3, 1)
128
+ if c_cnt>0:
129
+ if octs is not None:
130
+ tmp = octs[c_val]
131
+ else:
132
+ tmp = [c_val%256]
133
+ rs+=tmp
134
+ i+=c_cnt-1
135
+ continue
136
+ rs.append(c)
137
+ rs.append(x0)
138
+ #i-=1
139
+ return bytes(rs)
140
+
141
+ pass
142
+ def gen_chars(code="utf-8"):
143
+ simple = "abfnrtv\\'\""
144
+ octs = [0]*512
145
+ hexs = [0]*256
146
+ for i in range(512):
147
+ if i<256:
148
+ vhex = hex(i)[2:]
149
+ if len(vhex)==1:
150
+ vhex = "0"+vhex
151
+ cmd = f"'\\x{vhex}'"
152
+ hexs[i] = list(eval(cmd).encode(code))
153
+ voct = oct(i)[2:]
154
+ cmd = f"'\\{voct}'"
155
+ octs[i] = list(eval(cmd).encode(code))
156
+ return octs, hexs
157
+
158
+ pass
159
+ class PrevStrDeal(lr.LRDeal):
160
+ def types(self):
161
+ if not self.deal_build:
162
+ return []
163
+ return ['str']
164
+ def build(self, obj):
165
+ obj.is_val = 1
166
+ if self.translate:
167
+ val = obj.val
168
+ val = self.do_translate(val)
169
+ obj.val = val
170
+ return obj
171
+ def prepare(self, mg):
172
+ super().prepare(mg)
173
+ self.as_bytes = mg.as_bytes
174
+ #if not self.as_bytes:
175
+ # self.octs,self.hexs = gen_chars()
176
+ self.label_l2 = mg.like("\\")
177
+ self.label_qt = mg.like('"')
178
+ self.label_et = mg.like("\n")
179
+ self.label_lr = mg.like("\r")
180
+ self.label_nl = mg.like("")
181
+ self.et_in_right = self.right.count(self.label_et)
182
+ def init(self, left = '"', right= '"', single_line = False, note = False, translate = False, deal_build = False):
183
+ super().init(left, right, 'str')
184
+ self.single_line = single_line
185
+ self.note = note
186
+ self.translate = translate
187
+ self.deal_build = deal_build
188
+ self.as_bytes = True
189
+ self.octs = None
190
+ self.hexs = None
191
+ def json_loads(self, s):
192
+ import json
193
+ x = s
194
+ cd = None
195
+ if type(x)==bytes:
196
+ x, cd = file.decode_c(x)
197
+ rs = json.loads(x)
198
+ if type(s)==bytes:
199
+ rs = rs.encode(cd)
200
+ return rs
201
+ def do_translate(self, s):
202
+ """
203
+ 取巧用python的eval来生成字符表
204
+ """
205
+ is_bytes = type(s)==bytes
206
+ if is_bytes:
207
+ return codez.ubytes(s, "utf-8")
208
+ else:
209
+ return codez.ub2s(s.encode("utf-8"), "utf-8")
210
+ return codez.ustr(s)
211
+ if not is_bytes:
212
+ s = s.encode("utf-8")
213
+ #s = s.decode("unicode_escape")
214
+ s = translate_bts(s, self.octs, self.hexs)
215
+ if is_bytes:
216
+ #s = s.encode("utf-8")
217
+ s = s.decode("utf-8")
218
+ return s
219
+ """
220
+ 取巧直接调用json
221
+ """
222
+ qt = self.label_qt
223
+ ql = self.label_l2
224
+ et = self.label_et
225
+ tr = self.label_lr
226
+ nt = self.label_nl
227
+ pt = ql+qt
228
+ arr = s.split(pt)
229
+ arr = [k.replace(qt, pt) for k in arr]
230
+ s = pt.join(arr)
231
+ #s = s.replace(qt, ql+qt)
232
+ s = s.replace(tr, nt)
233
+ arr = s.split(et)
234
+ outs = [self.json_loads(qt+k+qt) for k in arr]
235
+ outs = et.join(outs)
236
+ return outs
237
+ def deal(self, buffer, rst, mg):
238
+ cl = buffer.read(self.ll)
239
+ if cl != self.left:
240
+ return False
241
+ rm = buffer.full().strip()
242
+ buffer.clean2read(self.ll)
243
+ if len(rm)>0:
244
+ if not self.note:
245
+ raise Exception(f"unexcept char before string: {rm}")
246
+ else:
247
+ rst.append(item.Item(rm, type = "str", is_val = 0))
248
+ tmp = cl[:0]
249
+ ctmp = tmp[:0]
250
+ do_judge = 1
251
+ mark_et = 0
252
+ mark_l2 = 0
253
+ while True:
254
+ if do_judge and self.right == buffer.rget(self.lr):
255
+ break
256
+ c = buffer.read_cache(1)
257
+ if do_judge and c == self.label_et:
258
+ mark_et += 1
259
+ if len(c)==0:
260
+ if self.single_line and self.note:
261
+ break
262
+ raise Exception(f"unexcept string end while reading str")
263
+ do_judge = 1
264
+ if c == self.label_l2:
265
+ mark_l2 = 1
266
+ do_judge = 0
267
+ c = buffer.read_cache(1)
268
+ if len(c)==0:
269
+ raise Exception(f"unexcept string end while reading str")
270
+ data = buffer.full()
271
+ data = data[:-self.lr]
272
+ buffer.clean()
273
+ mark_et -= self.et_in_right
274
+ if self.single_line and mark_et>0:
275
+ print("left:",self.left, "right:", self.right)
276
+ raise Exception(f"contain enter in single line string")
277
+ if self.translate and mark_l2:
278
+ data = self.do_translate(data)
279
+ if self.note:
280
+ return True
281
+ rst.append(item.Item(data, type='str', is_val = 1))
282
+ return True
283
+
284
+ pass
@@ -206,6 +206,7 @@ class PrevStrDeal(lr.LRDeal):
206
206
  if is_bytes:
207
207
  return codez.ubytes(s, "utf-8")
208
208
  else:
209
+ return codez.ub2s(s.encode("utf-8"), "utf-8")
209
210
  return codez.ustr(s)
210
211
  if not is_bytes:
211
212
  s = s.encode("utf-8")
@@ -0,0 +1,197 @@
1
+ from .. import base
2
+ from .. import item
3
+ from .. import exp
4
+ from ... import file
5
+ import json
6
+ from . import lr
7
+ from ... import code as codez
8
+ def init():
9
+ cs = "abfnrtv\\'\"?0123456789xcde"
10
+ maps = {k:k.encode()[0] for k in cs}
11
+ global c2b
12
+ c2b = maps
13
+ global symbal_a
14
+ global a_map
15
+ a_map = [0]*256
16
+ s = "abfnrtv\\'\"?"
17
+ ts = b"\a\b\f\n\r\t\v\\\'\"\?"
18
+ for c,t in zip(s, ts):
19
+ a_map[c2b[c]] = t
20
+ symbal_a = [False]*256
21
+ for c in s:
22
+ symbal_a[c2b[c]] = True
23
+ global id_0,id_a,id_x
24
+ id_0 = b'0'[0]
25
+ id_a = b'a'[0]
26
+ id_x = b'x'[0]
27
+
28
+ pass
29
+
30
+ init()
31
+ def translate_bts(bts):
32
+ i = 0
33
+ rs = []
34
+ while i<len(bts):
35
+ c = bts[i]
36
+ i+=1
37
+ if c!=c2b['\\']:
38
+ rs.append(c)
39
+ continue
40
+ x0 = bts[i]
41
+ i+=1
42
+ if symbal_a[x0]:
43
+ rs.append(a_map[x0])
44
+ continue
45
+ v = x0-id_0
46
+ if v>=0 and v<=7:
47
+ tmp = v
48
+ for j in range(2):
49
+ if i+j+1>=len(bts):
50
+ break
51
+ xi = bts[i+j+1]
52
+ vi = xi-id_0
53
+ if vi>=0 and vi<=7:
54
+ i+=1
55
+ tmp = (rs<<3)+vi
56
+ else:
57
+ break
58
+ rs.append(tmp)
59
+ continue
60
+ if x0 == id_x:
61
+ tmp = 0
62
+ for j in range(2):
63
+ if i+j+1>=len(bts):
64
+ raise Exception("\\xXX error")
65
+ xi = bts[i+j+1]
66
+ vi = xi-id_0
67
+ if vi<0 or vi>7:
68
+ vi = xi-id_a
69
+ if vi<0 or vi > 5:
70
+ raise Exception("\\xXX error")
71
+ vi +=10
72
+ tmp=(tmp<<4)+vi
73
+ rs.append(tmp)
74
+ continue
75
+ rs.append(c)
76
+ rs.append(x0)
77
+ #i-=1
78
+ return bytes(rs)
79
+
80
+ pass
81
+
82
+ class PrevStrDeal(lr.LRDeal):
83
+ def types(self):
84
+ if not self.deal_build:
85
+ return []
86
+ return ['str']
87
+ def build(self, obj):
88
+ if type(obj.val)==list:
89
+ return None
90
+ if obj.is_val:
91
+ print("error str build")
92
+ return obj
93
+ obj.is_val = 1
94
+ if self.translate:
95
+ print("error str build tr")
96
+ val = obj.val
97
+ val = self.do_translate(val)
98
+ obj.val = val
99
+ return obj
100
+ def prepare(self, mg):
101
+ super().prepare(mg)
102
+ self.label_l2 = mg.like("\\")
103
+ self.label_qt = mg.like('"')
104
+ self.label_et = mg.like("\n")
105
+ self.label_lr = mg.like("\r")
106
+ self.label_nl = mg.like("")
107
+ self.et_in_right = self.right.count(self.label_et)
108
+ def init(self, left = '"', right= '"', single_line = False, note = False, translate = False, deal_build = False):
109
+ super().init(left, right, 'str')
110
+ self.single_line = single_line
111
+ self.note = note
112
+ self.translate = translate
113
+ self.deal_build = deal_build
114
+ def json_loads(self, s):
115
+ x = s
116
+ cd = None
117
+ if type(x)==bytes:
118
+ x, cd = file.decode_c(x)
119
+ rs = json.loads(x)
120
+ if type(s)==bytes:
121
+ rs = rs.encode(cd)
122
+ return rs
123
+ def do_translate(self, s):
124
+ is_bytes = type(s)==bytes
125
+ if not is_bytes:
126
+ s = s.encode("utf-8")
127
+ #s = translate_bts(s)
128
+ s = codez.ubytes(s, "utf-8")
129
+ if not is_bytes:
130
+ s = s.decode("utf-8")
131
+ return s
132
+ """
133
+ 取巧直接调用json
134
+ """
135
+ qt = self.label_qt
136
+ ql = self.label_l2
137
+ et = self.label_et
138
+ tr = self.label_lr
139
+ nt = self.label_nl
140
+ pt = ql+qt
141
+ arr = s.split(pt)
142
+ arr = [k.replace(qt, pt) for k in arr]
143
+ s = pt.join(arr)
144
+ #s = s.replace(qt, ql+qt)
145
+ s = s.replace(tr, nt)
146
+ arr = s.split(et)
147
+ outs = [self.json_loads(qt+k+qt) for k in arr]
148
+ outs = et.join(outs)
149
+ return outs
150
+ def deal(self, buffer, rst, mg):
151
+ cl = buffer.read(self.ll)
152
+ if cl != self.left:
153
+ return False
154
+ rm = buffer.full().strip()
155
+ buffer.clean2read(self.ll)
156
+ if len(rm)>0:
157
+ if not self.note:
158
+ raise Exception(f"unexcept char before string: {rm}")
159
+ else:
160
+ rst.append(item.Item(rm, type = "str", is_val = 0))
161
+ tmp = cl[:0]
162
+ ctmp = tmp[:0]
163
+ do_judge = 1
164
+ mark_et = 0
165
+ mark_l2 = 0
166
+ while True:
167
+ if do_judge and self.right == buffer.rget(self.lr):
168
+ break
169
+ c = buffer.read_cache(1)
170
+ if do_judge and c == self.label_et:
171
+ mark_et += 1
172
+ if len(c)==0:
173
+ if self.single_line and self.note:
174
+ break
175
+ raise Exception(f"unexcept string end while reading str")
176
+ do_judge = 1
177
+ if c == self.label_l2:
178
+ mark_l2 = 1
179
+ do_judge = 0
180
+ c = buffer.read_cache(1)
181
+ if len(c)==0:
182
+ raise Exception(f"unexcept string end while reading str")
183
+ data = buffer.full()
184
+ data = data[:-self.lr]
185
+ buffer.clean()
186
+ mark_et -= self.et_in_right
187
+ if self.single_line and mark_et>0:
188
+ print("left:",self.left, "right:", self.right)
189
+ raise Exception(f"contain enter in single line string")
190
+ if self.translate and mark_l2:
191
+ data = self.do_translate(data)
192
+ if self.note:
193
+ return True
194
+ rst.append(item.Item(data, type='str', is_val = 1))
195
+ return True
196
+
197
+ pass
@@ -12,19 +12,20 @@ xf
12
12
  time cost in <function loads at 0x0000015DEDD0F100>: 0.3307473659515381
13
13
 
14
14
  慢7倍多,感觉还能接受,之前没注意速度,更早的版本(buildz.xf.read.loads,后面可能会删掉)耗时要三四秒,对比之后就重新写了个,也不管什么堆栈了,就递归调用,后面有时间再改回堆栈吧(python的list的append和pop效率貌似不咋地,尤其是pop(0))
15
- 又写了个C版本的代码来加速,速度大概比C加速版json的慢三到四倍(汗,和没用C加速版的json差不多速度,追求结构化不追求速度,用C只是因为C本身比python快,起码满足自己使用了,本测试代码里C加速版xf比python版快7倍,在其他场景里实际使用快了近一百倍),源码暂不公布(C语言要自己写垃圾回收真累,还要自己写List和Map,另外就是用C写了后,发现除了当库给其他语言使用,貌似没啥用)
15
+ 又写了个C版本的代码来加速,速度大概比C加速版json的慢三到四倍(汗,和没用C加速版的json差不多速度,追求结构化不追求速度,逻辑上本来就多了不少内存分配和运算,用C只是因为C本身比python快,起码满足自己使用了,本测试代码里C加速版xf比python版快7倍,在其他场景里实际使用快了十倍以上,不过也比C版json慢了六七倍),源码暂不公布(C语言要自己写垃圾回收真累,还只是写了个计数器的,还要自己写List和Map,另外就是用C写了后,发现除了当库给其他语言使用,貌似没啥用,还有cython调用C真方便,后续可能会优化下,配置文件格式错误把错误位置打印出来,这个实现起来简单,不过不一定写,不是必要的,还有C版本的垃圾回收在抛错的时候清理下数据,不清理的话,配置文件格式错误会导致之前分配的内存未释放,内存占用增多,因为不打算直接在C用xf,打算抛错的时候,C用的内存全释放算了,之后调用再重新分配)
16
+ 还有个比较操蛋的点是,用java也写了一版读取xf格式配置文件,结果java版比C版还快,一脸问号,是在C写的内存分配和回收占用时间了吗?更无语的是,java做循环读取配置文件,貌似会触发java的优化,平均速度还会更快(循环100次后和C加速版python的json差不多一样快了),不清楚是因为循环读的是一样的字符串导致的java优化,还是其他原因导致的java优化,如果是其他原因,说明读多个配置文件的时候java版会越来越快,java版会比C版更适合使用,而且java自己有垃圾回收,有List和Map,有时间下个python库用python调java试试
16
17
  """
17
18
  from buildz.xf import readz as rz
18
19
  from buildz.xf import read as rd
19
20
  from buildz import xf, fz
20
21
  import json
21
- import time
22
+ import time,sys
22
23
 
23
24
  try:
24
25
  # C加速代码
25
26
  import cxf
26
27
  except:
27
- from buildz.xf import read as cxf
28
+ from buildz.xf import readz as cxf
28
29
  pass
29
30
  pass
30
31
  def cost(n, f,*a,**b):
@@ -43,7 +43,11 @@ def build_val(mgs):
43
43
  mgs.add(reval.ValDeal("false", lambda x:False))
44
44
 
45
45
  pass
46
+ g_mg = None
46
47
  def build(as_bytes=False):
48
+ global g_mg
49
+ if g_mg is not None and g_mg.as_bytes == as_bytes:
50
+ return g_mg
47
51
  mgs = mg.Manager(as_bytes)
48
52
  mgs.add(setz.SetDeal(':'))
49
53
  mgs.add(setz.SetDeal('='))
@@ -70,6 +74,7 @@ def build(as_bytes=False):
70
74
  mgs.add(strz.PrevStrDeal("'","'",1,0,1))
71
75
  mgs.add(strz.PrevStrDeal('"','"',1,0,1))
72
76
  mgs.add(nextz.PrevNextDeal())
77
+ g_mg = mgs
73
78
  return mgs
74
79
 
75
80
  pass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buildz
3
- Version: 0.6.1
3
+ Version: 0.6.2
4
4
  Summary: 配置读写(基于json格式进行简化)、ioc、以及其他工具代码。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(ioc), and other tool codes
5
5
  Home-page: https://github.com/buildCodeZ/buildz
6
6
  Author: Zzz