ooxml_crypt 0.1.0

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 (264) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +58 -0
  5. data/Rakefile +12 -0
  6. data/bin/console +15 -0
  7. data/bin/setup +8 -0
  8. data/ext/ooxml_crypt/extconf.rb +18 -0
  9. data/ext/ooxml_crypt/ooxml_crypt.c +27 -0
  10. data/ext/ooxml_crypt/ooxml_crypt.h +7 -0
  11. data/lib/ooxml_crypt/version.rb +5 -0
  12. data/lib/ooxml_crypt.rb +75 -0
  13. data/vendor/cybozulib/.github/workflows/main.yml +12 -0
  14. data/vendor/cybozulib/.gitignore +5 -0
  15. data/vendor/cybozulib/CMakeLists.txt +6 -0
  16. data/vendor/cybozulib/COPYRIGHT +27 -0
  17. data/vendor/cybozulib/Makefile +26 -0
  18. data/vendor/cybozulib/bin/libeay32.dll +0 -0
  19. data/vendor/cybozulib/bin/libmecab.dll +0 -0
  20. data/vendor/cybozulib/bin/ssleay32.dll +0 -0
  21. data/vendor/cybozulib/common.mk +116 -0
  22. data/vendor/cybozulib/common.props +25 -0
  23. data/vendor/cybozulib/cybozulib.sln +286 -0
  24. data/vendor/cybozulib/debug.props +14 -0
  25. data/vendor/cybozulib/include/cybozu/array.hpp +197 -0
  26. data/vendor/cybozulib/include/cybozu/atoi.hpp +238 -0
  27. data/vendor/cybozulib/include/cybozu/atomic.hpp +146 -0
  28. data/vendor/cybozulib/include/cybozu/base64.hpp +210 -0
  29. data/vendor/cybozulib/include/cybozu/benchmark.hpp +212 -0
  30. data/vendor/cybozulib/include/cybozu/bfd.hpp +105 -0
  31. data/vendor/cybozulib/include/cybozu/bit_operation.hpp +139 -0
  32. data/vendor/cybozulib/include/cybozu/bitvector.hpp +358 -0
  33. data/vendor/cybozulib/include/cybozu/condition_variable.hpp +113 -0
  34. data/vendor/cybozulib/include/cybozu/condition_variable_cs.hpp +74 -0
  35. data/vendor/cybozulib/include/cybozu/config.hpp +392 -0
  36. data/vendor/cybozulib/include/cybozu/critical_section.hpp +60 -0
  37. data/vendor/cybozulib/include/cybozu/crypto.hpp +321 -0
  38. data/vendor/cybozulib/include/cybozu/csucvector.hpp +624 -0
  39. data/vendor/cybozulib/include/cybozu/csv.hpp +294 -0
  40. data/vendor/cybozulib/include/cybozu/data_type.hpp +27 -0
  41. data/vendor/cybozulib/include/cybozu/endian.hpp +224 -0
  42. data/vendor/cybozulib/include/cybozu/env.hpp +63 -0
  43. data/vendor/cybozulib/include/cybozu/event.hpp +122 -0
  44. data/vendor/cybozulib/include/cybozu/exception.hpp +253 -0
  45. data/vendor/cybozulib/include/cybozu/file.hpp +626 -0
  46. data/vendor/cybozulib/include/cybozu/fmindex.hpp +291 -0
  47. data/vendor/cybozulib/include/cybozu/format.hpp +93 -0
  48. data/vendor/cybozulib/include/cybozu/frequency.hpp +264 -0
  49. data/vendor/cybozulib/include/cybozu/hash.hpp +67 -0
  50. data/vendor/cybozulib/include/cybozu/inttype.hpp +174 -0
  51. data/vendor/cybozulib/include/cybozu/itoa.hpp +336 -0
  52. data/vendor/cybozulib/include/cybozu/json.hpp +120 -0
  53. data/vendor/cybozulib/include/cybozu/line_stream.hpp +149 -0
  54. data/vendor/cybozulib/include/cybozu/link_libeay32.hpp +21 -0
  55. data/vendor/cybozulib/include/cybozu/link_mpir.hpp +18 -0
  56. data/vendor/cybozulib/include/cybozu/link_ssleay32.hpp +19 -0
  57. data/vendor/cybozulib/include/cybozu/log.hpp +237 -0
  58. data/vendor/cybozulib/include/cybozu/minixml.hpp +452 -0
  59. data/vendor/cybozulib/include/cybozu/mmap.hpp +143 -0
  60. data/vendor/cybozulib/include/cybozu/mutex.hpp +144 -0
  61. data/vendor/cybozulib/include/cybozu/nlp/mecab.hpp +96 -0
  62. data/vendor/cybozulib/include/cybozu/nlp/plsi.hpp +315 -0
  63. data/vendor/cybozulib/include/cybozu/nlp/random.hpp +74 -0
  64. data/vendor/cybozulib/include/cybozu/nlp/sparse.hpp +529 -0
  65. data/vendor/cybozulib/include/cybozu/nlp/svd.hpp +486 -0
  66. data/vendor/cybozulib/include/cybozu/nlp/tfidf.hpp +226 -0
  67. data/vendor/cybozulib/include/cybozu/nlp/top_score.hpp +75 -0
  68. data/vendor/cybozulib/include/cybozu/option.hpp +743 -0
  69. data/vendor/cybozulib/include/cybozu/parallel.hpp +88 -0
  70. data/vendor/cybozulib/include/cybozu/pcg.hpp +72 -0
  71. data/vendor/cybozulib/include/cybozu/process.hpp +324 -0
  72. data/vendor/cybozulib/include/cybozu/quit_signal_handler.hpp +66 -0
  73. data/vendor/cybozulib/include/cybozu/random_generator.hpp +144 -0
  74. data/vendor/cybozulib/include/cybozu/regex.hpp +463 -0
  75. data/vendor/cybozulib/include/cybozu/select8.hpp +279 -0
  76. data/vendor/cybozulib/include/cybozu/serializer.hpp +363 -0
  77. data/vendor/cybozulib/include/cybozu/sha1.hpp +209 -0
  78. data/vendor/cybozulib/include/cybozu/sha2.hpp +506 -0
  79. data/vendor/cybozulib/include/cybozu/siphash.hpp +105 -0
  80. data/vendor/cybozulib/include/cybozu/socket.hpp +785 -0
  81. data/vendor/cybozulib/include/cybozu/ssl.hpp +203 -0
  82. data/vendor/cybozulib/include/cybozu/stacktrace.hpp +291 -0
  83. data/vendor/cybozulib/include/cybozu/stream.hpp +269 -0
  84. data/vendor/cybozulib/include/cybozu/string.hpp +1746 -0
  85. data/vendor/cybozulib/include/cybozu/string_operation.hpp +365 -0
  86. data/vendor/cybozulib/include/cybozu/sucvector.hpp +378 -0
  87. data/vendor/cybozulib/include/cybozu/test.hpp +373 -0
  88. data/vendor/cybozulib/include/cybozu/thread.hpp +229 -0
  89. data/vendor/cybozulib/include/cybozu/time.hpp +281 -0
  90. data/vendor/cybozulib/include/cybozu/tls.hpp +115 -0
  91. data/vendor/cybozulib/include/cybozu/unordered_map.hpp +13 -0
  92. data/vendor/cybozulib/include/cybozu/unordered_set.hpp +13 -0
  93. data/vendor/cybozulib/include/cybozu/v128.hpp +376 -0
  94. data/vendor/cybozulib/include/cybozu/wavelet_matrix.hpp +345 -0
  95. data/vendor/cybozulib/include/cybozu/xorshift.hpp +189 -0
  96. data/vendor/cybozulib/include/cybozu/zlib.hpp +325 -0
  97. data/vendor/cybozulib/include/sais.hxx +364 -0
  98. data/vendor/cybozulib/misc/make_select8tbl.cpp +26 -0
  99. data/vendor/cybozulib/mk.bat +37 -0
  100. data/vendor/cybozulib/readme.md +29 -0
  101. data/vendor/cybozulib/release.props +12 -0
  102. data/vendor/cybozulib/sample/Makefile +30 -0
  103. data/vendor/cybozulib/sample/csucvector_smpl.cpp +42 -0
  104. data/vendor/cybozulib/sample/data/svd/org/test1.S +4 -0
  105. data/vendor/cybozulib/sample/data/svd/org/test1.U +4 -0
  106. data/vendor/cybozulib/sample/data/svd/org/test1.V +6 -0
  107. data/vendor/cybozulib/sample/data/svd/test1 +4 -0
  108. data/vendor/cybozulib/sample/data/svd/test2 +4 -0
  109. data/vendor/cybozulib/sample/desymbol.cpp +127 -0
  110. data/vendor/cybozulib/sample/exception_smpl.cpp +46 -0
  111. data/vendor/cybozulib/sample/fmindex_smpl.cpp +231 -0
  112. data/vendor/cybozulib/sample/log_smpl.cpp +19 -0
  113. data/vendor/cybozulib/sample/mecab_smpl.cpp +37 -0
  114. data/vendor/cybozulib/sample/option2_smpl.cpp +68 -0
  115. data/vendor/cybozulib/sample/option_smpl.cpp +42 -0
  116. data/vendor/cybozulib/sample/plsi_smpl.cpp +207 -0
  117. data/vendor/cybozulib/sample/proj/exception_smpl.vcproj +184 -0
  118. data/vendor/cybozulib/sample/proj/mecab_smpl.vcproj +184 -0
  119. data/vendor/cybozulib/sample/proj/ssl_smpl/ssl_smpl.vcxproj +85 -0
  120. data/vendor/cybozulib/sample/proj/ssl_smpl.vcproj +347 -0
  121. data/vendor/cybozulib/sample/proj/stacktrace_smpl/stacktrace_smpl.vcxproj +85 -0
  122. data/vendor/cybozulib/sample/proj/svd_smpl.vcproj +184 -0
  123. data/vendor/cybozulib/sample/quit_signal_handler.cpp +30 -0
  124. data/vendor/cybozulib/sample/serializer_smpl.cpp +196 -0
  125. data/vendor/cybozulib/sample/socket_smpl.cpp +82 -0
  126. data/vendor/cybozulib/sample/ssl_smpl.cpp +39 -0
  127. data/vendor/cybozulib/sample/stacktrace_smpl.cpp +52 -0
  128. data/vendor/cybozulib/sample/svd_bench_smpl.cpp +143 -0
  129. data/vendor/cybozulib/sample/svd_smpl.cpp +94 -0
  130. data/vendor/cybozulib/sample/wm_bench_smpl.cpp +182 -0
  131. data/vendor/cybozulib/sample/zlib_smpl.cpp +41 -0
  132. data/vendor/cybozulib/src/Makefile +8 -0
  133. data/vendor/cybozulib/src/base/Makefile +19 -0
  134. data/vendor/cybozulib/test/Makefile +12 -0
  135. data/vendor/cybozulib/test/base/Makefile +37 -0
  136. data/vendor/cybozulib/test/base/array_test.cpp +173 -0
  137. data/vendor/cybozulib/test/base/atoi_test.cpp +774 -0
  138. data/vendor/cybozulib/test/base/atomic_test.cpp +49 -0
  139. data/vendor/cybozulib/test/base/base64_test.cpp +113 -0
  140. data/vendor/cybozulib/test/base/bit_operation_test.cpp +134 -0
  141. data/vendor/cybozulib/test/base/bitvector_test.cpp +204 -0
  142. data/vendor/cybozulib/test/base/condition_variable_cs_test.cpp +92 -0
  143. data/vendor/cybozulib/test/base/condition_variable_test.cpp +88 -0
  144. data/vendor/cybozulib/test/base/config_test.cpp +236 -0
  145. data/vendor/cybozulib/test/base/crypto_test.cpp +122 -0
  146. data/vendor/cybozulib/test/base/csucvector_test.cpp +63 -0
  147. data/vendor/cybozulib/test/base/csv_test.cpp +182 -0
  148. data/vendor/cybozulib/test/base/data/a.xml +26 -0
  149. data/vendor/cybozulib/test/base/endian_test.cpp +56 -0
  150. data/vendor/cybozulib/test/base/env_test.cpp +22 -0
  151. data/vendor/cybozulib/test/base/event_test.cpp +41 -0
  152. data/vendor/cybozulib/test/base/file_test.cpp +233 -0
  153. data/vendor/cybozulib/test/base/fmindex_test.cpp +118 -0
  154. data/vendor/cybozulib/test/base/format_test.cpp +12 -0
  155. data/vendor/cybozulib/test/base/frequency_test.cpp +104 -0
  156. data/vendor/cybozulib/test/base/itoa_test.cpp +522 -0
  157. data/vendor/cybozulib/test/base/line_stream_test.cpp +208 -0
  158. data/vendor/cybozulib/test/base/mecab_test.cpp +41 -0
  159. data/vendor/cybozulib/test/base/minixml_test.cpp +103 -0
  160. data/vendor/cybozulib/test/base/mmap_test.cpp +15 -0
  161. data/vendor/cybozulib/test/base/option_test.cpp +487 -0
  162. data/vendor/cybozulib/test/base/parallel_test.cpp +48 -0
  163. data/vendor/cybozulib/test/base/proj/array_test/array_test.vcxproj +86 -0
  164. data/vendor/cybozulib/test/base/proj/atoi_test/atoi_test.vcxproj +86 -0
  165. data/vendor/cybozulib/test/base/proj/atomic_test/atomic_test.vcxproj +86 -0
  166. data/vendor/cybozulib/test/base/proj/base64_test/base64_test.vcxproj +86 -0
  167. data/vendor/cybozulib/test/base/proj/condition_variable_cs_test/condition_variable_cs_test.vcxproj +86 -0
  168. data/vendor/cybozulib/test/base/proj/condition_variable_test/condition_variable_test.vcxproj +86 -0
  169. data/vendor/cybozulib/test/base/proj/config_test/config_test.vcxproj +86 -0
  170. data/vendor/cybozulib/test/base/proj/csv_test/csv_test.vcxproj +86 -0
  171. data/vendor/cybozulib/test/base/proj/endian_test/endian_test.vcxproj +86 -0
  172. data/vendor/cybozulib/test/base/proj/env_test/env_test.vcxproj +86 -0
  173. data/vendor/cybozulib/test/base/proj/event_test/event_test.vcxproj +86 -0
  174. data/vendor/cybozulib/test/base/proj/file_test/file_test.vcxproj +86 -0
  175. data/vendor/cybozulib/test/base/proj/itoa_test/itoa_test.vcxproj +86 -0
  176. data/vendor/cybozulib/test/base/proj/mecab_test/mecab_test.vcxproj +88 -0
  177. data/vendor/cybozulib/test/base/proj/minixml_test/minixml_test.vcxproj +86 -0
  178. data/vendor/cybozulib/test/base/proj/mmap_test/mmap_test.vcxproj +86 -0
  179. data/vendor/cybozulib/test/base/proj/serializer_test/serializer_test.vcxproj +86 -0
  180. data/vendor/cybozulib/test/base/proj/sha1_test/sha1_test.vcxproj +86 -0
  181. data/vendor/cybozulib/test/base/proj/stream_test/stream_test.vcxproj +86 -0
  182. data/vendor/cybozulib/test/base/proj/string_operation_test/string_operation_test.vcxproj +86 -0
  183. data/vendor/cybozulib/test/base/proj/string_test/string_test.vcxproj +86 -0
  184. data/vendor/cybozulib/test/base/proj/thread_test/thread_test.vcxproj +86 -0
  185. data/vendor/cybozulib/test/base/proj/time_test/time_test.vcxproj +86 -0
  186. data/vendor/cybozulib/test/base/proj/tls_test/tls_test.vcxproj +86 -0
  187. data/vendor/cybozulib/test/base/proj/zlib_test/zlib_test.vcxproj +86 -0
  188. data/vendor/cybozulib/test/base/random_generator_test.cpp +28 -0
  189. data/vendor/cybozulib/test/base/regex_test.cpp +74 -0
  190. data/vendor/cybozulib/test/base/serializer_test.cpp +483 -0
  191. data/vendor/cybozulib/test/base/sha1_test.cpp +61 -0
  192. data/vendor/cybozulib/test/base/sha2_test.cpp +191 -0
  193. data/vendor/cybozulib/test/base/siphash_test.cpp +33 -0
  194. data/vendor/cybozulib/test/base/socket_test.cpp +76 -0
  195. data/vendor/cybozulib/test/base/stream_test.cpp +101 -0
  196. data/vendor/cybozulib/test/base/string_operation_test.cpp +340 -0
  197. data/vendor/cybozulib/test/base/string_test.cpp +1705 -0
  198. data/vendor/cybozulib/test/base/sucvector_test.cpp +312 -0
  199. data/vendor/cybozulib/test/base/thread_test.cpp +62 -0
  200. data/vendor/cybozulib/test/base/time_test.cpp +164 -0
  201. data/vendor/cybozulib/test/base/tls_test.cpp +50 -0
  202. data/vendor/cybozulib/test/base/wavelet_matrix_test.cpp +145 -0
  203. data/vendor/cybozulib/test/base/zlib_test.cpp +371 -0
  204. data/vendor/cybozulib/test/nlp/Makefile +27 -0
  205. data/vendor/cybozulib/test/nlp/proj/random_test.vcproj +184 -0
  206. data/vendor/cybozulib/test/nlp/proj/sparse_test.vcproj +184 -0
  207. data/vendor/cybozulib/test/nlp/proj/svd_test.vcproj +184 -0
  208. data/vendor/cybozulib/test/nlp/random_test.cpp +62 -0
  209. data/vendor/cybozulib/test/nlp/sparse_test.cpp +347 -0
  210. data/vendor/cybozulib/test/nlp/svd_test.cpp +234 -0
  211. data/vendor/cybozulib/test/nlp/top_score_test.cpp +40 -0
  212. data/vendor/cybozulib/tool/create_vcproj.py +186 -0
  213. data/vendor/cybozulib/tool/vcproj_tmpl.py +185 -0
  214. data/vendor/msoffice/COPYRIGHT +27 -0
  215. data/vendor/msoffice/Makefile +29 -0
  216. data/vendor/msoffice/bin/64/msoc.dll +0 -0
  217. data/vendor/msoffice/bin/64/msocsample.exe +0 -0
  218. data/vendor/msoffice/bin/64/msoffice-crypt.exe +0 -0
  219. data/vendor/msoffice/bin/msoc.dll +0 -0
  220. data/vendor/msoffice/bin/msocsample.exe +0 -0
  221. data/vendor/msoffice/bin/msoffice-crypt.exe +0 -0
  222. data/vendor/msoffice/common.mk +71 -0
  223. data/vendor/msoffice/common.props +26 -0
  224. data/vendor/msoffice/debug.props +14 -0
  225. data/vendor/msoffice/include/attack.hpp +211 -0
  226. data/vendor/msoffice/include/cfb.hpp +777 -0
  227. data/vendor/msoffice/include/crypto_util.hpp +450 -0
  228. data/vendor/msoffice/include/custom_sha1.hpp +342 -0
  229. data/vendor/msoffice/include/decode.hpp +240 -0
  230. data/vendor/msoffice/include/encode.hpp +221 -0
  231. data/vendor/msoffice/include/make_dataspace.hpp +316 -0
  232. data/vendor/msoffice/include/msoc.h +129 -0
  233. data/vendor/msoffice/include/resource.hpp +7 -0
  234. data/vendor/msoffice/include/standard_encryption.hpp +145 -0
  235. data/vendor/msoffice/include/uint32vec.hpp +179 -0
  236. data/vendor/msoffice/include/util.hpp +212 -0
  237. data/vendor/msoffice/lib/.emptydir +0 -0
  238. data/vendor/msoffice/misc/decrypt-xls.vbs +46 -0
  239. data/vendor/msoffice/mk.bat +1 -0
  240. data/vendor/msoffice/mkdll.bat +3 -0
  241. data/vendor/msoffice/msoc.def +13 -0
  242. data/vendor/msoffice/msocsample.py +178 -0
  243. data/vendor/msoffice/msoffice12.sln +31 -0
  244. data/vendor/msoffice/readme.md +110 -0
  245. data/vendor/msoffice/release.props +28 -0
  246. data/vendor/msoffice/src/Makefile +19 -0
  247. data/vendor/msoffice/src/attack.cpp +124 -0
  248. data/vendor/msoffice/src/cfb_test.cpp +77 -0
  249. data/vendor/msoffice/src/minisample.c +54 -0
  250. data/vendor/msoffice/src/msocdll.cpp +276 -0
  251. data/vendor/msoffice/src/msocsample.c +136 -0
  252. data/vendor/msoffice/src/msoffice-crypt.cpp +219 -0
  253. data/vendor/msoffice/src/proj/attack/attack.vcxproj +88 -0
  254. data/vendor/msoffice/src/proj/main/msoffice-crypt.vcxproj +88 -0
  255. data/vendor/msoffice/src/sha1.cpp +234 -0
  256. data/vendor/msoffice/test/Makefile +20 -0
  257. data/vendor/msoffice/test/cfb_test.cpp +74 -0
  258. data/vendor/msoffice/test/hash_test.cpp +59 -0
  259. data/vendor/msoffice/test/proj/cfb/cfb_test.vcxproj +90 -0
  260. data/vendor/msoffice/test/proj/hash/hash_test.vcxproj +90 -0
  261. data/vendor/msoffice/test/sampl.bat +8 -0
  262. data/vendor/msoffice/test_all.py +46 -0
  263. data/vendor/update +4 -0
  264. metadata +351 -0
@@ -0,0 +1,463 @@
1
+ #pragma once
2
+ /**
3
+ @file
4
+ @brief regex for cybozu::String
5
+ @note VC reqires /MT or /MTd options
6
+
7
+ @author MITSUNARI Shigeo
8
+ */
9
+
10
+ #include <cybozu/string.hpp>
11
+
12
+ #ifdef __GNUC__
13
+ #define CYBOZU_RE_USE_BOOST_REGEX
14
+ #endif
15
+
16
+ #ifdef CYBOZU_RE_USE_BOOST_REGEX
17
+ #define CYBOZU_RE_STD boost
18
+ #ifndef BOOST_REGEX_USE_CPP_LOCALE
19
+ #define BOOST_REGEX_USE_CPP_LOCALE
20
+ #endif
21
+ #include <boost/regex.hpp>
22
+ #else
23
+ #if (CYBOZU_CPP_VERSION == CYBOZU_CPP_VERSION_TR1)
24
+ #define CYBOZU_RE_STD std::tr1
25
+ #else
26
+ #define CYBOZU_RE_STD std
27
+ #endif
28
+ #ifdef _MSC_VER
29
+ #ifdef _DLL_CPPLIB
30
+ #error "use /MT or /MTd option. /MD and /MDd are not supported"
31
+ #endif
32
+ #define CYBOZU_STRING_USE_WIN
33
+ #pragma warning(push)
34
+ #pragma warning(disable : 4018) // signed/unsigned mismatch
35
+ #endif
36
+ #include <regex>
37
+ #ifdef _MSC_VER
38
+ #pragma warning(pop)
39
+ #endif
40
+ #endif
41
+
42
+ #ifdef _MSC_VER
43
+ #define CYBOZU_RE_CHAR wchar_t
44
+ #define CYBOZU_RE(x) L##x
45
+ #else
46
+ #define CYBOZU_RE_CHAR char
47
+ #define CYBOZU_RE(x) x
48
+ #endif
49
+
50
+ namespace regex_local {
51
+
52
+ /* true if c in [min, max] */
53
+ inline bool in(unsigned int c, char min, char max)
54
+ {
55
+ // return min <= c && c <= max;
56
+ return static_cast<unsigned int>(c - min) <= static_cast<unsigned int>(max - min);
57
+ }
58
+
59
+ } // regex_local
60
+
61
+ #ifdef CYBOZU_STRING_USE_WIN
62
+
63
+ namespace std {
64
+
65
+ template<>
66
+ class ctype<cybozu::Char> : public ctype_base {
67
+ // const std::ctype_base::mask *maskTbl_;
68
+ const std::ctype_base::mask *getMaskTbl() const
69
+ {
70
+ static const std::ctype_base::mask maskTbl[] = {
71
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x28, 0x28, 0x28, 0x28, 0x20, 0x20,
72
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
73
+ 0x48, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
74
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
75
+ 0x10, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
76
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10, 0x10, 0x10, 0x10, 0x10,
77
+ 0x10, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
78
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x10, 0x10, 0x10, 0x10, 0x20,
79
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
84
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
86
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
87
+ };
88
+ return maskTbl;
89
+ }
90
+ public:
91
+ static locale::id id;
92
+ ctype(size_t refs = 0) : ctype_base(refs)
93
+ {
94
+ #if 0
95
+ static struct Custom : public std::ctype<char> {
96
+ const mask * table() const
97
+ {
98
+ const mask *m = std::ctype<char>::table();
99
+ return m;
100
+ }
101
+ } custom;
102
+ maskTbl_ = custom.table();
103
+ #endif
104
+ }
105
+ bool is(std::ctype_base::mask m, cybozu::Char c) const
106
+ {
107
+ /*
108
+ s(48):p(1d7):c(20):u(1):l(2):a(103):d(4):p(10):x(80)
109
+ printf("u(%x):l(%x):d(%x):p(%x):c(%x):x(%x):s(%x):p(%x):a(%x)\n"
110
+ , std::ctype_base::upper // 0x001
111
+ , std::ctype_base::lower // 0x002
112
+ , std::ctype_base::digit // 0x004
113
+ , std::ctype_base::punct // 0x010
114
+ , std::ctype_base::cntrl // 0x020
115
+ , std::ctype_base::xdigit // 0x080
116
+ , std::ctype_base::space // 0x048
117
+ , std::ctype_base::print // 0x1d7
118
+ , std::ctype_base::alpha // 0x103
119
+ );exit(1);
120
+ */
121
+ if (c & ~0xFFU) return false;
122
+ // return (maskTbl_[(unsigned char)c] & m) != 0;
123
+ return (getMaskTbl()[(unsigned char)c] & m) != 0;
124
+ // static const std::ctype<char>& cache = use_facet<ctype<char> >(std::locale());
125
+ // return cache.is(m, static_cast<char>(c));
126
+ }
127
+ const cybozu::Char* is(const cybozu::Char* begin, const cybozu::Char* end, mask* dest) const
128
+ {
129
+ while (begin != end) {
130
+ *dest++ = getMaskTbl()[(unsigned char)narrow(*begin)];
131
+ // *dest++ = maskTbl_[(unsigned char)narrow(*begin)];
132
+ begin++;
133
+ }
134
+ return begin;
135
+ }
136
+ const cybozu::Char* scan_is(std::ctype_base::mask m, const cybozu::Char* begin, const cybozu::Char* end) const
137
+ {
138
+ while (begin != end && !is(m, *begin)) begin++;
139
+ return begin;
140
+ }
141
+ const cybozu::Char* scan_not(std::ctype_base::mask m, const cybozu::Char* begin, const cybozu::Char* end) const
142
+ {
143
+ while (begin != end && is(m, *begin)) begin++;
144
+ return begin;
145
+ }
146
+ cybozu::Char tolower(cybozu::Char c) const
147
+ {
148
+ if ('A' <= c && c <= 'Z') return c - 'A' + 'a';
149
+ return c;
150
+ }
151
+ const cybozu::Char* tolower(cybozu::Char* begin, const cybozu::Char* end) const
152
+ {
153
+ while (begin != end) {
154
+ *begin = tolower(*begin);
155
+ begin++;
156
+ }
157
+ return end;
158
+ }
159
+ cybozu::Char toupper(cybozu::Char c) const
160
+ {
161
+ if ('a' <= c && c <= 'z') return c - 'a' + 'A';
162
+ return c;
163
+ }
164
+ const cybozu::Char* toupper(cybozu::Char* begin, const cybozu::Char* end) const
165
+ {
166
+ while (begin != end) {
167
+ *begin = toupper(*begin);
168
+ begin++;
169
+ }
170
+ return end;
171
+ }
172
+ cybozu::Char widen(char c) const
173
+ {
174
+ return c;
175
+ }
176
+ const char* widen(const char* begin, const char* end, cybozu::Char* to) const
177
+ {
178
+ while (begin != end) {
179
+ *to++ = std::ctype<cybozu::Char>::widen(*begin++);
180
+ }
181
+ return end;
182
+ }
183
+ char narrow(cybozu::Char c, char dflt = '\0') const
184
+ {
185
+ if ((0 <= c && c < 256) || (c == -1)) return static_cast<char>(c);
186
+ return dflt;
187
+ }
188
+ const cybozu::Char* narrow(const cybozu::Char* begin, const cybozu::Char* end, char dflt, char* to) const
189
+ {
190
+ while (begin != end) {
191
+ *to++ = narrow(*begin++, dflt);
192
+ }
193
+ return end;
194
+ }
195
+ virtual bool do_is(mask m, cybozu::Char c) const
196
+ {
197
+ return is(m, c);
198
+ }
199
+ virtual const cybozu::Char *do_is(const cybozu::Char *begin, const cybozu::Char *end, mask *dest) const
200
+ {
201
+ return is(begin, end, dest);
202
+ }
203
+ virtual const cybozu::Char *do_scan_is(mask m, const cybozu::Char *begin, const cybozu::Char *end) const
204
+ {
205
+ return scan_is(m, begin, end);
206
+ }
207
+ virtual const cybozu::Char *do_scan_not(mask m, const cybozu::Char *begin, const cybozu::Char *end) const
208
+ {
209
+ return scan_not(m, begin, end);
210
+ }
211
+ virtual cybozu::Char do_tolower(cybozu::Char c) const
212
+ {
213
+ return tolower(c);
214
+ }
215
+ virtual const cybozu::Char *do_tolower(cybozu::Char *begin, const cybozu::Char *end) const
216
+ {
217
+ return tolower(begin, end);
218
+ }
219
+ virtual cybozu::Char do_toupper(cybozu::Char c) const
220
+ {
221
+ return toupper(c);
222
+ }
223
+ virtual const cybozu::Char *do_toupper(cybozu::Char *begin, const cybozu::Char *end) const
224
+ {
225
+ return toupper(begin, end);
226
+ }
227
+ virtual cybozu::Char do_widen(char c) const
228
+ {
229
+ return widen(c);
230
+ }
231
+ virtual const char *do_widen(const char *begin, const char *end, cybozu::Char *dest) const
232
+ {
233
+ return widen(begin, end, dest);
234
+ }
235
+ virtual char do_narrow(cybozu::Char c, char dflt) const
236
+ {
237
+ return narrow(c, dflt);
238
+ }
239
+ virtual const cybozu::Char *do_narrow(const cybozu::Char *begin, const cybozu::Char *end, char dflt, char *dest) const
240
+ {
241
+ return narrow(begin, end, dflt, dest);
242
+ }
243
+ };
244
+
245
+ locale::id __declspec(selectany) ctype<cybozu::Char>::id;
246
+
247
+ #if defined(_DLL_CPPLIB)
248
+ //__PURE_APPDOMAIN_GLOBAL std::locale::id ctype<cybozu::Char>::id;
249
+ #endif /* defined(_DLL_CPPLIB) etc. */
250
+
251
+ } // std
252
+
253
+ template<>
254
+ class CYBOZU_RE_STD::regex_traits<cybozu::Char> : public CYBOZU_RE_STD::_Regex_traits<cybozu::Char> {
255
+ public:
256
+ int value(cybozu::Char ch, int base) const
257
+ {
258
+ if (base != 8 && '0' <= ch && ch <= '9' || base == 8 && '0' <= ch && ch <= '7') return ch - '0';
259
+ if (base != 16) return -1;
260
+ if ('a' <= ch && ch <= 'f') return ch - 'a' + 10;
261
+ if ('A' <= ch && ch <= 'F') return ch - 'A' + 10;
262
+ return -1;
263
+ }
264
+ };
265
+
266
+ #define CYBOZU_RE_CHAR_CLASS_NAME(n, c) { n, sizeof(n)/sizeof(n[0]) - 1, c }
267
+
268
+ namespace cybozu { namespace regex_local {
269
+
270
+ static const cybozu::Char _alpha[] = { 'a', 'l', 'p', 'h', 'a', 0 };
271
+ static const cybozu::Char _blank[] = { 'b', 'l', 'a', 'n', 'k', 0 };
272
+ static const cybozu::Char _cntrl[] = {'c', 'n', 't', 'r', 'l', 0 };
273
+ static const cybozu::Char _d[] = {'d', 0 };
274
+ static const cybozu::Char _digit[] = {'d', 'i', 'g', 'i', 't', 0 };
275
+ static const cybozu::Char _graph[] = {'g', 'r', 'a', 'p', 'h', 0 };
276
+ static const cybozu::Char _lower[] = {'l', 'o', 'w', 'e', 'r', 0 };
277
+ static const cybozu::Char _print[] = {'p', 'r', 'i', 'n', 't', 0 };
278
+ static const cybozu::Char _punct[] = {'p', 'u', 'n', 'c', 't', 0 };
279
+ static const cybozu::Char _space[] = {'s', 'p', 'a', 'c', 'e', 0 };
280
+ static const cybozu::Char _s[] = {'s', 0 };
281
+ static const cybozu::Char _upper[] = {'u', 'p', 'p', 'e', 'r', 0 };
282
+ static const cybozu::Char _w[] = {'w', 0 };
283
+ static const cybozu::Char _xdigit[]= {'x', 'd', 'i', 'g', 'i', 't', 0 };
284
+
285
+ } }
286
+
287
+ template<>
288
+ const CYBOZU_RE_STD::_Cl_names<cybozu::Char> CYBOZU_RE_STD::_Regex_traits<cybozu::Char>::_Names[] = {
289
+ CYBOZU_RE_CHAR_CLASS_NAME(cybozu::regex_local::_alpha, _Regex_traits<cybozu::Char>::_Ch_alnum),
290
+ CYBOZU_RE_CHAR_CLASS_NAME(cybozu::regex_local::_blank, _Regex_traits<cybozu::Char>::_Ch_blank),
291
+ CYBOZU_RE_CHAR_CLASS_NAME(cybozu::regex_local::_cntrl, _Regex_traits<cybozu::Char>::_Ch_cntrl),
292
+ CYBOZU_RE_CHAR_CLASS_NAME(cybozu::regex_local::_d, _Regex_traits<cybozu::Char>::_Ch_digit),
293
+ CYBOZU_RE_CHAR_CLASS_NAME(cybozu::regex_local::_digit, _Regex_traits<cybozu::Char>::_Ch_digit),
294
+ CYBOZU_RE_CHAR_CLASS_NAME(cybozu::regex_local::_graph, _Regex_traits<cybozu::Char>::_Ch_graph),
295
+ CYBOZU_RE_CHAR_CLASS_NAME(cybozu::regex_local::_lower, _Regex_traits<cybozu::Char>::_Ch_lower),
296
+ CYBOZU_RE_CHAR_CLASS_NAME(cybozu::regex_local::_print, _Regex_traits<cybozu::Char>::_Ch_print),
297
+ CYBOZU_RE_CHAR_CLASS_NAME(cybozu::regex_local::_punct, _Regex_traits<cybozu::Char>::_Ch_punct),
298
+ CYBOZU_RE_CHAR_CLASS_NAME(cybozu::regex_local::_space, _Regex_traits<cybozu::Char>::_Ch_space),
299
+ CYBOZU_RE_CHAR_CLASS_NAME(cybozu::regex_local::_s, _Regex_traits<cybozu::Char>::_Ch_space),
300
+ CYBOZU_RE_CHAR_CLASS_NAME(cybozu::regex_local::_upper, _Regex_traits<cybozu::Char>::_Ch_upper),
301
+ CYBOZU_RE_CHAR_CLASS_NAME(cybozu::regex_local::_w, (_STD ctype_base::mask)(-1)),
302
+ CYBOZU_RE_CHAR_CLASS_NAME(cybozu::regex_local::_xdigit, _Regex_traits<cybozu::Char>::_Ch_xdigit),
303
+ {0, 0, 0},
304
+ };
305
+
306
+ #undef CYBOZU_RE_CHAR_CLASS_NAME
307
+
308
+ #endif // CYBOZU_STRING_USE_WIN
309
+
310
+ namespace cybozu {
311
+
312
+ namespace regex_constants = CYBOZU_RE_STD::regex_constants;
313
+
314
+ class regex : public CYBOZU_RE_STD::basic_regex<Char> {
315
+ typedef CYBOZU_RE_STD::basic_regex<Char> Base;
316
+ public:
317
+ typedef size_t size_type;
318
+ explicit regex(){}
319
+ explicit regex(const Char* p, flag_type f = regex_constants::ECMAScript)
320
+ : Base(p, f) {}
321
+ explicit regex(const Char16* p, flag_type f = regex_constants::ECMAScript)
322
+ : Base(String(p).c_str(), f) {}
323
+ explicit regex(const String& p, flag_type f = regex_constants::ECMAScript)
324
+ : Base(p.c_str(), f) {}
325
+ regex(const Char* p1, const Char* p2, flag_type f = regex_constants::ECMAScript)
326
+ : Base(p1, p2, f) {}
327
+ regex(const Char* p, size_type len, flag_type f)
328
+ : Base(p, len, f) {}
329
+ regex(const regex& that)
330
+ : Base(that) {}
331
+ };
332
+
333
+ class sub_match : public CYBOZU_RE_STD::sub_match<cybozu::String::const_iterator> {
334
+ typedef CYBOZU_RE_STD::sub_match<cybozu::String::const_iterator> Base;
335
+ public:
336
+ cybozu::String str() const {
337
+ cybozu::String str(Base::str());
338
+ return str;
339
+ }
340
+ operator cybozu::String() const { return str(); }
341
+ };
342
+
343
+ class smatch : public CYBOZU_RE_STD::match_results<cybozu::String::const_iterator> {
344
+ typedef CYBOZU_RE_STD::match_results<cybozu::String::const_iterator> Base;
345
+ public:
346
+ String str(int sub = 0) const { return Base::str(sub); }
347
+ const sub_match& prefix() const { return *(const sub_match*)&(Base::prefix()); }
348
+ const sub_match& suffix() const { return *(const sub_match*)&(Base::suffix()); }
349
+ };
350
+
351
+ class sregex_iterator : public CYBOZU_RE_STD::regex_iterator<String::const_iterator> {
352
+ typedef CYBOZU_RE_STD::regex_iterator<String::const_iterator> Base;
353
+ public:
354
+ sregex_iterator(){}
355
+ sregex_iterator(const String::const_iterator a, const String::const_iterator b, const regex& re, regex_constants::match_flag_type m = regex_constants::match_default)
356
+ : Base(a, b, re, m) {}
357
+ sregex_iterator(const sregex_iterator& rhs)
358
+ : Base(rhs) {}
359
+ #ifndef CYBOZU_STRING_USE_WIN /* return temporary address when using vc tr1? */
360
+ const smatch& operator*()const { return *static_cast<const smatch*>(&Base(*this).operator*()); }
361
+ const smatch* operator->()const { return static_cast<const smatch*>(Base(*this).operator->()); }
362
+ #endif
363
+ };
364
+
365
+ class sregex_token_iterator : public CYBOZU_RE_STD::regex_token_iterator<cybozu::String::const_iterator> {
366
+ typedef CYBOZU_RE_STD::regex_token_iterator<cybozu::String::const_iterator> Base;
367
+ typedef cybozu::String::const_iterator Iterator;
368
+ public:
369
+ sregex_token_iterator() {}
370
+ sregex_token_iterator(Iterator begin, Iterator end, const regex& re, int sub = 0, regex_constants::match_flag_type m = regex_constants::match_default)
371
+ : Base(begin, end, re, sub, m) {}
372
+ sregex_token_iterator(Iterator begin, Iterator end, const regex& re, const std::vector<int>& sub, regex_constants::match_flag_type m = regex_constants::match_default)
373
+ : Base(begin, end, re, sub, m) {}
374
+ template<size_t N>
375
+ sregex_token_iterator(Iterator begin, Iterator end, const regex& re, const int (&sub)[N], regex_constants::match_flag_type m = regex_constants::match_default)
376
+ : Base(begin, end, re, sub, m) {}
377
+ sregex_token_iterator(const regex_token_iterator& rhs)
378
+ : Base(rhs) {}
379
+ const sub_match& operator*() const { return *(const sub_match*)&(Base::operator*()); }
380
+ sregex_token_iterator& operator++() { return *(sregex_token_iterator*)&(Base::operator++()); }
381
+ sregex_token_iterator operator++(int) {
382
+ sregex_token_iterator prev = *this;
383
+ ++(*this);
384
+ return prev;
385
+ }
386
+ };
387
+
388
+ inline bool regex_search(const String::const_iterator begin, const String::const_iterator end, smatch& m, const regex& e, regex_constants::match_flag_type flags = regex_constants::match_default)
389
+ {
390
+ return CYBOZU_RE_STD::regex_search(begin, end, m, e, flags);
391
+ }
392
+
393
+ inline bool regex_search(const String& s, smatch& m, const regex& e, regex_constants::match_flag_type flags = regex_constants::match_default)
394
+ {
395
+ return regex_search(s.begin(), s.end(), m, e, flags);
396
+ }
397
+
398
+ inline bool regex_search(const String& s, const regex& e, regex_constants::match_flag_type flags = regex_constants::match_default)
399
+ {
400
+ smatch m;
401
+ return regex_search(s, m, e, flags);
402
+ }
403
+
404
+ inline bool regex_search(const String::const_iterator begin, const String::const_iterator end, const regex& e, regex_constants::match_flag_type flags = regex_constants::match_default)
405
+ {
406
+ smatch m;
407
+ return regex_search(begin, end, m, e, flags);
408
+ }
409
+
410
+ inline String regex_replace(const String::const_iterator begin, const String::const_iterator end, const regex& e, const String& fmt, regex_constants::match_flag_type flags = regex_constants::match_default)
411
+ {
412
+ String result;
413
+ CYBOZU_RE_STD::regex_replace(std::back_inserter(result.get()), begin, end, e, fmt.get(), flags);
414
+ return result;
415
+ }
416
+
417
+ inline String regex_replace(const String& s, const regex& e, const String& fmt, regex_constants::match_flag_type flags = regex_constants::match_default)
418
+ {
419
+ return regex_replace(s.begin(), s.end(), e, fmt, flags);
420
+ }
421
+
422
+ inline bool regex_match(const String::const_iterator begin, const String::const_iterator end, smatch& m, const regex& e, regex_constants::match_flag_type flags = regex_constants::match_default)
423
+ {
424
+ return CYBOZU_RE_STD::regex_match(begin, end, m, e, flags);
425
+ }
426
+
427
+ inline bool regex_match(const String& s, smatch& m, const regex& e, regex_constants::match_flag_type flags = regex_constants::match_default)
428
+ {
429
+ return regex_match(s.begin(), s.end(), m, e, flags);
430
+ }
431
+
432
+ inline bool regex_match(const String::const_iterator begin, const String::const_iterator end, const regex& e, regex_constants::match_flag_type flags = regex_constants::match_default)
433
+ {
434
+ smatch m;
435
+ return regex_match(begin, end, m, e, flags);
436
+ }
437
+
438
+ inline bool regex_match(const String& s, const regex& e, regex_constants::match_flag_type flags = regex_constants::match_default)
439
+ {
440
+ smatch m;
441
+ return regex_match(s, m, e, flags);
442
+ }
443
+
444
+ //using CYBOZU_RE_STD::regex_token_iterator;
445
+ //typedef regex_token_iterator<cybozu::String::const_iterator> sregex_token_iterator;
446
+
447
+ #ifdef _MSC_VER
448
+ namespace regex_local {
449
+
450
+ std::locale __declspec(selectany) g_loc = std::locale(std::locale(""), new std::ctype<cybozu::Char>);
451
+
452
+ inline bool init()
453
+ {
454
+ std::locale::global(g_loc);
455
+ return true;
456
+ }
457
+
458
+ static const bool initialized = init();
459
+
460
+ } // regex_local
461
+ #endif
462
+
463
+ } // cybozu