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,112 @@
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/wabisabi-template'
7
+
8
+ module Qwik
9
+ class Action
10
+ REPLACE_TOC = {
11
+ :h2=>[:ol, 1],
12
+ :h3=>[:ol, 2],
13
+ :h4=>[:ol, 3],
14
+ :h5=>[:ol, 4],
15
+ :h6=>[:ol, 5],
16
+ }
17
+
18
+ # FIXME: Use tokenes instead of tree.
19
+ def toc_inside
20
+ page = @site[@req.base]
21
+ return nil if page.nil?
22
+ wabisabi = page.get_body_tree
23
+ wabisabi ||= []
24
+
25
+ res = TDiaryResolver.new(@config, @site, self)
26
+
27
+ tokens = []
28
+ wabisabi.each_tag(:h2, :h3, :h4, :h5, :h6) {|w|
29
+ tag = w.element_name
30
+ head = REPLACE_TOC[tag]
31
+ name = TDiaryResolver.get_title_name(w)
32
+ if tag == :h2
33
+ label = res.encode_label(name)
34
+ link = [[:a, {:href=>"#"+label}, w.text]]
35
+ w = head + [link]
36
+ else
37
+ w = head + [w.text]
38
+ end
39
+ tokens << w
40
+ }
41
+ return nil if tokens.length == 0
42
+
43
+ w = TextParser.make_tree(tokens).get_single
44
+ w = [[:h5, _('Contents')],
45
+ [:div, {:id=>'tocinside'}, w]]
46
+ return w
47
+ end
48
+
49
+ def plg_toc # deleted
50
+ return nil
51
+ end
52
+ end
53
+ end
54
+
55
+ if $0 == __FILE__
56
+ require 'qwik/test-common'
57
+ $test = true
58
+ end
59
+
60
+ if defined?($test) && $test
61
+ class TestActTOC < Test::Unit::TestCase
62
+ include TestSession
63
+
64
+ def test_toc
65
+ t_add_user
66
+ page = @site.create_new
67
+
68
+ page.store("{{toc}}
69
+ *t1
70
+ *t2")
71
+ session('/test/1.html')
72
+ ok_in([[:h5, 'Contents'],
73
+ [:div, {:id=>'tocinside'},
74
+ [:ol, [:li, [:a, {:href=>"#t1"}, 't1']],
75
+ [:li, [:a, {:href=>"#t2"}, 't2']]]]],
76
+ "//div[@class='toc']")
77
+
78
+ # test with []
79
+ page.store("{{toc}}
80
+ *t1
81
+ **t2")
82
+ session('/test/1.html')
83
+ ok_in([[:h5, 'Contents'],
84
+ [:div, {:id=>'tocinside'},
85
+ [:ol, [:li, [:a, {:href=>"#t1"}, 't1']], [:ol, [:li, 't2']]]]],
86
+ "//div[@class='toc']")
87
+
88
+ # test with []
89
+ page.store("{{toc}}
90
+ *[hoge]hhh")
91
+ session('/test/1.html')
92
+ ok_in([[:h5, 'Contents'],
93
+ [:div,
94
+ {:id=>'tocinside'},
95
+ [:ol, [:li, [:a, {:href=>"#815417267f76f6f460a4a61f9db75fdb"}, "[hoge]hhh"]]]]],
96
+ "//div[@class='toc']")
97
+
98
+
99
+ # test with []
100
+ page.store("{{toc}}
101
+ *t1
102
+ ***[hoge]hhh")
103
+ session('/test/1.html')
104
+ ok_in([[:h5, 'Contents'],
105
+ [:div,
106
+ {:id=>'tocinside'},
107
+ [:ol, [:li, [:a, {:href=>"#t1"}, 't1']], [:ol, [:ol, [:li, "[", 'hoge', "]", 'hhh']]]]]],
108
+ "//div[@class='toc']")
109
+
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,198 @@
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
+ begin
7
+ require 'qwik/typekey'
8
+ $have_typekey = true
9
+ rescue LoadError
10
+ $have_typekey = false
11
+ end
12
+
13
+ module Qwik
14
+ class Action
15
+ def pre_act_typekey
16
+ if @req.query.length == 0
17
+ return typekey_redirect_to_typekey
18
+ end
19
+
20
+ sitetoken = typekey_get_sitetoken
21
+ return typekey_error_no_sitetoken if sitetoken.nil?
22
+
23
+ tk = TypeKey.new(sitetoken, '1.1')
24
+ key = typekey_get_publickey(tk)
25
+
26
+ email = @req.query['email']
27
+ name = @req.query['name']
28
+ nick = @req.query['nick']
29
+ ts = @req.query['ts'] # time stamp
30
+ sig = @req.query['sig']
31
+ # <email>::<name>::<nick>::<ts>::<site-token>
32
+ begin
33
+ tk.verify(email, name, nick, ts, sig)
34
+ rescue VerifyFailed
35
+ return c_notice(_('Verify failed.')) {
36
+ _('Verify failed.')
37
+ }
38
+ rescue TimeOutError
39
+ return c_notice(_('Time out.')) {
40
+ _('Time out.')
41
+ }
42
+ end
43
+
44
+ sid = session_store(email)
45
+ @res.set_cookie('sid', sid) # Set Session id by cookie
46
+
47
+ return c_notice(_('Login')+' '+_('Success'), 'FrontPage.html') {
48
+ [:p, [:a, {:href=>'FrontPage.html'}, _('Go next')]]
49
+ }
50
+ end
51
+
52
+ def typekey_error_no_sitetoken
53
+ return c_nerror(_('Cannot use.')) {
54
+ [:p, _('There is no site token for TypeKey.')]
55
+ }
56
+ end
57
+
58
+ def typekey_redirect_to_typekey
59
+ sitetoken = typekey_get_sitetoken
60
+ return typekey_error_no_sitetoken if sitetoken.nil?
61
+
62
+ tk = TypeKey.new(sitetoken, '1.1')
63
+
64
+ # http://example.com/test/.typekey
65
+ ret_url = c_relative_to_absolute('.typekey')
66
+ url = tk.get_login_url(ret_url, true)
67
+ return c_nredirect('Go TypeKey', url) # Redirect to TypeKey
68
+ end
69
+
70
+ TYPEKEY_SITETOKEN_FILE = 'typekey-sitetoken.txt'
71
+
72
+ def typekey_get_sitetoken
73
+ file = @config.etc_dir.path+TYPEKEY_SITETOKEN_FILE
74
+ return nil if ! file.exist?
75
+ return file.read.chomp
76
+ end
77
+
78
+ def typekey_get_publickey(tk)
79
+ # Make cache timeout to 100 years. Only for test.
80
+ #tk.key_cache_timeout = 60 * 60 * 24 * 365 * 100 # 100 years
81
+ tk.key_cache_timeout = 60 * 60 * 24 * 365 * 2 # 2 years
82
+ cache_path = @config.cache_dir.path+'typekey-publickey.txt'
83
+ tk.key_cache_path = cache_path.to_s
84
+ return tk.get_key
85
+ end
86
+ end
87
+ end
88
+
89
+ if $0 == __FILE__
90
+ require 'qwik/test-common'
91
+ $test = true
92
+ end
93
+
94
+ if defined?($test) && $test
95
+ class TestActTypekey < Test::Unit::TestCase
96
+ include TestSession
97
+
98
+ def test_act_typekey
99
+ t_add_user
100
+ t_site_open # OPEN site
101
+
102
+ res = session
103
+
104
+ # test_get_sitetoken
105
+ sitetoken = @action.typekey_get_sitetoken
106
+ return if sitetoken.nil? # Stop test here.
107
+ eq 20, sitetoken.length
108
+
109
+ # See the FrontPage.
110
+ res = session '/test/'
111
+ ok_title('FrontPage')
112
+
113
+ # See the Login page.
114
+ res = session('/test/.login') {|req|
115
+ req.cookies.clear
116
+ }
117
+ ok_title('Login')
118
+
119
+ # Redirect to TypeKey login page.
120
+ res = session '/test/.typekey'
121
+ eq 302, @res.status
122
+ assert_match(%r|\Ahttps://www.typekey.com/t/typekey/login|,
123
+ @res['Location'])
124
+ meta = @res.body.get_path('//meta[2]')
125
+ assert_match(%r|url=https://www.typekey.com/t/typekey/login|,
126
+ meta[1][:content])
127
+
128
+ # The client returned from the TypeKey login page.
129
+ begin
130
+ res = session '/test/.typekey?&ts=1111111111&email=guest@example.com&name=guestexample&nick=guest&sig=ttttttttttttttttttttttttttt=:LLLLLLLLLLLLLLLLLLLLLLLLLLL='
131
+ ok_title('Verify failed.')
132
+ rescue => e
133
+ p 'failed.', e
134
+ end
135
+
136
+ begin
137
+ res = session '/test/.typekey?&ts=1110026410&email=2005@eto.com&name=etocom&nick=eto&sig=tRUcIO6haAHv/vQSguPk2EijTrc=:LCUvoHCXFLaeO8SoldCKmFr2Guo='
138
+ ok_title('Time out.')
139
+ rescue => e
140
+ p 'failed.', e
141
+ end
142
+ end
143
+
144
+ def nutypekey_get_sitetoken
145
+ file = @config.etc_dir.path+Qwik::Action::TYPEKEY_SITETOKEN_FILE
146
+ return file.read.chomp
147
+ end
148
+
149
+ def test_typekey
150
+ return if $0 != __FILE__ # just only for unit test.
151
+ return if ! $have_typekey
152
+
153
+ res = session
154
+
155
+ sitetoken = 't'
156
+ tk = TypeKey.new(sitetoken, '1.1')
157
+ tk.key_cache_timeout = 60 * 60 * 24 * 365 * 100 # 100years
158
+ tk.key_cache_path = (@config.cache_dir.path+'typekey-publickey.txt').to_s
159
+
160
+ return_url = 'http://example.com/.typekey'
161
+ eq 'https://www.typekey.com/t/typekey/login?t=t&_return=http://example.com/.typekey&v=1.1', tk.get_login_url(return_url)
162
+ eq 'https://www.typekey.com/t/typekey/login?t=t&need_email=1&_return=http://example.com/.typekey&v=1.1', tk.get_login_url(return_url, true)
163
+ eq 'https://www.typekey.com/t/typekey/logout?_return=http://example.com/.typekey', tk.get_logout_url(return_url)
164
+
165
+ begin
166
+ key = tk.get_key
167
+ eq ['p', 'q', 'pub_key', 'g'], key.keys
168
+ rescue
169
+ p 'failed'
170
+ end
171
+ end
172
+
173
+ def test_verify
174
+ return if $0 != __FILE__ # just only for unit test.
175
+ return if ! $have_typekey
176
+
177
+ res = session
178
+ sitetoken = @action.typekey_get_sitetoken
179
+ tk = TypeKey.new(sitetoken, '1.1')
180
+ tk.key_cache_timeout = 60 * 60 * 24 * 365 * 100 # 100years
181
+ tk.key_cache_path = (@config.cache_dir.path+'typekey-publickey.txt').to_s
182
+
183
+ ts = '1111111111'
184
+ email = 'guest@example.com'
185
+ name = 'guestexample'
186
+ nick = 'guest'
187
+ sig = 'ttttttttttttttttttttttttttt=:LLLLLLLLLLLLLLLLLLLLLLLLLLL='
188
+
189
+ begin
190
+ assert_raise(VerifyFailed){
191
+ result = tk.verify(email, name, nick, ts, sig)
192
+ }
193
+ rescue => e
194
+ p 'failed', e
195
+ end
196
+ end
197
+ end
198
+ end
@@ -0,0 +1,94 @@
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
+ # Under construction.
6
+
7
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
8
+
9
+ module Qwik
10
+ class Action
11
+ # ==============================
12
+ def notyet_plg_calendar
13
+ return 'calendar'
14
+ end
15
+
16
+ # ==============================
17
+ def notyet_plg_draw
18
+ return [:div,
19
+ [:'v:line', {:from=>'0, 100', :to=>'200, 200'}, '']]
20
+ end
21
+
22
+ # ==============================
23
+ def notyet_plg_extlink
24
+ w = []
25
+ w << [:script, {:type=>'text/javascript',
26
+ :src=>'.theme/ap/ArekorePopup.js'}, '']
27
+ w << [:script, {:type=>'text/javascript'}, '
28
+ AP.launch;
29
+ ']
30
+ return []
31
+ end
32
+
33
+ # ==============================
34
+ # 'Go Back to Work.' plugin
35
+ # Inspired from http://www.marktaw.com/getbacktowork.htm
36
+ def notyet_plg_go_back_to_work
37
+ return [:strong, 'hello, world!']
38
+ end
39
+
40
+ def notyet_ext_go_back_to_work
41
+ c_notice('hello, world!'){'hi, there.'}
42
+ end
43
+
44
+ # ==============================
45
+ def notyet_ext_print
46
+ ext_html # call this first.
47
+ return c_nerror('not yet')
48
+ end
49
+ end
50
+ end
51
+
52
+ if $0 == __FILE__
53
+ require 'qwik/test-common'
54
+ $test = true
55
+ end
56
+
57
+ if defined?($test) && $test
58
+ class TestActTmp < Test::Unit::TestCase
59
+ include TestSession
60
+
61
+ def notyet_test_plg_calendar
62
+ end
63
+
64
+ def notyet_test_plg_draw
65
+ end
66
+
67
+ def notyet_test_extlink
68
+ ok_wi([], '{{extlink}}')
69
+ end
70
+
71
+ def test_gbtw
72
+ t_add_user
73
+
74
+ res = session
75
+
76
+ page = @site.create_new
77
+ page.store('{{go_back_to_work}}')
78
+ res = session('/test/1.html')
79
+ #ok_xp({:action=>'1.go_back_to_work', :method=>'POST'}, 'div[@class='main']')
80
+
81
+ res = session('POST /test/1.go_back_to_work?work=n&style=0')
82
+ #assert_match(/ ''\[\[n\]\]'' : m\n\{\{hcomment\}\}/, page.load)
83
+ end
84
+
85
+ def test_ext_print
86
+ t_add_user
87
+ page = @site.create_new
88
+ page.store('t')
89
+ res = session('/test/1.html')
90
+ ok_xp([:div, {:class=>'body'}, [:div, {:class=>'section'}, [[:p, 't']]]],
91
+ "//div[@class='body']")
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,321 @@
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
+ D_PluginWebService = {
10
+ :dt => 'Web service plugins',
11
+ :dd => 'You can use several external Web services.',
12
+ :dc => '
13
+ * Hatena Point plugin
14
+ {{hatena_point(eto)}}
15
+ You can embed hatena point tag.
16
+ * Trackfeed plugin
17
+ You can use trackfeed by this plugin.
18
+ {{trackfeed(yourid)}}
19
+ * Subscribe Bloglines plugin
20
+ You can show subscribe bloglines button.
21
+ {{sub_bloglines}}
22
+ {{sub_bloglines}}
23
+
24
+ You can write a specific URL in the argument.
25
+ {{sub_bloglines("http://www.ruby-lang.org/")}}
26
+ {{sub_bloglines("http://www.ruby-lang.org/")}}
27
+ * E Words plugin
28
+ You can show words description.
29
+ {{e_words}}
30
+ {{e_words}}
31
+ * Google AdSense plugin
32
+ You can show an ad by Google AdSense.
33
+ {{google_ad}}
34
+ {{google_ad}}
35
+ {{google_ad_button}}
36
+ {{google_ad_button}}
37
+ You can select from the two sizes.
38
+ There is no way to use another size for now.
39
+ * Show translate link plugin
40
+ You can show an translation link.
41
+ {{translate_ej}}
42
+ Specify translate English to Japanese link.
43
+ {{translate_je}}
44
+ Specify translate Japanese to English link.
45
+ '
46
+ }
47
+
48
+ D_PluginWebService_ja = {
49
+ :dt => 'Web�T�[�r�X�E�v���O�C��',
50
+ :dd => 'Web��̊e��T�[�r�X�𗘗p����v���O�C���ł��B',
51
+ :dc => '
52
+ * �͂Ăȃ|�C���g�E�v���O�C��
53
+ {{hatena_point(eto)}}
54
+ �͂Ăȃ|�C���g(�����K)�̃^�O�𖄍��߂܂��B
55
+ * Trackfeed�v���O�C��
56
+ �g���b�N�t�B�[�h�𖄍��߂܂��B
57
+ {{trackfeed(yourid)}}
58
+ * Bloglines�u�ǃv���O�C��
59
+ Bloglines�ōu�ǂ��郊���N��\�����܂��B
60
+ {{sub_bloglines}}
61
+ {{sub_bloglines}}
62
+
63
+ �����URL���w�肷�邱�Ƃ��ł��܂��B
64
+ {{sub_bloglines("http://www.ruby-lang.org/")}}
65
+ {{sub_bloglines("http://www.ruby-lang.org/")}}
66
+ * E Words�v���O�C��
67
+ �p���`��\�������邱�Ƃ��ł��܂��B
68
+ {{e_words}}
69
+ {{e_words}}
70
+ * Google AdSense�v���O�C��
71
+ Google AdSense�𖄍��߂܂��B
72
+ {{google_ad}}
73
+ {{google_ad}}
74
+ {{google_ad_button}}
75
+ {{google_ad_button}}
76
+ ���ނ̃T�C�Y����I�ׂ܂��B
77
+ ����ȊO�̃T�C�Y�́A���݂͖��Ή��ƂȂ��Ă��܂��B
78
+ * �|��v���O�C��
79
+ �|��y�[�W�ɔ�ԃ����N��\�����܂��B
80
+ You can show an translation link.
81
+ {{translate_ej}}
82
+ �p�ꂩ����{��֖|�󂷂�B
83
+ {{translate_je}}
84
+ ���{�ꂩ��p��֖|�󂷂�B
85
+ '
86
+ }
87
+
88
+ # ========== hatena point
89
+ def plg_hatena_point(hatena_account)
90
+ page = @site[@req.base]
91
+ url = c_relative_to_absolute(page.url)
92
+ rdf =[:'rdf:RDF',
93
+ {:'xmlns:rdf'=>'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
94
+ :'xmlns:foaf'=>'http://xmlns.com/foaf/0.1/'},
95
+ [:'rdf:Description',
96
+ {:'rdf:about'=>url},
97
+ [:'foaf:maker',
98
+ {:'rdf:parseType'=>'Resource'},
99
+ [:'foaf:holdsAccount',
100
+ [:'foaf:OnlineAccount',
101
+ {:'foaf:accountName'=>hatena_account},
102
+ [:'foaf:accountServiceHomepage',
103
+ {:'rdf:resource'=>'http://www.hatena.ne.jp/'}]]]]]]
104
+ return [:span, {:class=>'hatena_point'}, rdf]
105
+ end
106
+
107
+ # ========== trackfeed
108
+ def plg_trackfeed(id)
109
+ return unless /\A[0-9a-f]+\z/ =~ id
110
+ script = [:script, {:src=>"http://trackfeed.com/usr/#{id}.js"}, '']
111
+ return script
112
+ end
113
+
114
+ # ========== Bloglines
115
+ def plg_sub_bloglines(url=nil, icon='modern4')
116
+ return unless /\A[a-z0-9]+\z/ =~ icon
117
+ url = @site.site_url if url.nil?
118
+ button = [:a, {:href=>"http://www.bloglines.com/sub/#{url}"},
119
+ [:img, {:src=>"http://www.bloglines.com/images/sub_#{icon}.gif",
120
+ :border=>'0', :alt=>'subscribe Bloglines'}]]
121
+ return button
122
+ end
123
+
124
+ # ========== E Words
125
+ def plg_e_words
126
+ return [:script, {:type=>'text/javascript',
127
+ :src=>'http://e-words.jp/embed.x'}, '']
128
+ end
129
+
130
+ # ========== Google AdSense
131
+ def plg_google_ad(id=nil)
132
+ id ||= 'pub-5746941487859743'
133
+ str = <<'EOT'
134
+
135
+ google_ad_client = "#{id}";
136
+ google_alternate_color = 'eeeeee';
137
+ google_ad_width = 120;
138
+ google_ad_height = 240;
139
+ google_ad_format = '120x240_as';
140
+ google_ad_channel ='2257701812';
141
+ google_ad_type = 'text_image';
142
+ google_color_border = 'ffffff';
143
+ google_color_bg = 'ffffff';
144
+ google_color_link = '00cccc';
145
+ google_color_url = '00cc66';
146
+ google_color_text = '000000';
147
+ EOT
148
+ return google_ad(str)
149
+ end
150
+
151
+ def plg_google_ad_button(id=nil)
152
+ id ||= 'pub-5746941487859743'
153
+ str = <<'EOT'
154
+
155
+ google_ad_client = "#{id}";
156
+ google_alternate_color = 'eeeeee';
157
+ google_ad_width = 125;
158
+ google_ad_height = 125;
159
+ google_ad_format = '125x125_as';
160
+ google_ad_channel ='2257701812';
161
+ google_ad_type = 'text_image';
162
+ google_color_border = 'ffffff';
163
+ google_color_bg = 'ffffff';
164
+ google_color_link = '00cccc';
165
+ google_color_url = '00cc66';
166
+ google_color_text = '000000';
167
+ EOT
168
+ return google_ad(str)
169
+ end
170
+
171
+ def google_ad(str)
172
+ str << '//'
173
+ return [:div, {:style=>'text-align: center;'},
174
+ [:script, {:type=>'text/javascript'}, [:'!--', str]],
175
+ [:script, {:type=>'text/javascript',
176
+ :src=>'http://pagead2.googlesyndication.com/pagead/show_ads.js'},
177
+ '']]
178
+ end
179
+
180
+ # ========== Excite Translate
181
+ def plg_translate_ej(msg=nil)
182
+ return plg_translate('ej', msg)
183
+ end
184
+
185
+ def plg_translate_je(msg=nil)
186
+ return plg_translate('je', msg)
187
+ end
188
+
189
+ def plg_translate(lang, message=nil)
190
+ if lang == 'ej'
191
+ lp = 'ENJA'
192
+ elsif lang == 'je'
193
+ lp = 'JAEN'
194
+ else
195
+ return nil
196
+ end
197
+
198
+ page = @site[@req.base]
199
+ return if page.nil?
200
+ full_url = c_relative_to_absolute(page.url)
201
+ #base = 'http://www.excite.co.jp/world/english/web/'
202
+ base = 'http://www.excite.co.jp/world/english/web/proceeding/'
203
+ url = "#{base}?wb_lp=#{lp}&wb_url=#{full_url}"
204
+
205
+ if message.nil?
206
+ message = 'translate'
207
+ if lang == 'ej'
208
+ message += ' (e->j)'
209
+ elsif lang == 'je'
210
+ message += ' (j->e)'
211
+ end
212
+ end
213
+
214
+ e = [:a, {:href=>url}, message]
215
+ return e
216
+ end
217
+ end
218
+ end
219
+
220
+ if $0 == __FILE__
221
+ require 'qwik/test-common'
222
+ require 'qwik/wabisabi-format-xml'
223
+ $test = true
224
+ end
225
+
226
+ if defined?($test) && $test
227
+ class TestActWebService < Test::Unit::TestCase
228
+ include TestSession
229
+
230
+ def test_plg_hatena_point
231
+ t_add_user
232
+ page = @site.create_new
233
+ page.store('{{hatena_point(a)}}')
234
+ res = session('/test/1.html')
235
+ span = res.body.get_path("//span[@class='hatena_point']")
236
+ rdf = span[2]
237
+ ok_eq([:'rdf:RDF',
238
+ {:'xmlns:rdf'=>'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
239
+ :'xmlns:foaf'=>'http://xmlns.com/foaf/0.1/'},
240
+ [:'rdf:Description',
241
+ {:'rdf:about'=>'http://example.com/test/1.html'},
242
+ [:'foaf:maker',
243
+ {:'rdf:parseType'=>'Resource'},
244
+ [:'foaf:holdsAccount',
245
+ [:'foaf:OnlineAccount',
246
+ {:'foaf:accountName'=>'a'},
247
+ [:'foaf:accountServiceHomepage',
248
+ {:'rdf:resource'=>'http://www.hatena.ne.jp/'}]]]]]],
249
+ rdf)
250
+
251
+ =begin
252
+ <rdf:RDF
253
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
254
+ xmlns:foaf='http://xmlns.com/foaf/0.1/'>
255
+ <rdf:Description
256
+ rdf:about="�G���g���[��Permalink ���邢�̓E�F�u�T�C�g��URL">
257
+ <foaf:maker rdf:parseType='Resource'>
258
+ <foaf:holdsAccount>
259
+ <foaf:OnlineAccount
260
+ foaf:accountName="���Ȃ��̂͂ĂȃA�J�E���g��">
261
+ <foaf:accountServiceHomepage
262
+ rdf:resource='http://www.hatena.ne.jp/' />
263
+ </foaf:OnlineAccount>
264
+ </foaf:holdsAccount>
265
+ </foaf:maker>
266
+ </rdf:Description>
267
+ </rdf:RDF>
268
+ =end
269
+ str = rdf.rb_format_xml
270
+ #puts str
271
+
272
+ ok_eq(
273
+ "<rdf:RDF xmlns:foaf=\"http://xmlns.com/foaf/0.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"
274
+ ><rdf:Description rdf:about=\"http://example.com/test/1.html\"
275
+ ><foaf:maker rdf:parseType=\"Resource\"
276
+ ><foaf:holdsAccount
277
+ ><foaf:OnlineAccount foaf:accountName=\"a\"
278
+ ><foaf:accountServiceHomepage rdf:resource=\"http://www.hatena.ne.jp/\"
279
+ /></foaf:OnlineAccount
280
+ ></foaf:holdsAccount
281
+ ></foaf:maker
282
+ ></rdf:Description
283
+ ></rdf:RDF
284
+ >",
285
+ str)
286
+ end
287
+
288
+ def test_trackfeed
289
+ ok_wi([:script, {:src=>'http://trackfeed.com/usr/1.js'}, ''],
290
+ '{{trackfeed(1)}}')
291
+ end
292
+
293
+ def test_sub_bloglines
294
+ ok_wi([:a, {:href=>'http://www.bloglines.com/sub/http://example.com/test/'}, [:img, {:src=>'http://www.bloglines.com/images/sub_modern4.gif', :border=>'0', :alt=>'subscribe Bloglines'}]], '{{sub_bloglines}}')
295
+ ok_wi([:a, {:href=>'http://www.bloglines.com/sub/http://e.com/'}, [:img, {:src=>'http://www.bloglines.com/images/sub_modern4.gif', :border=>'0', :alt=>'subscribe Bloglines'}]], '{{sub_bloglines(http://e.com/)}}')
296
+ ok_wi([:a, {:href=>'http://www.bloglines.com/sub/http://e.com/'}, [:img, {:src=>'http://www.bloglines.com/images/sub_modern3.gif', :border=>'0', :alt=>'subscribe Bloglines'}]], '{{sub_bloglines(http://e.com/,modern3)}}')
297
+ end
298
+
299
+ def test_e_words
300
+ ok_wi([:script, {:src=>'http://e-words.jp/embed.x',
301
+ :type=>'text/javascript'}, ''], '{{e_words}}')
302
+ end
303
+
304
+ def test_google_ad
305
+ t_add_user
306
+ page = @site.create_new
307
+ page.store('{{google_ad}}')
308
+ res = session('/test/1.html')
309
+ ok_wi(/pagead2.googlesyndication.com/, '{{google_ad}}')
310
+ end
311
+
312
+ def test_translate
313
+ ok_wi([:a, {:href=>'http://www.excite.co.jp/world/english/web/proceeding/?wb_lp=JAEN&wb_url=http://example.com/test/1.html'}, 'translate (j->e)'],
314
+ '{{translate_je}}')
315
+ ok_wi([:a, {:href=>'http://www.excite.co.jp/world/english/web/proceeding/?wb_lp=JAEN&wb_url=http://example.com/test/1.html'}, 'English'],
316
+ '{{translate_je(English)}}')
317
+ ok_wi([:a, {:href=>'http://www.excite.co.jp/world/english/web/proceeding/?wb_lp=ENJA&wb_url=http://example.com/test/1.html'}, 'translate (e->j)'],
318
+ '{{translate_ej}}')
319
+ end
320
+ end
321
+ end