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,18 @@
1
+ # Copyright (C) 2009 AIST, 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-pathname'
7
+ require 'qwik/page-rrefs'
8
+
9
+ module Qwik
10
+ class Site
11
+ def rrefs(k = 'FronPage')
12
+ page = self[k]
13
+ return nil if page.nil?
14
+ page.rrefs = PageRRefs.new(@path.to_s, k) if page.rrefs.nil?
15
+ return page.rrefs
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,180 @@
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
+ require 'qwik/db-searchwords.rb'
8
+
9
+ module Qwik
10
+ class Site
11
+ COMMENT = /^#.*$/
12
+
13
+ =begin
14
+ def init_site_search
15
+ @search_words_db = SearchWordsDB.new(@path, @config)
16
+ end
17
+
18
+ def get_search_words
19
+ @search_words_db.get_normalized
20
+ end
21
+
22
+ def delete_search_word(word)
23
+ @search_words_db.delete(word)
24
+ end
25
+ =end
26
+
27
+ def search(query, obfuscate = true)
28
+ queries = search_parse_query(query)
29
+ # @search_words_db.put(queries)
30
+
31
+ all_snippet_length = 120
32
+ pre_snippet_length = all_snippet_length / queries.size / 2
33
+
34
+ ar = []
35
+ self.each {|page|
36
+ str = page.load
37
+ str = str.gsub(COMMENT, '')
38
+ str = wiki_to_string(str)
39
+ matched = true
40
+
41
+ mds = []
42
+ snippet = ""
43
+
44
+ queries.each {|query|
45
+ regexp = Regexp.new(Regexp.escape(query),
46
+ Regexp::IGNORECASE|Regexp::MULTILINE)
47
+ md = regexp.match(str)
48
+ if ! md
49
+ matched = false
50
+ break
51
+ else
52
+ mds.push(md)
53
+ end
54
+ }
55
+
56
+ if matched
57
+ snippet = create_snippet(mds)
58
+ snippet = MailAddress.obfuscate_str(snippet) if obfuscate
59
+ ar << [page.key, snippet]
60
+ end
61
+ }
62
+
63
+ ar
64
+ end
65
+
66
+ def search_parse_query(query)
67
+ return query.strip.split.map{|e| e.downcase }.uniq
68
+ end
69
+
70
+ private
71
+
72
+ def wiki_to_string(wiki)
73
+ tokens = Qwik::TextTokenizer.tokenize(wiki, true)
74
+ wabisabi = Qwik::TextParser.make_tree(tokens)
75
+ return wabisabi.flatten.select{|a| a.class == String}.join(" ")
76
+ end
77
+
78
+ def create_snippet(mds)
79
+ #sort as first hit keyword goes first
80
+ mds = mds.sort {|i, j| i.begin(0) <=> j.begin(0) }
81
+ max_width = 400
82
+
83
+ # merge snippets of each search key
84
+ #
85
+ # snip[s, e]
86
+ #|============|1st key|=============|
87
+ snip = [mds[0].begin(0), mds[0].end(0)]
88
+
89
+ mds[1..-1].each {|md|
90
+ #|=====|1st key|==...==|last key|========|a key|===..===|
91
+ # snip[s, e] ^
92
+ # |md.begin(0)
93
+ # <-------------------------.......----->
94
+ # max_width
95
+ # this is the length of bytes, not characters
96
+ if md.begin(0) < snip[0] + max_width
97
+ # extends snip end
98
+ # snip[s, e]
99
+ #|====|1st key|==...==|last key|========|a key|===..===|
100
+ snip[1] = md.end(0)
101
+ end
102
+ }
103
+
104
+ #all md(MatchData) has same input string
105
+ all_string = mds[0].string
106
+
107
+ snippet = all_string[snip[0]...snip[1]]
108
+ len = snippet.mb_length # character length
109
+ rest = (max_width - len) / 2
110
+ if 0 < rest
111
+ # we have shot snippet, adding additional strings
112
+ pre = all_string[0...snip[0]]
113
+ post = all_string[snip[1]..-1]
114
+
115
+ if rest < pre.size
116
+ pre = pre.mb_substring(-rest, pre.length)
117
+ end
118
+
119
+ if rest < post.size
120
+ post = post.mb_substring(0, rest)
121
+ end
122
+ snippet = pre + snippet + post
123
+ end
124
+
125
+ return snippet
126
+ end
127
+ end
128
+ end
129
+
130
+ if $0 == __FILE__
131
+ require 'qwik/test-common'
132
+ $test = true
133
+ end
134
+
135
+ if defined?($test) && $test
136
+ class TestSiteSearch < Test::Unit::TestCase
137
+ include TestSession
138
+
139
+ def test_dummy
140
+ end
141
+
142
+ def test_all
143
+ res = session
144
+
145
+ page = @site.create_new
146
+ page.store('This is a test.')
147
+ page = @site.create_new
148
+ page.store('This is a test, too.')
149
+
150
+ res = @site.search('test')
151
+ ok_eq([['1', 'This is a test.'],
152
+ ['2', 'This is a test, too.']], res)
153
+
154
+ # test_obfuscate
155
+ page.store('user@example.com')
156
+ res = @site.search('@')
157
+ is [["2", "user@e..."]], res
158
+
159
+ res = @site.search('@', false)
160
+ is [["2", "user@example.com"]], res
161
+ end
162
+
163
+ def test_skip_sharp
164
+ page = @site.create_new
165
+ page.store('This is a test.')
166
+ page = @site.create_new
167
+ page.store('# This is a test start with sharp.')
168
+ page = @site.create_new
169
+ page.store("This is a test which have `#' in a middle of line.")
170
+ page = @site.create_new
171
+ page.store('This is a test, too.')
172
+
173
+ res = @site.search('test')
174
+ ok_eq([["1", "This is a test."],
175
+ ["3", "This is a test which have `# ' in a middle of line."],
176
+ ["4", "This is a test, too."]], res)
177
+ end
178
+
179
+ end
180
+ end
@@ -0,0 +1,153 @@
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 Site
9
+ def last_modified
10
+ return self.map {|page|
11
+ page.mtime
12
+ }.max
13
+ end
14
+
15
+ # called from act-chronology
16
+ def timeline
17
+ @timeline = SiteTimeLine.new(self) unless defined? @timeline
18
+ return @timeline
19
+ end
20
+ end
21
+
22
+ class SiteTimeLine
23
+ def initialize(site)
24
+ @site = site
25
+ @times = nil
26
+ @days = nil
27
+ @site_min = nil
28
+ @site_max = nil
29
+ @page_min = nil
30
+ @page_max = nil
31
+ @pages_history = nil
32
+ @site_duration = nil
33
+ @site_last_modified = nil
34
+ end
35
+ attr_reader :times, :days
36
+ attr_reader :site_min, :site_max, :page_min, :page_max
37
+ attr_reader :pages_history, :site_duration
38
+
39
+ def calc_history
40
+ if_sites_update? {
41
+ @times, @days, @page_min, @page_max, @site_min, @site_max,
42
+ @pages_history, @site_duration = calc_history_internal(@site)
43
+ }
44
+ end
45
+
46
+ def if_sites_update?
47
+ # Check last update from pages
48
+ last_modified = @site.last_modified
49
+ return if last_modified.nil? # No page.
50
+ if @site_last_modified.nil? || @site_last_modified < last_modified
51
+ yield
52
+ end
53
+ @site_last_modified = last_modified
54
+ end
55
+
56
+ def calc_history_internal(site)
57
+ keys = site.map {|page| page.key }
58
+ return nil if keys.empty?
59
+
60
+ times = Hash.new {|h, k| h[k] = []}
61
+ days = Hash.new {|h, k| h[k] = []}
62
+ site_min = nil # FIXME: site_min should be cached.
63
+ site_max = nil
64
+ page_min = {} # FIXME: page_min should be cached.
65
+ page_max = {}
66
+
67
+ site.backupdb.each {|key, v, time|
68
+ next if times[key].nil? # Calc only for existing pages.
69
+ times[key] << time
70
+ days[time.ymd_s] << [key, time]
71
+ site_min = time if site_min.nil? || time < site_min
72
+ site_max = time if site_max.nil? || site_max < time
73
+ page_min[key] = time if page_min[key].nil? || time < page_min[key]
74
+ page_max[key] = time if page_max[key].nil? || page_max[key] < time
75
+ }
76
+
77
+ page_min_days = Hash.new {|h, k| h[k] = []}
78
+ page_min.each {|key, time|
79
+ page_min_days[time.ymd_s] << [key, time]
80
+
81
+
82
+
83
+ }
84
+
85
+
86
+ # Calc history from older to newer.
87
+ pages_history = page_min.to_a.sort {|a, b|
88
+ a[1] <=> b[1]
89
+ }.map {|a|
90
+ a[0]
91
+ }
92
+
93
+ # Count second when the page is created to the last update.
94
+ site_max = Time.at(1) if site_max.nil?
95
+ site_min = Time.at(0) if site_min.nil?
96
+
97
+ site_duration = site_max - site_min
98
+
99
+ return times, days, page_min, page_max, site_min, site_max, pages_history, site_duration
100
+ end
101
+
102
+ def get_keys_by_day(ymd)
103
+ day = @days[ymd]
104
+ return nil if day.empty?
105
+ day = day.sort_by {|key, time| time }
106
+ keys = day.map {|key, time| key }.uniq
107
+ return keys
108
+ end
109
+ end
110
+ end
111
+
112
+ if $0 == __FILE__
113
+ require 'qwik/test-common'
114
+ $test = true
115
+ end
116
+
117
+ if defined?($test) && $test
118
+ class TestSiteTimeLine < Test::Unit::TestCase
119
+ include TestSession
120
+
121
+ def test_all
122
+ page = @site.create_new
123
+ page.put_with_time('* t1', 0) # store the first
124
+ page.put_with_time('* t2', 1) # store the second
125
+
126
+ # test_last_modified
127
+ eq(1, @site.last_modified.to_i)
128
+
129
+ tl = @site.timeline
130
+
131
+ # test_calc_history
132
+ tl.calc_history
133
+ #pp tl
134
+
135
+ # test_times
136
+ times = tl.times
137
+ eq ['1'], times.keys
138
+ eq 0, times['1'][0].to_i
139
+ eq 1, times['1'][1].to_i
140
+
141
+ # test_days
142
+ days = tl.days
143
+ day = days['19700101']
144
+ eq [['1', Time.at(0)], ['1', Time.at(1)]], day
145
+
146
+ # test_site_min, page_min, pages_history, site_duration
147
+ eq Time.at(0), tl.site_min
148
+ eq({'1'=>Time.at(0)}, tl.page_min)
149
+ eq ['1'], tl.pages_history
150
+ assert(0 < tl.site_duration)
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,189 @@
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
+ require 'uri'
6
+
7
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
8
+
9
+ module Qwik
10
+ class Site
11
+ def host_url
12
+ host_url = self.siteconfig['siteurl']
13
+ if ! host_url.nil? && host_url.empty?
14
+ host_url = @config.public_url
15
+ end
16
+ uri = URI(host_url)
17
+ uri.path = ""
18
+ return uri.to_s
19
+ end
20
+
21
+ def site_url
22
+ siteurl = self.siteconfig['siteurl']
23
+ return siteurl if ! siteurl.nil? && ! siteurl.empty?
24
+ return "#{@config.public_url}#{self.url_path}"
25
+ end
26
+
27
+ def page_url(k)
28
+ return "#{self.site_url}#{k}.html"
29
+ end
30
+
31
+ def url_path
32
+ siteurl = self.siteconfig['siteurl']
33
+ return '' if siteurl.nil?
34
+ return '' if ! siteurl.empty? || self.top_site?
35
+ return "#{@sitename}/"
36
+ end
37
+
38
+ def ml_address
39
+ siteml = self.siteconfig['siteml']
40
+ return siteml if ! siteml.nil? && ! siteml.empty?
41
+ return "#{@sitename}@#{@config.ml_domain}"
42
+ end
43
+
44
+ def title
45
+ sitetitle = self.siteconfig['sitename']
46
+ if ! sitetitle.nil? && sitetitle.empty?
47
+ return '' if @config.test
48
+ sitetitle = self.site_url.sub(%r|\Ahttp://|, "").sub(%r|/\z|, "")
49
+ #sitetitle = sitetitle.sub(%r|\Awww\.|, "")
50
+ end
51
+ return sitetitle
52
+ end
53
+
54
+ def get_page_title(pagename)
55
+ page = self[pagename]
56
+ return '' if page.nil?
57
+ page_title = page.get_title
58
+
59
+ sitetitle = self.title
60
+ if ! sitetitle.empty?
61
+ if self.siteconfig['page_title_first'] == 'true'
62
+ return "#{page_title} - #{sitetitle}"
63
+ else
64
+ return "#{sitetitle} - #{page_title}"
65
+ end
66
+ end
67
+
68
+ return page_title
69
+ end
70
+
71
+ def top_site?
72
+ return (@sitename == @config.default_sitename)
73
+ end
74
+ end
75
+ end
76
+
77
+ if $0 == __FILE__
78
+ require 'qwik/test-module-session'
79
+ require 'qwik/farm'
80
+ $test = true
81
+ end
82
+
83
+ if defined?($test) && $test
84
+ class TestSiteUrl < Test::Unit::TestCase
85
+ include TestSession
86
+
87
+ def test_url_test
88
+ site = @site
89
+ page = site.create_new
90
+ eq 'http://example.com', site.host_url
91
+ eq 'http://example.com/test/', site.site_url
92
+ eq 'http://example.com/test/1.html', site.page_url('1')
93
+ eq 'test@q.example.com', site.ml_address
94
+ t_without_testmode {
95
+ eq 'example.com/test', site.title
96
+ eq '1 - example.com/test', site.get_page_title('1')
97
+ }
98
+
99
+ siteconfig = site.create('_SiteConfig')
100
+ siteconfig.store(":sitename:t\n")
101
+ t_without_testmode {
102
+ eq 't', site.title
103
+ eq '1 - t', site.get_page_title('1')
104
+ }
105
+ end
106
+
107
+ def test_get_page_title
108
+ site = @site
109
+ page = site.create_new
110
+ t_without_testmode {
111
+ eq '1 - example.com/test', site.get_page_title('1')
112
+ }
113
+
114
+ siteconfig = site.create('_SiteConfig')
115
+ siteconfig.store(":page_title_first:true\n")
116
+ t_without_testmode {
117
+ eq '1 - example.com/test', site.get_page_title('1')
118
+ }
119
+
120
+ siteconfig.store(":page_title_first:false\n")
121
+ t_without_testmode {
122
+ eq 'example.com/test - 1', site.get_page_title('1')
123
+ }
124
+ end
125
+
126
+ def test_url_top_site
127
+ site = @memory.farm.get_top_site
128
+ page = site.create_new
129
+ eq true, site.top_site?
130
+ eq 'http://example.com', site.host_url
131
+ eq 'http://example.com/', site.site_url
132
+ eq 'http://example.com/1.html', site.page_url('1')
133
+ eq 'www@q.example.com', site.ml_address
134
+ t_without_testmode {
135
+ eq 'example.com', site.title
136
+ eq '1 - example.com', site.get_page_title('1')
137
+ }
138
+ end
139
+
140
+ def test_url_siteurl
141
+ page = @site.create_new
142
+ t_with_siteurl {
143
+ eq 'http://example.org', @site.host_url
144
+ eq 'http://example.org/q/', @site.site_url
145
+ eq 'http://example.org/q/1.html', @site.page_url('1')
146
+ eq 'test@q.example.com', @site.ml_address # FIXME: Umm.
147
+ siteconfig = @site['_SiteConfig']
148
+ siteconfig.add(":siteml:info@example.org\n")
149
+ eq 'info@example.org', @site.ml_address
150
+ t_without_testmode {
151
+ eq 'example.org/q', @site.title
152
+ eq '1 - example.org/q', @site.get_page_title('1')
153
+ }
154
+ }
155
+ end
156
+
157
+ def test_https
158
+ site = @site
159
+ page = site.create_new
160
+ siteconfig = site.create('_SiteConfig')
161
+ siteconfig.store(":siteurl:https://example.net/\n")
162
+ eq 'https://example.net', site.host_url
163
+ eq 'https://example.net/', site.site_url
164
+ eq 'https://example.net/1.html', site.page_url('1')
165
+ eq 'test@q.example.com', site.ml_address # FIXME: Umm.
166
+ siteconfig.add(":siteml:info@example.net\n")
167
+ eq 'info@example.net', site.ml_address
168
+ t_without_testmode {
169
+ eq 'https://example.net', site.title
170
+ eq '1 - https://example.net', site.get_page_title('1')
171
+ }
172
+ end
173
+
174
+ def test_url_example_org_with_path
175
+ t_with_path {
176
+ site = @site
177
+ page = site.create_new
178
+ eq 'http://www.example.org', site.host_url
179
+ eq 'http://www.example.org/qwik/test/', site.site_url
180
+ eq 'http://www.example.org/qwik/test/1.html', site.page_url('1')
181
+ eq 'test@q.example.com', site.ml_address
182
+ t_without_testmode {
183
+ eq 'www.example.org/qwik/test', site.title
184
+ eq '1 - www.example.org/qwik/test', site.get_page_title('1')
185
+ }
186
+ }
187
+ end
188
+ end
189
+ end