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.
- data/.gitignore +5 -0
- data/.rspec +2 -0
- data/CHANGES +3 -0
- data/COPYING +340 -0
- data/Gemfile +3 -0
- data/README.md +10 -0
- data/Rakefile +10 -0
- data/TextFormattingRules +137 -0
- data/TextFormattingRules.ja +143 -0
- data/bin/qwikdoc +34 -0
- data/lib/qwik_doc.rb +15 -0
- data/lib/qwik_doc/hack.rb +184 -0
- data/qwikdoc.gemspec +26 -0
- data/spec/qwik_doc_spec.rb +305 -0
- data/spec/spec_helper.rb +12 -0
- data/vendor/qwik/Makefile +63 -0
- data/vendor/qwik/Rakefile +17 -0
- data/vendor/qwik/act-aa.rb +83 -0
- data/vendor/qwik/act-archive.rb +386 -0
- data/vendor/qwik/act-attach.rb +304 -0
- data/vendor/qwik/act-backup.rb +236 -0
- data/vendor/qwik/act-basic.rb +325 -0
- data/vendor/qwik/act-book.rb +161 -0
- data/vendor/qwik/act-calc.rb +371 -0
- data/vendor/qwik/act-charset.rb +251 -0
- data/vendor/qwik/act-christel.rb +112 -0
- data/vendor/qwik/act-chronology.rb +149 -0
- data/vendor/qwik/act-code.rb +155 -0
- data/vendor/qwik/act-comment.rb +554 -0
- data/vendor/qwik/act-config.rb +49 -0
- data/vendor/qwik/act-counter.rb +125 -0
- data/vendor/qwik/act-day.rb +96 -0
- data/vendor/qwik/act-describe.rb +135 -0
- data/vendor/qwik/act-diary.rb +109 -0
- data/vendor/qwik/act-edit.rb +317 -0
- data/vendor/qwik/act-embed-html.rb +296 -0
- data/vendor/qwik/act-emode.rb +150 -0
- data/vendor/qwik/act-event.rb +187 -0
- data/vendor/qwik/act-file.rb +303 -0
- data/vendor/qwik/act-files.rb +771 -0
- data/vendor/qwik/act-getpass.rb +295 -0
- data/vendor/qwik/act-history.rb +136 -0
- data/vendor/qwik/act-html.rb +204 -0
- data/vendor/qwik/act-httpauth.rb +147 -0
- data/vendor/qwik/act-include.rb +142 -0
- data/vendor/qwik/act-interwiki.rb +189 -0
- data/vendor/qwik/act-isearch.rb +109 -0
- data/vendor/qwik/act-keywords.rb +137 -0
- data/vendor/qwik/act-lang.rb +81 -0
- data/vendor/qwik/act-license.rb +63 -0
- data/vendor/qwik/act-list.rb +287 -0
- data/vendor/qwik/act-login.rb +410 -0
- data/vendor/qwik/act-logout.rb +60 -0
- data/vendor/qwik/act-mail.rb +159 -0
- data/vendor/qwik/act-map.rb +292 -0
- data/vendor/qwik/act-md5.rb +42 -0
- data/vendor/qwik/act-mdlb.rb +741 -0
- data/vendor/qwik/act-media.rb +416 -0
- data/vendor/qwik/act-member.rb +157 -0
- data/vendor/qwik/act-menu.rb +142 -0
- data/vendor/qwik/act-metadata.rb +323 -0
- data/vendor/qwik/act-mlsubmitform.rb +49 -0
- data/vendor/qwik/act-monitor.rb +167 -0
- data/vendor/qwik/act-new.rb +418 -0
- data/vendor/qwik/act-pagelist.rb +248 -0
- data/vendor/qwik/act-password.rb +145 -0
- data/vendor/qwik/act-plan.rb +210 -0
- data/vendor/qwik/act-povray.rb +230 -0
- data/vendor/qwik/act-presen.rb +380 -0
- data/vendor/qwik/act-redirect.rb +133 -0
- data/vendor/qwik/act-ring.rb +1071 -0
- data/vendor/qwik/act-rrefs.rb +255 -0
- data/vendor/qwik/act-ruby.rb +116 -0
- data/vendor/qwik/act-sample.rb +170 -0
- data/vendor/qwik/act-save.rb +295 -0
- data/vendor/qwik/act-schedule.rb +374 -0
- data/vendor/qwik/act-search.rb +180 -0
- data/vendor/qwik/act-searchwords.rb +51 -0
- data/vendor/qwik/act-sendpass.rb +83 -0
- data/vendor/qwik/act-site.rb +89 -0
- data/vendor/qwik/act-sitebackup.rb +419 -0
- data/vendor/qwik/act-sitelog.rb +118 -0
- data/vendor/qwik/act-smil.rb +299 -0
- data/vendor/qwik/act-status.rb +220 -0
- data/vendor/qwik/act-style.rb +608 -0
- data/vendor/qwik/act-table.rb +263 -0
- data/vendor/qwik/act-tableform.rb +241 -0
- data/vendor/qwik/act-tag.rb +103 -0
- data/vendor/qwik/act-text.rb +70 -0
- data/vendor/qwik/act-textarea.rb +164 -0
- data/vendor/qwik/act-theme.rb +346 -0
- data/vendor/qwik/act-toc.rb +112 -0
- data/vendor/qwik/act-typekey.rb +198 -0
- data/vendor/qwik/act-under-const.rb +94 -0
- data/vendor/qwik/act-webservice.rb +321 -0
- data/vendor/qwik/act-wema.rb +558 -0
- data/vendor/qwik/act-wysiwyg.rb +238 -0
- data/vendor/qwik/action.rb +325 -0
- data/vendor/qwik/autoreload.rb +98 -0
- data/vendor/qwik/bench-bench.rb +28 -0
- data/vendor/qwik/bench-emode.rb +47 -0
- data/vendor/qwik/bench-format-xml.rb +70 -0
- data/vendor/qwik/bench-large-table.rb +62 -0
- data/vendor/qwik/bench-md5.rb +14 -0
- data/vendor/qwik/bench-module-session.rb +19 -0
- data/vendor/qwik/bench-page.rb +50 -0
- data/vendor/qwik/bench-s-md5.rb +28 -0
- data/vendor/qwik/bench-session.rb +25 -0
- data/vendor/qwik/bench-textformat.rb +31 -0
- data/vendor/qwik/catalog-factory.rb +91 -0
- data/vendor/qwik/catalog-ja.rb +479 -0
- data/vendor/qwik/catalog-ml-ja.rb +145 -0
- data/vendor/qwik/check-act-monitor.rb +112 -0
- data/vendor/qwik/check-act-monitor2.rb +46 -0
- data/vendor/qwik/check-act-theme.rb +27 -0
- data/vendor/qwik/check-event.rb +112 -0
- data/vendor/qwik/check-event2.rb +55 -0
- data/vendor/qwik/check-htree-rexml.rb +77 -0
- data/vendor/qwik/check-htree.rb +51 -0
- data/vendor/qwik/check-libxml.rb +135 -0
- data/vendor/qwik/check-many-pages.rb +47 -0
- data/vendor/qwik/check-monitor.rb +33 -0
- data/vendor/qwik/check-observer.rb +67 -0
- data/vendor/qwik/check-server.rb +61 -0
- data/vendor/qwik/check-uuencode.rb +33 -0
- data/vendor/qwik/check-webdav.rb +65 -0
- data/vendor/qwik/check-xml-xpath.rb +27 -0
- data/vendor/qwik/common-backtrace.rb +94 -0
- data/vendor/qwik/common-basic.rb +111 -0
- data/vendor/qwik/common-condition.rb +142 -0
- data/vendor/qwik/common-error.rb +48 -0
- data/vendor/qwik/common-gettext.rb +50 -0
- data/vendor/qwik/common-javascript.rb +45 -0
- data/vendor/qwik/common-notice.rb +132 -0
- data/vendor/qwik/common-plain.rb +105 -0
- data/vendor/qwik/common-plugin.rb +111 -0
- data/vendor/qwik/common-res.rb +76 -0
- data/vendor/qwik/common-resolve.rb +92 -0
- data/vendor/qwik/common-send.rb +171 -0
- data/vendor/qwik/common-session.rb +139 -0
- data/vendor/qwik/common-surface.rb +261 -0
- data/vendor/qwik/common-url.rb +90 -0
- data/vendor/qwik/compat/Makefile +12 -0
- data/vendor/qwik/compat/add_load_path.rb +1 -0
- data/vendor/qwik/config.rb +299 -0
- data/vendor/qwik/db-b-backup.rb +142 -0
- data/vendor/qwik/db-backup.rb +184 -0
- data/vendor/qwik/db-berkeley.rb +306 -0
- data/vendor/qwik/db-filesystem.rb +305 -0
- data/vendor/qwik/db-indexer.rb +154 -0
- data/vendor/qwik/db-searchwords.rb +238 -0
- data/vendor/qwik/description-ja.rb +267 -0
- data/vendor/qwik/description.rb +256 -0
- data/vendor/qwik/dev-add-copyright.rb +23 -0
- data/vendor/qwik/dev-backup.rb +24 -0
- data/vendor/qwik/dev-bench.rb +175 -0
- data/vendor/qwik/dev-calctime.rb +52 -0
- data/vendor/qwik/dev-css-compressor.rb +60 -0
- data/vendor/qwik/dev-extract-catalog.rb +102 -0
- data/vendor/qwik/dev-js-compressor.rb +73 -0
- data/vendor/qwik/dev-release.rb +235 -0
- data/vendor/qwik/dev-replace.rb +353 -0
- data/vendor/qwik/dev-sendmail.rb +25 -0
- data/vendor/qwik/farm.rb +283 -0
- data/vendor/qwik/gettext.rb +56 -0
- data/vendor/qwik/group-cond.rb +157 -0
- data/vendor/qwik/group-config.rb +247 -0
- data/vendor/qwik/group-confirm.rb +147 -0
- data/vendor/qwik/group-db.rb +326 -0
- data/vendor/qwik/group-mail.rb +195 -0
- data/vendor/qwik/group-member.rb +307 -0
- data/vendor/qwik/group-sendmail.rb +231 -0
- data/vendor/qwik/group-site.rb +374 -0
- data/vendor/qwik/group-sweep.rb +63 -0
- data/vendor/qwik/group.rb +157 -0
- data/vendor/qwik/helper.rb +6 -0
- data/vendor/qwik/html-generator.rb +104 -0
- data/vendor/qwik/html-to-wabisabi.rb +149 -0
- data/vendor/qwik/htree-diff.rb +87 -0
- data/vendor/qwik/htree-format-xml.rb +57 -0
- data/vendor/qwik/htree-generator.rb +144 -0
- data/vendor/qwik/htree-get.rb +251 -0
- data/vendor/qwik/htree-html-generator.rb +179 -0
- data/vendor/qwik/htree-template.rb +263 -0
- data/vendor/qwik/htree-to-wabisabi.rb +171 -0
- data/vendor/qwik/loadlib.rb +79 -0
- data/vendor/qwik/logger.rb +115 -0
- data/vendor/qwik/mail-body.rb +171 -0
- data/vendor/qwik/mail-header.rb +474 -0
- data/vendor/qwik/mail-multipart.rb +193 -0
- data/vendor/qwik/mail-parse.rb +147 -0
- data/vendor/qwik/mail.rb +341 -0
- data/vendor/qwik/mailaddress.rb +83 -0
- data/vendor/qwik/mdlb-model.rb +81 -0
- data/vendor/qwik/mdlb-sample.rb +324 -0
- data/vendor/qwik/ml-catalog-factory.rb +27 -0
- data/vendor/qwik/ml-exception.rb +15 -0
- data/vendor/qwik/ml-generator.rb +28 -0
- data/vendor/qwik/ml-gettext.rb +137 -0
- data/vendor/qwik/ml-logger.rb +82 -0
- data/vendor/qwik/ml-memory.rb +65 -0
- data/vendor/qwik/ml-msg-validator.rb +86 -0
- data/vendor/qwik/ml-processor.rb +609 -0
- data/vendor/qwik/ml-quickml-server.rb +122 -0
- data/vendor/qwik/ml-sendmail.rb +0 -0
- data/vendor/qwik/ml-server.rb +107 -0
- data/vendor/qwik/ml-session.rb +348 -0
- data/vendor/qwik/ml-sweeper.rb +101 -0
- data/vendor/qwik/mock-logger.rb +65 -0
- data/vendor/qwik/mock-sendmail.rb +78 -0
- data/vendor/qwik/mock-socket.rb +82 -0
- data/vendor/qwik/modulobe.rb +406 -0
- data/vendor/qwik/mongrel-server.rb +72 -0
- data/vendor/qwik/page-files.rb +249 -0
- data/vendor/qwik/page-generate.rb +82 -0
- data/vendor/qwik/page-get.rb +262 -0
- data/vendor/qwik/page-images.rb +168 -0
- data/vendor/qwik/page-put.rb +128 -0
- data/vendor/qwik/page-rrefs.rb +154 -0
- data/vendor/qwik/page-title.rb +0 -0
- data/vendor/qwik/page-wikidb.rb +234 -0
- data/vendor/qwik/page.rb +67 -0
- data/vendor/qwik/pages.rb +444 -0
- data/vendor/qwik/parse-plugin.rb +249 -0
- data/vendor/qwik/parser-emode.rb +116 -0
- data/vendor/qwik/parser-inline.rb +273 -0
- data/vendor/qwik/parser.rb +350 -0
- data/vendor/qwik/password.rb +183 -0
- data/vendor/qwik/periodic.rb +79 -0
- data/vendor/qwik/qp.rb +56 -0
- data/vendor/qwik/qwik-service.rb +341 -0
- data/vendor/qwik/qwik.rb +5 -0
- data/vendor/qwik/qwikweb-adduser.rb +34 -0
- data/vendor/qwik/qwikweb-catalog-validator.rb +110 -0
- data/vendor/qwik/qwikweb-incgen.rb +28 -0
- data/vendor/qwik/qwikweb-makesite.rb +41 -0
- data/vendor/qwik/qwikweb-server.rb +44 -0
- data/vendor/qwik/qwikweb-showpassword.rb +26 -0
- data/vendor/qwik/qwikweb-watchlog.rb +67 -0
- data/vendor/qwik/request-path.rb +304 -0
- data/vendor/qwik/request-ua.rb +76 -0
- data/vendor/qwik/request-webrick.rb +81 -0
- data/vendor/qwik/request.rb +91 -0
- data/vendor/qwik/resolve-tdiary.rb +292 -0
- data/vendor/qwik/resolve.rb +121 -0
- data/vendor/qwik/response.rb +228 -0
- data/vendor/qwik/server-memory.rb +57 -0
- data/vendor/qwik/server-webrick.rb +102 -0
- data/vendor/qwik/server.rb +252 -0
- data/vendor/qwik/site-config.rb +149 -0
- data/vendor/qwik/site-db.rb +136 -0
- data/vendor/qwik/site-event.rb +162 -0
- data/vendor/qwik/site-files.rb +86 -0
- data/vendor/qwik/site-group.rb +103 -0
- data/vendor/qwik/site-index.rb +47 -0
- data/vendor/qwik/site-log.rb +64 -0
- data/vendor/qwik/site-member.rb +230 -0
- data/vendor/qwik/site-monitor.rb +97 -0
- data/vendor/qwik/site-pages.rb +62 -0
- data/vendor/qwik/site-plan.rb +139 -0
- data/vendor/qwik/site-report.rb +282 -0
- data/vendor/qwik/site-resolve.rb +230 -0
- data/vendor/qwik/site-rrefs.rb +18 -0
- data/vendor/qwik/site-search.rb +180 -0
- data/vendor/qwik/site-timeline.rb +153 -0
- data/vendor/qwik/site-url.rb +189 -0
- data/vendor/qwik/site.rb +76 -0
- data/vendor/qwik/smil-time.rb +105 -0
- data/vendor/qwik/smtp-session.rb +331 -0
- data/vendor/qwik/template-generator.rb +149 -0
- data/vendor/qwik/template.rb +85 -0
- data/vendor/qwik/test-common.rb +10 -0
- data/vendor/qwik/test-ml-info.rb +225 -0
- data/vendor/qwik/test-module-ml.rb +142 -0
- data/vendor/qwik/test-module-path.rb +110 -0
- data/vendor/qwik/test-module-public.rb +70 -0
- data/vendor/qwik/test-module-server.rb +98 -0
- data/vendor/qwik/test-module-session.rb +264 -0
- data/vendor/qwik/test-module-suite.rb +91 -0
- data/vendor/qwik/test-ms-applemail.rb +59 -0
- data/vendor/qwik/test-ms-attach.rb +174 -0
- data/vendor/qwik/test-ms-basic.rb +40 -0
- data/vendor/qwik/test-ms-close.rb +35 -0
- data/vendor/qwik/test-ms-confirm.rb +75 -0
- data/vendor/qwik/test-ms-ignore-spam.rb +57 -0
- data/vendor/qwik/test-ms-japanese.rb +97 -0
- data/vendor/qwik/test-ms-jfilename.rb +82 -0
- data/vendor/qwik/test-ms-large.rb +58 -0
- data/vendor/qwik/test-ms-member.rb +103 -0
- data/vendor/qwik/test-ms-multipart.rb +84 -0
- data/vendor/qwik/test-ms-org.rb +129 -0
- data/vendor/qwik/test-ms-plan.rb +130 -0
- data/vendor/qwik/test-ms-post.rb +53 -0
- data/vendor/qwik/test-ms-quopri.rb +76 -0
- data/vendor/qwik/test-sub-quopri.rb +45 -0
- data/vendor/qwik/test-submit-base64.rb +59 -0
- data/vendor/qwik/test-submit-forward.rb +61 -0
- data/vendor/qwik/test-submit-html-mail.rb +52 -0
- data/vendor/qwik/test-submit-japanese.rb +135 -0
- data/vendor/qwik/test-submit-jfilename.rb +144 -0
- data/vendor/qwik/test-submit-uuencode.rb +71 -0
- data/vendor/qwik/test-suite-all.rb +8 -0
- data/vendor/qwik/test-suite-basic.rb +9 -0
- data/vendor/qwik/test-suite-ml.rb +9 -0
- data/vendor/qwik/test-typekey.rb +64 -0
- data/vendor/qwik/testunit.rb +45 -0
- data/vendor/qwik/tokenizer-inline.rb +294 -0
- data/vendor/qwik/tokenizer.rb +332 -0
- data/vendor/qwik/typekey.rb +160 -0
- data/vendor/qwik/util-basic.rb +135 -0
- data/vendor/qwik/util-charset.rb +332 -0
- data/vendor/qwik/util-css.rb +56 -0
- data/vendor/qwik/util-csv-tokenizer.rb +113 -0
- data/vendor/qwik/util-filename.rb +112 -0
- data/vendor/qwik/util-pathname.rb +202 -0
- data/vendor/qwik/util-pid.rb +58 -0
- data/vendor/qwik/util-safe.rb +67 -0
- data/vendor/qwik/util-sendmail.rb +273 -0
- data/vendor/qwik/util-string.rb +203 -0
- data/vendor/qwik/util-time.rb +125 -0
- data/vendor/qwik/util-webrick.rb +176 -0
- data/vendor/qwik/version.rb +11 -0
- data/vendor/qwik/wabisabi-basic.rb +163 -0
- data/vendor/qwik/wabisabi-diff.rb +130 -0
- data/vendor/qwik/wabisabi-format-xml.rb +310 -0
- data/vendor/qwik/wabisabi-generator.rb +262 -0
- data/vendor/qwik/wabisabi-index.rb +174 -0
- data/vendor/qwik/wabisabi-table.rb +212 -0
- data/vendor/qwik/wabisabi-template.rb +295 -0
- data/vendor/qwik/wabisabi-to-htree.rb +111 -0
- data/vendor/qwik/wabisabi-to-wiki.rb +690 -0
- data/vendor/qwik/wabisabi-traverse.rb +207 -0
- data/vendor/qwik/wabisabi-validator.rb +116 -0
- data/vendor/qwik/wabisabi.rb +5 -0
- metadata +416 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (C) 2005 jouno <jouno2002@yahoo.co.jp>
|
|
3
|
+
# License under GPL-2
|
|
4
|
+
#
|
|
5
|
+
# original is Adam Bregenzer(<adam@bregenzer.net>)'s python version
|
|
6
|
+
# http://adam.bregenzer.net/python/typekey/TypeKey.py
|
|
7
|
+
#
|
|
8
|
+
# modified by Kouichirou Eto
|
|
9
|
+
#
|
|
10
|
+
# note:
|
|
11
|
+
# nick name field must be sent as utf-8 url_encoded string.
|
|
12
|
+
|
|
13
|
+
# sample code:
|
|
14
|
+
|
|
15
|
+
=begin
|
|
16
|
+
token = 'your_site_token'
|
|
17
|
+
tk = TypeKey.new(token, '1.1')
|
|
18
|
+
|
|
19
|
+
if cgi.params['tk'][0] == '1'
|
|
20
|
+
ts = cgi.params['ts'][0]
|
|
21
|
+
email = cgi.params['email'][0]
|
|
22
|
+
name = cgi.params['name'][0]
|
|
23
|
+
nick = cgi.params['nick'][0]
|
|
24
|
+
sig = cgi.params['sig'][0]
|
|
25
|
+
if tk.verify(email, name, nick, ts, sig)
|
|
26
|
+
puts 'verify!'
|
|
27
|
+
else
|
|
28
|
+
puts 'not!'
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
return_url = 'http://localhost/cgi-bin/tk_test.cgi'
|
|
33
|
+
|
|
34
|
+
url_sign_in = tk.get_login_url(return_url + '?tk=1')
|
|
35
|
+
url_sign_out = tk.get_logout_url(return_url)
|
|
36
|
+
|
|
37
|
+
puts "<a href=\"#{url_sign_in}\">sign in</a><br />"
|
|
38
|
+
puts "<a href=\"#{url_sign_out}\">sign out</a><br />"
|
|
39
|
+
=end
|
|
40
|
+
|
|
41
|
+
require 'uri'
|
|
42
|
+
require 'open-uri'
|
|
43
|
+
require 'base64'
|
|
44
|
+
require 'openssl'
|
|
45
|
+
|
|
46
|
+
class TypeKeyError < StandardError; end
|
|
47
|
+
class TimeOutError < TypeKeyError; end
|
|
48
|
+
class VerifyFailed < TypeKeyError; end
|
|
49
|
+
|
|
50
|
+
# This class handles TypeKey logins.
|
|
51
|
+
class TypeKey
|
|
52
|
+
def initialize(token, version = '1.1')
|
|
53
|
+
@token = token
|
|
54
|
+
@version = version
|
|
55
|
+
|
|
56
|
+
# Base url for generating login and logout urls.
|
|
57
|
+
@base_url = 'https://www.typekey.com/t/typekey/'
|
|
58
|
+
|
|
59
|
+
# Url used to download the public key.
|
|
60
|
+
@key_url = 'http://www.typekey.com/extras/regkeys.txt'
|
|
61
|
+
|
|
62
|
+
# Location for caching the public key.
|
|
63
|
+
@key_cache_path = '/tmp/tk_key_cache'
|
|
64
|
+
|
|
65
|
+
# Length of time to wait before refreshing the public key cache, in seconds.
|
|
66
|
+
# Defaults to two days.
|
|
67
|
+
@key_cache_timeout = 60 * 60 * 24 * 2
|
|
68
|
+
|
|
69
|
+
# Length of time logins remain valid, in seconds.
|
|
70
|
+
# Defaults to five minutes.
|
|
71
|
+
@login_timeout = 60 * 5
|
|
72
|
+
end
|
|
73
|
+
attr_accessor :base_url, :login_timeout
|
|
74
|
+
attr_accessor :key_url, :key_cache_path, :key_cache_timeout
|
|
75
|
+
|
|
76
|
+
# Verify a typekey login
|
|
77
|
+
def verify(email, name, nick, ts, sig, key = nil)
|
|
78
|
+
sig.gsub!(/ /, '+') # sig isn't urlencoded.
|
|
79
|
+
|
|
80
|
+
key = get_key if key.nil?
|
|
81
|
+
|
|
82
|
+
message_ar = [email, name, nick, ts.to_s]
|
|
83
|
+
message_ar << @token if @version == '1.1'
|
|
84
|
+
message = message_ar.join('::')
|
|
85
|
+
|
|
86
|
+
raise VerifyFailed if ! dsa_verify(message, sig, key)
|
|
87
|
+
raise TimeOutError if (Time.now.to_i - ts.to_i) > @login_timeout
|
|
88
|
+
return true
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Return a URL to login to TypeKey
|
|
92
|
+
def get_login_url(return_url, email = false)
|
|
93
|
+
url = @base_url
|
|
94
|
+
url += "login?t=#{@token}"
|
|
95
|
+
url += (email ? '&need_email=1' : '')
|
|
96
|
+
url += "&_return=#{URI.escape(return_url)}"
|
|
97
|
+
url += "&v=#{@version}"
|
|
98
|
+
return url
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Return a URL to logout of TypeKey
|
|
102
|
+
def get_logout_url(return_url)
|
|
103
|
+
return @base_url + 'logout?_return=' + URI.escape(return_url)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Return the TypeKey public keys, cache results unless a url is passed
|
|
107
|
+
def get_key(url = nil)
|
|
108
|
+
if url.nil?
|
|
109
|
+
begin
|
|
110
|
+
mod_time = File.mtime(@key_cache_path).to_i
|
|
111
|
+
rescue SystemCallError
|
|
112
|
+
mod_time = 0
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
if @key_cache_timeout < (Time.now.to_i - mod_time) ||
|
|
116
|
+
! File.exist?(@key_cache_path)
|
|
117
|
+
open(@key_url) {|fh| # using open-uri
|
|
118
|
+
@key_string = fh.read
|
|
119
|
+
}
|
|
120
|
+
File.open(@key_cache_path, 'w') {|fh|
|
|
121
|
+
fh.puts(@key_string)
|
|
122
|
+
}
|
|
123
|
+
else
|
|
124
|
+
File.open(@key_cache_path, 'r') {|fh|
|
|
125
|
+
@key_string = fh.read
|
|
126
|
+
}
|
|
127
|
+
end
|
|
128
|
+
else
|
|
129
|
+
open(url) {|fh|
|
|
130
|
+
@key_string = fh.read
|
|
131
|
+
}
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
tk_key = Hash.new
|
|
135
|
+
|
|
136
|
+
for pair in @key_string.strip.split(' ')
|
|
137
|
+
key, value = pair.split('=')
|
|
138
|
+
tk_key[key] = value.to_i
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
return tk_key
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Verify a DSA signature
|
|
145
|
+
def dsa_verify(message, sig, key)
|
|
146
|
+
r_sig, s_sig = sig.split(':')
|
|
147
|
+
r_sig = Base64.decode64(r_sig).unpack('H*')[0].hex
|
|
148
|
+
s_sig = Base64.decode64(s_sig).unpack('H*')[0].hex
|
|
149
|
+
sign = OpenSSL::ASN1::Sequence.new([OpenSSL::ASN1::Integer.new(r_sig),
|
|
150
|
+
OpenSSL::ASN1::Integer.new(s_sig)]
|
|
151
|
+
).to_der
|
|
152
|
+
dsa = OpenSSL::PKey::DSA.new
|
|
153
|
+
dsa.p = key['p']
|
|
154
|
+
dsa.q = key['q']
|
|
155
|
+
dsa.g = key['g']
|
|
156
|
+
dsa.pub_key = key['pub_key']
|
|
157
|
+
dss1 = OpenSSL::Digest::DSS1.new
|
|
158
|
+
return dsa.verify(dss1, sign, message)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (C) 2002-2004 Satoru Takabayashi <satoru@namazu.org>
|
|
3
|
+
# Copyright (C) 2003-2006 Kouichirou Eto
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
# This is free software with ABSOLUTELY NO WARRANTY.
|
|
6
|
+
#
|
|
7
|
+
# You can redistribute it and/or modify it under the terms of
|
|
8
|
+
# the GNU General Public License version 2.
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
$LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
|
|
12
|
+
require 'qwik/util-string'
|
|
13
|
+
|
|
14
|
+
class NilClass
|
|
15
|
+
def empty?
|
|
16
|
+
return true
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class Integer
|
|
21
|
+
# 12345.commify => '12,345'
|
|
22
|
+
def commify
|
|
23
|
+
numstr = self.to_s
|
|
24
|
+
true while numstr.sub!(/^([-+]?\d+)(\d{3})/, '\1,\2')
|
|
25
|
+
return numstr
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
UNITS = ['Bytes','KB','MB','GB','TB','PB']
|
|
29
|
+
# 1024 => 1KB
|
|
30
|
+
def byte_format
|
|
31
|
+
n = self
|
|
32
|
+
UNITS.each {|unit|
|
|
33
|
+
t = n/1024
|
|
34
|
+
if t > 0
|
|
35
|
+
n = t
|
|
36
|
+
else
|
|
37
|
+
return n.to_s + unit
|
|
38
|
+
end
|
|
39
|
+
}
|
|
40
|
+
return n.to_s + _(unit)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# It preserves case information. but it accepts an
|
|
45
|
+
# address case-insensitively for member management.
|
|
46
|
+
class IcaseArray < Array
|
|
47
|
+
def include? (item)
|
|
48
|
+
if self.find {|x| x.downcase == item.downcase }
|
|
49
|
+
return true
|
|
50
|
+
else
|
|
51
|
+
return false
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def delete (item)
|
|
56
|
+
self.replace(self.find_all {|x| x.downcase != item.downcase })
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
class IcaseHash < Hash
|
|
61
|
+
def include? (key)
|
|
62
|
+
super(key.downcase)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def delete (key)
|
|
66
|
+
super(key.downcase)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def [] (key)
|
|
70
|
+
super(key.downcase)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def []= (key, value)
|
|
74
|
+
super(key.downcase, value)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
class Hash
|
|
79
|
+
def to_query_string
|
|
80
|
+
ar = []
|
|
81
|
+
self.each {|k, v|
|
|
82
|
+
if k && v
|
|
83
|
+
ar << "#{k.to_s.escape}=#{v.to_s.escape}"
|
|
84
|
+
end
|
|
85
|
+
}
|
|
86
|
+
return ar.sort.join('&')
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
if $0 == __FILE__
|
|
91
|
+
require 'test/unit'
|
|
92
|
+
$test = true
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
if defined?($test) && $test
|
|
96
|
+
class TestUtilBasic < Test::Unit::TestCase
|
|
97
|
+
def test_nil
|
|
98
|
+
assert_equal true, nil.empty?
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def test_integer
|
|
102
|
+
assert_equal '12,345', 12345.commify
|
|
103
|
+
assert_equal '123,456,789', 123456789.commify
|
|
104
|
+
|
|
105
|
+
assert_equal '1KB', (1024+1).byte_format
|
|
106
|
+
assert_equal '2MB', (2*1024*1024+2).byte_format
|
|
107
|
+
assert_equal '3GB', (3*1024*1024*1024+3).byte_format
|
|
108
|
+
assert_equal '4TB', (4*1024*1024*1024*1024+4).byte_format
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def test_iscase_array
|
|
112
|
+
iar = IcaseArray.new
|
|
113
|
+
iar << 'T'
|
|
114
|
+
assert_equal true, iar.include?('T')
|
|
115
|
+
assert_equal true, iar.include?('t')
|
|
116
|
+
iar.delete('t')
|
|
117
|
+
assert_equal false, iar.include?('t')
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def test_icase_hash
|
|
121
|
+
ih = IcaseHash.new
|
|
122
|
+
ih['T'] = 1
|
|
123
|
+
assert_equal true, ih.include?('t')
|
|
124
|
+
assert_equal 1, ih['t']
|
|
125
|
+
ih.delete('t')
|
|
126
|
+
assert_equal false, ih.include?('t')
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def test_hash
|
|
130
|
+
# test_hash_to_query_string
|
|
131
|
+
assert_equal 'k=v', {:k=>'v'}.to_query_string
|
|
132
|
+
assert_equal 'k1=v1&k2=v2', {:k1=>'v1', :k2=>'v2'}.to_query_string
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
#encoding: sjis
|
|
2
|
+
# Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
|
|
3
|
+
# This is free software with ABSOLUTELY NO WARRANTY.
|
|
4
|
+
# You can redistribute it and/or modify it under the terms of the GNU GPL 2.
|
|
5
|
+
|
|
6
|
+
require 'kconv'
|
|
7
|
+
require 'iconv'
|
|
8
|
+
|
|
9
|
+
$LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
|
|
10
|
+
|
|
11
|
+
class String
|
|
12
|
+
# ============================== kconv
|
|
13
|
+
def sjistoeuc
|
|
14
|
+
self.kconv(Kconv::EUC, Kconv::SJIS).set_euc
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def euctosjis
|
|
18
|
+
self.kconv(Kconv::SJIS, Kconv::EUC).set_sjis
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def sjistojis
|
|
22
|
+
self.kconv(Kconv::JIS, Kconv::SJIS).set_jis
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def jistosjis
|
|
26
|
+
self.kconv(Kconv::SJIS, Kconv::JIS).set_sjis
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def euctojis
|
|
30
|
+
self.kconv(Kconv::JIS, Kconv::EUC).set_jis
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def jistoeuc
|
|
34
|
+
self.kconv(Kconv::EUC, Kconv::JIS).set_euc
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# ============================== iconv
|
|
38
|
+
def sjistou8; Iconv.iconv_to_from('UTF-8', 'Shift_JIS', self) end
|
|
39
|
+
def u8tosjis; Iconv.iconv_to_from('Shift_JIS', 'UTF-8', self) end
|
|
40
|
+
def euctou8; Iconv.iconv_to_from('UTF-8', 'EUC-JP', self) end
|
|
41
|
+
def u8toeuc; Iconv.iconv_to_from('EUC-JP', 'UTF-8', self) end
|
|
42
|
+
def jistou8; Iconv.iconv_to_from('UTF-8', 'ISO-2022-JP', self) end
|
|
43
|
+
def u8tojis
|
|
44
|
+
iconv = Iconv.new('ISO-2022-JP', 'UTF-8')
|
|
45
|
+
out = iconv.iconv(self)+iconv.close
|
|
46
|
+
out.set_charset('ISO-2022-JP')
|
|
47
|
+
out
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# ============================== charset
|
|
51
|
+
def set_charset(charset)
|
|
52
|
+
@charset = charset
|
|
53
|
+
return self
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def charset
|
|
57
|
+
return @charset if defined?(@charset)
|
|
58
|
+
return nil
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def set_utf8; set_charset('UTF-8') end
|
|
62
|
+
def set_sjis; set_charset('Shift_JIS') end
|
|
63
|
+
def set_euc; set_charset('EUC-JP') end
|
|
64
|
+
def set_jis; set_charset('ISO-2022-JP') end
|
|
65
|
+
|
|
66
|
+
KCONV_TO_CHARSET = {
|
|
67
|
+
#Kconv::AUTO => '?',
|
|
68
|
+
Kconv::JIS => 'ISO-2022-JP',
|
|
69
|
+
Kconv::EUC => 'EUC-JP',
|
|
70
|
+
Kconv::SJIS => 'Shift_JIS',
|
|
71
|
+
#Kconv::BINARY => '?BINARY',
|
|
72
|
+
#Kconv::NOCONV => '?NOCONV',
|
|
73
|
+
Kconv::ASCII => 'ASCII',
|
|
74
|
+
Kconv::UTF8 => 'UTF-8',
|
|
75
|
+
Kconv::UTF16 => 'UTF-16',
|
|
76
|
+
Kconv::UTF32 => 'UTF-32',
|
|
77
|
+
#Kconv::UNKNOWN => '?',
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
def guess_charset
|
|
81
|
+
kconv_charset = Kconv::guess(self)
|
|
82
|
+
charset = KCONV_TO_CHARSET[kconv_charset]
|
|
83
|
+
if /\A\?/ =~ charset
|
|
84
|
+
#p kconv_charset, charset
|
|
85
|
+
end
|
|
86
|
+
return charset
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def guess_charset!
|
|
90
|
+
set_charset(self.guess_charset)
|
|
91
|
+
return self
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# tosjis is used in kconv.rb
|
|
95
|
+
def to_sjis
|
|
96
|
+
raise 'Undefined charset.' if self.charset.nil?
|
|
97
|
+
case self.charset
|
|
98
|
+
when 'ASCII'; return self
|
|
99
|
+
when 'UTF-8'; return self.u8tosjis
|
|
100
|
+
when 'Shift_JIS'; return self
|
|
101
|
+
when 'EUC-JP'; return self.euctosjis
|
|
102
|
+
when 'ISO-2022-JP'; return self.jistosjis
|
|
103
|
+
end
|
|
104
|
+
raise 'Unknown charset.'
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# toeuc is used in kconv.rb
|
|
108
|
+
def to_euc
|
|
109
|
+
raise 'Undefined charset.' if self.charset.nil?
|
|
110
|
+
case self.charset
|
|
111
|
+
when 'ASCII'; return self
|
|
112
|
+
when 'UTF-8'; return self.u8toeuc
|
|
113
|
+
when 'Shift_JIS'; return self.sjistoeuc
|
|
114
|
+
when 'EUC-JP'; return self
|
|
115
|
+
when 'ISO-2022-JP'; return self.jistoeuc
|
|
116
|
+
end
|
|
117
|
+
raise 'Unknown charset.'
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# tojis is used in kconv.rb
|
|
121
|
+
def to_jis
|
|
122
|
+
raise 'Undefined charset.' if self.charset.nil?
|
|
123
|
+
case self.charset
|
|
124
|
+
when 'ASCII'; return self
|
|
125
|
+
when 'UTF-8'; return self.u8tojis
|
|
126
|
+
when 'Shift_JIS'; return self.sjistojis
|
|
127
|
+
when 'EUC-JP'; return self.euctojis
|
|
128
|
+
when 'ISO-2022-JP'; return self
|
|
129
|
+
end
|
|
130
|
+
raise 'Unknown charset.'
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def to_utf8
|
|
134
|
+
#raise 'Undefined charset.' if self.charset.nil?
|
|
135
|
+
self.guess_charset! if self.charset.nil?
|
|
136
|
+
case self.charset
|
|
137
|
+
when 'ASCII'; return self
|
|
138
|
+
when 'UTF-8'; return self
|
|
139
|
+
when 'Shift_JIS'; return self.sjistou8
|
|
140
|
+
when 'EUC-JP'; return self.euctou8
|
|
141
|
+
when 'ISO-2022-JP'; return self.jistou8
|
|
142
|
+
end
|
|
143
|
+
raise 'Unknown charset.'
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Some use case.
|
|
147
|
+
alias set_mail_charset set_jis
|
|
148
|
+
alias set_page_charset set_sjis # This can be changed.
|
|
149
|
+
alias set_sourcecode_charset set_sjis # This can be changed.
|
|
150
|
+
alias set_xml_charset set_utf8
|
|
151
|
+
alias set_url_charset set_utf8
|
|
152
|
+
alias set_filename_charset set_utf8
|
|
153
|
+
|
|
154
|
+
alias to_mail_charset to_jis
|
|
155
|
+
alias to_page_charset to_sjis
|
|
156
|
+
alias to_xml_charset to_utf8
|
|
157
|
+
alias to_url_charset to_utf8
|
|
158
|
+
alias to_filename_charset to_utf8
|
|
159
|
+
|
|
160
|
+
def page_to_xml
|
|
161
|
+
self.set_page_charset.to_xml_charset
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
class Iconv
|
|
166
|
+
UNKNOWN_CHARACTER = '?'
|
|
167
|
+
|
|
168
|
+
def self.iconv_to_from(to, from, str)
|
|
169
|
+
iconv = Iconv.new(to, from)
|
|
170
|
+
out = ''
|
|
171
|
+
begin
|
|
172
|
+
out << iconv.iconv(str)
|
|
173
|
+
rescue Iconv::IllegalSequence => e # FIXME: Merge with InvalidCharacter
|
|
174
|
+
out << e.success
|
|
175
|
+
ch, str = e.failed.split(//u, 2)
|
|
176
|
+
out << UNKNOWN_CHARACTER
|
|
177
|
+
retry
|
|
178
|
+
rescue Iconv::InvalidCharacter => e
|
|
179
|
+
out << e.success
|
|
180
|
+
ch, str = e.failed.split(//u, 2)
|
|
181
|
+
out << UNKNOWN_CHARACTER
|
|
182
|
+
retry
|
|
183
|
+
end
|
|
184
|
+
out.set_charset(to)
|
|
185
|
+
return out
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def self.iconv_to_utf8(from, str)
|
|
189
|
+
to = 'UTF-8'
|
|
190
|
+
iconv = Iconv.new(from, to)
|
|
191
|
+
out = ''
|
|
192
|
+
begin
|
|
193
|
+
out << iconv.iconv(str)
|
|
194
|
+
rescue Iconv::IllegalSequence => e
|
|
195
|
+
out << e.success
|
|
196
|
+
ch, str = e.failed.split(//u, 2)
|
|
197
|
+
if respond_to?(:unknown_unicode_handler)
|
|
198
|
+
u = ch.unpack('U').first
|
|
199
|
+
out << unknown_unicode_handler(u)
|
|
200
|
+
else
|
|
201
|
+
out << UNKNOWN_CHARACTER
|
|
202
|
+
end
|
|
203
|
+
retry
|
|
204
|
+
end
|
|
205
|
+
out.set_charset(to)
|
|
206
|
+
return out
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def self.unknown_unicode_handler (u)
|
|
210
|
+
return sprintf("&#x%04x;", u)
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
module Charset
|
|
215
|
+
UTF8 = 'utf-8'
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
if $0 == __FILE__
|
|
219
|
+
require 'test/unit'
|
|
220
|
+
$test = true
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
if defined?($test) && $test
|
|
224
|
+
class TestUtilCharset < Test::Unit::TestCase
|
|
225
|
+
def test_kconv
|
|
226
|
+
# test_sjistoeuc
|
|
227
|
+
assert_equal "\244\242", '��'.sjistoeuc
|
|
228
|
+
assert_equal 'EUC-JP', '��'.sjistoeuc.charset
|
|
229
|
+
|
|
230
|
+
# test_euctosjis
|
|
231
|
+
assert_equal '��', "\244\242".euctosjis
|
|
232
|
+
assert_equal 'Shift_JIS', "\244\242".euctosjis.charset
|
|
233
|
+
|
|
234
|
+
# test_sjistojis
|
|
235
|
+
assert_equal "\e$B$\"\e(B", '��'.sjistojis
|
|
236
|
+
assert_equal 'ISO-2022-JP', '��'.sjistojis.charset
|
|
237
|
+
|
|
238
|
+
# test_jistosjis
|
|
239
|
+
assert_equal '��', "\e$B$\"\e(B".jistosjis
|
|
240
|
+
assert_equal 'Shift_JIS', "\e$B$\"\e(B".jistosjis.charset
|
|
241
|
+
|
|
242
|
+
# test_euctojis
|
|
243
|
+
assert_equal "\e$B$\"\e(B", "\244\242".euctojis
|
|
244
|
+
assert_equal 'ISO-2022-JP', "\244\242".euctojis.charset
|
|
245
|
+
|
|
246
|
+
# test_jistoeuc
|
|
247
|
+
assert_equal "\244\242", "\e$B$\"\e(B".jistoeuc
|
|
248
|
+
assert_equal 'EUC-JP', "\e$B$\"\e(B".jistoeuc.charset
|
|
249
|
+
|
|
250
|
+
# test_some_characters
|
|
251
|
+
assert_equal "\e$B4A;z\e(B", '����'.sjistojis
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
def test_iconv
|
|
255
|
+
assert_equal '��', '��'.sjistou8.u8tosjis
|
|
256
|
+
assert_equal '��', '��'.sjistoeuc.euctou8.u8toeuc.euctosjis
|
|
257
|
+
assert_equal '��', '��'.sjistojis.jistou8.u8tojis.jistosjis
|
|
258
|
+
|
|
259
|
+
# test_sjistou8
|
|
260
|
+
assert_equal "\343\201\202", '��'.sjistou8
|
|
261
|
+
assert_equal 'UTF-8', '��'.sjistou8.charset
|
|
262
|
+
|
|
263
|
+
assert_equal "\342\200\276", '~'.sjistou8
|
|
264
|
+
|
|
265
|
+
# test_u8tosjis
|
|
266
|
+
assert_equal "\202\240", "\343\201\202".u8tosjis
|
|
267
|
+
assert_equal 'Shift_JIS', "\343\201\202".u8tosjis.charset
|
|
268
|
+
|
|
269
|
+
# test_sjistoeuc
|
|
270
|
+
assert_equal "\244\242", '��'.sjistoeuc
|
|
271
|
+
assert_equal 'EUC-JP', '��'.sjistoeuc.charset
|
|
272
|
+
|
|
273
|
+
# test_euctou8
|
|
274
|
+
assert_equal "\343\201\202", "\244\242".euctou8
|
|
275
|
+
assert_equal 'UTF-8', "\244\242".euctou8.charset
|
|
276
|
+
|
|
277
|
+
# test_u8toeuc
|
|
278
|
+
assert_equal "\244\242", "\343\201\202".u8toeuc
|
|
279
|
+
assert_equal 'EUC-JP', "\343\201\202".u8toeuc.charset
|
|
280
|
+
|
|
281
|
+
# test_sjistojis
|
|
282
|
+
assert_equal "\e$B$\"\e(B", "��".sjistojis
|
|
283
|
+
assert_equal 'ISO-2022-JP', "��".sjistojis.charset
|
|
284
|
+
|
|
285
|
+
# test_jistou8
|
|
286
|
+
assert_equal "\343\201\202", "\e$B$\"\e(B".jistou8
|
|
287
|
+
assert_equal 'UTF-8', "\e$B$\"\e(B".jistou8.charset
|
|
288
|
+
|
|
289
|
+
# test_u8tojis
|
|
290
|
+
assert_equal "\e$B$\"\e(B", "\343\201\202".u8tojis
|
|
291
|
+
assert_equal 'ISO-2022-JP', "\343\201\202".u8tojis.charset
|
|
292
|
+
|
|
293
|
+
# test_illegal_sequence
|
|
294
|
+
# last \202 is illegal
|
|
295
|
+
assert_equal "\202\240?", "\343\201\202\202".u8tosjis
|
|
296
|
+
# first \202 is illegal
|
|
297
|
+
assert_equal "?\202\240", "\202\343\201\202".u8tosjis
|
|
298
|
+
|
|
299
|
+
# test_annoying_character
|
|
300
|
+
assert_equal "\343\200\234", '�`'.sjistou8
|
|
301
|
+
assert_equal '�`', "\343\200\234".u8tosjis
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
def test_charset
|
|
305
|
+
s = "\202\240"
|
|
306
|
+
assert_equal nil, s.charset
|
|
307
|
+
assert_equal "\202\240", s.set_charset('Shift_JIS')
|
|
308
|
+
assert_equal 'Shift_JIS', s.charset
|
|
309
|
+
|
|
310
|
+
# test_guess
|
|
311
|
+
assert_equal 'UTF-8', "\343\201\202".guess_charset
|
|
312
|
+
assert_equal 'Shift_JIS', "\202\240".guess_charset # ��
|
|
313
|
+
# assert_equal 'EUC-JP', "\244\242".guess_charset
|
|
314
|
+
assert_equal 'ISO-2022-JP', "\e$B$\"\e(B".guess_charset
|
|
315
|
+
|
|
316
|
+
# test_to
|
|
317
|
+
s = "\202\240".set_sjis
|
|
318
|
+
assert_equal "\343\201\202", s.to_utf8
|
|
319
|
+
assert_equal "\202\240", s.to_sjis
|
|
320
|
+
assert_equal "\244\242", s.to_euc
|
|
321
|
+
assert_equal "\e$B$\"\e(B", s.to_jis
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
def test_bug
|
|
325
|
+
# $KCODE = 'u'
|
|
326
|
+
assert_equal "~", "~".to_utf8
|
|
327
|
+
assert_equal "\342\200\276", "~".set_sjis.to_utf8 # annoying...
|
|
328
|
+
#assert_equal "\343\200\234", "�`".to_utf8
|
|
329
|
+
#assert_equal "\343\200\234", "�`".set_sjis.to_utf8
|
|
330
|
+
end
|
|
331
|
+
end
|
|
332
|
+
end
|