qwikdoc 0.0.1

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 (335) hide show
  1. data/.gitignore +5 -0
  2. data/.rspec +2 -0
  3. data/CHANGES +3 -0
  4. data/COPYING +340 -0
  5. data/Gemfile +3 -0
  6. data/README.md +10 -0
  7. data/Rakefile +10 -0
  8. data/TextFormattingRules +137 -0
  9. data/TextFormattingRules.ja +143 -0
  10. data/bin/qwikdoc +34 -0
  11. data/lib/qwik_doc.rb +15 -0
  12. data/lib/qwik_doc/hack.rb +184 -0
  13. data/qwikdoc.gemspec +26 -0
  14. data/spec/qwik_doc_spec.rb +305 -0
  15. data/spec/spec_helper.rb +12 -0
  16. data/vendor/qwik/Makefile +63 -0
  17. data/vendor/qwik/Rakefile +17 -0
  18. data/vendor/qwik/act-aa.rb +83 -0
  19. data/vendor/qwik/act-archive.rb +386 -0
  20. data/vendor/qwik/act-attach.rb +304 -0
  21. data/vendor/qwik/act-backup.rb +236 -0
  22. data/vendor/qwik/act-basic.rb +325 -0
  23. data/vendor/qwik/act-book.rb +161 -0
  24. data/vendor/qwik/act-calc.rb +371 -0
  25. data/vendor/qwik/act-charset.rb +251 -0
  26. data/vendor/qwik/act-christel.rb +112 -0
  27. data/vendor/qwik/act-chronology.rb +149 -0
  28. data/vendor/qwik/act-code.rb +155 -0
  29. data/vendor/qwik/act-comment.rb +554 -0
  30. data/vendor/qwik/act-config.rb +49 -0
  31. data/vendor/qwik/act-counter.rb +125 -0
  32. data/vendor/qwik/act-day.rb +96 -0
  33. data/vendor/qwik/act-describe.rb +135 -0
  34. data/vendor/qwik/act-diary.rb +109 -0
  35. data/vendor/qwik/act-edit.rb +317 -0
  36. data/vendor/qwik/act-embed-html.rb +296 -0
  37. data/vendor/qwik/act-emode.rb +150 -0
  38. data/vendor/qwik/act-event.rb +187 -0
  39. data/vendor/qwik/act-file.rb +303 -0
  40. data/vendor/qwik/act-files.rb +771 -0
  41. data/vendor/qwik/act-getpass.rb +295 -0
  42. data/vendor/qwik/act-history.rb +136 -0
  43. data/vendor/qwik/act-html.rb +204 -0
  44. data/vendor/qwik/act-httpauth.rb +147 -0
  45. data/vendor/qwik/act-include.rb +142 -0
  46. data/vendor/qwik/act-interwiki.rb +189 -0
  47. data/vendor/qwik/act-isearch.rb +109 -0
  48. data/vendor/qwik/act-keywords.rb +137 -0
  49. data/vendor/qwik/act-lang.rb +81 -0
  50. data/vendor/qwik/act-license.rb +63 -0
  51. data/vendor/qwik/act-list.rb +287 -0
  52. data/vendor/qwik/act-login.rb +410 -0
  53. data/vendor/qwik/act-logout.rb +60 -0
  54. data/vendor/qwik/act-mail.rb +159 -0
  55. data/vendor/qwik/act-map.rb +292 -0
  56. data/vendor/qwik/act-md5.rb +42 -0
  57. data/vendor/qwik/act-mdlb.rb +741 -0
  58. data/vendor/qwik/act-media.rb +416 -0
  59. data/vendor/qwik/act-member.rb +157 -0
  60. data/vendor/qwik/act-menu.rb +142 -0
  61. data/vendor/qwik/act-metadata.rb +323 -0
  62. data/vendor/qwik/act-mlsubmitform.rb +49 -0
  63. data/vendor/qwik/act-monitor.rb +167 -0
  64. data/vendor/qwik/act-new.rb +418 -0
  65. data/vendor/qwik/act-pagelist.rb +248 -0
  66. data/vendor/qwik/act-password.rb +145 -0
  67. data/vendor/qwik/act-plan.rb +210 -0
  68. data/vendor/qwik/act-povray.rb +230 -0
  69. data/vendor/qwik/act-presen.rb +380 -0
  70. data/vendor/qwik/act-redirect.rb +133 -0
  71. data/vendor/qwik/act-ring.rb +1071 -0
  72. data/vendor/qwik/act-rrefs.rb +255 -0
  73. data/vendor/qwik/act-ruby.rb +116 -0
  74. data/vendor/qwik/act-sample.rb +170 -0
  75. data/vendor/qwik/act-save.rb +295 -0
  76. data/vendor/qwik/act-schedule.rb +374 -0
  77. data/vendor/qwik/act-search.rb +180 -0
  78. data/vendor/qwik/act-searchwords.rb +51 -0
  79. data/vendor/qwik/act-sendpass.rb +83 -0
  80. data/vendor/qwik/act-site.rb +89 -0
  81. data/vendor/qwik/act-sitebackup.rb +419 -0
  82. data/vendor/qwik/act-sitelog.rb +118 -0
  83. data/vendor/qwik/act-smil.rb +299 -0
  84. data/vendor/qwik/act-status.rb +220 -0
  85. data/vendor/qwik/act-style.rb +608 -0
  86. data/vendor/qwik/act-table.rb +263 -0
  87. data/vendor/qwik/act-tableform.rb +241 -0
  88. data/vendor/qwik/act-tag.rb +103 -0
  89. data/vendor/qwik/act-text.rb +70 -0
  90. data/vendor/qwik/act-textarea.rb +164 -0
  91. data/vendor/qwik/act-theme.rb +346 -0
  92. data/vendor/qwik/act-toc.rb +112 -0
  93. data/vendor/qwik/act-typekey.rb +198 -0
  94. data/vendor/qwik/act-under-const.rb +94 -0
  95. data/vendor/qwik/act-webservice.rb +321 -0
  96. data/vendor/qwik/act-wema.rb +558 -0
  97. data/vendor/qwik/act-wysiwyg.rb +238 -0
  98. data/vendor/qwik/action.rb +325 -0
  99. data/vendor/qwik/autoreload.rb +98 -0
  100. data/vendor/qwik/bench-bench.rb +28 -0
  101. data/vendor/qwik/bench-emode.rb +47 -0
  102. data/vendor/qwik/bench-format-xml.rb +70 -0
  103. data/vendor/qwik/bench-large-table.rb +62 -0
  104. data/vendor/qwik/bench-md5.rb +14 -0
  105. data/vendor/qwik/bench-module-session.rb +19 -0
  106. data/vendor/qwik/bench-page.rb +50 -0
  107. data/vendor/qwik/bench-s-md5.rb +28 -0
  108. data/vendor/qwik/bench-session.rb +25 -0
  109. data/vendor/qwik/bench-textformat.rb +31 -0
  110. data/vendor/qwik/catalog-factory.rb +91 -0
  111. data/vendor/qwik/catalog-ja.rb +479 -0
  112. data/vendor/qwik/catalog-ml-ja.rb +145 -0
  113. data/vendor/qwik/check-act-monitor.rb +112 -0
  114. data/vendor/qwik/check-act-monitor2.rb +46 -0
  115. data/vendor/qwik/check-act-theme.rb +27 -0
  116. data/vendor/qwik/check-event.rb +112 -0
  117. data/vendor/qwik/check-event2.rb +55 -0
  118. data/vendor/qwik/check-htree-rexml.rb +77 -0
  119. data/vendor/qwik/check-htree.rb +51 -0
  120. data/vendor/qwik/check-libxml.rb +135 -0
  121. data/vendor/qwik/check-many-pages.rb +47 -0
  122. data/vendor/qwik/check-monitor.rb +33 -0
  123. data/vendor/qwik/check-observer.rb +67 -0
  124. data/vendor/qwik/check-server.rb +61 -0
  125. data/vendor/qwik/check-uuencode.rb +33 -0
  126. data/vendor/qwik/check-webdav.rb +65 -0
  127. data/vendor/qwik/check-xml-xpath.rb +27 -0
  128. data/vendor/qwik/common-backtrace.rb +94 -0
  129. data/vendor/qwik/common-basic.rb +111 -0
  130. data/vendor/qwik/common-condition.rb +142 -0
  131. data/vendor/qwik/common-error.rb +48 -0
  132. data/vendor/qwik/common-gettext.rb +50 -0
  133. data/vendor/qwik/common-javascript.rb +45 -0
  134. data/vendor/qwik/common-notice.rb +132 -0
  135. data/vendor/qwik/common-plain.rb +105 -0
  136. data/vendor/qwik/common-plugin.rb +111 -0
  137. data/vendor/qwik/common-res.rb +76 -0
  138. data/vendor/qwik/common-resolve.rb +92 -0
  139. data/vendor/qwik/common-send.rb +171 -0
  140. data/vendor/qwik/common-session.rb +139 -0
  141. data/vendor/qwik/common-surface.rb +261 -0
  142. data/vendor/qwik/common-url.rb +90 -0
  143. data/vendor/qwik/compat/Makefile +12 -0
  144. data/vendor/qwik/compat/add_load_path.rb +1 -0
  145. data/vendor/qwik/config.rb +299 -0
  146. data/vendor/qwik/db-b-backup.rb +142 -0
  147. data/vendor/qwik/db-backup.rb +184 -0
  148. data/vendor/qwik/db-berkeley.rb +306 -0
  149. data/vendor/qwik/db-filesystem.rb +305 -0
  150. data/vendor/qwik/db-indexer.rb +154 -0
  151. data/vendor/qwik/db-searchwords.rb +238 -0
  152. data/vendor/qwik/description-ja.rb +267 -0
  153. data/vendor/qwik/description.rb +256 -0
  154. data/vendor/qwik/dev-add-copyright.rb +23 -0
  155. data/vendor/qwik/dev-backup.rb +24 -0
  156. data/vendor/qwik/dev-bench.rb +175 -0
  157. data/vendor/qwik/dev-calctime.rb +52 -0
  158. data/vendor/qwik/dev-css-compressor.rb +60 -0
  159. data/vendor/qwik/dev-extract-catalog.rb +102 -0
  160. data/vendor/qwik/dev-js-compressor.rb +73 -0
  161. data/vendor/qwik/dev-release.rb +235 -0
  162. data/vendor/qwik/dev-replace.rb +353 -0
  163. data/vendor/qwik/dev-sendmail.rb +25 -0
  164. data/vendor/qwik/farm.rb +283 -0
  165. data/vendor/qwik/gettext.rb +56 -0
  166. data/vendor/qwik/group-cond.rb +157 -0
  167. data/vendor/qwik/group-config.rb +247 -0
  168. data/vendor/qwik/group-confirm.rb +147 -0
  169. data/vendor/qwik/group-db.rb +326 -0
  170. data/vendor/qwik/group-mail.rb +195 -0
  171. data/vendor/qwik/group-member.rb +307 -0
  172. data/vendor/qwik/group-sendmail.rb +231 -0
  173. data/vendor/qwik/group-site.rb +374 -0
  174. data/vendor/qwik/group-sweep.rb +63 -0
  175. data/vendor/qwik/group.rb +157 -0
  176. data/vendor/qwik/helper.rb +6 -0
  177. data/vendor/qwik/html-generator.rb +104 -0
  178. data/vendor/qwik/html-to-wabisabi.rb +149 -0
  179. data/vendor/qwik/htree-diff.rb +87 -0
  180. data/vendor/qwik/htree-format-xml.rb +57 -0
  181. data/vendor/qwik/htree-generator.rb +144 -0
  182. data/vendor/qwik/htree-get.rb +251 -0
  183. data/vendor/qwik/htree-html-generator.rb +179 -0
  184. data/vendor/qwik/htree-template.rb +263 -0
  185. data/vendor/qwik/htree-to-wabisabi.rb +171 -0
  186. data/vendor/qwik/loadlib.rb +79 -0
  187. data/vendor/qwik/logger.rb +115 -0
  188. data/vendor/qwik/mail-body.rb +171 -0
  189. data/vendor/qwik/mail-header.rb +474 -0
  190. data/vendor/qwik/mail-multipart.rb +193 -0
  191. data/vendor/qwik/mail-parse.rb +147 -0
  192. data/vendor/qwik/mail.rb +341 -0
  193. data/vendor/qwik/mailaddress.rb +83 -0
  194. data/vendor/qwik/mdlb-model.rb +81 -0
  195. data/vendor/qwik/mdlb-sample.rb +324 -0
  196. data/vendor/qwik/ml-catalog-factory.rb +27 -0
  197. data/vendor/qwik/ml-exception.rb +15 -0
  198. data/vendor/qwik/ml-generator.rb +28 -0
  199. data/vendor/qwik/ml-gettext.rb +137 -0
  200. data/vendor/qwik/ml-logger.rb +82 -0
  201. data/vendor/qwik/ml-memory.rb +65 -0
  202. data/vendor/qwik/ml-msg-validator.rb +86 -0
  203. data/vendor/qwik/ml-processor.rb +609 -0
  204. data/vendor/qwik/ml-quickml-server.rb +122 -0
  205. data/vendor/qwik/ml-sendmail.rb +0 -0
  206. data/vendor/qwik/ml-server.rb +107 -0
  207. data/vendor/qwik/ml-session.rb +348 -0
  208. data/vendor/qwik/ml-sweeper.rb +101 -0
  209. data/vendor/qwik/mock-logger.rb +65 -0
  210. data/vendor/qwik/mock-sendmail.rb +78 -0
  211. data/vendor/qwik/mock-socket.rb +82 -0
  212. data/vendor/qwik/modulobe.rb +406 -0
  213. data/vendor/qwik/mongrel-server.rb +72 -0
  214. data/vendor/qwik/page-files.rb +249 -0
  215. data/vendor/qwik/page-generate.rb +82 -0
  216. data/vendor/qwik/page-get.rb +262 -0
  217. data/vendor/qwik/page-images.rb +168 -0
  218. data/vendor/qwik/page-put.rb +128 -0
  219. data/vendor/qwik/page-rrefs.rb +154 -0
  220. data/vendor/qwik/page-title.rb +0 -0
  221. data/vendor/qwik/page-wikidb.rb +234 -0
  222. data/vendor/qwik/page.rb +67 -0
  223. data/vendor/qwik/pages.rb +444 -0
  224. data/vendor/qwik/parse-plugin.rb +249 -0
  225. data/vendor/qwik/parser-emode.rb +116 -0
  226. data/vendor/qwik/parser-inline.rb +273 -0
  227. data/vendor/qwik/parser.rb +350 -0
  228. data/vendor/qwik/password.rb +183 -0
  229. data/vendor/qwik/periodic.rb +79 -0
  230. data/vendor/qwik/qp.rb +56 -0
  231. data/vendor/qwik/qwik-service.rb +341 -0
  232. data/vendor/qwik/qwik.rb +5 -0
  233. data/vendor/qwik/qwikweb-adduser.rb +34 -0
  234. data/vendor/qwik/qwikweb-catalog-validator.rb +110 -0
  235. data/vendor/qwik/qwikweb-incgen.rb +28 -0
  236. data/vendor/qwik/qwikweb-makesite.rb +41 -0
  237. data/vendor/qwik/qwikweb-server.rb +44 -0
  238. data/vendor/qwik/qwikweb-showpassword.rb +26 -0
  239. data/vendor/qwik/qwikweb-watchlog.rb +67 -0
  240. data/vendor/qwik/request-path.rb +304 -0
  241. data/vendor/qwik/request-ua.rb +76 -0
  242. data/vendor/qwik/request-webrick.rb +81 -0
  243. data/vendor/qwik/request.rb +91 -0
  244. data/vendor/qwik/resolve-tdiary.rb +292 -0
  245. data/vendor/qwik/resolve.rb +121 -0
  246. data/vendor/qwik/response.rb +228 -0
  247. data/vendor/qwik/server-memory.rb +57 -0
  248. data/vendor/qwik/server-webrick.rb +102 -0
  249. data/vendor/qwik/server.rb +252 -0
  250. data/vendor/qwik/site-config.rb +149 -0
  251. data/vendor/qwik/site-db.rb +136 -0
  252. data/vendor/qwik/site-event.rb +162 -0
  253. data/vendor/qwik/site-files.rb +86 -0
  254. data/vendor/qwik/site-group.rb +103 -0
  255. data/vendor/qwik/site-index.rb +47 -0
  256. data/vendor/qwik/site-log.rb +64 -0
  257. data/vendor/qwik/site-member.rb +230 -0
  258. data/vendor/qwik/site-monitor.rb +97 -0
  259. data/vendor/qwik/site-pages.rb +62 -0
  260. data/vendor/qwik/site-plan.rb +139 -0
  261. data/vendor/qwik/site-report.rb +282 -0
  262. data/vendor/qwik/site-resolve.rb +230 -0
  263. data/vendor/qwik/site-rrefs.rb +18 -0
  264. data/vendor/qwik/site-search.rb +180 -0
  265. data/vendor/qwik/site-timeline.rb +153 -0
  266. data/vendor/qwik/site-url.rb +189 -0
  267. data/vendor/qwik/site.rb +76 -0
  268. data/vendor/qwik/smil-time.rb +105 -0
  269. data/vendor/qwik/smtp-session.rb +331 -0
  270. data/vendor/qwik/template-generator.rb +149 -0
  271. data/vendor/qwik/template.rb +85 -0
  272. data/vendor/qwik/test-common.rb +10 -0
  273. data/vendor/qwik/test-ml-info.rb +225 -0
  274. data/vendor/qwik/test-module-ml.rb +142 -0
  275. data/vendor/qwik/test-module-path.rb +110 -0
  276. data/vendor/qwik/test-module-public.rb +70 -0
  277. data/vendor/qwik/test-module-server.rb +98 -0
  278. data/vendor/qwik/test-module-session.rb +264 -0
  279. data/vendor/qwik/test-module-suite.rb +91 -0
  280. data/vendor/qwik/test-ms-applemail.rb +59 -0
  281. data/vendor/qwik/test-ms-attach.rb +174 -0
  282. data/vendor/qwik/test-ms-basic.rb +40 -0
  283. data/vendor/qwik/test-ms-close.rb +35 -0
  284. data/vendor/qwik/test-ms-confirm.rb +75 -0
  285. data/vendor/qwik/test-ms-ignore-spam.rb +57 -0
  286. data/vendor/qwik/test-ms-japanese.rb +97 -0
  287. data/vendor/qwik/test-ms-jfilename.rb +82 -0
  288. data/vendor/qwik/test-ms-large.rb +58 -0
  289. data/vendor/qwik/test-ms-member.rb +103 -0
  290. data/vendor/qwik/test-ms-multipart.rb +84 -0
  291. data/vendor/qwik/test-ms-org.rb +129 -0
  292. data/vendor/qwik/test-ms-plan.rb +130 -0
  293. data/vendor/qwik/test-ms-post.rb +53 -0
  294. data/vendor/qwik/test-ms-quopri.rb +76 -0
  295. data/vendor/qwik/test-sub-quopri.rb +45 -0
  296. data/vendor/qwik/test-submit-base64.rb +59 -0
  297. data/vendor/qwik/test-submit-forward.rb +61 -0
  298. data/vendor/qwik/test-submit-html-mail.rb +52 -0
  299. data/vendor/qwik/test-submit-japanese.rb +135 -0
  300. data/vendor/qwik/test-submit-jfilename.rb +144 -0
  301. data/vendor/qwik/test-submit-uuencode.rb +71 -0
  302. data/vendor/qwik/test-suite-all.rb +8 -0
  303. data/vendor/qwik/test-suite-basic.rb +9 -0
  304. data/vendor/qwik/test-suite-ml.rb +9 -0
  305. data/vendor/qwik/test-typekey.rb +64 -0
  306. data/vendor/qwik/testunit.rb +45 -0
  307. data/vendor/qwik/tokenizer-inline.rb +294 -0
  308. data/vendor/qwik/tokenizer.rb +332 -0
  309. data/vendor/qwik/typekey.rb +160 -0
  310. data/vendor/qwik/util-basic.rb +135 -0
  311. data/vendor/qwik/util-charset.rb +332 -0
  312. data/vendor/qwik/util-css.rb +56 -0
  313. data/vendor/qwik/util-csv-tokenizer.rb +113 -0
  314. data/vendor/qwik/util-filename.rb +112 -0
  315. data/vendor/qwik/util-pathname.rb +202 -0
  316. data/vendor/qwik/util-pid.rb +58 -0
  317. data/vendor/qwik/util-safe.rb +67 -0
  318. data/vendor/qwik/util-sendmail.rb +273 -0
  319. data/vendor/qwik/util-string.rb +203 -0
  320. data/vendor/qwik/util-time.rb +125 -0
  321. data/vendor/qwik/util-webrick.rb +176 -0
  322. data/vendor/qwik/version.rb +11 -0
  323. data/vendor/qwik/wabisabi-basic.rb +163 -0
  324. data/vendor/qwik/wabisabi-diff.rb +130 -0
  325. data/vendor/qwik/wabisabi-format-xml.rb +310 -0
  326. data/vendor/qwik/wabisabi-generator.rb +262 -0
  327. data/vendor/qwik/wabisabi-index.rb +174 -0
  328. data/vendor/qwik/wabisabi-table.rb +212 -0
  329. data/vendor/qwik/wabisabi-template.rb +295 -0
  330. data/vendor/qwik/wabisabi-to-htree.rb +111 -0
  331. data/vendor/qwik/wabisabi-to-wiki.rb +690 -0
  332. data/vendor/qwik/wabisabi-traverse.rb +207 -0
  333. data/vendor/qwik/wabisabi-validator.rb +116 -0
  334. data/vendor/qwik/wabisabi.rb +5 -0
  335. metadata +416 -0
@@ -0,0 +1,83 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
6
+
7
+ class MailAddress
8
+ def self.valid?(mail)
9
+ return false if mail.nil?
10
+ return false unless /\A([0-9a-zA-Z_.+-]+)@([0-9a-zA-Z_.-]+)\z/ =~ mail
11
+ login_part = $1
12
+ domain_part = $2
13
+ return false if domain_part.include?('..')
14
+ #return false if mail.include?('..')
15
+ return true
16
+ end
17
+
18
+ def self.obfuscate(address)
19
+ return address.sub(/(@.).*/, '\1...')
20
+ end
21
+
22
+ def self.obfuscate_str(str)
23
+ str.gsub(/([0-9a-zA-Z_.-]+)@([0-9a-zA-Z_.-]+)\.([0-9a-zA-Z_-]+)/) {|mail|
24
+ MailAddress.obfuscate(mail)
25
+ }
26
+ end
27
+
28
+ # foo@ExampLE.CoM => foo@example.com
29
+ # 'foo'@example.com => foo@example.com
30
+ def self.normalize(mail)
31
+ name, domain = mail.split('@')
32
+ return mail if domain.nil?
33
+ name.gsub!(/^"(.*)"$/, '\1')
34
+ return "#{name}@#{domain.downcase}"
35
+ end
36
+ end
37
+
38
+ if $0 == __FILE__
39
+ require 'qwik/testunit'
40
+ $test = true
41
+ end
42
+
43
+ if defined?($test) && $test
44
+ class TestMailAddress < Test::Unit::TestCase
45
+ def test_normalize
46
+ c = MailAddress
47
+ assert_equal 'foo@example.com', c.normalize('foo@example.com')
48
+ assert_equal 'foo@example.com', c.normalize('foo@ExampLE.CoM')
49
+ assert_equal 'foo@example.com', c.normalize("\"foo\"@ExampLE.CoM")
50
+ # Do not normalize name part.
51
+ assert_equal 'Foo@example.com', c.normalize('Foo@example.com')
52
+ end
53
+
54
+ def test_valid?
55
+ c = MailAddress
56
+ assert_equal true, c.valid?('user@example.com')
57
+ assert_equal true, c.valid?('valid+@example.com')
58
+ assert_equal true, c.valid?('+valid@example.com')
59
+ assert_equal true, c.valid?('_@example.com')
60
+ assert_equal true, c.valid?('us..er@example.com')
61
+ # Make this address valid. System uses this address for local account.
62
+ assert_equal true, c.valid?('user@localdomain')
63
+ assert_equal false, c.valid?(nil)
64
+ assert_equal false, c.valid?('')
65
+ assert_equal false, c.valid?('invalid!@example.com')
66
+ assert_equal false, c.valid?('invalid')
67
+ assert_equal false, c.valid?('user@example..com')
68
+ end
69
+
70
+ def test_obfuscate
71
+ c = MailAddress
72
+ assert_equal 'user@e...', c.obfuscate('user@example.com')
73
+ assert_equal '2006@e...', c.obfuscate('2006@example.com')
74
+ end
75
+
76
+ def test_obfuscate_str
77
+ c = MailAddress
78
+ assert_equal 'user@e...', c.obfuscate_str('user@example.com')
79
+ assert_equal 'a t@e... b s@f... c',
80
+ c.obfuscate_str('a t@e.com b s@f.com c')
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,81 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
6
+ require 'qwik/mdlb-sample'
7
+ require 'qwik/htree-to-wabisabi'
8
+ require 'qwik/util-charset'
9
+
10
+ # $KCODE = 's'
11
+
12
+ module Modulobe
13
+ class Model
14
+ def initialize(xml)
15
+ @wabisabi = Model.parse_xml(xml)
16
+ @speed = Model.extract_world(@wabisabi)
17
+ @name, @author, @comment = Model.extract_info(@wabisabi)
18
+ end
19
+
20
+ def self.parse_xml(xml)
21
+ xml ||= ''
22
+ return HTree(xml).to_wabisabi
23
+ end
24
+
25
+ def self.extract_world(wabisabi)
26
+ world = wabisabi.get_path('//world')
27
+ return nil if world.nil?
28
+ speed = world.get_path('/speed').text
29
+ return speed
30
+ end
31
+
32
+ def self.extract_info(wabisabi)
33
+ info = wabisabi.get_path('//model/info')
34
+ return nil if info.nil?
35
+ name = info.get_path('/name').text.set_xml_charset.to_page_charset
36
+ author = info.get_path('/author').text.set_xml_charset.to_page_charset
37
+ comment = info.get_path('/comment').text.set_xml_charset.to_page_charset
38
+ return name, author, comment
39
+ end
40
+ end
41
+ end
42
+
43
+ if $0 == __FILE__
44
+ require 'qwik/testunit'
45
+ $test = true
46
+ end
47
+
48
+ if defined?($test) && $test
49
+ class TestMdlbModel < Test::Unit::TestCase
50
+ def test_all
51
+ c = Modulobe::Model
52
+
53
+ xml = Modulobe::Sample::MODEL1
54
+
55
+ # test_parse_xml
56
+ ok_eq([], c.parse_xml(''))
57
+ w = c.parse_xml(xml)
58
+ ok_eq([:'?xml', '1.0', 'utf-8'], w[0])
59
+
60
+ # test_extract_world
61
+ ok_eq('0', c.extract_world(w))
62
+
63
+ # test_extract_info
64
+ ok_eq(nil, c.extract_info([]))
65
+ ok_eq(['test model', 'test author', "test comment.\n"],
66
+ c.extract_info(w))
67
+
68
+ xml = Modulobe::Sample::MODEL_CORE
69
+ w = c.parse_xml(xml)
70
+ ok_eq(['', '', ''], c.extract_info(w))
71
+
72
+ xml = Modulobe::Sample::MODEL_WITH_NAME
73
+ w = c.parse_xml(xml)
74
+ ok_eq(['n', 'a', "c\n"], c.extract_info(w))
75
+
76
+ xml = Modulobe::Sample::MODEL_WITH_JNAME
77
+ w = c.parse_xml(xml)
78
+ ok_eq(["\202\240 ", "\202\242 ", "\202\244\n"], c.extract_info(w))
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,324 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
6
+ require 'qwik/util-charset'
7
+
8
+ module Modulobe
9
+ module Sample
10
+ MODEL1 =
11
+ '<?xml version="1.0" encoding="utf-8"?>
12
+ <modulobe version="1.1" generator="Modulobe ver 0.2.1">
13
+ <world><speed>0</speed></world>
14
+
15
+ <model>
16
+ <info>
17
+ <name>test model</name>
18
+
19
+ <author>test author</author>
20
+
21
+ <comment>test comment.
22
+ </comment>
23
+ </info>
24
+
25
+ <core ref="m0"><angle><x>0</x><y>0</y><z>0</z></angle></core>
26
+
27
+ <body><module id="m0"><tie dir="0"><angle><x>0</x><y>0</y><z>180</z></angle></tie>
28
+ <tie ref="m1" dir="1"><angle><x>0</x><y>0</y><z>0</z></angle></tie>
29
+ <tie dir="2"><angle><x>0</x><y>0</y><z>-90</z></angle></tie>
30
+ <tie dir="3"><angle><x>0</x><y>0</y><z>90</z></angle></tie>
31
+ </module><module id="m1"><tie ref="m0" dir="0"><angle><x>0</x><y>0</y><z>180</z></angle></tie>
32
+ <tie ref="m2" dir="1"><angle><x>0</x><y>0</y><z>0</z></angle></tie>
33
+ <tie dir="2"><angle><x>0</x><y>0</y><z>-90</z></angle></tie>
34
+ <tie dir="3"><angle><x>0</x><y>0</y><z>90</z></angle></tie>
35
+ </module><module id="m2"><tie ref="m1" dir="0"><angle><x>0</x><y>0</y><z>180</z></angle></tie>
36
+ <tie ref="m3" dir="1"><angle><x>0</x><y>0</y><z>0</z></angle></tie>
37
+ <link type="8" cycle="1"><cycle angle="0" power="1"/>
38
+ <cycle angle="0" power="1"/>
39
+ <cycle angle="0" power="1"/>
40
+ <cycle angle="90" power="1"/>
41
+ <cycle angle="0" power="1"/>
42
+ <cycle angle="0" power="1"/>
43
+ <cycle angle="0" power="1"/>
44
+ <cycle angle="0" power="1"/>
45
+ <cycle angle="0" power="1"/>
46
+ <cycle angle="0" power="1"/>
47
+ <cycle angle="0" power="1"/>
48
+ <cycle angle="0" power="1"/>
49
+ </link>
50
+ </module><module id="m3"><tie ref="m2" dir="0"><angle><x>0</x><y>0</y><z>180</z></angle></tie>
51
+ <tie dir="1"><angle><x>0</x><y>0</y><z>0</z></angle></tie>
52
+ <tie dir="2"><angle><x>0</x><y>0</y><z>-90</z></angle></tie>
53
+ <tie dir="3"><angle><x>0</x><y>0</y><z>90</z></angle></tie>
54
+ </module></body>
55
+ </model>
56
+
57
+ <view>
58
+ <camera><angle><x>15</x><y>0</y><z>0</z></angle><distance>18.000000</distance></camera>
59
+
60
+ <focus ref="m2"/>
61
+ </view>
62
+ </modulobe>
63
+ '
64
+
65
+ MODULOBE_TEST_MODEL =
66
+ '<?xml version="1.0" encoding="utf-8"?>
67
+ <modulobe version="0">
68
+ <world><speed>0</speed></world>
69
+
70
+ <model>
71
+ <core ref="m0">
72
+ <angle><x>0</x><y>0</y><z>0</z></angle>
73
+ </core>
74
+
75
+ <body><module id="m0"><tie dir="0">
76
+ <angle><x>0</x><y>0</y><z>180</z></angle>
77
+ </tie>
78
+ <tie ref="m1" dir="1">
79
+ <angle><x>0</x><y>0</y><z>0</z></angle>
80
+ </tie>
81
+ <tie dir="2">
82
+ <angle><x>0</x><y>0</y><z>-90</z></angle>
83
+ </tie>
84
+ <tie dir="3">
85
+ <angle><x>0</x><y>0</y><z>90</z></angle>
86
+ </tie>
87
+ </module><module id="m1"><tie ref="m0" dir="0">
88
+ <angle><x>0</x><y>0</y><z>180</z></angle>
89
+ </tie>
90
+ <tie ref="m2" dir="1">
91
+ <angle><x>0</x><y>0</y><z>0</z></angle>
92
+ </tie>
93
+ <tie dir="2">
94
+ <angle><x>0</x><y>0</y><z>-90</z></angle>
95
+ </tie>
96
+ <tie dir="3">
97
+ <angle><x>0</x><y>0</y><z>90</z></angle>
98
+ </tie>
99
+ </module><module id="m2"><tie ref="m1" dir="0">
100
+ <angle><x>0</x><y>0</y><z>180</z></angle>
101
+ </tie>
102
+ <tie ref="m3" dir="1">
103
+ <angle><x>0</x><y>0</y><z>0</z></angle>
104
+ </tie>
105
+ <link type="8" cycle="1"><cycle angle="0" power="1"/>
106
+ <cycle angle="90" power="1"/>
107
+ <cycle angle="0" power="1"/>
108
+ <cycle angle="0" power="1"/>
109
+ <cycle angle="0" power="1"/>
110
+ <cycle angle="0" power="1"/>
111
+ <cycle angle="0" power="1"/>
112
+ <cycle angle="0" power="1"/>
113
+ <cycle angle="0" power="1"/>
114
+ <cycle angle="0" power="1"/>
115
+ <cycle angle="0" power="1"/>
116
+ <cycle angle="0" power="1"/>
117
+ </link>
118
+ </module><module id="m3"><tie ref="m2" dir="0">
119
+ <angle><x>0</x><y>0</y><z>180</z></angle>
120
+ </tie>
121
+ <tie dir="1">
122
+ <angle><x>0</x><y>0</y><z>0</z></angle>
123
+ </tie>
124
+ <tie dir="2">
125
+ <angle><x>0</x><y>0</y><z>-90</z></angle>
126
+ </tie>
127
+ <tie dir="3">
128
+ <angle><x>0</x><y>0</y><z>90</z></angle>
129
+ </tie>
130
+ </module></body>
131
+ </model>
132
+ </modulobe>'
133
+
134
+ MODULOBE_TEST_MODEL1 =
135
+ '<?xml version="1.0" encoding="utf-8"?>
136
+ <modulobe version="0">
137
+ <world><speed>0</speed></world>
138
+ <model>
139
+ <info>
140
+ <name>t1 model</name>
141
+ <author>Alice</author>
142
+ <comment>This is a comment.
143
+ </comment>
144
+ </info>
145
+ <core ref="m0"><angle><x>0</x><y>0</y><z>0</z></angle></core>
146
+ <body><module id="m0"><tie dir="0"><angle><x>0</x><y>0</y><z>180</z></angle></tie>
147
+ <tie dir="1"><angle><x>0</x><y>0</y><z>0</z></angle></tie>
148
+ <tie dir="2"><angle><x>0</x><y>0</y><z>-90</z></angle></tie>
149
+ <tie dir="3"><angle><x>0</x><y>0</y><z>90</z></angle></tie>
150
+ </module></body>
151
+ </model>
152
+ </modulobe>'
153
+
154
+ MODULOBE_TEST_MODEL2 =
155
+ '<?xml version="1.0" encoding="utf-8"?>
156
+ <modulobe version="0">
157
+ <world><speed>0</speed></world>
158
+ <model>
159
+ <info>
160
+ <name>t2 model</name>
161
+ <author>Bob</author>
162
+ <comment>This is a comment, too.
163
+ </comment>
164
+ </info>
165
+ <core ref="m0"><angle><x>0</x><y>0</y><z>0</z></angle></core>
166
+ <body><module id="m0"><tie dir="0"><angle><x>0</x><y>0</y><z>180</z></angle></tie>
167
+ <tie ref="m1" dir="1"><angle><x>0</x><y>0</y><z>0</z></angle></tie>
168
+ <tie dir="2"><angle><x>0</x><y>0</y><z>-90</z></angle></tie>
169
+ <tie dir="3"><angle><x>0</x><y>0</y><z>90</z></angle></tie>
170
+ </module><module id="m1"><tie ref="m0" dir="0"><angle><x>0</x><y>0</y><z>180</z></angle></tie>
171
+ <tie ref="m2" dir="1"><angle><x>0</x><y>0</y><z>0</z></angle></tie>
172
+ <link type="8" cycle="1"><cycle angle="0" power="1"/>
173
+ <cycle angle="0" power="1"/>
174
+ <cycle angle="90" power="1"/>
175
+ <cycle angle="0" power="1"/>
176
+ <cycle angle="0" power="1"/>
177
+ <cycle angle="0" power="1"/>
178
+ <cycle angle="0" power="1"/>
179
+ <cycle angle="0" power="1"/>
180
+ <cycle angle="0" power="1"/>
181
+ <cycle angle="0" power="1"/>
182
+ <cycle angle="0" power="1"/>
183
+ <cycle angle="0" power="1"/>
184
+ </link>
185
+ </module><module id="m2"><tie ref="m1" dir="0"><angle><x>0</x><y>0</y><z>180</z></angle></tie>
186
+ <tie dir="1"><angle><x>0</x><y>0</y><z>0</z></angle></tie>
187
+ <tie dir="2"><angle><x>0</x><y>0</y><z>-90</z></angle></tie>
188
+ <tie dir="3"><angle><x>0</x><y>0</y><z>90</z></angle></tie>
189
+ </module></body>
190
+ </model>
191
+ </modulobe>'
192
+
193
+ RSS_IN_UTF8 =
194
+ '<?xml version="1.0" encoding="utf-8"?>
195
+ <rss version="2.0" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
196
+ <channel>
197
+ <title>Modulobe Collection</title>
198
+ <link>http://www.modulobe.com/model.html</link>
199
+ <description>modulobe.com�ɃA�b�v���[�h���ꂽmodel�̃��X�g�ł��B</description>
200
+ <language>ja</language>
201
+ <managingEditor>modulobe@qwik.jp</managingEditor>
202
+ <webMaster>modulobe@qwik.jp</webMaster>
203
+ <lastBuildDate>*Sat, 9 Jul 2005 13:09:31 GMT*</lastBuildDate>
204
+ <ttl>60</ttl>
205
+ <item>
206
+ <title>�ցA��������</title>
207
+ <link>http://www.modulobe.com/model.files/hebi-nagasugiru.mdlb</link>
208
+ <description>�������܂��B</description>
209
+ <author>Kouichirou Eto</author>
210
+ <pubDate>Sat, 9 Jul 2005 12:56:44 GMT</pubDate>
211
+ <enclosure url="http://www.modulobe.com/model.files/hebi-nagasugiru.mdlb" length="87928" type="application/xml"/>
212
+ <creativeCommons:license>http://creativecommons.org/licenses/by/2.1/jp/</creativeCommons:license>
213
+ </item>
214
+ <item>
215
+ <title>*name*</title>
216
+ <link>http://www.modulobe.com/model.files/*filename.mdlb*</link>
217
+ <description>*comment*</description>
218
+ <author>*author*</author>
219
+ <pubDate>*Sun, 3 Jul 2005 14:29:26 GMT*</pubDate>
220
+ <enclosure url="http://www.modulobe.com/model.files/*filename.mdlb*" length="*11922960*" type="application/xml"/>
221
+ <creativeCommons:license>http://creativecommons.org/licenses/by/2.1/jp/</creativeCommons:license>
222
+ </item>
223
+ </channel>
224
+ </rss>'.set_sourcecode_charset.to_xml_charset
225
+
226
+ # ============================== Simple models
227
+ MODEL_CORE =
228
+ '<?xml version="1.0" encoding="utf-8"?>
229
+ <modulobe version="1.1" generator="Modulobe ver 0.2.1">
230
+ <world><speed>0</speed></world>
231
+
232
+ <model>
233
+ <info>
234
+ <name></name>
235
+
236
+ <author></author>
237
+
238
+ <comment></comment>
239
+ </info>
240
+
241
+ <core ref="m0"><angle><x>0</x><y>0</y><z>0</z></angle></core>
242
+
243
+ <body><module id="m0"><tie dir="0"><angle><x>0</x><y>0</y><z>180</z></angle></tie>
244
+ <tie dir="1"><angle><x>0</x><y>0</y><z>0</z></angle></tie>
245
+ <tie dir="2"><angle><x>0</x><y>0</y><z>-90</z></angle></tie>
246
+ <tie dir="3"><angle><x>0</x><y>0</y><z>90</z></angle></tie>
247
+ </module></body>
248
+ </model>
249
+
250
+ <view>
251
+ <camera><angle><x>15</x><y>0</y><z>0</z></angle><distance>18.000000</distance></camera>
252
+
253
+ <focus ref="m0"/>
254
+ </view>
255
+ </modulobe>
256
+ '
257
+
258
+ MODEL_WITH_NAME =
259
+ '<?xml version="1.0" encoding="utf-8"?>
260
+ <modulobe version="1.1" generator="Modulobe ver 0.2.1">
261
+ <world><speed>0</speed></world>
262
+
263
+ <model>
264
+ <info>
265
+ <name>n</name>
266
+
267
+ <author>a</author>
268
+
269
+ <comment>c
270
+ </comment>
271
+ </info>
272
+
273
+ <core ref="m0"><angle><x>0</x><y>0</y><z>0</z></angle></core>
274
+
275
+ <body><module id="m0"><tie dir="0"><angle><x>0</x><y>0</y><z>180</z></angle></tie>
276
+ <tie dir="1"><angle><x>0</x><y>0</y><z>0</z></angle></tie>
277
+ <tie dir="2"><angle><x>0</x><y>0</y><z>-90</z></angle></tie>
278
+ <tie dir="3"><angle><x>0</x><y>0</y><z>90</z></angle></tie>
279
+ </module></body>
280
+ </model>
281
+
282
+ <view>
283
+ <camera><angle><x>15</x><y>0</y><z>0</z></angle><distance>18.000000</distance></camera>
284
+
285
+ <focus ref="m0"/>
286
+ </view>
287
+ </modulobe>
288
+ '
289
+
290
+ MODEL_WITH_JNAME =
291
+ '<?xml version="1.0" encoding="utf-8"?>
292
+ <modulobe version="1.1" generator="Modulobe ver 0.2.1">
293
+ <world><speed>0</speed></world>
294
+
295
+ <model>
296
+ <info>
297
+ <name>�� </name>
298
+
299
+ <author>�� </author>
300
+
301
+ <comment>��
302
+ </comment>
303
+ </info>
304
+
305
+ <core ref="m0"><angle><x>0</x><y>0</y><z>0</z></angle></core>
306
+
307
+ <body><module id="m0"><tie dir="0"><angle><x>0</x><y>0</y><z>180</z></angle></tie>
308
+ <tie dir="1"><angle><x>0</x><y>0</y><z>0</z></angle></tie>
309
+ <tie dir="2"><angle><x>0</x><y>0</y><z>-90</z></angle></tie>
310
+ <tie dir="3"><angle><x>0</x><y>0</y><z>90</z></angle></tie>
311
+ </module></body>
312
+ </model>
313
+
314
+ <view>
315
+ <camera><angle><x>15</x><y>0</y><z>0</z></angle><distance>18.000000</distance></camera>
316
+
317
+ <focus ref="m0"/>
318
+ </view>
319
+ </modulobe>
320
+ '.set_sourcecode_charset.to_xml_charset
321
+
322
+
323
+ end
324
+ end