ooxml_crypt 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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