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,76 @@
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
+ module Qwik
8
+ class UserAgent
9
+ def initialize(req)
10
+ @req = req
11
+ @mobile = @serial = nil
12
+ parse(@req)
13
+ end
14
+ attr_reader :mobile, :serial
15
+
16
+ def parse(req)
17
+ @mobile, @serial = UserAgent.parse(req)
18
+ end
19
+
20
+ def self.parse(req)
21
+ ua = req['user-agent']
22
+ mobile = serial = nil
23
+ case ua
24
+ when /\ADoCoMo/ # docomo
25
+ mobile = 'docomo'
26
+ serial = $1 if /\/ser(...........)/ =~ ua
27
+ when /\AKDDI\-/, /\AUP\.Browser/ # ezweb
28
+ mobile = 'ezweb'
29
+ serial = req['x-up-subno']
30
+ end
31
+ return mobile, serial
32
+ end
33
+ end
34
+ end
35
+
36
+ if $0 == __FILE__
37
+ require 'qwik/testunit'
38
+ require 'qwik/config'
39
+ require 'qwik/request'
40
+ $test = true
41
+ end
42
+
43
+ if defined?($test) && $test
44
+ class TestRequestUserAgent < Test::Unit::TestCase
45
+ def test_class_method
46
+ c = Qwik::UserAgent
47
+ ok_eq(['docomo', nil],
48
+ c.parse({'user-agent'=>'DoCoMo/1.0/N504i/c10/TB'}))
49
+ ok_eq(['docomo', 'NMAIA000001'],
50
+ c.parse({'user-agent'=>'DoCoMo/1.0/N504i/c10/TB/serNMAIA000001'}))
51
+ ok_eq(['ezweb', nil],
52
+ c.parse({'user-agent'=>"KDDI-TS23 UP.Browser/6.0.7.2 (GUI) MMP/1.1"}))
53
+ ok_eq(['ezweb', 'XXXXXXXXXXXXXXXXX.ezweb.ne.jp'],
54
+ c.parse({'user-agent'=>"KDDI-TS23 UP.Browser/6.0.7.2 (GUI) MMP/1.1",
55
+ 'x-up-subno'=>'XXXXXXXXXXXXXXXXX.ezweb.ne.jp'}))
56
+ end
57
+
58
+ def test_user_agent
59
+ config = Qwik::Config.new
60
+ req = Qwik::Request.new(config)
61
+
62
+ req.instance_eval {
63
+ @header['user-agent'] = ['DoCoMo/1.0/N504i/c10/TB']
64
+ }
65
+ ua = Qwik::UserAgent.new(req)
66
+ ok_eq('docomo', ua.mobile)
67
+ ok_eq(nil, ua.serial)
68
+ req.instance_eval {
69
+ @header['user-agent'] = ['DoCoMo/1.0/N504i/c10/TB/serNMAIA000001']
70
+ }
71
+ ua = Qwik::UserAgent.new(req)
72
+ ok_eq('docomo', ua.mobile)
73
+ ok_eq('NMAIA000001', ua.serial)
74
+ end
75
+ end
76
+ 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/request'
7
+ require 'qwik/util-charset'
8
+
9
+ module Qwik
10
+ class Request
11
+ # request is a WEBrick::HTTPRequest
12
+ def parse_webrick(request)
13
+ host = ''
14
+ host = request.request_uri.host if request.request_uri
15
+
16
+ @unparsed_uri = request.unparsed_uri
17
+
18
+ begin
19
+ parse_path(request.path)
20
+ rescue
21
+ end
22
+
23
+ @header = request.header.dup if request.header
24
+
25
+ @useragent = UserAgent.new(self)
26
+
27
+ if request.accept_language && ! request.accept_language.empty?
28
+ @accept_language = request.accept_language
29
+ elsif @useragent.mobile
30
+ @accept_language = ['ja']
31
+ end
32
+
33
+ @request_method = request.request_method
34
+ request.cookies.each {|c| @cookies[c.name] = c.value }
35
+ @query = request.query.dup
36
+ @query.each {|k, v|
37
+ v.set_url_charset
38
+ }
39
+
40
+ @user = @pass = nil
41
+
42
+ @fromhost = Request.get_fromhost(request, self['x-forwarded-for'])
43
+ @request_line = Request.get_request_line(request)
44
+ end
45
+
46
+ def self.get_fromhost(request, forwarded_from)
47
+ if forwarded_from
48
+ forwarded_from.gsub!(/, /, ',')
49
+ return forwarded_from
50
+ end
51
+ peer = request.peeraddr
52
+ return peer[2] if peer
53
+ return '127.0.0.1'
54
+ end
55
+
56
+ def self.get_request_line(request)
57
+ return '' if request.request_line.nil?
58
+ request_line = request.request_line.sub(/\x0d?\x0a\z/o, '')
59
+ request_line = request_line.sub(/ HTTP\/1\..\z/o, '')
60
+ return request_line
61
+ end
62
+ end
63
+ end
64
+
65
+ if $0 == __FILE__
66
+ require 'qwik/testunit'
67
+ $test = true
68
+ end
69
+
70
+ if defined?($test) && $test
71
+ class TestRequestWEBrick < Test::Unit::TestCase
72
+ def test_all
73
+ config = Qwik::Config.new
74
+ req = Qwik::Request.new(config)
75
+
76
+ c = Qwik::Request
77
+
78
+ # not yet
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,91 @@
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/config'
7
+ require 'qwik/request-path'
8
+ require 'qwik/request-ua'
9
+ require 'qwik/request-webrick'
10
+
11
+ module Qwik
12
+ class Request
13
+ DEFAULT_ACCEPT_LANGUAGE = ['en']
14
+
15
+ def initialize(config)
16
+ @config = config
17
+
18
+ @start_time = Time.now
19
+ @start_time = Time.at(0) if defined?($test) && $test
20
+
21
+ init_path
22
+
23
+ # init_host
24
+ @fromhost = nil
25
+
26
+ @request_method = nil
27
+ @cookies = {}
28
+ @header = {}
29
+ @query = {}
30
+ @user = @pass = nil
31
+ @auth = nil
32
+ @useragent = UserAgent.new(self)
33
+ @sessionid = nil
34
+ @accept_language = DEFAULT_ACCEPT_LANGUAGE
35
+ @request_line = nil
36
+ end
37
+
38
+ attr_accessor :start_time # For test.
39
+ attr_reader :request_method
40
+ attr_reader :cookies
41
+ attr_reader :header # For test.
42
+ attr_reader :query
43
+ attr_accessor :user
44
+ attr_reader :pass
45
+ attr_accessor :auth
46
+ attr_reader :useragent
47
+ attr_accessor :sessionid
48
+ attr_accessor :accept_language
49
+ attr_reader :request_line
50
+ attr_reader :fromhost
51
+
52
+ def is_post?
53
+ return @request_method == 'POST'
54
+ end
55
+
56
+ def [](key)
57
+ return nil if @header.nil?
58
+ value = @header[key.downcase]
59
+ return nil if value.nil? || value.empty?
60
+ return value.join(', ')
61
+ end
62
+ end
63
+ end
64
+
65
+ if $0 == __FILE__
66
+ require 'qwik/testunit'
67
+ $test = true
68
+ end
69
+
70
+ if defined?($test) && $test
71
+ class TestRequest < Test::Unit::TestCase
72
+ def test_all
73
+ config = Qwik::Config.new
74
+ req = Qwik::Request.new(config)
75
+
76
+ # test_start_time
77
+ ok_eq(0, req.start_time.to_i)
78
+
79
+ # test_[]
80
+ req.instance_eval {
81
+ @header['k'] = ['v']
82
+ }
83
+ eq('v', req['k'])
84
+
85
+ req.instance_eval {
86
+ @header['k'] = ['v1', 'v2']
87
+ }
88
+ eq('v1, v2', req['k'])
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,292 @@
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
+ module Qwik
8
+ class Action
9
+ def c_tdiary_resolve(w)
10
+ w = TDiaryResolver.resolve(@config, @site, self, w)
11
+ return w
12
+ end
13
+
14
+ def c_page_url
15
+ page = @site[@req.base]
16
+ return nil if page.nil?
17
+ return page.url
18
+ end
19
+ end
20
+
21
+ class TDiaryResolver
22
+ def initialize(config, site, action)
23
+ @config = config
24
+ @site = site
25
+ @action = action
26
+
27
+ @global_id = 0
28
+
29
+ t = @site.siteconfig['titlelink']
30
+ @titlelink = (t == 'true')
31
+
32
+ t = @site.siteconfig['emode_titlelink']
33
+ @emode_titlelink = (t == 'true')
34
+ end
35
+ attr_reader :titlelink, :emode_titlelink # for test
36
+
37
+ def self.resolve(config, site, action, wabisabi)
38
+ resolver = self.new(config, site, action)
39
+ w = resolver.resolve(wabisabi)
40
+ return w
41
+ end
42
+
43
+ def resolve(wabisabi)
44
+ days = []
45
+ section = []
46
+ days << section
47
+ wabisabi.each {|e|
48
+ if is_title?(e)
49
+ if 0 < section.size
50
+ section = []
51
+ days << section
52
+ end
53
+ end
54
+ section << e
55
+ }
56
+
57
+ @global_id = 0
58
+ ar = []
59
+ days.each {|section|
60
+ title = ''
61
+ title = section.shift if is_title?(section[0])
62
+ ar += tdiary_section(title, section)
63
+ }
64
+ ar
65
+ end
66
+
67
+ def encode_label(name) # used at act-toc.rb
68
+ if name.nil? || name.empty?
69
+ @global_id += 1
70
+ return @global_id.to_s
71
+ end
72
+
73
+ if /\A[A-Za-z0-9\-_:. ]+\z/ =~ name
74
+ name.gsub!(/[^A-Za-z0-9\-_]+/, '_')
75
+ name.squeeze!('_')
76
+ name.chomp!('_')
77
+ name.sub!(/\A_/, '')
78
+ name = 'a' + name if /\A[A-Za-z]/ !~ name
79
+ return name
80
+ end
81
+
82
+ if @emode_titlelink
83
+ name = name+'<span class="e"><br></span>' # adhoc
84
+ name = name.md5.base64
85
+ name.gsub!(/=/, '')
86
+ name.gsub!(/\+/, '-')
87
+ name.gsub!(/\//, '_')
88
+ return name
89
+ end
90
+
91
+ return name.md5hex
92
+ end
93
+
94
+ def self.get_title_name(e) # used at act-toc.rb
95
+ (1..e.length).each {|i|
96
+ if e[i].is_a?(String)
97
+ return e[i].to_s.strip
98
+ end
99
+ }
100
+ return ''
101
+ end
102
+
103
+ private
104
+
105
+ def is_title?(e)
106
+ e.is_a?(Array) && e[0] == :h2
107
+ end
108
+
109
+ def make_title_link(e)
110
+ return e if e.length < 2
111
+
112
+ name = TDiaryResolver.get_title_name(e)
113
+ label = encode_label(name)
114
+
115
+ url = @action.c_page_url
116
+ href = "#{url}#"+label
117
+
118
+ if (@titlelink || @emode_titlelink)
119
+ m = "��"
120
+ e.insert(1, [:a, {:class=>'label', :href=>href, :name=>label}, m])
121
+ return e
122
+ end
123
+
124
+ e.insert(1, {:id=>label})
125
+ e
126
+ end
127
+
128
+ def tdiary_section(title, section)
129
+ title = make_title_link(title)
130
+ return [
131
+ [:div, {:class=>'day'},
132
+ title,
133
+ [:div, {:class=>'body'},
134
+ [:div, {:class=>'section'},
135
+ section],
136
+ [:"!--", 'section']],
137
+ [:"!--", 'body']],
138
+ [:"!--", 'day']
139
+ ]
140
+ end
141
+ end
142
+ end
143
+
144
+ if $0 == __FILE__
145
+ require 'qwik/test-common'
146
+ $test = true
147
+ end
148
+
149
+ if defined?($test) && $test
150
+ class TestTDiaryResolver < Test::Unit::TestCase
151
+ include TestSession
152
+
153
+ def ok_t(e, s)
154
+ res = Qwik::TDiaryResolver.new(@config, @site, @action)
155
+ ok_eq(e, res.make_title_link(s))
156
+ end
157
+
158
+ def test_basic
159
+ res = session
160
+
161
+ res = Qwik::TDiaryResolver.new(@config, @site, @action)
162
+
163
+ Qwik::TDiaryResolver.instance_eval {
164
+ public :is_title?
165
+ public :encode_label
166
+ public :tdiary_section
167
+ public :make_title_link
168
+ }
169
+
170
+ # test_is_title?
171
+ ok_eq(true, res.is_title?([:h2, 't']))
172
+ ok_eq(false, res.is_title?([:h3, 't']))
173
+
174
+ # test_encode_label
175
+ ok_eq('1', res.encode_label(''))
176
+ ok_eq('2', res.encode_label(''))
177
+ ok_eq('t', res.encode_label('t'))
178
+ ok_eq('3', res.encode_label(''))
179
+
180
+ ok_eq('t_t', res.encode_label('t t'))
181
+ ok_eq('t_t', res.encode_label('t_t'))
182
+ ok_eq('t-t', res.encode_label('t-t'))
183
+ ok_eq('930149ca7573114b0341159c94380421', res.encode_label("t!"))
184
+
185
+ # test_tdiary_section
186
+ t = res.tdiary_section([:h2, 't'], 'section')
187
+ ok_eq([[:div, {:class=>'day'},
188
+ [:h2, {:id=>'t'}, 't'],
189
+ [:div, {:class=>'body'},
190
+ [:div, {:class=>'section'}, 'section'],
191
+ [:"!--", 'section']],
192
+ [:"!--", 'body']],
193
+ [:"!--", 'day']],
194
+ t)
195
+
196
+ ok_eq([:div, {:class=>'day'},
197
+ [:h2, {:id=>'t'}, 't'],
198
+ [:div, {:class=>'body'},
199
+ [:div, {:class=>'section'}, 'section']]],
200
+ t.remove_comment.get_single)
201
+
202
+ # test_make_title_link
203
+ res = session
204
+
205
+ ok_t([:h2, {:id=>'t'}, 't'], [:h2, 't'])
206
+
207
+ config = @site['_SiteConfig']
208
+ config.store(':titlelink:true')
209
+
210
+ ok_t([:h2, [:a, {:href=>"FrontPage.html#t", :name=>'t',
211
+ :class=>'label'}, "��"], 't'],
212
+ [:h2, 't'])
213
+
214
+ ok_t([:h2, [:a, {:name=>'8f03c3a6dbec1d0f1a5af60947b7b052',
215
+ :class=>'label',
216
+ :href=>"FrontPage.html#8f03c3a6dbec1d0f1a5af60947b7b052"},
217
+ "��"], "��"],
218
+ [:h2, "��"])
219
+ end
220
+
221
+ def test_emode
222
+ res = session
223
+
224
+ Qwik::TDiaryResolver.instance_eval {
225
+ public :encode_label
226
+ }
227
+
228
+ config = @site['_SiteConfig']
229
+ config.store(':emode_titlelink:true')
230
+ res = Qwik::TDiaryResolver.new(@config, @site, @action)
231
+ ok_eq('t', res.encode_label('t'))
232
+ ok_eq('zNC0vEuG7ZsGqzX0C5tyRQ', res.encode_label("t!"))
233
+ ok_eq('ZHQyWazgdpeYgxXBvfV-jA', res.encode_label("��"))
234
+
235
+ ok_t([:h2, [:a, {:href=>"FrontPage.html#t", :name=>'t',
236
+ :class=>'label'}, "��"], 't'],
237
+ [:h2, 't'])
238
+ ok_t([:h2, [:a, {:name=>'ZHQyWazgdpeYgxXBvfV-jA',
239
+ :class=>'label',
240
+ :href=>"FrontPage.html#ZHQyWazgdpeYgxXBvfV-jA"},
241
+ "��"], "��"],
242
+ [:h2, "��"])
243
+ end
244
+
245
+ def ok_res(e, wabisabi)
246
+ res = Qwik::TDiaryResolver.new(@config, @site, @action)
247
+ w = res.resolve(wabisabi).remove_comment
248
+ ok_eq(e, w)
249
+ end
250
+
251
+ def test_tdiary_resolve
252
+ res = session
253
+ ok_res([[:div, {:class=>'day'}, '',
254
+ [:div, {:class=>'body'}, [:div, {:class=>'section'}, []]]]],
255
+ '')
256
+ ok_res([[:div, {:class=>'day'},
257
+ [:h2, {:id=>'t'}, 't'],
258
+ [:div, {:class=>'body'}, [:div, {:class=>'section'}, []]]]],
259
+ [[:h2, 't']])
260
+ ok_res([[:div, {:class=>'day'},
261
+ [:h2, {:id=>'h2'},'h2'],
262
+ [:div, {:class=>'body'},
263
+ [:div, {:class=>'section'},
264
+ [[:p, 'text of h2'], [:h3, 'h3'], [:p, 'text of h3']]]]]],
265
+ [[:h2, 'h2'],
266
+ [:p, 'text of h2'],
267
+ [:h3, 'h3'],
268
+ [:p, 'text of h3']])
269
+ ok_res([[:div, {:class=>'day'},
270
+ [:h2, {:id=>'h2'},'h2'],
271
+ [:div, {:class=>'body'},
272
+ [:div, {:class=>'section'}, [[:p, 'text of h2']]]]],
273
+ [:div, {:class=>'day'},
274
+ [:h2, {:id=>'h2_2'},'h2 2'],
275
+ [:div, {:class=>'body'},
276
+ [:div, {:class=>'section'}, [[:p, 'text of h2 2']]]]]],
277
+ [[:h2, 'h2'],
278
+ [:p, 'text of h2'],
279
+ [:h2, 'h2 2'],
280
+ [:p, 'text of h2 2']])
281
+
282
+ # test_tdiary_resolve_with_titlelink
283
+ config = @site['_SiteConfig']
284
+ config.store(':titlelink:true')
285
+ ok_res([[:div, {:class=>'day'},
286
+ [:h2, [:a, {:name=>'t', :class=>'label',
287
+ :href=>"FrontPage.html#t"}, "��"], 't'],
288
+ [:div, {:class=>'body'}, [:div, {:class=>'section'}, []]]]],
289
+ [[:h2, 't']])
290
+ end
291
+ end
292
+ end