inochi 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/inochi +144 -71
- data/doc/api/classes/Array.html +6 -6
- data/doc/api/classes/File.html +1 -1
- data/doc/api/classes/Inochi.html +24 -40
- data/doc/api/classes/Inochi/Manual.html +2 -2
- data/doc/api/classes/Inochi/Phrases.html +5 -5
- data/doc/api/classes/Inochi/Version.html +3 -3
- data/doc/api/classes/TempDir.html +7 -7
- data/doc/api/created.rid +1 -1
- data/doc/api/files/lib/inochi/book_rb.html +1 -5
- data/doc/api/files/lib/inochi/init_rb.html +1 -1
- data/doc/api/files/lib/inochi/main_rb.html +1 -1
- data/doc/api/files/lib/inochi/rake_rb.html +1 -1
- data/doc/api/files/lib/inochi/util/combo_rb.html +1 -1
- data/doc/api/files/lib/inochi/util/tempdir_rb.html +1 -1
- data/doc/api/files/lib/inochi/util_rb.html +1 -1
- data/doc/api/files/lib/inochi_rb.html +1 -1
- data/doc/api/panel/search_index.js +1 -1
- data/doc/api/panel/tree.js +1 -1
- data/doc/history.erb +90 -5
- data/doc/index.erb +2 -2
- data/doc/index.html +3125 -0
- data/doc/intro.erb +53 -75
- data/doc/setup.erb +53 -2
- data/doc/usage.erb +176 -34
- data/lib/inochi.rb +5 -5
- data/lib/inochi/book.rb +2 -2
- data/lib/inochi/init.rb +2 -2
- data/lib/inochi/main.rb +3 -3
- data/lib/inochi/rake.rb +21 -37
- data/lib/inochi/util.rb +2 -2
- data/lib/inochi/util/combo.rb +2 -2
- data/lib/inochi/util/tempdir.rb +2 -2
- data/rakefile +2 -2
- data/test/inochi.rb +2 -2
- metadata +8 -6
- data/doc/index.xhtml +0 -1984
data/lib/inochi.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright
|
3
|
-
# See
|
2
|
+
# Copyright protects this work.
|
3
|
+
# See LICENSE file for details.
|
4
4
|
#++
|
5
5
|
|
6
6
|
require 'rubygems'
|
@@ -17,9 +17,9 @@ require 'inochi/book'
|
|
17
17
|
require 'inochi/util'
|
18
18
|
|
19
19
|
Inochi.init :Inochi,
|
20
|
-
:version => '1.
|
21
|
-
:release => '2009-
|
22
|
-
:website => 'http://snk.tuxfamily.org/lib/inochi',
|
20
|
+
:version => '1.1.0',
|
21
|
+
:release => '2009-09-06',
|
22
|
+
:website => 'http://snk.tuxfamily.org/lib/inochi/',
|
23
23
|
:tagline => 'Gives life to RubyGems-based software',
|
24
24
|
:require => {
|
25
25
|
'trollop' => '~> 1', # for parsing command-line options
|
data/lib/inochi/book.rb
CHANGED
data/lib/inochi/init.rb
CHANGED
data/lib/inochi/main.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright
|
3
|
-
# See
|
2
|
+
# Copyright protects this work.
|
3
|
+
# See LICENSE file for details.
|
4
4
|
#++
|
5
5
|
|
6
6
|
##
|
@@ -71,7 +71,7 @@ def Inochi.main project_symbol, *trollop_args, &trollop_config
|
|
71
71
|
if options[:manual]
|
72
72
|
require 'launchy'
|
73
73
|
|
74
|
-
manual = File.join(project_module::INSTALL, 'doc', 'index.
|
74
|
+
manual = File.join(project_module::INSTALL, 'doc', 'index.html')
|
75
75
|
Launchy::Browser.run manual
|
76
76
|
|
77
77
|
exit
|
data/lib/inochi/rake.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright
|
3
|
-
# See
|
2
|
+
# Copyright protects this work.
|
3
|
+
# See LICENSE file for details.
|
4
4
|
#++
|
5
5
|
|
6
6
|
##
|
@@ -164,9 +164,7 @@ def Inochi.rake project_symbol, options = {}, &gem_config
|
|
164
164
|
lang_dump_file = 'lang/phrases.yaml'
|
165
165
|
|
166
166
|
desc 'Extract language phrases for translation.'
|
167
|
-
task 'lang:dump' =>
|
168
|
-
|
169
|
-
file lang_dump_file => lang_dump_deps do
|
167
|
+
task 'lang:dump' => lang_dump_deps do
|
170
168
|
ENV['dump_lang_phrases'] = '1'
|
171
169
|
Rake::Task[:test].invoke
|
172
170
|
end
|
@@ -344,7 +342,7 @@ def Inochi.rake project_symbol, options = {}, &gem_config
|
|
344
342
|
|
345
343
|
# user manual
|
346
344
|
doc_man_src = 'doc/index.erb'
|
347
|
-
doc_man_dst = 'doc/index.
|
345
|
+
doc_man_dst = 'doc/index.html'
|
348
346
|
doc_man_deps = FileList['doc/*.erb']
|
349
347
|
|
350
348
|
doc_man_doc = nil
|
@@ -375,16 +373,15 @@ def Inochi.rake project_symbol, options = {}, &gem_config
|
|
375
373
|
|
376
374
|
namespace :doc do
|
377
375
|
namespace :api do
|
378
|
-
require 'sdoc'
|
379
376
|
require 'rake/rdoctask'
|
380
377
|
|
381
378
|
Rake::RDocTask.new do |t|
|
382
379
|
t.rdoc_dir = doc_api_dst
|
383
380
|
t.template = 'direct' # lighter template used on railsapi.com
|
384
|
-
t.options.push '--fmt', 'shtml' # explictly set
|
385
|
-
t.rdoc_files.include '[A-Z]*', 'lib
|
381
|
+
t.options.push '--fmt', 'shtml' # explictly set SDoc generator
|
382
|
+
t.rdoc_files.include '[A-Z]*', '{lib,ext}/**/*.{rb,c}'
|
386
383
|
|
387
|
-
#
|
384
|
+
# regenerate API reference when sources change
|
388
385
|
task t.name => t.rdoc_files
|
389
386
|
|
390
387
|
t.main = options[:license_file]
|
@@ -490,7 +487,7 @@ def Inochi.rake project_symbol, options = {}, &gem_config
|
|
490
487
|
<p>#{project_module::WEBSITE}</p>
|
491
488
|
</center>
|
492
489
|
#{ann_nfo_doc}
|
493
|
-
#{ann_rel_doc}
|
490
|
+
#{ann_rel_doc.to_s.sub ann_rel_doc.parent_tabs_begin, '<div>'}
|
494
491
|
}
|
495
492
|
|
496
493
|
# remove heading navigation menus
|
@@ -505,9 +502,7 @@ def Inochi.rake project_symbol, options = {}, &gem_config
|
|
505
502
|
|
506
503
|
ann_text = nil
|
507
504
|
task :ann_text => :ann_html do
|
508
|
-
|
509
|
-
ann_text = convert_html_to_text[ann_html]
|
510
|
-
end
|
505
|
+
ann_text ||= convert_html_to_text[ann_html]
|
511
506
|
end
|
512
507
|
|
513
508
|
ann_nfo_text = nil
|
@@ -597,15 +592,11 @@ def Inochi.rake project_symbol, options = {}, &gem_config
|
|
597
592
|
CLEAN.include ann_mail_dst
|
598
593
|
|
599
594
|
# packaging
|
600
|
-
|
601
|
-
|
602
|
-
sh $0, 'gem:package'
|
603
|
-
end
|
604
|
-
CLEAN.include 'pkg'
|
605
|
-
|
606
|
-
# ruby gem
|
607
|
-
require 'rake/gempackagetask'
|
595
|
+
directory 'pkg'
|
596
|
+
CLOBBER.include 'pkg'
|
608
597
|
|
598
|
+
desc 'Build a release.'
|
599
|
+
task :gem => [:doc, :ann_text, 'pkg'] do
|
609
600
|
gem_spec = Gem::Specification.new do |gem|
|
610
601
|
authors = project_module::AUTHORS
|
611
602
|
|
@@ -634,10 +625,10 @@ def Inochi.rake project_symbol, options = {}, &gem_config
|
|
634
625
|
# For example, consider the "RedCloth" gem.
|
635
626
|
#
|
636
627
|
gem.name = project_module::PROGRAM
|
637
|
-
|
628
|
+
gem.date = project_module::RELEASE
|
638
629
|
gem.version = project_module::VERSION
|
639
630
|
gem.summary = project_module::TAGLINE
|
640
|
-
gem.description =
|
631
|
+
gem.description = ann_text
|
641
632
|
gem.homepage = project_module::WEBSITE
|
642
633
|
gem.files = FileList['**/*'].exclude('_darcs') - CLEAN
|
643
634
|
gem.has_rdoc = true
|
@@ -667,18 +658,11 @@ def Inochi.rake project_symbol, options = {}, &gem_config
|
|
667
658
|
end
|
668
659
|
|
669
660
|
# additional configuration is done by user
|
670
|
-
|
671
|
-
end
|
672
|
-
|
673
|
-
namespace :gem do
|
674
|
-
Rake::GemPackageTask.new(gem_spec).define
|
675
|
-
|
676
|
-
%w[gem package repackage clobber_package].each do |t|
|
677
|
-
hide_rake_task.call "gem:#{t}"
|
678
|
-
end
|
661
|
+
gem_config.call(gem) if gem_config
|
679
662
|
end
|
680
663
|
|
681
|
-
|
664
|
+
mv Gem::Builder.new(gem_spec).build, 'pkg'
|
665
|
+
end
|
682
666
|
|
683
667
|
# releasing
|
684
668
|
desc 'Publish a release.'
|
@@ -748,7 +732,7 @@ def Inochi.rake project_symbol, options = {}, &gem_config
|
|
748
732
|
|
749
733
|
desc 'Announce to RubyForge news.'
|
750
734
|
task 'pub:ann:forge' => :pub_forge do
|
751
|
-
puts 'Announcing to RubyForge news...'
|
735
|
+
puts '', 'Announcing to RubyForge news...'
|
752
736
|
|
753
737
|
project = options[:rubyforge_project]
|
754
738
|
|
@@ -778,7 +762,7 @@ def Inochi.rake project_symbol, options = {}, &gem_config
|
|
778
762
|
|
779
763
|
desc 'Announce to ruby-talk mailing list.'
|
780
764
|
task 'pub:ann:talk' => :ann_logins do
|
781
|
-
puts 'Announcing to ruby-talk mailing list...'
|
765
|
+
puts '', 'Announcing to ruby-talk mailing list...'
|
782
766
|
|
783
767
|
host = 'http://ruby-forum.com'
|
784
768
|
ruby_talk = 4 # ruby-talk forum ID
|
@@ -840,7 +824,7 @@ def Inochi.rake project_symbol, options = {}, &gem_config
|
|
840
824
|
|
841
825
|
desc 'Announce to RAA (Ruby Application Archive).'
|
842
826
|
task 'pub:ann:raa' => :ann_logins do
|
843
|
-
puts 'Announcing to RAA (Ruby Application Archive)...'
|
827
|
+
puts '', 'Announcing to RAA (Ruby Application Archive)...'
|
844
828
|
|
845
829
|
show_page_error = lambda do |page, message|
|
846
830
|
warn "#{message}, so I can NOT announce this release to RAA:"
|
data/lib/inochi/util.rb
CHANGED
data/lib/inochi/util/combo.rb
CHANGED
data/lib/inochi/util/tempdir.rb
CHANGED
data/rakefile
CHANGED
data/test/inochi.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inochi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Suraj N. Kurapati
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-09-06 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -152,7 +152,9 @@ dependencies:
|
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: 0.3.3
|
154
154
|
version:
|
155
|
-
description: Gives life to RubyGems-based software
|
155
|
+
description: " Inochi 1.1.0\n\n Gives life to RubyGems-based software\n\n http://snk.tuxfamily.org/lib/inochi/\n\n Inochi is an infrastructure for [1]RubyGems-based software\n that encourages good documentation, reduces programming\n effort, and automates common tasks.\n\n\
|
156
|
+
Version 1.1.0 (2009-09-06)\n\n This release improves the user manual and scaffold generator\n output, injects more metadata into gems, adds support for\n Microsoft web browsers, and fixes some bugs.\n\n * [2]New features\n\n * [3]Bug fixes\n\n * [4]Housekeeping\n\n New features\n\n * Add [5]instructions for building gems without Inochi as a\n runtime dependency.\n\n * Put release notes in \"description\" field of gemspec, as\n [6]suggested by Eric Hodel, so that subscribers of [7]the\n RubyForge gems feed are aware of the changes in a\n published gem.\n\n * Set the \"date\" field in gemspec to project release date.\n\n * Change file extension of generated user manuals from\n .xhtml to .html to accomodate Microsoft web browsers'\n inability to process the application/xhtml+xml mime type.\n\n Bug fixes\n\n * The sdoc library was necessary to run `rake test'.\n\n * Forgot to add :develop option to scaffold generator\n output.\n\n * Make \"rake lang:dump\" unconditionally overwrite the dump\n file.\n\n * Fix gem not being built and prevent Maruku errors for the\n dummy \"WordCount\" project in the user manual.\n\n * Use /usr/bin/env instead of /usr/bin/ruby to launch Ruby\n for better portability.\n\n Housekeeping\n\n * Use simpler Copyright reminder at the top of every file.\n\n * Open source is for fun, so [8]be nice: speak of \"related\n works\" instead of \"competitors\".\n\n * Rename \"Tutorial\" to \"General walkthrough\" in user manual\n and add a \"Specific topics\" section for housing uncommon\n use cases.\n\n * Remove \"logistics\" section and redistribute its contents\n in more suitable locations in the user manual.\n\n\
|
157
|
+
References\n\n 1. http://www.rubygems.org/\n 2. http://snk.tuxfamily.org/lib/inochi/#New-features\n 3. http://snk.tuxfamily.org/lib/inochi/#Bug-fixes\n 4. http://snk.tuxfamily.org/lib/inochi/#Housekeeping\n 5. http://snk.tuxfamily.org/lib/inochi/#Build-a-RubyGem-without-Inochi-as-runtime-dependency\n 6. http://www.ruby-forum.com/topic/190220#830072\n 7. http://gems.rubyforge.org/index.rss\n 8. http://loiclemeur.com/english/2009/03/never-criticize-your-competitors.html\n"
|
156
158
|
email: sunaku@gmail.com
|
157
159
|
executables:
|
158
160
|
- inochi
|
@@ -187,8 +189,8 @@ files:
|
|
187
189
|
- doc/intro.erb
|
188
190
|
- doc/setup.erb
|
189
191
|
- doc/inochi.png
|
190
|
-
- doc/index.xhtml
|
191
192
|
- doc/inochi.svg
|
193
|
+
- doc/index.html
|
192
194
|
- doc/api/classes/TempDir.html
|
193
195
|
- doc/api/classes/Inochi/Phrases.html
|
194
196
|
- doc/api/classes/Inochi/Manual.html
|
@@ -236,7 +238,7 @@ files:
|
|
236
238
|
- doc/index.erb
|
237
239
|
- doc/README
|
238
240
|
has_rdoc: true
|
239
|
-
homepage: http://snk.tuxfamily.org/lib/inochi
|
241
|
+
homepage: http://snk.tuxfamily.org/lib/inochi/
|
240
242
|
licenses: []
|
241
243
|
|
242
244
|
post_install_message:
|
@@ -259,7 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
259
261
|
requirements: []
|
260
262
|
|
261
263
|
rubyforge_project: sunaku
|
262
|
-
rubygems_version: 1.3.
|
264
|
+
rubygems_version: 1.3.5
|
263
265
|
signing_key:
|
264
266
|
specification_version: 3
|
265
267
|
summary: Gives life to RubyGems-based software
|
data/doc/index.xhtml
DELETED
@@ -1,1984 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
2
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
3
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
|
4
|
-
<!ENTITY icon_here_frag "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIkSURBVDiNjZJNSxtRFIbfc+cjmZkkfjSCEFuQtghCwUWj0KXb/IQs3GlBKBQ3waWLoNBfIBSkJYI/ILsupIsuGrIqLQGRoEak6KLNmExzZ+aeLuJMZ4oLz+7e97nPORwuMTMeUvOVvTrAW0TUZua1brN2AgAUCVZeH9aZeUsToh2Eaq21Xz3593h3U9P1vcKjojPyPDV0+z0wL3abtYEAgOWNxmYmY7x5ufTMnCsVV4QQn8rrDSduT7STny46mm7AzheEputTAFYBQIxz2llceOxYVgZP5maEbZkxMF/ZnQVg64YR+8xM1gbwCgBEeb0xC8B27GwMTE7mbKIxAKCsG8YouQ/dNDUiEU9QzjnZFFDIWZqmaauRwDAzuf8EYFYvYsFEwUkB+ZyFMBwDADwAKpmzYoDIiwQeM6eAMFQggnd37ARSDpN54EsQqB0JOreDPynAHXgQQrRjQeBrKYGUklkdA4AOoDMcjlKA63oyCMLju+MpK2XfXF4kERPA10hwKv3A/vzl+71At1mTAFINkkUP+crzld0egFLiyu82a2Y0AZY3DnvMnAJa+1Uz7kJ0npuaLmUsG74coX9zfRVlOgBogs6fPy2VZooT6LtDfPtxdpWQgZkPPLe/JDTdGvb7koGjKBMAEITq4OLyxnNvPZxdXEtmPkK6PgS+/+739c9bX47eg7me2kF5vZElom0Ab4noo1Jqu7Vf/XXPLkS3WUv9mb/vR+THZPMfuQAAAABJRU5ErkJggg==">
|
5
|
-
<!ENTITY icon_caution "data:image/png;base64,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">
|
6
|
-
<!ENTITY icon_nav_here "data:image/png;base64,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">
|
7
|
-
<!ENTITY icon_nav_prev "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAABGBJREFUWIXtlltsFVUUhr81e09Pe2pD0VjlFhBEqSRKWk2hpQQxVOIlpURMRNFEojHBS5ACTxIMxhgTjCTGB8ITweCDUQzhARMMUdLqg8QLaRQRpLS0tgV6oe3pOTN7+TDnlHJ6BzU+sJKVPZc96//W2mvPDNy067SFO8gp32KrbjSOd70PFvaZPb7kHCmv9V//zwEqNvuvzLx9/tpXn36bW/IK3i2vtSv+M4CKLbZySsGtu6qXPRvvDS6y+uHn8q31P1+yKXb3vw6w7E1m+Sbn0FOPbIhfuHKK42c+IzAJqpasLvBs8FXpNqZMFsBMdGLpDuImtHVrlr84LRa30tDyLU5DWrv/YMH0h8SaWH5be1P54uluf0MDOtG4E62A5PbaA8sXPTFn1p1zvIbW44AgIjgN+f7cIRYtWJxz17T5Zc1z7K6JisMEK1BRa98qnl3ywsqyNbknmo4wkOrDaZj2gGTQT0dvI0vve9I/23Tq/jtKEk2N9frTPwJQXmseL5o6Y/czVRvjv7bV051oHxQPNRg87h3opD/VQ9mClf5v505WzVzM0cY61zxe/DGXoGJr7N5YLP7p+lWb4i09p+ns/2vMYH9e+oXW3tM8urQmXz0Ol21l5nUDlG5jirrg6POr3sgPpI8LXb9fc18H++xqv6k6fm7+GpsLlSUrC321R0p3EJ80wNq1mJizX1ZXri8qmjpdTrefQFUjUVHEA2MEz4JnBTFKQAKVEEWpP3uQ2TPmmuK5D8zL7bUHABkNYMQeKHzMfvhg8bLqFSU1sZOt35AMo+BOApAQNSHOc6ikSLhuEmEPeA7PE8QDpwEtXWepXFhtW9ubZ9226IrfWOeOjaQ1jGxprVk3o2je3o01O/MQIRX24wgxnuHYmX0EDBC4JD2pDroTbTgNUUAdqCo1xdtQjY7VgQuV/Yc/7u8Z6FxX/354MFvPZl9wKp+0dJxn+94NEaHgVPG2v/QRYhRB6UpeoDe4jPhg8GBQUPCMsHvfO4iSwiMkgssT5IuREh4GULcrEAgGz0tfxo8V2CSegnFc7D9HQjuxOQKSjpcWd04RA6KEYWjvsX6iC0AMhAMkRlqCYQDZ9sMeUuWbAZRLA+dJaBfGFyS93lGGgjpFnOB5Ah5hyiYuf/ceXePFHxcgYylN0BO2YWxUZs+ApCugqrhQkFARb9SGvzGAvqATz4BnJIKwgpeugHOCSPQ+kMnpTxwg6frwbQy81FUIE6lJqFEjOh1jx98ggKIIggqRiDAI4DLCMmn9CQHYNEF6f0eZaiiEuOhWmL6mV1/MHT8SBwaItlQwUuCxAAzgD3Gs5FA1+zU8j2gHyLVNmAFzDlDkSjOFgANSWR6OB2CAnCzng707Ry3RCOYn2rFAXlrDEH13hKgqLjNxpCUTIJbOPAPgDxkzPjSwS2cWZGWbHDIm0+LJbLHRzMuCsENEM8JDv6ZuCMhQmIxoAMP/FSfTtJkSZo+kA2c8A5I5v2n/b/sb+uLjgZR8ftUAAAAASUVORK5CYII=">
|
8
|
-
<!ENTITY icon_tip "data:image/png;base64,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">
|
9
|
-
<!ENTITY icon_important "data:image/png;base64,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">
|
10
|
-
<!ENTITY icon_nav_list "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAABSlJREFUWIXdl1lsVUUYx/8zc7a7daUroXQhlkpoQ4sVA8b6gilbIEIDggEiEiSRFwzEJ/pCXXjgQR8sAW0I0QQSicZIiC9IsClFFqlC6HorXW/Xe+/p7b3nnpnxobbpJW1pS+uD3+N3vpn/b2b+c853gP9rrNp1WZtNHVlo4ZLDl/YzkC+lhAMUZ+9Uv3MCIHK6eraQ4sXvX9ri0tVvD2wtMt4oyaZPvP1rE1bf93ff/f72dGMWbAcKj1xMNYTSeGh7cbxUFNhcQpE2Lvxwz1Sj4czfvn4vONU4ulAAGicni/LTjYR4Jxo7g2jzjSAzJQ5Ll3iUCDUqphu3IACF7150MUqPvr4mS2/sCkICEEKic3AUhfkZBlXJjkUF0HW6JTXJTVwOHYOmNZHv80eQlRYHSFLyQgCrdlXOeKUkIRtezklVff5ITH7U4vC4dAjO00sOVzvnASDJ8vJPz5ghPZSz+ZNg9uaq/VNOQkmypjMaifKYvC0kKBn3eaI6Z4DsTZ9/mBTvOHZ0TxnbVV7q1hXlfO6mqi3P1nEhvIFg2NbU2Ol0hcIM2yAgPHcI5pwA8rd95iFEnN5UVqS19piQTMHO8lJFEHIpb+OZ1Mm1DLjT1jVsexyxizQ0hkF/CJSSlitXKmK353kAYc4rUpPilbQlcXjQ5MOv9zvgdjuwesVSw1b4yRgAxut7B4KGxgjIpDdLSpyOx20+Swh5dTqdaQEo2I6VKzKNJ0+HwIWEkBJ1j7rx6ppcnVIcTdt4xjVeawmHyYVE1BYTZ+5xqFCpxMOmHoVSXJgzAICSrPREtHX7JxKdfSaYoiIj2UMczJ7kBVuldExY/Gu83FQXrtc2WlLImtvVe5vmBJC5tdIppUh3OjUEQ1bMM29PAMsyl6gScgMAFB+6WECkuOlxaLBsCQkgM8lAR++wbO0cClpW9PgMi5wawBg1VACghMJ65mqFLRuMMUooSwYAytgxl6EWFOSlcv9oFJpCkehScb22kQsujzyoOTg8Z4DWxFxTEvDASBhOI9bZDk1BYCRsQwovADCCbbvfKsS6wizW548gJU5HQ4tPhsJRJcevTWu+GQFwpYJT0BbfoIl4V+xL0O3Q0NfvtyXFnZLD1SrnMlNRGf78O4BwlCMlXofKxhcisucHAEAKcbW1vdfKSHZP5AgBDI2if9g0OHi9orscACAkgS3Geo5AKIqoJSVltPbuud0t8wagjF3wdvUpTo0izjm2C4yOeYJzAS2smLe/2BdglA72Do0gwaki2aMhErFQ+9ArbFvMaL7nArT+dKKJc1FT/0eztTI7GZQQcCEmrpniUFQAICBnb/7eEtaZBOwofrzxyLI5P3Xv/L662QDM2BFlb69MQFRvXlf8UlIUKmnvCWBtfhpu1TXADEUeS0LfznmltCnU3V0jBN9DKIsQKU7Xn9tbNVMfOGsAAMgpr9qpG9p3b64vUhraBpCe5IQ5PMzbO3xsNBL9yvvzxx8AQNmBb4wbNQfDsxGdHM/tB9rcK66GI1Glpb1HZiS70DUwgrycpWx9aQEIJdvG6+YjPiuAZaY3GwA0hSHBrcOKcjxo9kGAQgqZWVJSPeV3fsEAnl470UIJqbVsLobNsY4nagtwPnbE/tRux6ICAIAQ5Hirt0sKbiPJY8Dj1DDoN0FABpuvVQYWHcB77WQdF/JUw1/Nlko44gyK5raOMICzLyIOzOHPaLjpl1vuvFuir3/otW7fAOO2vLw8FP7I670hXhRizpFdVmn856KLFf8AcP0p5DnhnVEAAAAASUVORK5CYII=">
|
11
|
-
<!ENTITY icon_note "data:image/png;base64,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">
|
12
|
-
<!ENTITY icon_hyperlink "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAFVBMVEVmmcwzmcyZzP8AZswAZv////////9E6giVAAAAB3RSTlP///////8AGksDRgAAADhJREFUGFcly0ESAEAEA0Ei6/9P3sEcVB8kmrwFyni0bOeyyDpy9JTLEaOhQq7Ongf5FeMhHS/4AVnsAZubxDVmAAAAAElFTkSuQmCC">
|
13
|
-
<!ENTITY icon_warning "data:image/png;base64,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">
|
14
|
-
<!ENTITY icon_quote "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAU3SURBVGiB7VlPaBRXHP5+82aTSLIrkY3YJR68VmuSPXlRPPQPGg05iD14sZfEUkpbPJQqQVJs0yQlkEDobaE9CaloTlI0InhYNOBi2yAFT0JxZW2ysn/cmTczvx4ym+7Ozs7uzK6kQj54zOzvzbz3fe/3583MEjPjbYay3QRaxY6A7caOgO2G2uoAExMTB4QQVy3LGrEsq+XxnFAUpcDMCVVVv71y5Ure2d/yhKqqLgwPDw8PDg6SEMLzWj8lu3ytlLLr9u3bXzx48OAlgJma+f3Rrcb4+HgoGo1+FI/HSUoJKWVDQpXnThsR1fSHQiEcP36849GjR2NtFxCLxYSu64qiKDBNsyXyAGBZVo3NNE2EQiEA2OU2dttj1gkvwn766+GNCvAi50eQF96IgCCrHVRQ2wW0Sq7tHhgfHw/FYrF69bELAAzDgGEYvsipqtoU+cA5MDExcUBV1Z/27t37vld97+rqEtPT056TOCGlRF9fH44dO4b9+/cHTmDAQ4AQ4uqpU6c+jMfj5Itdk0in07h27RrOnz+/ZWurByzLGjl8+DBpmlZVn5tBo/AhIuzbtw+GYSCfz6OnpycQ+UYCVCEEDMNoG/GKscHM6O7ursodv+Q9BfhBOypL0ErUsoBmCDda2WbKLTO75mJgAX43paB7QYWdiIjYsQK+X2gqB3WbqFmbc0wvQfZvBUC3815fHggaLl4hREQgoq1KV36kLh/LhYSZNQCdAKpeapoS0I5wqSciEokgEokgm80CAHbv3g0hxNY1hmHg3r17xvr6+q9u3BoKCLrCzfRJKTE3N2devHhRhMNh5HI5qKqKyclJSCl1+7bSxsbG8srKys8AXgcS4IzddnmEiEpPnjz5anFxcebChQvhPXv2AAA0TeOFhYUjxWJRBWAAKADYcBPQVBK3kqxeNgD86tWr35PJ5Oj8/PxGMpnUmRnRaLR09uzZAQAv7ZYB8I+zAgFtDiG/HiEi7u3tzV+/fn0tm82+p+v6lw8fPvyso6Ojo7+///uDBw8eWltbKwKo+7Ld0AOVIeRczRZXHwAgpRQA1GQy+Xp2dva7W7duHXr+/HnCNM2+EydOfAqAsLnQgohUIqri/EZDyE20Y1wqFoudAEI2SfXOnTvZqampr58+fTrAzO+cPn26z+ap2GIUKtdY1AkhIlIvX75cQ8rt6MfmNlWpVOqyyVU+8vLS0tLfAL5x2AGgasB6OdBJRKZpmnB+MqncdCptdlWpjO8tmxOKokBRFORyOWiaxrYAaZOz7GP53Ko4N5m5avIaAUQkAKi6rv+WSqVG4/G4UvlGJqVEPp+HEAKRSKSOfm9YloVnz56hUCi8XF1dTdvkpIN8pQDLrQK5CijrSCaT05ZldS4vL3/AzAIADQ0NWaOjoyoRIRwO4+7du3JlZUXA4dZGsPPhz8ePH/8AQLPb6zLxemRdibo8mxCAHrt1A+gAwGfOnDly7ty5xZGRkV0AsLq6Km/cuLGWSCQ+yWQymh8B+C8hS9jcpHLMXPPhthnUeICZmYh0bK4KAdABcCwWG+jv71dN08TNmzdLqVTqr6WlpY8zmUzN7uhDgG6LKAYhD7h4YKuDqBObn03EyZMno4ODg38cPXpUSaVShRcvXkwmEolfcrlc/Q+i3ignlQ6gyMxBx6m/EzOzZntCDAwM/AgA9+/fn02n01OJRKIQdEIbyuYUwYmXUdcDZVy6dOldZv7cNM3JmZmZdKsTth3OXdPZxsbGQo2u2c7W0AP/d7z1f/LtCNhu7AjYbrz1Av4F8/cV1apw1zkAAAAASUVORK5CYII=">
|
15
|
-
<!ENTITY icon_nav_next "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAABFpJREFUWIXtl0tsVFUYx3/n3HunLYhQwDRqpKZKhSYIMSAGI+ICI02UBejGBBMUURdu0Lgl7gg0QWNiYtDEBBcErZhACOKjPNqC8jBCqTwDobS0Bfqgnce955zPxcy00zItFyNhw5f8c2fmnDn/3/edx70X7sc9DhWn06J1vvheAICIYJ257X8Sk0xZw3rSt+vnxwEA+HTN1zhnsWKwzmDF4JzBOosr+C2yId/U14X9KVMC/yMAwIEL24lMmshliGyGyKaJbIbQpolsSMYkWTb7XQQk7pg6bkeVmy2lbp21fBsS2/fOAeKEw909AMlVVYpkmW+Lszj/M0DOHUEQGal8m7ubACKCE5fLNi+GgCKXGarEXQHIWjlEHK5AkAVLR4N3bA5FtuGidX42DUUKQAkJIZ9pFkAQUILSgohhMLqOKIsa3gwlJdbvXvQRJsdeBtBUZ27ZQreeA6I+WFiz9PPli1eVgUPIZioiWLGgHQqHVkJoB+gNuxDP4nsaEUgkSljz+jrEESAEIsIPv3wbXuvt+KRYBYoexc9/7H25cvH7q5+orE6c6GjA2AgjIY4IKyEp28+NdBsZmxxxLogI4kCcoAh4qWoVx0/+mW49f6z+4Eb7ZjGvomsg3Wc/3NG45URPb4+tnDoHhwFtQVt6wja6UucwKoUfaPxA4ScUXqCGvnuB5tnKWq52d7hT549f9Cfat4v5jAlw9CuiyKRrt/78Wd8EPUUqJlci2nI9c5l+04kOwAt01jihc581Xs68umIBZbqchkO7B8SZV8a7KY25C5o20TUweHPZd3u+yMyYPIeEX0JfeBXP13j+cKZ+IluBbCU0Dz34GDPLF7Jrb30qMuaNpjoujeUB4I3X2HbIXZk6b6Cz9+b1pXOrnws6kq04HWUz9TWen71qT6E8RWkwkYUPr2RPw85kZ0/7pqaNZst4498WAOBysztWWtP+pFg165nqF/z2ZCvak2HzQON5Ck9rFlSsoKWlJTpx+q/Gxg1mzHkvjFgHUe9Eu/ZYa+M/Xe037LyKl9GeQnv5hafwEoqa6Uu42ZOUxiP7ulNEK4h5S44F0LKeUIWmdm/jzt5EOJWqyfNRGpRWaF/x6KTZlKsqftxVn4qsXnZ0A31xxo0NAHBgMx2ZTPjajt3bUzPK5jO99HEAHvCmMXPCEr7/aVvSZFJrD28K/447JsRYAzlIHwjaml3XtKej3qvdbS8umbc86AkvM7f8VX7d91v6wsUz2xrr7GYgyEkXJDjmdIwFkDctyak0ryt/uFOTavqfMsZULZ61wm89c9I0Hz5w7uhW854ZxAcSBRB+zsNj+NQdAVMMYCjjUUrkVNJ1VvarRzprk8nklKYjB5Nn94Rv9V0gVWCWz16NEjDysWm8CozW0CA2hRjjfk9P6Fh97Yx959J+OZ0b2AF21LVQZjTAeO8FOgdYWMbC7PJQ+ZBRZjZnmJejyFqI9WJS0LeYCgEKdedPqPfjXsS/6zUvFnaUbdsAAAAASUVORK5CYII=">
|
16
|
-
]>
|
17
|
-
<html xmlns="http://www.w3.org/1999/xhtml">
|
18
|
-
<head>
|
19
|
-
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/>
|
20
|
-
<meta name="generator" content="ERBook 7.0.0"/>
|
21
|
-
|
22
|
-
<title>Inochi 1.0.0</title>
|
23
|
-
|
24
|
-
<meta name="author" content="Suraj N. Kurapati"/>
|
25
|
-
|
26
|
-
<meta name="date" content="04 May 2009"/>
|
27
|
-
|
28
|
-
<link rel="alternate" type="application/rss+xml" href="http://snk.tuxfamily.org/lib/inochi/ann.xml"/>
|
29
|
-
|
30
|
-
<style type="text/css" media="all">
|
31
|
-
/*<![CDATA[*/ body{color:#000;background-color:#FFF;line-height:1.5em;font-family:Calibri, Verdana, sans-serif}blockquote{color:#333;font-style:italic}em,strong,dt{font-family:Constantia, "Book Antiqua", "URW Bookman L", serif}hr{height:0;border:0;border-top:thin dashed#000}tt,code,pre{font-family:Monaco, Consolas, "Lucida Console", monospace;font-size:100%}code.para{white-space:pre}a > img{border:none}dt{margin-top:1.5em;font-weight:bolder}h1,h2,h3,h4,h5,h6,.title{font-weight:lighter;font-family:Constantia, "Book Antiqua", "URW Bookman L", serif}#lof h1,#lof h2,#lof h3,#lof h4,#lof h5,#lof h6{margin-top:1.25em}#content h1,#content h2,#content h3,#content h4,#content h5,#content h6{margin-top:2.5em;line-height:1.25em}#content h1{font-size:2.0em}#content h2{font-size:1.8em}#content h3{font-size:1.6em}#content h4{font-size:1.4em}#content h5{font-size:1.2em}#content h6{font-size:1.0em}table{border-collapse:collapse;margin:auto;margin-top:1em}th,td{padding:1em;border:1px solid #bbb;vertical-align:top;background-color:#FFF}th{background-color:#F5F5F5}#header{text-align:center}#header > .title{font-size:2.25em}#header > .subtitle{}#header > .authors{margin-top:1.625em;margin-bottom:-0.25em}#header > .date{}.logo,.header_outside_above,#header,.header_outside_below{margin-bottom:5em}.footer_outside_above,#footer,.footer_outside_below{margin-top:5em}#header .header_inside_above,#footer .footer_inside_above{margin-bottom:4em}#header .header_inside_below,#footer .footer_inside_below{margin-top:4em}#Abstract{margin-bottom:5em}#toc li{list-style-type:none}#toc li ul{padding-bottom:1em;border-left:thick solid #F5F5F5}#toc li ul:hover{border-color:#DCDCDC}#toc > ul{padding-left:1em}#bib{margin-top:5em}#footer{border-top:thick dotted #DCDCDC;padding-top:1em;text-align:center}#footer-credits{margin-top:2em;margin-bottom:2em}.part > .title,.chapter > .title{padding-bottom:.5em}.part > .title > big,.chapter > .title > big{display:block;margin-top:.25em}.paragraph > .title,.tip > .title,.note > .title,.caution > .title,.warning > .title,.important > .title,.figure > .title,.table > .title,.example > .title,.equation > .title,.procedure > .title{font-size:large;margin-top:2em}.tip,.note,.caution,.warning,.important,.figure,.table,.example,.equation,.procedure{margin:3em}.tip .nav,.note .nav,.caution .nav,.warning .nav,.important .nav,.figure .nav,.table .nav,.example .nav,.equation .nav,.procedure .nav{margin-right:-3em}.tip > .content,.note > .content,.caution > .content,.warning > .content,.important > .content,.figure > .content,.table > .content,.example > .content,.equation > .content,.procedure > .content{min-height:48px}.tip > .content > .icon,.note > .content > .icon,.caution > .content > .icon,.warning > .content > .icon,.important > .content > .icon{float:left;margin:0 1em 1em 0}.figure > .title{text-align:center}.figure > .content img{display:block;margin:auto}/*]]>*/
|
32
|
-
</style>
|
33
|
-
|
34
|
-
<style type="text/css" media="screen">
|
35
|
-
/*<![CDATA[*/ body{margin:0;padding:.5em;background-color:#FFF}#body{margin:auto;max-width:38em}tt{background-color:#F0F8FF}pre,code.para{cursor:text;line-height:normal;border:1px solid #b1d827;background-color:#F5FFDF;padding:1em;display:inline-block;margin:0;min-width:92.5%}code.para,pre.para{background-color:#FFFFE8;border-color:#ED8}a{text-decoration:none}a:hover{text-decoration:underline}a:link{color:#0038E1}a:visited{color:#800080}#toc a:target,#lof a:target,#nav a:target{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIkSURBVDiNjZJNSxtRFIbfc+cjmZkkfjSCEFuQtghCwUWj0KXb/IQs3GlBKBQ3waWLoNBfIBSkJYI/ILsupIsuGrIqLQGRoEak6KLNmExzZ+aeLuJMZ4oLz+7e97nPORwuMTMeUvOVvTrAW0TUZua1brN2AgAUCVZeH9aZeUsToh2Eaq21Xz3593h3U9P1vcKjojPyPDV0+z0wL3abtYEAgOWNxmYmY7x5ufTMnCsVV4QQn8rrDSduT7STny46mm7AzheEputTAFYBQIxz2llceOxYVgZP5maEbZkxMF/ZnQVg64YR+8xM1gbwCgBEeb0xC8B27GwMTE7mbKIxAKCsG8YouQ/dNDUiEU9QzjnZFFDIWZqmaauRwDAzuf8EYFYvYsFEwUkB+ZyFMBwDADwAKpmzYoDIiwQeM6eAMFQggnd37ARSDpN54EsQqB0JOreDPynAHXgQQrRjQeBrKYGUklkdA4AOoDMcjlKA63oyCMLju+MpK2XfXF4kERPA10hwKv3A/vzl+71At1mTAFINkkUP+crzld0egFLiyu82a2Y0AZY3DnvMnAJa+1Uz7kJ0npuaLmUsG74coX9zfRVlOgBogs6fPy2VZooT6LtDfPtxdpWQgZkPPLe/JDTdGvb7koGjKBMAEITq4OLyxnNvPZxdXEtmPkK6PgS+/+739c9bX47eg7me2kF5vZElom0Ab4noo1Jqu7Vf/XXPLkS3WUv9mb/vR+THZPMfuQAAAABJRU5ErkJggg==");background-position:center right;background-repeat:no-repeat;padding-right:20px}.nav{float:right;margin-top:-0.25em}.nav > a > img{border-top:thick solid#FFF}.nav > a > img:hover{border-top:thick solid #FA8072}#nav{margin-bottom:4em;text-align:center}/*]]>*/
|
36
|
-
</style>
|
37
|
-
|
38
|
-
<style type="text/css" media="print">
|
39
|
-
/*<![CDATA[*/ tt{font-weight:400}pre{border:none}h1,h2,h3,h4,h5,h6{font-weight:400;clear:both}a:link,a:visited{color:#000;text-decoration:none}a[href]:not([href^="#"]):link,a[href]:not([href^="#"]):visited,a.xref[title]:link,a.xref[title]:visited{color:#00F;text-decoration:underline;font-weight:bolder}a[href]:not([href^="#"]):after{content:" " attr(href);font-family:Monaco, Consolas, "Lucida Console", monospace}a.xref[title]:after{content:" " attr(title)}a:after{font-weight:400;font-size:smaller}#nav,.nav,#lof{display:none}#toc,.part,.chapter,#bib{page-break-before:always}.part > .title > big,.chapter > .title > big{padding-bottom:.5em}/*]]>*/
|
40
|
-
</style>
|
41
|
-
|
42
|
-
<style type="text/css" media="screen">
|
43
|
-
/*<![CDATA[*/
|
44
|
-
/* decorate external hyperlinks with a visual indicator */
|
45
|
-
a[href]:not([href^="#"])
|
46
|
-
{
|
47
|
-
background : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAFVBMVEVmmcwzmcyZzP8AZswAZv////////9E6giVAAAAB3RSTlP///////8AGksDRgAAADhJREFUGFcly0ESAEAEA0Ei6/9P3sEcVB8kmrwFyni0bOeyyDpy9JTLEaOhQq7Ongf5FeMhHS/4AVnsAZubxDVmAAAAAElFTkSuQmCC");
|
48
|
-
background-position : center right;
|
49
|
-
background-repeat : no-repeat;
|
50
|
-
padding-right : 13px;
|
51
|
-
}
|
52
|
-
|
53
|
-
/* display icon for blockquote elements */
|
54
|
-
blockquote
|
55
|
-
{
|
56
|
-
background-image : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAU3SURBVGiB7VlPaBRXHP5+82aTSLIrkY3YJR68VmuSPXlRPPQPGg05iD14sZfEUkpbPJQqQVJs0yQlkEDobaE9CaloTlI0InhYNOBi2yAFT0JxZW2ysn/cmTczvx4ym+7Ozs7uzK6kQj54zOzvzbz3fe/3583MEjPjbYay3QRaxY6A7caOgO2G2uoAExMTB4QQVy3LGrEsq+XxnFAUpcDMCVVVv71y5Ure2d/yhKqqLgwPDw8PDg6SEMLzWj8lu3ytlLLr9u3bXzx48OAlgJma+f3Rrcb4+HgoGo1+FI/HSUoJKWVDQpXnThsR1fSHQiEcP36849GjR2NtFxCLxYSu64qiKDBNsyXyAGBZVo3NNE2EQiEA2OU2dttj1gkvwn766+GNCvAi50eQF96IgCCrHVRQ2wW0Sq7tHhgfHw/FYrF69bELAAzDgGEYvsipqtoU+cA5MDExcUBV1Z/27t37vld97+rqEtPT056TOCGlRF9fH44dO4b9+/cHTmDAQ4AQ4uqpU6c+jMfj5Itdk0in07h27RrOnz+/ZWurByzLGjl8+DBpmlZVn5tBo/AhIuzbtw+GYSCfz6OnpycQ+UYCVCEEDMNoG/GKscHM6O7ursodv+Q9BfhBOypL0ErUsoBmCDda2WbKLTO75mJgAX43paB7QYWdiIjYsQK+X2gqB3WbqFmbc0wvQfZvBUC3815fHggaLl4hREQgoq1KV36kLh/LhYSZNQCdAKpeapoS0I5wqSciEokgEokgm80CAHbv3g0hxNY1hmHg3r17xvr6+q9u3BoKCLrCzfRJKTE3N2devHhRhMNh5HI5qKqKyclJSCl1+7bSxsbG8srKys8AXgcS4IzddnmEiEpPnjz5anFxcebChQvhPXv2AAA0TeOFhYUjxWJRBWAAKADYcBPQVBK3kqxeNgD86tWr35PJ5Oj8/PxGMpnUmRnRaLR09uzZAQAv7ZYB8I+zAgFtDiG/HiEi7u3tzV+/fn0tm82+p+v6lw8fPvyso6Ojo7+///uDBw8eWltbKwKo+7Ld0AOVIeRczRZXHwAgpRQA1GQy+Xp2dva7W7duHXr+/HnCNM2+EydOfAqAsLnQgohUIqri/EZDyE20Y1wqFoudAEI2SfXOnTvZqampr58+fTrAzO+cPn26z+ap2GIUKtdY1AkhIlIvX75cQ8rt6MfmNlWpVOqyyVU+8vLS0tLfAL5x2AGgasB6OdBJRKZpmnB+MqncdCptdlWpjO8tmxOKokBRFORyOWiaxrYAaZOz7GP53Ko4N5m5avIaAUQkAKi6rv+WSqVG4/G4UvlGJqVEPp+HEAKRSKSOfm9YloVnz56hUCi8XF1dTdvkpIN8pQDLrQK5CijrSCaT05ZldS4vL3/AzAIADQ0NWaOjoyoRIRwO4+7du3JlZUXA4dZGsPPhz8ePH/8AQLPb6zLxemRdibo8mxCAHrt1A+gAwGfOnDly7ty5xZGRkV0AsLq6Km/cuLGWSCQ+yWQymh8B+C8hS9jcpHLMXPPhthnUeICZmYh0bK4KAdABcCwWG+jv71dN08TNmzdLqVTqr6WlpY8zmUzN7uhDgG6LKAYhD7h4YKuDqBObn03EyZMno4ODg38cPXpUSaVShRcvXkwmEolfcrlc/Q+i3ignlQ6gyMxBx6m/EzOzZntCDAwM/AgA9+/fn02n01OJRKIQdEIbyuYUwYmXUdcDZVy6dOldZv7cNM3JmZmZdKsTth3OXdPZxsbGQo2u2c7W0AP/d7z1f/LtCNhu7AjYbrz1Av4F8/cV1apw1zkAAAAASUVORK5CYII=");
|
57
|
-
background-repeat : no-repeat;
|
58
|
-
margin-left : 0;
|
59
|
-
padding-left : 65px;
|
60
|
-
min-height : 50px;
|
61
|
-
}
|
62
|
-
/*]]>*/
|
63
|
-
</style>
|
64
|
-
|
65
|
-
<script type="text/javascript">
|
66
|
-
//<![CDATA[
|
67
|
-
/*
|
68
|
-
* jQuery JavaScript Library v1.3.2
|
69
|
-
* http://jquery.com/
|
70
|
-
*
|
71
|
-
* Copyright (c) 2009 John Resig
|
72
|
-
* Dual licensed under the MIT and GPL licenses.
|
73
|
-
* http://docs.jquery.com/License
|
74
|
-
*
|
75
|
-
* Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
|
76
|
-
* Revision: 6246
|
77
|
-
*/
|
78
|
-
(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
|
79
|
-
/*
|
80
|
-
* Sizzle CSS Selector Engine - v0.9.3
|
81
|
-
* Copyright 2009, The Dojo Foundation
|
82
|
-
* Released under the MIT, BSD, and GPL Licenses.
|
83
|
-
* More information: http://sizzlejs.com/
|
84
|
-
*/
|
85
|
-
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
|
86
|
-
/**
|
87
|
-
* jQuery.ScrollTo - Easy element scrolling using jQuery.
|
88
|
-
* Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
89
|
-
* Dual licensed under MIT and GPL.
|
90
|
-
* Date: 3/9/2009
|
91
|
-
* @author Ariel Flesler
|
92
|
-
* @version 1.4.1
|
93
|
-
*
|
94
|
-
* http://flesler.blogspot.com/2007/10/jqueryscrollto.html
|
95
|
-
*/
|
96
|
-
;(function($){var m=$.scrollTo=function(b,h,f){$(window).scrollTo(b,h,f)};m.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1};m.window=function(b){return $(window).scrollable()};$.fn.scrollable=function(){return this.map(function(){var b=this,h=!b.nodeName||$.inArray(b.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!h)return b;var f=(b.contentWindow||b).document||b.ownerDocument||b;return $.browser.safari||f.compatMode=='BackCompat'?f.body:f.documentElement})};$.fn.scrollTo=function(l,j,a){if(typeof j=='object'){a=j;j=0}if(typeof a=='function')a={onAfter:a};if(l=='max')l=9e9;a=$.extend({},m.defaults,a);j=j||a.speed||a.duration;a.queue=a.queue&&a.axis.length>1;if(a.queue)j/=2;a.offset=n(a.offset);a.over=n(a.over);return this.scrollable().each(function(){var k=this,o=$(k),d=l,p,g={},q=o.is('html,body');switch(typeof d){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px)?$/.test(d)){d=n(d);break}d=$(d,this);case'object':if(d.is||d.style)p=(d=$(d)).offset()}$.each(a.axis.split(''),function(b,h){var f=h=='x'?'Left':'Top',i=f.toLowerCase(),c='scroll'+f,r=k[c],s=h=='x'?'Width':'Height';if(p){g[c]=p[i]+(q?0:r-o.offset()[i]);if(a.margin){g[c]-=parseInt(d.css('margin'+f))||0;g[c]-=parseInt(d.css('border'+f+'Width'))||0}g[c]+=a.offset[i]||0;if(a.over[i])g[c]+=d[s.toLowerCase()]()*a.over[i]}else g[c]=d[i];if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],u(s));if(!b&&a.queue){if(r!=g[c])t(a.onAfterFirst);delete g[c]}});t(a.onAfter);function t(b){o.animate(g,j,a.easing,b&&function(){b.call(this,l,a)})};function u(b){var h='scroll'+b;if(!q)return k[h];var f='client'+b,i=k.ownerDocument.documentElement,c=k.ownerDocument.body;return Math.max(i[h],c[h])-Math.min(i[f],c[f])}}).end()};function n(b){return typeof b=='object'?b:{top:b,left:b}}})(jQuery);
|
97
|
-
/**
|
98
|
-
* jQuery.LocalScroll - Animated scrolling navigation, using anchors.
|
99
|
-
* Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
100
|
-
* Dual licensed under MIT and GPL.
|
101
|
-
* Date: 3/11/2009
|
102
|
-
* @author Ariel Flesler
|
103
|
-
* @version 1.2.7
|
104
|
-
**/
|
105
|
-
;(function($){var l=location.href.replace(/#.*/,'');var g=$.localScroll=function(a){$('body').localScroll(a)};g.defaults={duration:1e3,axis:'y',event:'click',stop:true,target:window,reset:true};g.hash=function(a){if(location.hash){a=$.extend({},g.defaults,a);a.hash=false;if(a.reset){var e=a.duration;delete a.duration;$(a.target).scrollTo(0,a);a.duration=e}i(0,location,a)}};$.fn.localScroll=function(b){b=$.extend({},g.defaults,b);return b.lazy?this.bind(b.event,function(a){var e=$([a.target,a.target.parentNode]).filter(d)[0];if(e)i(a,e,b)}):this.find('a,area').filter(d).bind(b.event,function(a){i(a,this,b)}).end().end();function d(){return!!this.href&&!!this.hash&&this.href.replace(this.hash,'')==l&&(!b.filter||$(this).is(b.filter))}};function i(a,e,b){var d=e.hash.slice(1),f=document.getElementById(d)||document.getElementsByName(d)[0];if(!f)return;if(a)a.preventDefault();var h=$(b.target);if(b.lock&&h.is(':animated')||b.onBefore&&b.onBefore.call(b,a,f,h)===false)return;if(b.stop)h.stop(true);if(b.hash){var j=f.id==d?'id':'name',k=$('<a> </a>').attr(j,d).css({position:'absolute',top:$(window).scrollTop(),left:$(window).scrollLeft()});f[j]='';$('body').prepend(k);location=e.hash;k.remove();f[j]=d}h.scrollTo(f,b).trigger('notify.serialScroll',[f])}})(jQuery);
|
106
|
-
|
107
|
-
$(document).ready(
|
108
|
-
function(){
|
109
|
-
$.localScroll({
|
110
|
-
// the default 1000 is too slow, and 500 is too fast
|
111
|
-
duration: 700,
|
112
|
-
|
113
|
-
// allow the CSS ':target' pseudo-selector to work properly
|
114
|
-
hash: true, onAfter: function(){ location = location; }
|
115
|
-
});
|
116
|
-
}
|
117
|
-
);
|
118
|
-
//]]>
|
119
|
-
</script>
|
120
|
-
</head>
|
121
|
-
<body>
|
122
|
-
<div id="body">
|
123
|
-
<div id="nav"><a id="rev:Contents" href="#Contents">Contents</a> · <a id="rev:Tips" href="#Tips">Tips</a></div>
|
124
|
-
|
125
|
-
<br style="display: none"/>
|
126
|
-
<hr style="display: none"/>
|
127
|
-
<br style="display: none"/>
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
<div id="header">
|
133
|
-
|
134
|
-
|
135
|
-
<div class="logo"><a class="xref" href="#Credits" title="Section 1.3. "Credits""><img src='inochi.png' alt='Inochi logo' /></a></div>
|
136
|
-
|
137
|
-
<h1 class="title">Inochi 1.0.0</h1>
|
138
|
-
|
139
|
-
<h2 class="subtitle">Gives life to RubyGems-based software</h2>
|
140
|
-
|
141
|
-
<h3 class="authors"><a href="mailto:sunaku@gmail.com">Suraj N. Kurapati</a></h3>
|
142
|
-
|
143
|
-
<h3 class="date">04 May 2009</h3>
|
144
|
-
|
145
|
-
|
146
|
-
</div>
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
<br style="display: none"/>
|
154
|
-
<hr style="display: none"/>
|
155
|
-
<br style="display: none"/>
|
156
|
-
|
157
|
-
|
158
|
-
<div id="toc">
|
159
|
-
<a name="Contents"/><div class="nav" id="Contents"><a title="Focus this segment" href="#Contents"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Return to listing" href="#rev:Contents"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
160
|
-
<h1 class="title">Contents</h1>
|
161
|
-
<ul><li>1 <a id="rev:Introduction" href="#Introduction">Introduction</a><ul><li><a id="rev:Etymology" href="#Etymology">Etymology</a></li><li>1.1 <a id="rev:Logistics" href="#Logistics">Logistics</a><ul><li><a id="rev:Version-numbers" href="#Version-numbers">Version numbers</a></li></ul></li><li>1.2 <a id="rev:License" href="#License">License</a></li><li>1.3 <a id="rev:Credits" href="#Credits">Credits</a></li></ul></li><li>2 <a id="rev:Setup" href="#Setup">Setup</a><ul><li>2.1 <a id="rev:Requirements" href="#Requirements">Requirements</a></li><li>2.2 <a id="rev:Installation" href="#Installation">Installation</a></li><li>2.3 <a id="rev:Manifest" href="#Manifest">Manifest</a></li></ul></li><li>3 <a id="rev:Usage" href="#Usage">Usage</a><ul><li>3.1 <a id="rev:Command-line-interface" href="#Command-line-interface">Command-line interface</a></li><li>3.2 <a id="rev:Ruby-library-interface" href="#Ruby-library-interface">Ruby library interface</a></li><li>3.3 <a id="rev:Tutorial" href="#Tutorial">Tutorial</a><ul><li>3.3.1 <a id="rev:Have-a-brilliant-idea" href="#Have-a-brilliant-idea">Have a brilliant idea</a></li><li>3.3.2 <a id="rev:Generate-your-project" href="#Generate-your-project">Generate your project</a><ul><li><a id="rev:View-Rake-tasks" href="#View-Rake-tasks">View Rake tasks</a></li><li><a id="rev:Run-unit-tests" href="#Run-unit-tests">Run unit tests</a></li><li><a id="rev:Run-project-executable" href="#Run-project-executable">Run project executable</a></li><li><a id="rev:Show-user-manual" href="#Show-user-manual">Show user manual</a></li></ul></li><li>3.3.3 <a id="rev:Configure-your-project" href="#Configure-your-project">Configure your project</a><ul><li>3.3.3.1 <a id="rev:Project-information" href="#Project-information">Project information</a></li><li>3.3.3.2 <a id="rev:Project-executable" href="#Project-executable">Project executable</a></li><li>3.3.3.3 <a id="rev:Rake-tasks" href="#Rake-tasks">Rake tasks</a></li><li>3.3.3.4 <a id="rev:User-manual" href="#User-manual">User manual</a><ul><li><a id="rev:doc-index.erb" href="#doc-index.erb"><tt>doc/index.erb</tt></a></li><li><a id="rev:doc-intro.erb" href="#doc-intro.erb"><tt>doc/intro.erb</tt></a></li><li><a id="rev:doc-setup.erb" href="#doc-setup.erb"><tt>doc/setup.erb</tt></a></li><li><a id="rev:doc-theory.erb" href="#doc-theory.erb"><tt>doc/theory.erb</tt></a></li><li><a id="rev:doc-usage.erb" href="#doc-usage.erb"><tt>doc/usage.erb</tt></a></li><li><a id="rev:doc-history.erb" href="#doc-history.erb"><tt>doc/history.erb</tt></a></li></ul></li></ul></li><li>3.3.4 <a id="rev:Implement-your-project" href="#Implement-your-project">Implement your project</a><ul><li><a id="rev:Goodbye-LOAD_PATH-hello-require" href="#Goodbye-LOAD_PATH-hello-require">Goodbye <code class="line"><span style="color:#d70;font-weight:bold">$LOAD_PATH</span></code>, hello <code class="line">require()</code></a></li></ul></li><li>3.3.5 <a id="rev:Test-your-project" href="#Test-your-project">Test your project</a><ul><li><a id="rev:Units-and-tests" href="#Units-and-tests">Units and tests</a></li><li><a id="rev:Test-execution" href="#Test-execution">Test execution</a></li><li><a id="rev:Helper-libraries" href="#Helper-libraries">Helper libraries</a></li></ul></li><li>3.3.6 <a id="rev:Translate-your-project" href="#Translate-your-project">Translate your project</a><ul><li>3.3.6.1 <a id="rev:Language-phrases" href="#Language-phrases">Language phrases</a><ul><li><a id="rev:Parameterizing-language-phrases" href="#Parameterizing-language-phrases">Parameterizing language phrases</a></li><li><a id="rev:Explicit-translation-into-a-language" href="#Explicit-translation-into-a-language">Explicit translation into a language</a></li></ul></li><li>3.3.6.2 <a id="rev:Translation-files" href="#Translation-files">Translation files</a></li><li>3.3.6.3 <a id="rev:Extracting-language-phrases" href="#Extracting-language-phrases">Extracting language phrases</a><ul><li><a id="rev:Dynamic-analysis" href="#Dynamic-analysis">Dynamic analysis</a></li><li><a id="rev:Static-analysis" href="#Static-analysis">Static analysis</a></li></ul></li><li>3.3.6.4 <a id="rev:Translating-language-phrases" href="#Translating-language-phrases">Translating language phrases</a></li></ul></li><li>3.3.7 <a id="rev:Publish-your-project" href="#Publish-your-project">Publish your project</a><ul><li>3.3.7.1 <a id="rev:Build-a-RubyGem" href="#Build-a-RubyGem">Build a RubyGem</a></li><li>3.3.7.2 <a id="rev:Publish-a-RubyGem" href="#Publish-a-RubyGem">Publish a RubyGem</a></li><li>3.3.7.3 <a id="rev:Announce-a-release" href="#Announce-a-release">Announce a release</a><ul><li><a id="rev:Login-information" href="#Login-information">Login information</a></li><li>3.3.7.3.1 <a id="rev:Manual-release-announcement" href="#Manual-release-announcement">Manual release announcement</a></li></ul></li><li>3.3.7.4 <a id="rev:Publish-the-documentation" href="#Publish-the-documentation">Publish the documentation</a></li></ul></li></ul></li></ul></li><li>4 <a id="rev:History" href="#History">History</a><ul><li>4.1 <a id="rev:Version-1.0.0-2009-05-03" href="#Version-1.0.0-2009-05-03">Version 1.0.0 (2009-05-03)</a><ul><li><a id="rev:Incompatible-changes" href="#Incompatible-changes">Incompatible changes</a></li><li><a id="rev:New-features" href="#New-features">New features</a></li><li><a id="rev:Bug-fixes" href="#Bug-fixes">Bug fixes</a></li><li><a id="rev:Housekeeping" href="#Housekeeping">Housekeeping</a></li></ul></li><li>4.2 <a id="rev:Version-0.3.0-2009-02-12" href="#Version-0.3.0-2009-02-12">Version 0.3.0 (2009-02-12)</a><ul><li><a id="rev:New-features-609439008" href="#New-features-609439008">New features</a></li><li><a id="rev:Bug-fixes-609465768" href="#Bug-fixes-609465768">Bug fixes</a></li><li><a id="rev:Housekeeping-609499748" href="#Housekeeping-609499748">Housekeeping</a></li></ul></li><li>4.3 <a id="rev:Version-0.2.0-2009-01-25" href="#Version-0.2.0-2009-01-25">Version 0.2.0 (2009-01-25)</a><ul><li><a id="rev:New-features-609532608" href="#New-features-609532608">New features</a></li><li><a id="rev:Bug-fixes-609551988" href="#Bug-fixes-609551988">Bug fixes</a></li><li><a id="rev:Housekeeping-609561708" href="#Housekeeping-609561708">Housekeeping</a></li></ul></li><li>4.4 <a id="rev:Version-0.1.0-2009-01-13" href="#Version-0.1.0-2009-01-13">Version 0.1.0 (2009-01-13)</a><ul><li><a id="rev:New-features-609595238" href="#New-features-609595238">New features</a></li><li><a id="rev:Bug-fixes-609627068" href="#Bug-fixes-609627068">Bug fixes</a></li></ul></li><li>4.5 <a id="rev:Version-0.0.1-2009-01-13" href="#Version-0.0.1-2009-01-13">Version 0.0.1 (2009-01-13)</a><ul><li><a id="rev:Bug-fixes-609677068" href="#Bug-fixes-609677068">Bug fixes</a></li><li><a id="rev:Housekeeping-609697358" href="#Housekeeping-609697358">Housekeeping</a></li></ul></li><li>4.6 <a id="rev:Version-0.0.0-2009-01-13" href="#Version-0.0.0-2009-01-13">Version 0.0.0 (2009-01-13)</a></li></ul></li></ul>
|
162
|
-
</div>
|
163
|
-
|
164
|
-
<div id="lof"><a name="Tips"/><div class="nav" id="Tips"><a title="Focus this segment" href="#Tips"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Return to listing" href="#rev:Tips"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div><h2 class="title">Tips</h2> <ol><li><a id="rev:Merging-files-with-kdiff3" href="#Merging-files-with-kdiff3">Merging files with <strong>kdiff3</strong></a></li></ol></div>
|
165
|
-
|
166
|
-
<br style="display: none"/>
|
167
|
-
<hr style="display: none"/>
|
168
|
-
<br style="display: none"/>
|
169
|
-
|
170
|
-
|
171
|
-
<div id="content">
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
<div class="chapter">
|
176
|
-
<a name="Introduction"/><div class="nav" id="Introduction"><a title="Focus this segment" href="#Introduction"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus next segment" href="#Etymology"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Introduction"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
177
|
-
<h1 class="title">
|
178
|
-
Chapter 1
|
179
|
-
<br/>
|
180
|
-
<big>Introduction</big>
|
181
|
-
</h1>
|
182
|
-
<div class="content"><p>Inochi is an infrastructure for <a href='http://www.rubygems.org'>RubyGems</a>-based software projects that encourages good documentation and reduces programming effort by automating common tasks.</p><p> Inochi is exciting because:</p>
|
183
|
-
|
184
|
-
<ul>
|
185
|
-
<li>
|
186
|
-
<p>It encourages good documentation:</p>
|
187
|
-
|
188
|
-
<ul>
|
189
|
-
<li>
|
190
|
-
<p>Provides a comprehensive user manual that integrates release notes, setup and usage instructions, and more.</p>
|
191
|
-
</li>
|
192
|
-
|
193
|
-
<li>
|
194
|
-
<p>Automates the display of help, version, and usage information for your project’s main executable.</p>
|
195
|
-
</li>
|
196
|
-
</ul>
|
197
|
-
</li>
|
198
|
-
|
199
|
-
<li>
|
200
|
-
<p>It reduces programming effort:</p>
|
201
|
-
|
202
|
-
<ul>
|
203
|
-
<li>Makes it easy to <a class="xref" href="#Translate-your-project" title="Section 3.3.6. "Translate your project"">translate your project</a> into many languages.</li>
|
204
|
-
|
205
|
-
<li>Provides a single point of entry to your project’s libraries.</li>
|
206
|
-
|
207
|
-
<li>Keeps your project’s configuration in one place.</li>
|
208
|
-
|
209
|
-
<li>Parses command-line options using <a href='http://trollop.rubyforge.org'>the Trollop library</a>.</li>
|
210
|
-
</ul>
|
211
|
-
</li>
|
212
|
-
|
213
|
-
<li>
|
214
|
-
<p>It automates common tasks:</p>
|
215
|
-
|
216
|
-
<ul>
|
217
|
-
<li>Generates project scaffolds while merging changes from previous ones.</li>
|
218
|
-
|
219
|
-
<li>Provides Rake tasks for packaging, publishing, and announcing your project.</li>
|
220
|
-
</ul>
|
221
|
-
</li>
|
222
|
-
</ul>
|
223
|
-
|
224
|
-
<p>These features distinguish Inochi from the competition:</p>
|
225
|
-
|
226
|
-
<ul>
|
227
|
-
<li><a href='http://seattlerb.rubyforge.org/hoe/'>hoe</a></li>
|
228
|
-
|
229
|
-
<li><a href='http://newgem.rubyforge.org'>newgem</a></li>
|
230
|
-
|
231
|
-
<li><a href='http://codeforpeople.rubyforge.org/bones/'>Mr Bones</a></li>
|
232
|
-
|
233
|
-
<li><a href='http://gitorious.org/projects/gemify/'>Gemify</a></li>
|
234
|
-
|
235
|
-
<li><a href='http://technicalpickles.github.com/jeweler/'>Jeweler</a></li>
|
236
|
-
|
237
|
-
<li><a href='https://simonmenke.github.com/gm/'>GemMake</a></li>
|
238
|
-
|
239
|
-
<li><a href='http://github.com/reagent/simple-gem/tree/master'>SimpleGem</a></li>
|
240
|
-
</ul>
|
241
|
-
|
242
|
-
<div class="paragraph">
|
243
|
-
<a name="Etymology"/><div class="nav" id="Etymology"><a title="Focus this segment" href="#Etymology"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Introduction"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Logistics"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Etymology"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
244
|
-
<p class="title">Etymology</p>
|
245
|
-
<div class="content"><p>In the past, software development was thought to be like mathematical modeling or building construction: the assembly of inanimate objects. Nowadays, it is thought to be more like gardening: the cultivation of life!</p>
|
246
|
-
|
247
|
-
<p>In this manner, I consider this project not as a generator of skeletons or as a builder of scaffolds, but as a <em>giver of life</em>. That is why I named this project “inochi”, the Japanese word for <em>life</em>.</p>
|
248
|
-
|
249
|
-
<p>Happy cultivation!</p></div>
|
250
|
-
</div><div class="section">
|
251
|
-
<a name="Logistics"/><div class="nav" id="Logistics"><a title="Focus this segment" href="#Logistics"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Etymology"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-numbers"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Logistics"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
252
|
-
<h2 class="title">
|
253
|
-
1.1 Logistics
|
254
|
-
</h2>
|
255
|
-
<div class="content"><ul>
|
256
|
-
<li><a class="xref" href="#History" title="Chapter 4. "History"">Release notes</a> — history of project releases.</li>
|
257
|
-
|
258
|
-
<li><a href='http://github.com/sunaku/inochi'>Source code</a> — obtain via <a href='http://git-scm.com'>Git</a> or browse online.</li>
|
259
|
-
|
260
|
-
<li><a href='./api/index.html'>API reference</a> — documentation for source code.</li>
|
261
|
-
|
262
|
-
<li><a href='http://snk.tuxfamily.org/lib/inochi'>Project home</a> — the Inochi project home page.</li>
|
263
|
-
</ul>
|
264
|
-
|
265
|
-
<p>To get help or provide feedback, simply <a class="xref" href="#License" title="Section 1.2. "License"">contact the author(s)</a>.</p>
|
266
|
-
|
267
|
-
<div class="paragraph">
|
268
|
-
<a name="Version-numbers"/><div class="nav" id="Version-numbers"><a title="Focus this segment" href="#Version-numbers"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Logistics"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#License"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-numbers"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
269
|
-
<p class="title">Version numbers</p>
|
270
|
-
<div class="content"><p>Inochi releases are numbered in <em>major.minor.patch</em> form according to the <a href='http://www.rubygems.org/read/chapter/7'>RubyGems rational versioning policy</a>, which can be summarized thus:</p>
|
271
|
-
<table border="1">
|
272
|
-
<thead>
|
273
|
-
<tr>
|
274
|
-
<td rowspan='2'>What increased in the version number?</td>
|
275
|
-
<td colspan='3'>The increase indicates that the release:</td>
|
276
|
-
</tr>
|
277
|
-
<tr>
|
278
|
-
<th>Is backward compatible?</th>
|
279
|
-
<th>Has new features?</th>
|
280
|
-
<th>Has bug fixes?</th>
|
281
|
-
</tr>
|
282
|
-
</thead>
|
283
|
-
<tbody>
|
284
|
-
<tr>
|
285
|
-
<th>major</th>
|
286
|
-
<td style='background-color: #FFE4E1;'>No</td>
|
287
|
-
<td>Yes</td>
|
288
|
-
<td>Yes</td>
|
289
|
-
</tr>
|
290
|
-
<tr>
|
291
|
-
<th>minor</th>
|
292
|
-
<td>Yes</td>
|
293
|
-
<td>Yes</td>
|
294
|
-
<td>Yes</td>
|
295
|
-
</tr>
|
296
|
-
<tr>
|
297
|
-
<th>patch</th>
|
298
|
-
<td>Yes</td>
|
299
|
-
<td style='background-color: #FFE4E1;'>No</td>
|
300
|
-
<td>Yes</td>
|
301
|
-
</tr>
|
302
|
-
</tbody>
|
303
|
-
</table></div>
|
304
|
-
</div><p></p></div>
|
305
|
-
</div><div class="section">
|
306
|
-
<a name="License"/><div class="nav" id="License"><a title="Focus this segment" href="#License"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-numbers"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Credits"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:License"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
307
|
-
<h2 class="title">
|
308
|
-
1.2 License
|
309
|
-
</h2>
|
310
|
-
<div class="content"><p>(the ISC license)</p>
|
311
|
-
|
312
|
-
<p>Copyright 2008 Suraj N. Kurapati <a href='mailto:sunaku@gmail.com'>sunaku@gmail.com</a></p>
|
313
|
-
|
314
|
-
<p>Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.</p>
|
315
|
-
|
316
|
-
<p>THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</p></div>
|
317
|
-
</div><div class="section">
|
318
|
-
<a name="Credits"/><div class="nav" id="Credits"><a title="Focus this segment" href="#Credits"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#License"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Setup"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Credits"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
319
|
-
<h2 class="title">
|
320
|
-
1.3 Credits
|
321
|
-
</h2>
|
322
|
-
<div class="content"><a href='#Credits' class='xref' title='Section 1.3. "Credits"'><img src='inochi.png' alt='Inochi logo' /></a>
|
323
|
-
<p>The “inochi.png” image and its “inochi.svg” source utilize the <a href='http://openclipart.org/media/files/Peileppe/8978'>“3 flowers”</a> graphic, which was created and released into the public domain by <a href='http://openclipart.org/media/people/Peileppe'>Peileppe Production</a> on June 25, 2008.</p>
|
324
|
-
|
325
|
-
<p>Inochi is made possible by <a class="xref" href="#History" title="Chapter 4. "History"">contributions</a> from users like you:</p>
|
326
|
-
|
327
|
-
<ul>
|
328
|
-
<li>Florian Gilcher</li>
|
329
|
-
</ul></div>
|
330
|
-
</div><p> </p></div>
|
331
|
-
</div>
|
332
|
-
|
333
|
-
<div class="chapter">
|
334
|
-
<a name="Setup"/><div class="nav" id="Setup"><a title="Focus this segment" href="#Setup"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Credits"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Requirements"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Setup"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
335
|
-
<h1 class="title">
|
336
|
-
Chapter 2
|
337
|
-
<br/>
|
338
|
-
<big>Setup</big>
|
339
|
-
</h1>
|
340
|
-
<div class="content"><div class="section">
|
341
|
-
<a name="Requirements"/><div class="nav" id="Requirements"><a title="Focus this segment" href="#Requirements"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Setup"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Installation"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Requirements"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
342
|
-
<h2 class="title">
|
343
|
-
2.1 Requirements
|
344
|
-
</h2>
|
345
|
-
<div class="content"><p>Your system needs the following software to run Inochi.</p>
|
346
|
-
<table border="1"><thead><tr><th>Software</th><th>Description</th><th>Notes</th></tr></thead><tbody><tr><td style='text-align: left;'><a href='http://ruby-lang.org'>Ruby</a></td><td style='text-align: left;'>Ruby language interpreter</td><td style='text-align: left;'>Version 1.8.6 or 1.8.7 is required.</td>
|
347
|
-
</tr><tr><td style='text-align: left;'><a href='http://rubygems.org'>RubyGems</a></td><td style='text-align: left;'>Ruby packaging system</td><td style='text-align: left;'>Version 1.3.1 or newer is required.</td>
|
348
|
-
</tr><tr><td style='text-align: left;'><a href='http://lynx.isc.org'>Lynx</a></td><td style='text-align: left;'>Text-mode web browser</td><td style='text-align: left;'>Version 2.8.6 or newer is required to convert HTML into plain text.</td>
|
349
|
-
</tr></tbody></table></div>
|
350
|
-
</div><div class="section">
|
351
|
-
<a name="Installation"/><div class="nav" id="Installation"><a title="Focus this segment" href="#Installation"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Requirements"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Manifest"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Installation"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
352
|
-
<h2 class="title">
|
353
|
-
2.2 Installation
|
354
|
-
</h2>
|
355
|
-
<div class="content"><p>You can install Inochi by running this command:</p>
|
356
|
-
|
357
|
-
<pre>gem install inochi --development</pre>
|
358
|
-
|
359
|
-
<p>To check whether the installation was sucessful, run this command:</p>
|
360
|
-
|
361
|
-
<pre>inochi --version</pre>
|
362
|
-
|
363
|
-
<p>If the installation was successful, you will see output like this:</p>
|
364
|
-
|
365
|
-
<pre>project: Inochi
|
366
|
-
version: 1.0.0
|
367
|
-
release: 2009-05-03
|
368
|
-
website: http://snk.tuxfamily.org/lib/inochi
|
369
|
-
install: /home/sun/src/inochi</pre><p></p>
|
370
|
-
|
371
|
-
<p>If you do not see such output, you may <a class="xref" href="#License" title="Section 1.2. "License"">ask the author(s)</a> for help.</p></div>
|
372
|
-
</div><div class="section">
|
373
|
-
<a name="Manifest"/><div class="nav" id="Manifest"><a title="Focus this segment" href="#Manifest"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Installation"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Usage"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Manifest"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
374
|
-
<h2 class="title">
|
375
|
-
2.3 Manifest
|
376
|
-
</h2>
|
377
|
-
<div class="content"><p>You will see the following items inside Inochi’s installation directory, whose path you can determine by running this command:</p>
|
378
|
-
|
379
|
-
<pre>inochi --version</pre>
|
380
|
-
|
381
|
-
<ul>
|
382
|
-
<li>
|
383
|
-
<p><tt>bin/</tt></p>
|
384
|
-
|
385
|
-
<ul>
|
386
|
-
<li><tt>inochi</tt> — the main Inochi executable.</li>
|
387
|
-
</ul>
|
388
|
-
</li>
|
389
|
-
|
390
|
-
<li>
|
391
|
-
<p><tt>lib/</tt></p>
|
392
|
-
|
393
|
-
<ul>
|
394
|
-
<li><tt>inochi.rb</tt> — the main Inochi library.</li>
|
395
|
-
</ul>
|
396
|
-
</li>
|
397
|
-
|
398
|
-
<li>
|
399
|
-
<p><tt>doc/</tt></p>
|
400
|
-
|
401
|
-
<ul>
|
402
|
-
<li>
|
403
|
-
<p><tt>api/</tt> — API reference documentation.</p>
|
404
|
-
</li>
|
405
|
-
|
406
|
-
<li>
|
407
|
-
<p><tt>index.erb</tt> — source of this user manual.</p>
|
408
|
-
</li>
|
409
|
-
</ul>
|
410
|
-
</li>
|
411
|
-
|
412
|
-
<li>
|
413
|
-
<p><tt>lang/</tt> — translations of language phrases.</p>
|
414
|
-
</li>
|
415
|
-
|
416
|
-
<li>
|
417
|
-
<p><tt>LICENSE</tt> — copyright notice and legal conditions.</p>
|
418
|
-
</li>
|
419
|
-
</ul></div>
|
420
|
-
</div><p> </p></div>
|
421
|
-
</div>
|
422
|
-
|
423
|
-
|
424
|
-
<div class="part">
|
425
|
-
<a name="Usage"/><div class="nav" id="Usage"><a title="Focus this segment" href="#Usage"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Manifest"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Command-line-interface"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Usage"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
426
|
-
<h1 class="title">
|
427
|
-
Part 3
|
428
|
-
<br/>
|
429
|
-
<big>Usage</big>
|
430
|
-
</h1>
|
431
|
-
<div class="content"><div class="section">
|
432
|
-
<a name="Command-line-interface"/><div class="nav" id="Command-line-interface"><a title="Focus this segment" href="#Command-line-interface"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Usage"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Merging-files-with-kdiff3"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Command-line-interface"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
433
|
-
<h2 class="title">
|
434
|
-
3.1 Command-line interface
|
435
|
-
</h2>
|
436
|
-
<div class="content"><p>When you run this command:</p>
|
437
|
-
|
438
|
-
<pre>inochi --help</pre>
|
439
|
-
|
440
|
-
<p>You will see this output:</p>
|
441
|
-
|
442
|
-
<pre>Inochi - Gives life to RubyGems-based software
|
443
|
-
|
444
|
-
Generates a project scaffold using the given information.
|
445
|
-
|
446
|
-
Existing files are backed up and NOT overwritten. It is your
|
447
|
-
responsibility to merge changes (see the --merger option)
|
448
|
-
between the existing files and the newly generated files.
|
449
|
-
|
450
|
-
This tool announces its progress as it runs, using these indicators:
|
451
|
-
|
452
|
-
create: A file is being created because it does not exist.
|
453
|
-
|
454
|
-
skip: A file is being skipped because it is already up to date.
|
455
|
-
|
456
|
-
update: A file is being updated because it is out of date. A text
|
457
|
-
merging tool (see the --merger option) will be launched to
|
458
|
-
transfer content from the old file (*.old) and the new file
|
459
|
-
(*.new) to the out of date file. If a text merging tool is
|
460
|
-
not specified, then you will have to do the merging by hand.
|
461
|
-
|
462
|
-
Usage:
|
463
|
-
|
464
|
-
inochi [Options] ProjectName [ProgramName]
|
465
|
-
|
466
|
-
|
467
|
-
ProjectName: Name of your project, which will be normalized
|
468
|
-
into the name of a Ruby module that will serve
|
469
|
-
as a namespace for all code in your project.
|
470
|
-
|
471
|
-
ProgramName: (Optional) Name of the main project executable,
|
472
|
-
which also serves as the name of the generated
|
473
|
-
project directory and the main project library.
|
474
|
-
|
475
|
-
|
476
|
-
Options:
|
477
|
-
|
478
|
-
--merger, -m <s>: A command that invokes a text merging tool with three
|
479
|
-
arguments: (1) old file, (2) new file, (3) output file.
|
480
|
-
The command should direct the result of merging the old
|
481
|
-
file and the new file to the output file. In addition,
|
482
|
-
the command *must not* modify the old file or the new
|
483
|
-
file.
|
484
|
-
--manual, -a: Show the user manual
|
485
|
-
--locale, -l <s>: Set preferred language
|
486
|
-
--version, -v: Print version and exit
|
487
|
-
--help, -h: Show this message</pre><p></p>
|
488
|
-
|
489
|
-
<div class="tip">
|
490
|
-
<a name="Merging-files-with-kdiff3"/><div class="nav" id="Merging-files-with-kdiff3"><a title="Focus this segment" href="#Merging-files-with-kdiff3"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Command-line-interface"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Ruby-library-interface"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Merging-files-with-kdiff3"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
491
|
-
<p class="title">Tip 1. Merging files with <strong>kdiff3</strong></p>
|
492
|
-
<div class="content">
|
493
|
-
<img class="icon" alt="tip" src="&icon_tip;"/>
|
494
|
-
<p>Instead of merging files by hand, you can transfer wanted changes between files semi-automatically using <a href='http://kdiff3.sourceforge.net'>kdiff3</a>. Simply follow these instructions:</p>
|
495
|
-
|
496
|
-
<ol>
|
497
|
-
<li>
|
498
|
-
<p>Create a file named <tt>merge2</tt> with the following content:</p>
|
499
|
-
|
500
|
-
<pre>#!/bin/sh
|
501
|
-
|
502
|
-
old_file=$1
|
503
|
-
shift
|
504
|
-
|
505
|
-
new_file=$1
|
506
|
-
shift
|
507
|
-
|
508
|
-
output_file=$1
|
509
|
-
shift
|
510
|
-
|
511
|
-
kdiff3 --merge "$old_file" "$new_file" --output "$output_file"</pre>
|
512
|
-
</li>
|
513
|
-
|
514
|
-
<li>
|
515
|
-
<p>Make the file executable:</p>
|
516
|
-
|
517
|
-
<pre>chmod +x merge2</pre>
|
518
|
-
</li>
|
519
|
-
|
520
|
-
<li>
|
521
|
-
<p>Place the file in a directory that is listed in your <code class="line"><span style="color:#036;font-weight:bold">PATH</span></code> environment variable.</p>
|
522
|
-
</li>
|
523
|
-
|
524
|
-
<li>
|
525
|
-
<p>Run Inochi like this:</p>
|
526
|
-
|
527
|
-
<pre>inochi -m merge2</pre>
|
528
|
-
|
529
|
-
<p>Now <strong>kdiff3</strong> will be invoked to help you transfer your changes. When you are finished transferring changes, save the file and quit <strong>kdiff3</strong>. If you do not want to transfer any changes, simply quit <strong>kdiff3</strong> <em>without</em> saving the file.</p>
|
530
|
-
</li>
|
531
|
-
</ol>
|
532
|
-
</div>
|
533
|
-
</div><p></p></div>
|
534
|
-
</div><div class="section">
|
535
|
-
<a name="Ruby-library-interface"/><div class="nav" id="Ruby-library-interface"><a title="Focus this segment" href="#Ruby-library-interface"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Merging-files-with-kdiff3"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Tutorial"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Ruby-library-interface"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
536
|
-
<h2 class="title">
|
537
|
-
3.2 Ruby library interface
|
538
|
-
</h2>
|
539
|
-
<div class="content"><p>The <code class="line"><span style="color:#036;font-weight:bold">Inochi</span></code> module has several class methods which provide a common configuration for various aspects of your project. These aspects, and their interactions with the <code class="line"><span style="color:#036;font-weight:bold">Inochi</span></code> module, are as follows:</p>
|
540
|
-
|
541
|
-
<ul>
|
542
|
-
<li>Your project’s main library invokes the <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.init()</code> method.</li>
|
543
|
-
|
544
|
-
<li>Your project’s main executable invokes the <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.main()</code> method.</li>
|
545
|
-
|
546
|
-
<li>Your project’s <tt>rakefile</tt> invokes the <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.rake()</code> method.</li>
|
547
|
-
|
548
|
-
<li>Your project’s user manual invokes the <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.book()</code> method.</li>
|
549
|
-
</ul></div>
|
550
|
-
</div><div class="section">
|
551
|
-
<a name="Tutorial"/><div class="nav" id="Tutorial"><a title="Focus this segment" href="#Tutorial"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Ruby-library-interface"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Have-a-brilliant-idea"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Tutorial"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
552
|
-
<h2 class="title">
|
553
|
-
3.3 Tutorial
|
554
|
-
</h2>
|
555
|
-
<div class="content"><p>This tutorial shows how Inochi is used to manage a hypothetical <code class="line"><span style="color:#036;font-weight:bold">WordCount</span></code> project throughout the various stages of its life.</p>
|
556
|
-
|
557
|
-
<div class="section">
|
558
|
-
<a name="Have-a-brilliant-idea"/><div class="nav" id="Have-a-brilliant-idea"><a title="Focus this segment" href="#Have-a-brilliant-idea"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Tutorial"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Generate-your-project"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Have-a-brilliant-idea"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
559
|
-
<h3 class="title">
|
560
|
-
3.3.1 Have a brilliant idea
|
561
|
-
</h3>
|
562
|
-
<div class="content"><p>It is 4am on Sunday morning. Unwilling to sleep, you have spent the past few hours programming obsessively.. Though your eyes grow heavy and your stomach churns from hunger, your mind charges forth with haste.</p>
|
563
|
-
|
564
|
-
<blockquote>
|
565
|
-
<p>Push on! Keep on!</p>
|
566
|
-
</blockquote>
|
567
|
-
|
568
|
-
<p>Until at last, pushed far beyond its limit, your body overpowers your will and drags you into black unconsciousness.</p>
|
569
|
-
|
570
|
-
<p><em>BEEP</em> <em>BEEP</em> <em>B</em>—</p>
|
571
|
-
|
572
|
-
<p>Half-asleep and violent from the sudden disturbance, you silence the bleeting alarm clock with vengeance. It is 2pm on Sunday afternoon.</p>
|
573
|
-
|
574
|
-
<p>Red beams of sunlight slip through the gaps in your curtains. It is a beautiful day, outside. <em>Outside</em>— you think,</p>
|
575
|
-
|
576
|
-
<blockquote>
|
577
|
-
<p>What am I doing to myself?</p>
|
578
|
-
|
579
|
-
<p>I’ve got to get <em>outside</em>.</p>
|
580
|
-
|
581
|
-
<p>I’ve got to get <em>away</em>…</p>
|
582
|
-
|
583
|
-
<p>Away from this computer… this… mental prison in which I toil night after night, like a souless machine.</p>
|
584
|
-
</blockquote>
|
585
|
-
|
586
|
-
<p>Venturing into the courtyard outside your quarters, you find peace. A warm breeze graces you, sweeping your hair gently as a mother would. The bright sunlight penetrates your mind’s eye as your thoughts fade…</p>
|
587
|
-
|
588
|
-
<p>Thoughts of tests to write, units to refactor, bugs to fix, options to document. They melt and mix and flow into nothingness.</p>
|
589
|
-
|
590
|
-
<p>All is clear. No thoughts. No more.</p>
|
591
|
-
|
592
|
-
<blockquote>
|
593
|
-
<p>No!</p>
|
594
|
-
</blockquote>
|
595
|
-
|
596
|
-
<p>You collapse heavily onto the grassy earth beneath you. Breathing deeply, you sink into yourself and whisper</p>
|
597
|
-
|
598
|
-
<blockquote>
|
599
|
-
<p>It’s okay.</p>
|
600
|
-
|
601
|
-
<p>Just, let go.</p>
|
602
|
-
</blockquote>
|
603
|
-
|
604
|
-
<p>and fall asleep.</p>
|
605
|
-
|
606
|
-
<p>You awaken that evening relaxed and refreshed. A brilliant idea for a new project enters your mind: the project will be a tool that counts the number of words in text file. And, the project can be accessed from Ruby via the <code class="line"><span style="color:#036;font-weight:bold">WordCount</span></code> module.</p>
|
607
|
-
|
608
|
-
<p><em>However</em>, you must go to work the next morning, so there isn’t much time. What can you do? Let’s see how Inochi can help us meet this challenge.</p></div>
|
609
|
-
</div><p></p>
|
610
|
-
|
611
|
-
<div class="section">
|
612
|
-
<a name="Generate-your-project"/><div class="nav" id="Generate-your-project"><a title="Focus this segment" href="#Generate-your-project"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Have-a-brilliant-idea"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#View-Rake-tasks"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Generate-your-project"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
613
|
-
<h3 class="title">
|
614
|
-
3.3.2 Generate your project
|
615
|
-
</h3>
|
616
|
-
<div class="content"><p>Give life to your new project:</p>
|
617
|
-
|
618
|
-
<pre># inochi WordCount
|
619
|
-
create word_count/CREDITS
|
620
|
-
create word_count/LICENSE
|
621
|
-
create word_count/rakefile
|
622
|
-
create word_count/bin/word_count
|
623
|
-
create word_count/lib/word_count.rb
|
624
|
-
create word_count/test/word_count.rb
|
625
|
-
create word_count/doc/index.erb
|
626
|
-
create word_count/doc/intro.erb
|
627
|
-
create word_count/doc/setup.erb
|
628
|
-
create word_count/doc/theory.erb
|
629
|
-
create word_count/doc/usage.erb
|
630
|
-
create word_count/doc/history.erb
|
631
|
-
</pre><p></p>
|
632
|
-
|
633
|
-
<p>Enter the <tt>word_count</tt> directory:</p>
|
634
|
-
|
635
|
-
<pre># cd word_count</pre><p></p>
|
636
|
-
|
637
|
-
<div class="paragraph">
|
638
|
-
<a name="View-Rake-tasks"/><div class="nav" id="View-Rake-tasks"><a title="Focus this segment" href="#View-Rake-tasks"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Generate-your-project"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Run-unit-tests"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:View-Rake-tasks"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
639
|
-
<p class="title">View Rake tasks</p>
|
640
|
-
<div class="content"><pre># rake -T
|
641
|
-
(in /tmp/rake20090504-12012-13p4oou-0/word_count)
|
642
|
-
rake ann # Build all release announcements.
|
643
|
-
rake ann:feed # Build RSS announcement: doc/ann.xml
|
644
|
-
rake ann:html # Build HTML announcement: ANN.html
|
645
|
-
rake ann:mail # Build e-mail announcement: ANN.eml
|
646
|
-
rake ann:text # Build plain text announcement: ANN.txt
|
647
|
-
rake clean # Remove any temporary products.
|
648
|
-
rake clobber # Remove any generated file.
|
649
|
-
rake doc # Build all documentation.
|
650
|
-
rake doc:api # Build API reference.
|
651
|
-
rake doc:man # Build the user manual.
|
652
|
-
rake gem # Build a release.
|
653
|
-
rake lang:conv # Translate extracted language phrases (from=LANGUAGE_CODE).
|
654
|
-
rake lang:dump # Extract language phrases for translation.
|
655
|
-
rake lint # Report code quality statistics.
|
656
|
-
rake pub # Publish a release.
|
657
|
-
rake pub:ann # Publish all announcements.
|
658
|
-
rake pub:ann:forge # Announce to RubyForge news.
|
659
|
-
rake pub:ann:raa # Announce to RAA (Ruby Application Archive).
|
660
|
-
rake pub:ann:talk # Announce to ruby-talk mailing list.
|
661
|
-
rake pub:doc # Publish documentation to project website.
|
662
|
-
rake pub:gem # Publish release packages to RubyForge.
|
663
|
-
rake test # Run tests.
|
664
|
-
rake test:cov # Run tests with code coverage analysis.
|
665
|
-
rake test:ruby # Run tests with multiple Ruby versions.
|
666
|
-
</pre><p></p></div>
|
667
|
-
</div><div class="paragraph">
|
668
|
-
<a name="Run-unit-tests"/><div class="nav" id="Run-unit-tests"><a title="Focus this segment" href="#Run-unit-tests"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#View-Rake-tasks"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Run-project-executable"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Run-unit-tests"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
669
|
-
<p class="title">Run unit tests</p>
|
670
|
-
<div class="content"><pre># rake test
|
671
|
-
(in /tmp/rake20090504-12012-13p4oou-0/word_count)
|
672
|
-
Inochi establishment tests passed!
|
673
|
-
</pre><p></p></div>
|
674
|
-
</div><div class="paragraph">
|
675
|
-
<a name="Run-project-executable"/><div class="nav" id="Run-project-executable"><a title="Focus this segment" href="#Run-project-executable"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Run-unit-tests"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Show-user-manual"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Run-project-executable"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
676
|
-
<p class="title">Run project executable</p>
|
677
|
-
<div class="content"><pre># ruby bin/word_count
|
678
|
-
Command-line options: {:manual=>false, :locale=>nil, :version=>false, :help=>false}
|
679
|
-
Command-line arguments: []
|
680
|
-
</pre><p></p>
|
681
|
-
|
682
|
-
<p>See usage information:</p>
|
683
|
-
|
684
|
-
<pre># ruby bin/word_count --help
|
685
|
-
WordCount - put a single line description of your project here
|
686
|
-
|
687
|
-
TODO: Explain the command-line usage of this program here.
|
688
|
-
|
689
|
-
|
690
|
-
Usage:
|
691
|
-
|
692
|
-
word_count [Options] Param1 Param2 Param3...
|
693
|
-
|
694
|
-
|
695
|
-
Param1: Description for the first parameter.
|
696
|
-
|
697
|
-
Param2: Description for the second parameter.
|
698
|
-
|
699
|
-
Param3: Description for the third parameter.
|
700
|
-
|
701
|
-
|
702
|
-
Options:
|
703
|
-
|
704
|
-
--manual, -m: Show the user manual
|
705
|
-
--locale, -l <s>: Set preferred language
|
706
|
-
--version, -v: Print version and exit
|
707
|
-
--help, -h: Show this message
|
708
|
-
</pre><p></p>
|
709
|
-
|
710
|
-
<p>See project & version information:</p>
|
711
|
-
|
712
|
-
<pre># ruby bin/word_count --version
|
713
|
-
project: WordCount
|
714
|
-
version: 0.0.0
|
715
|
-
release: 2009-05-04
|
716
|
-
website: http://word_count.rubyforge.org
|
717
|
-
install: /tmp/rake20090504-12012-13p4oou-0/word_count
|
718
|
-
</pre><p></p></div>
|
719
|
-
</div><div class="paragraph">
|
720
|
-
<a name="Show-user-manual"/><div class="nav" id="Show-user-manual"><a title="Focus this segment" href="#Show-user-manual"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Run-project-executable"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Configure-your-project"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Show-user-manual"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
721
|
-
<p class="title">Show user manual</p>
|
722
|
-
<div class="content"><p>Build the user manual (please disregard any “unclosed span” warnings):</p>
|
723
|
-
|
724
|
-
<pre># rake doc:man</pre><p></p>
|
725
|
-
|
726
|
-
<p>Launch the user manual:</p>
|
727
|
-
|
728
|
-
<pre># ruby bin/word_count --manual</pre><p></p>
|
729
|
-
|
730
|
-
<p>The manual will now appear in your default web browser.</p></div>
|
731
|
-
</div><p> </p></div>
|
732
|
-
</div><div class="section">
|
733
|
-
<a name="Configure-your-project"/><div class="nav" id="Configure-your-project"><a title="Focus this segment" href="#Configure-your-project"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Show-user-manual"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Project-information"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Configure-your-project"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
734
|
-
<h3 class="title">
|
735
|
-
3.3.3 Configure your project
|
736
|
-
</h3>
|
737
|
-
<div class="content"><p><a class="xref" href="#Ruby-library-interface" title="Section 3.2">Ruby library interface</a> lists and documents the interactions between your project and Inochi. These points of interaction are illustrated in the following sections.</p>
|
738
|
-
|
739
|
-
<div class="section">
|
740
|
-
<a name="Project-information"/><div class="nav" id="Project-information"><a title="Focus this segment" href="#Project-information"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Configure-your-project"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Project-executable"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Project-information"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
741
|
-
<h4 class="title">
|
742
|
-
3.3.3.1 Project information
|
743
|
-
</h4>
|
744
|
-
<div class="content"><p>Open the <tt>LICENSE</tt> file, which contains the open source <a href='http://www.opensource.org/licenses/isc-license.txt'>ISC license</a> by default, and add a copyright notice with your name and (optional) email address:</p>
|
745
|
-
|
746
|
-
<pre>(the ISC license)
|
747
|
-
|
748
|
-
Copyright 2009 Your Name <your@email.here>
|
749
|
-
|
750
|
-
Permission to use, copy, modify, and/or distribute this software for any
|
751
|
-
purpose with or without fee is hereby granted, provided that the above
|
752
|
-
copyright notice and this permission notice appear in all copies.
|
753
|
-
|
754
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
755
|
-
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
756
|
-
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
757
|
-
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
758
|
-
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
759
|
-
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
760
|
-
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
761
|
-
</pre><p></p>
|
762
|
-
|
763
|
-
<p>Open the main project library file <tt>lib/word_count.rb</tt> and fill in the blanks:</p>
|
764
|
-
|
765
|
-
<p><ins><pre class="para">require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">rubygems</span><span style="color:#710">'</span></span>
|
766
|
-
gem <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">inochi</span><span style="color:#710">'</span></span>, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">~> 1</span><span style="color:#710">'</span></span>
|
767
|
-
require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">inochi</span><span style="color:#710">'</span></span>
|
768
|
-
|
769
|
-
<span style="color:#036;font-weight:bold">Inochi</span>.init <span style="color:#A60">:WordCount</span>,
|
770
|
-
<span style="color:#A60">:project</span> => <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">WordCount</span><span style="color:#710">'</span></span>,
|
771
|
-
<span style="color:#A60">:version</span> => <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">0.0.0</span><span style="color:#710">'</span></span>,
|
772
|
-
<span style="color:#A60">:release</span> => <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">2009-05-04</span><span style="color:#710">'</span></span>,
|
773
|
-
<span style="color:#A60">:website</span> => <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">http://word_count.rubyforge.org</span><span style="color:#710">'</span></span>,
|
774
|
-
<span style="color:#A60">:tagline</span> => <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">put a single line description of your project here</span><span style="color:#710">'</span></span>,
|
775
|
-
<span style="color:#A60">:require</span> => {
|
776
|
-
<span style="color:#888"># TODO: list gems required by your project here.</span>
|
777
|
-
<span style="color:#888"># NOTE: this is completely optional!</span>
|
778
|
-
<span style="color:#888">#</span>
|
779
|
-
<span style="color:#888"># example: if your project needs version 9.9.9 of the 'foo' gem:</span>
|
780
|
-
<span style="color:#888"># 'foo' => '9.9.9',</span>
|
781
|
-
<span style="color:#888">#</span>
|
782
|
-
<span style="color:#888"># example: if any version of a gem is acceptable then:</span>
|
783
|
-
<span style="color:#888"># 'foo' => nil,</span>
|
784
|
-
}
|
785
|
-
|
786
|
-
</pre></ins></p></div>
|
787
|
-
</div><div class="section">
|
788
|
-
<a name="Project-executable"/><div class="nav" id="Project-executable"><a title="Focus this segment" href="#Project-executable"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Project-information"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Rake-tasks"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Project-executable"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
789
|
-
<h4 class="title">
|
790
|
-
3.3.3.2 Project executable
|
791
|
-
</h4>
|
792
|
-
<div class="content"><p>Open the <tt>bin/word_count</tt> file and fill in the blanks:</p>
|
793
|
-
|
794
|
-
<p><ins><pre class="para"><span style="color:#34b">#!/usr/bin/ruby -w</span>
|
795
|
-
<span style="color:#888">#</span>
|
796
|
-
<span style="color:#888"># TODO: Explain the command-line usage of this program here.</span>
|
797
|
-
<span style="color:#888">#</span>
|
798
|
-
<span style="color:#888">#</span>
|
799
|
-
<span style="color:#888"># Usage:</span>
|
800
|
-
<span style="color:#888">#</span>
|
801
|
-
<span style="color:#888"># word_count [Options] Param1 Param2 Param3...</span>
|
802
|
-
<span style="color:#888">#</span>
|
803
|
-
<span style="color:#888">#</span>
|
804
|
-
<span style="color:#888"># Param1: Description for the first parameter.</span>
|
805
|
-
<span style="color:#888">#</span>
|
806
|
-
<span style="color:#888"># Param2: Description for the second parameter.</span>
|
807
|
-
<span style="color:#888">#</span>
|
808
|
-
<span style="color:#888"># Param3: Description for the third parameter.</span>
|
809
|
-
<span style="color:#888">#</span>
|
810
|
-
<span style="color:#888">#</span>
|
811
|
-
<span style="color:#888"># Options:</span>
|
812
|
-
<span style="color:#888">#</span>
|
813
|
-
|
814
|
-
require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">rubygems</span><span style="color:#710">'</span></span>
|
815
|
-
gem <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">inochi</span><span style="color:#710">'</span></span>, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">~> 1</span><span style="color:#710">'</span></span>
|
816
|
-
require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">inochi</span><span style="color:#710">'</span></span>
|
817
|
-
|
818
|
-
options = <span style="color:#036;font-weight:bold">Inochi</span>.main <span style="color:#A60">:WordCount</span> <span style="color:#080;font-weight:bold">do</span>
|
819
|
-
<span style="color:#888"># TODO: define command-line options here.</span>
|
820
|
-
<span style="color:#888"># see http://trollop.rubyforge.org/</span>
|
821
|
-
<span style="color:#888">#</span>
|
822
|
-
<span style="color:#888"># NOTE: this is completely optional!</span>
|
823
|
-
<span style="color:#080;font-weight:bold">end</span>
|
824
|
-
|
825
|
-
<span style="color:#888"># TODO: add the body of your program here</span>
|
826
|
-
|
827
|
-
puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">Command-line options: </span><span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">#{</span>options.inspect<span style="font-weight:bold;color:#777">}</span></span><span style="color:#710">"</span></span>
|
828
|
-
puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">Command-line arguments: </span><span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">#{</span><span style="color:#038;font-weight:bold">ARGV</span>.inspect<span style="font-weight:bold;color:#777">}</span></span><span style="color:#710">"</span></span>
|
829
|
-
|
830
|
-
</pre></ins></p></div>
|
831
|
-
</div><div class="section">
|
832
|
-
<a name="Rake-tasks"/><div class="nav" id="Rake-tasks"><a title="Focus this segment" href="#Rake-tasks"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Project-executable"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#User-manual"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Rake-tasks"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
833
|
-
<h4 class="title">
|
834
|
-
3.3.3.3 Rake tasks
|
835
|
-
</h4>
|
836
|
-
<div class="content"><p>Open the <tt>rakefile</tt> and fill in the blanks:</p>
|
837
|
-
|
838
|
-
<p><ins><pre class="para">require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">rubygems</span><span style="color:#710">'</span></span>
|
839
|
-
gem <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">inochi</span><span style="color:#710">'</span></span>, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">~> 1</span><span style="color:#710">'</span></span>
|
840
|
-
require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">inochi</span><span style="color:#710">'</span></span>
|
841
|
-
|
842
|
-
<span style="color:#036;font-weight:bold">Inochi</span>.rake <span style="color:#A60">:WordCount</span> <span style="color:#080;font-weight:bold">do</span> |gem|
|
843
|
-
<span style="color:#888"># TODO: additional gem configuration.</span>
|
844
|
-
<span style="color:#888"># NOTE: this is completely optional!</span>
|
845
|
-
<span style="color:#888">#</span>
|
846
|
-
<span style="color:#888"># gem.extensions = ['foo.so']</span>
|
847
|
-
<span style="color:#888"># gem.files += ['other', 'files']</span>
|
848
|
-
<span style="color:#080;font-weight:bold">end</span>
|
849
|
-
|
850
|
-
</pre></ins></p></div>
|
851
|
-
</div><div class="section">
|
852
|
-
<a name="User-manual"/><div class="nav" id="User-manual"><a title="Focus this segment" href="#User-manual"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Rake-tasks"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#doc-index.erb"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:User-manual"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
853
|
-
<h4 class="title">
|
854
|
-
3.3.3.4 User manual
|
855
|
-
</h4>
|
856
|
-
<div class="content"><p>The user manual’s source file <tt>doc/index.erb</tt> subdivides its content into several smaller files, according to topic, for easier editing and maintenance. These files are processed by the <a href='http://snk.tuxfamily.org/lib/erbook/'>ERBook</a> program’s <a href='http://snk.tuxfamily.org/lib/erbook/#xhtml'>XHTML format</a> to produce the <tt>doc/index.xhtml</tt> file.</p>
|
857
|
-
|
858
|
-
<p>Open these source files and fill in the blanks:</p>
|
859
|
-
|
860
|
-
<div class="paragraph">
|
861
|
-
<a name="doc-index.erb"/><div class="nav" id="doc-index.erb"><a title="Focus this segment" href="#doc-index.erb"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#User-manual"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#doc-intro.erb"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:doc-index.erb"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
862
|
-
<p class="title"><tt>doc/index.erb</tt></p>
|
863
|
-
<div class="content"><p><ins><pre class="para" lang="rhtml">% Inochi.book :WordCount, self
|
864
|
-
|
865
|
-
%+ "intro.erb"
|
866
|
-
%+ "setup.erb"
|
867
|
-
%+ "theory.erb"
|
868
|
-
%+ "usage.erb"
|
869
|
-
%+ "history.erb"
|
870
|
-
</pre></ins></p></div>
|
871
|
-
</div><div class="paragraph">
|
872
|
-
<a name="doc-intro.erb"/><div class="nav" id="doc-intro.erb"><a title="Focus this segment" href="#doc-intro.erb"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#doc-index.erb"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#doc-setup.erb"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:doc-intro.erb"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
873
|
-
<p class="title"><tt>doc/intro.erb</tt></p>
|
874
|
-
<div class="content"><p><ins><pre class="para" lang="rhtml">% api_url = './api/index.html'
|
875
|
-
% repo_url = 'http://github.com/__________/' + $program
|
876
|
-
% repo_scm = '[Git](http://git-scm.com)'
|
877
|
-
|
878
|
-
%|chapter "Introduction"
|
879
|
-
%|project
|
880
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: explain the purpose of your project
|
881
|
-
|
882
|
-
<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%></span></span> is a __________ that __________.
|
883
|
-
|
884
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: explain why your project is important
|
885
|
-
|
886
|
-
<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%></span></span> is exciting because:
|
887
|
-
* It lets you __________.
|
888
|
-
* Its core contains less than __________ lines of code.
|
889
|
-
* It __________.
|
890
|
-
|
891
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: explain why your project is better than its competitors
|
892
|
-
|
893
|
-
These features distinguish <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%></span></span> from the competition:
|
894
|
-
* [competitor 1](http://)
|
895
|
-
* [competitor 2](http://)
|
896
|
-
* [competitor 3](http://)
|
897
|
-
|
898
|
-
%|paragraph "Etymology"
|
899
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: explain the meaning of the name of your project
|
900
|
-
|
901
|
-
%|section "Logistics"
|
902
|
-
* <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> xref <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">History</span><span style="color:#710">"</span></span>, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">Release notes</span><span style="color:#710">"</span></span> <span style="font-weight:bold;color:#777">%></span></span> --- history of project releases.
|
903
|
-
* [Source code](<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> repo_url <span style="font-weight:bold;color:#777">%></span></span>) --- obtain via <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> repo_scm <span style="font-weight:bold;color:#777">%></span></span> or browse online.
|
904
|
-
* [API reference](<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> api_url <span style="font-weight:bold;color:#777">%></span></span>) --- documentation for source code.
|
905
|
-
* [Project home](<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$website</span> <span style="font-weight:bold;color:#777">%></span></span>) --- the <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%></span></span> project home page.
|
906
|
-
|
907
|
-
To get help or provide feedback, simply
|
908
|
-
<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> xref <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">License</span><span style="color:#710">"</span></span>, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">contact the author(s)</span><span style="color:#710">"</span></span> <span style="font-weight:bold;color:#777">%></span></span>.
|
909
|
-
|
910
|
-
%|paragraph "Version numbers"
|
911
|
-
<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%></span></span> releases are numbered in *major.minor.patch*
|
912
|
-
form according to the [RubyGems rational versioning
|
913
|
-
policy](http://www.rubygems.org/read/chapter/7), which
|
914
|
-
can be summarized thus:
|
915
|
-
|
916
|
-
<span style="color:#070"><table</span> <span style="color:#007">markdown</span>=<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">1</span><span style="color:#710">"</span></span><span style="color:#070">></span>
|
917
|
-
<span style="color:#070"><thead></span>
|
918
|
-
<span style="color:#070"><tr></span>
|
919
|
-
<span style="color:#070"><td</span> <span style="color:#007">rowspan</span>=<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">2</span><span style="color:#710">"</span></span><span style="color:#070">></span>What increased in the version number?<span style="color:#070"></td></span>
|
920
|
-
<span style="color:#070"><td</span> <span style="color:#007">colspan</span>=<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">3</span><span style="color:#710">"</span></span><span style="color:#070">></span>The increase indicates that the release:<span style="color:#070"></td></span>
|
921
|
-
<span style="color:#070"></tr></span>
|
922
|
-
<span style="color:#070"><tr></span>
|
923
|
-
<span style="color:#070"><th></span>Is backward compatible?<span style="color:#070"></th></span>
|
924
|
-
<span style="color:#070"><th></span>Has new features?<span style="color:#070"></th></span>
|
925
|
-
<span style="color:#070"><th></span>Has bug fixes?<span style="color:#070"></th></span>
|
926
|
-
<span style="color:#070"></tr></span>
|
927
|
-
<span style="color:#070"></thead></span>
|
928
|
-
<span style="color:#070"><tbody></span>
|
929
|
-
<span style="color:#070"><tr></span>
|
930
|
-
<span style="color:#070"><th></span>major<span style="color:#070"></th></span>
|
931
|
-
<span style="color:#070"><td</span> <span style="color:#007">style</span>=<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">background-color: #FFE4E1;</span><span style="color:#710">"</span></span><span style="color:#070">></span>No<span style="color:#070"></td></span>
|
932
|
-
<span style="color:#070"><td></span>Yes<span style="color:#070"></td></span>
|
933
|
-
<span style="color:#070"><td></span>Yes<span style="color:#070"></td></span>
|
934
|
-
<span style="color:#070"></tr></span>
|
935
|
-
<span style="color:#070"><tr></span>
|
936
|
-
<span style="color:#070"><th></span>minor<span style="color:#070"></th></span>
|
937
|
-
<span style="color:#070"><td></span>Yes<span style="color:#070"></td></span>
|
938
|
-
<span style="color:#070"><td></span>Yes<span style="color:#070"></td></span>
|
939
|
-
<span style="color:#070"><td></span>Yes<span style="color:#070"></td></span>
|
940
|
-
<span style="color:#070"></tr></span>
|
941
|
-
<span style="color:#070"><tr></span>
|
942
|
-
<span style="color:#070"><th></span>patch<span style="color:#070"></th></span>
|
943
|
-
<span style="color:#070"><td></span>Yes<span style="color:#070"></td></span>
|
944
|
-
<span style="color:#070"><td</span> <span style="color:#007">style</span>=<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">background-color: #FFE4E1;</span><span style="color:#710">"</span></span><span style="color:#070">></span>No<span style="color:#070"></td></span>
|
945
|
-
<span style="color:#070"><td></span>Yes<span style="color:#070"></td></span>
|
946
|
-
<span style="color:#070"></tr></span>
|
947
|
-
<span style="color:#070"></tbody></span>
|
948
|
-
<span style="color:#070"></table></span>
|
949
|
-
|
950
|
-
%|paragraph "License"
|
951
|
-
%<span style="color:#F00;background-color:#FAA"><</span> "../LICENSE"
|
952
|
-
|
953
|
-
%|section "Credits"
|
954
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: give attribution to your predecessors and contributors
|
955
|
-
|
956
|
-
<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%></span></span> is made possible by
|
957
|
-
<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> xref <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">History</span><span style="color:#710">"</span></span>, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">contributions</span><span style="color:#710">"</span></span> <span style="font-weight:bold;color:#777">%></span></span>
|
958
|
-
from users like you:
|
959
|
-
|
960
|
-
%<span style="color:#F00;background-color:#FAA"><</span> "../CREDITS"
|
961
|
-
</pre></ins></p></div>
|
962
|
-
</div><div class="paragraph">
|
963
|
-
<a name="doc-setup.erb"/><div class="nav" id="doc-setup.erb"><a title="Focus this segment" href="#doc-setup.erb"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#doc-intro.erb"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#doc-theory.erb"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:doc-setup.erb"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
964
|
-
<p class="title"><tt>doc/setup.erb</tt></p>
|
965
|
-
<div class="content"><p><ins><pre class="para" lang="rhtml">%|chapter "Setup"
|
966
|
-
%|section "Requirements"
|
967
|
-
Your system needs the following software to run <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%></span></span>.
|
968
|
-
|
969
|
-
| Software | Description | Notes |
|
970
|
-
| -------- | ----------- | ----- |
|
971
|
-
| [Ruby](http://ruby-lang.org) | Ruby language interpreter | Version 1.8.7 has been tested successfully. |
|
972
|
-
| [RubyGems](http://rubygems.org) | Ruby packaging system | Version 1.3.2 or newer is required. |
|
973
|
-
|
974
|
-
%|section "Installation"
|
975
|
-
You can install <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%></span></span> by running this command:
|
976
|
-
|
977
|
-
gem install <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$program</span> <span style="font-weight:bold;color:#777">%></span></span>
|
978
|
-
|
979
|
-
To check whether the installation was sucessful, run this command:
|
980
|
-
|
981
|
-
<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$program</span> <span style="font-weight:bold;color:#777">%></span></span> --version
|
982
|
-
|
983
|
-
If the installation was successful, you will see output like this:
|
984
|
-
|
985
|
-
<span style="color:#070"><pre></span><span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> verbatim <span style="background-color:#f0fff0;color:#2B2"><span style="color:#161">`</span><span style="">ruby bin/</span><span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">#{</span><span style="color:#d70;font-weight:bold">$program</span><span style="font-weight:bold;color:#777">}</span></span><span style=""> --version</span><span style="color:#161">`</span></span> <span style="font-weight:bold;color:#777">%></span></span><span style="color:#070"></pre></span>
|
986
|
-
|
987
|
-
If you do not see such output, you may
|
988
|
-
<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> xref <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">License</span><span style="color:#710">"</span></span>, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">ask the author(s)</span><span style="color:#710">"</span></span> <span style="font-weight:bold;color:#777">%></span></span> for help.
|
989
|
-
|
990
|
-
%|section "Manifest"
|
991
|
-
You will see the following items inside <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%></span></span>'s installation
|
992
|
-
directory, whose path you can determine by running this command:
|
993
|
-
|
994
|
-
<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$program</span> <span style="font-weight:bold;color:#777">%></span></span> --version
|
995
|
-
|
996
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: list important files your project provides here
|
997
|
-
|
998
|
-
* <span style="color:#070"><tt></span>bin/<span style="color:#070"></tt></span>
|
999
|
-
|
1000
|
-
* <span style="color:#070"><tt></span><span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$program</span> <span style="font-weight:bold;color:#777">%></span></span><span style="color:#070"></tt></span> --- the main <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%></span></span> executable.
|
1001
|
-
|
1002
|
-
* <span style="color:#070"><tt></span>lib/<span style="color:#070"></tt></span>
|
1003
|
-
|
1004
|
-
* <span style="color:#070"><tt></span><span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$program</span> <span style="font-weight:bold;color:#777">%></span></span>.rb<span style="color:#070"></tt></span> --- the main <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%></span></span> library.
|
1005
|
-
|
1006
|
-
* <span style="color:#070"><tt></span><span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$program</span> <span style="font-weight:bold;color:#777">%></span></span>/<span style="color:#070"></tt></span>
|
1007
|
-
|
1008
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: list sub-libraries your project provides here
|
1009
|
-
|
1010
|
-
* <span style="color:#070"><tt></span>doc/<span style="color:#070"></tt></span>
|
1011
|
-
|
1012
|
-
* <span style="color:#070"><tt></span>api/<span style="color:#070"></tt></span> --- API reference documentation.
|
1013
|
-
|
1014
|
-
* <span style="color:#070"><tt></span>index.erb<span style="color:#070"></tt></span> --- source of this user manual.
|
1015
|
-
|
1016
|
-
* <span style="color:#070"><tt></span>lang/<span style="color:#070"></tt></span> --- translations of language phrases.
|
1017
|
-
|
1018
|
-
* <span style="color:#070"><tt></span>LICENSE<span style="color:#070"></tt></span> --- copyright notice and legal conditions.
|
1019
|
-
|
1020
|
-
* <span style="color:#070"><tt></span>CREDITS<span style="color:#070"></tt></span> --- attribution of project contributors.
|
1021
|
-
</pre></ins></p></div>
|
1022
|
-
</div><div class="paragraph">
|
1023
|
-
<a name="doc-theory.erb"/><div class="nav" id="doc-theory.erb"><a title="Focus this segment" href="#doc-theory.erb"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#doc-setup.erb"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#doc-usage.erb"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:doc-theory.erb"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1024
|
-
<p class="title"><tt>doc/theory.erb</tt></p>
|
1025
|
-
<div class="content"><p><ins><pre class="para" lang="rhtml">%|chapter "Theory of operation"
|
1026
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: explain how your project does what it does
|
1027
|
-
</pre></ins></p></div>
|
1028
|
-
</div><div class="paragraph">
|
1029
|
-
<a name="doc-usage.erb"/><div class="nav" id="doc-usage.erb"><a title="Focus this segment" href="#doc-usage.erb"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#doc-theory.erb"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#doc-history.erb"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:doc-usage.erb"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1030
|
-
<p class="title"><tt>doc/usage.erb</tt></p>
|
1031
|
-
<div class="content"><p><ins><pre class="para" lang="rhtml">%|chapter "Usage"
|
1032
|
-
%|section "Command-line interface"
|
1033
|
-
When you run this command:
|
1034
|
-
|
1035
|
-
<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$program</span> <span style="font-weight:bold;color:#777">%></span></span> --help
|
1036
|
-
|
1037
|
-
You will see this output:
|
1038
|
-
|
1039
|
-
<span style="color:#070"><pre></span><span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> verbatim <span style="background-color:#f0fff0;color:#2B2"><span style="color:#161">`</span><span style="">ruby bin/</span><span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">#{</span><span style="color:#d70;font-weight:bold">$program</span><span style="font-weight:bold;color:#777">}</span></span><span style=""> --help</span><span style="color:#161">`</span></span> <span style="font-weight:bold;color:#777">%></span></span><span style="color:#070"></pre></span>
|
1040
|
-
|
1041
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: explain the command-line arguments
|
1042
|
-
|
1043
|
-
%|section "Ruby library interface"
|
1044
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: explain how to use your project's Ruby library
|
1045
|
-
<span style="color:#F00;background-color:#FAA">></span> from inside another Ruby program or library
|
1046
|
-
|
1047
|
-
%|section "Tutorial"
|
1048
|
-
This tutorial shows how <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777"><%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%></span></span> is used to __________.
|
1049
|
-
|
1050
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: give examples for doing common tasks
|
1051
|
-
|
1052
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: explain how to do more (advanced) things
|
1053
|
-
</pre></ins></p></div>
|
1054
|
-
</div><div class="paragraph">
|
1055
|
-
<a name="doc-history.erb"/><div class="nav" id="doc-history.erb"><a title="Focus this segment" href="#doc-history.erb"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#doc-usage.erb"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Implement-your-project"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:doc-history.erb"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1056
|
-
<p class="title"><tt>doc/history.erb</tt></p>
|
1057
|
-
<div class="content"><p><ins><pre class="para" lang="rhtml">%|chapter "History"
|
1058
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: put a brief history about your project here
|
1059
|
-
|
1060
|
-
%|history
|
1061
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: put release notes for your project
|
1062
|
-
<span style="color:#F00;background-color:#FAA">></span> here -- newest first, oldest last.
|
1063
|
-
|
1064
|
-
%|section "Version 0.0.0 (2009-05-04)"
|
1065
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: write a short summary of the changes in this release
|
1066
|
-
|
1067
|
-
This release changes __________, adds __________, and fixes __________.
|
1068
|
-
|
1069
|
-
%|paragraph "Thank you"
|
1070
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: list everyone who contributed to this release
|
1071
|
-
|
1072
|
-
* __________ contributed __________
|
1073
|
-
|
1074
|
-
* __________ suggested __________
|
1075
|
-
|
1076
|
-
* __________ helped to __________
|
1077
|
-
|
1078
|
-
%|paragraph "Incompatible changes"
|
1079
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: list all backward-incompatible changes in this release
|
1080
|
-
|
1081
|
-
* __________ has been __________ to __________ ---contributor name
|
1082
|
-
|
1083
|
-
* __________ ---contributor name
|
1084
|
-
|
1085
|
-
* __________ ---contributor name
|
1086
|
-
|
1087
|
-
%|paragraph "New features"
|
1088
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: list new features added in this release
|
1089
|
-
|
1090
|
-
* __________ ---contributor name
|
1091
|
-
|
1092
|
-
* __________ ---contributor name
|
1093
|
-
|
1094
|
-
* __________ ---contributor name
|
1095
|
-
|
1096
|
-
%|paragraph "Bug fixes"
|
1097
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: describe all bugs that are fixed in this release
|
1098
|
-
|
1099
|
-
* __________ was __________ ---contributor name
|
1100
|
-
|
1101
|
-
* __________ were __________ ---contributor name
|
1102
|
-
|
1103
|
-
* __________ did __________ ---contributor name
|
1104
|
-
|
1105
|
-
%|paragraph "Housekeeping"
|
1106
|
-
<span style="color:#F00;background-color:#FAA">></span> TODO: list the refactorings, clean ups, and other
|
1107
|
-
<span style="color:#F00;background-color:#FAA">></span> improvements that were done for this release
|
1108
|
-
|
1109
|
-
* __________ ---contributor name
|
1110
|
-
|
1111
|
-
* __________ ---contributor name
|
1112
|
-
|
1113
|
-
* __________ ---contributor name
|
1114
|
-
</pre></ins></p></div>
|
1115
|
-
</div><p> </p></div>
|
1116
|
-
</div><p> </p></div>
|
1117
|
-
</div><div class="section">
|
1118
|
-
<a name="Implement-your-project"/><div class="nav" id="Implement-your-project"><a title="Focus this segment" href="#Implement-your-project"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#doc-history.erb"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Goodbye-LOAD_PATH-hello-require"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Implement-your-project"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1119
|
-
<h3 class="title">
|
1120
|
-
3.3.4 Implement your project
|
1121
|
-
</h3>
|
1122
|
-
<div class="content"><p>Add the following code to the bottom of <tt>lib/word_count.rb</tt>, the main project library:</p>
|
1123
|
-
|
1124
|
-
<p><ins><pre class="para"><span style="color:#080;font-weight:bold">module</span> <span style="color:#B06;font-weight:bold">WordCount</span>
|
1125
|
-
<span style="color:#888"># Returns the number of words in the given input.</span>
|
1126
|
-
<span style="color:#080;font-weight:bold">def</span> <span style="color:#036;font-weight:bold">WordCount</span>.count input
|
1127
|
-
input.to_s.split(<span style="background-color:#fff0ff"><span style="color:#404">/</span><span style="color:#04D">\W</span><span style="color:#808">+</span><span style="color:#404">/</span></span>).length
|
1128
|
-
<span style="color:#080;font-weight:bold">end</span>
|
1129
|
-
<span style="color:#080;font-weight:bold">end</span>
|
1130
|
-
</pre></ins></p>
|
1131
|
-
|
1132
|
-
<p>Add the following code to the bottom of <tt>bin/word_count</tt>, the main project executable:</p>
|
1133
|
-
|
1134
|
-
<p><ins><pre class="para">input = <span style="color:#038;font-weight:bold">ARGF</span>.read
|
1135
|
-
total = <span style="color:#036;font-weight:bold">WordCount</span>.count(input)
|
1136
|
-
puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">There are </span><span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">#{</span>total<span style="font-weight:bold;color:#777">}</span></span><span style=""> words in the input.</span><span style="color:#710">"</span></span>
|
1137
|
-
</pre></ins></p>
|
1138
|
-
|
1139
|
-
<p>Add the following code to the bottom of <tt>test/word_count.rb</tt>, a unit test for the main project library:</p>
|
1140
|
-
|
1141
|
-
<p><ins><pre class="para">describe <span style="color:#036;font-weight:bold">WordCount</span> <span style="color:#080;font-weight:bold">do</span>
|
1142
|
-
it <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">handles empty input</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
|
1143
|
-
<span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="color:#038;font-weight:bold">nil</span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
|
1144
|
-
<span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
|
1145
|
-
<span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style=""> </span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
|
1146
|
-
<span style="color:#080;font-weight:bold">end</span>
|
1147
|
-
|
1148
|
-
it <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">handles single words</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
|
1149
|
-
<span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">a</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">1</span>)
|
1150
|
-
<span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">foo</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">1</span>)
|
1151
|
-
<span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">bar</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">1</span>)
|
1152
|
-
<span style="color:#080;font-weight:bold">end</span>
|
1153
|
-
|
1154
|
-
it <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">handles multiple words</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
|
1155
|
-
<span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">a b</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">2</span>)
|
1156
|
-
<span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">a-b</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">2</span>)
|
1157
|
-
<span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">a/b</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">2</span>)
|
1158
|
-
<span style="color:#080;font-weight:bold">end</span>
|
1159
|
-
|
1160
|
-
it <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">ignores punctuation and space</span><span style="color:#710">'</span></span> <span style="color:#080;font-weight:bold">do</span>
|
1161
|
-
<span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">!</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
|
1162
|
-
<span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">! @ # % #!@#</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
|
1163
|
-
<span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style=""> !</span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
|
1164
|
-
<span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">! </span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
|
1165
|
-
<span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style=""> ! </span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
|
1166
|
-
<span style="color:#036;font-weight:bold">WordCount</span>.count(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style=""> ! </span><span style="color:#710">'</span></span>).must_equal(<span style="color:#00D;font-weight:bold">0</span>)
|
1167
|
-
<span style="color:#080;font-weight:bold">end</span>
|
1168
|
-
<span style="color:#080;font-weight:bold">end</span>
|
1169
|
-
</pre></ins></p>
|
1170
|
-
|
1171
|
-
<div class="paragraph">
|
1172
|
-
<a name="Goodbye-LOAD_PATH-hello-require"/><div class="nav" id="Goodbye-LOAD_PATH-hello-require"><a title="Focus this segment" href="#Goodbye-LOAD_PATH-hello-require"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Implement-your-project"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Test-your-project"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Goodbye-LOAD_PATH-hello-require"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1173
|
-
<p class="title">Goodbye <code class="line"><span style="color:#d70;font-weight:bold">$LOAD_PATH</span></code>, hello <code class="line">require()</code></p>
|
1174
|
-
<div class="content"><p>Notice that, in the Ruby files that you modified so far, there were no <code class="line"><span style="color:#d70;font-weight:bold">$LOAD_PATH</span></code> manipulations and no explicit <code class="line">require()</code> statements to pull in the various parts of your project. That is because Inochi does this for you automatically.</p>
|
1175
|
-
|
1176
|
-
<p>Furthermore, you can always <code class="line">require()</code> a sub-library anywhere in your project using its canonical path because Inochi puts your main project libraries on the Ruby load path.</p>
|
1177
|
-
|
1178
|
-
<p>For example, if your project has a sub-library, say, <tt>lib/word_count/odf/text.rb</tt> that counts the number of words in an <a href='http://en.wikipedia.org/wiki/OpenDocument'>OpenDocument Text</a> document, then it would be loaded into the main project executable like this:</p>
|
1179
|
-
|
1180
|
-
<p><ins><pre class="para">require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">word_count/odf/text</span><span style="color:#710">'</span></span>
|
1181
|
-
</pre></ins></p>
|
1182
|
-
|
1183
|
-
<p>Regardless of whether a sub-library is used within your project itself or from within an external application, we always <code class="line">require()</code> the sub-library using the same canonical path.</p></div>
|
1184
|
-
</div><p></p></div>
|
1185
|
-
</div><div class="section">
|
1186
|
-
<a name="Test-your-project"/><div class="nav" id="Test-your-project"><a title="Focus this segment" href="#Test-your-project"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Goodbye-LOAD_PATH-hello-require"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Units-and-tests"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Test-your-project"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1187
|
-
<h3 class="title">
|
1188
|
-
3.3.5 Test your project
|
1189
|
-
</h3>
|
1190
|
-
<div class="content"><p>To reduce the amount of code you have to write, Inochi defines the following convention for unit tests.</p>
|
1191
|
-
|
1192
|
-
<div class="paragraph">
|
1193
|
-
<a name="Units-and-tests"/><div class="nav" id="Units-and-tests"><a title="Focus this segment" href="#Units-and-tests"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Test-your-project"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Test-execution"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Units-and-tests"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1194
|
-
<p class="title">Units and tests</p>
|
1195
|
-
<div class="content"><p>Every Ruby source file in your project’s <tt>lib/</tt> directory is considered to be a <strong>unit</strong>. Likewise, every Ruby source file in your project’s <tt>test/</tt> is considered to be a <strong>test</strong>.</p>
|
1196
|
-
|
1197
|
-
<p>As a result, your project’s <tt>test/</tt> directory structure <em>mirrors</em> the structure of your project’s <tt>lib/</tt> directory. For example, if your project has a <tt>lib/foo/bar.rb</tt> unit, then <tt>test/foo/bar.rb</tt> would be its corresponding test.</p></div>
|
1198
|
-
</div><div class="paragraph">
|
1199
|
-
<a name="Test-execution"/><div class="nav" id="Test-execution"><a title="Focus this segment" href="#Test-execution"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Units-and-tests"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Helper-libraries"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Test-execution"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1200
|
-
<p class="title">Test execution</p>
|
1201
|
-
<div class="content"><pre>rake test</pre><p></p>
|
1202
|
-
|
1203
|
-
<p>The above command begins the testing process, during which:</p>
|
1204
|
-
|
1205
|
-
<ul>
|
1206
|
-
<li>
|
1207
|
-
<p>Tests which lack corresponding units are <em>skipped</em> and not executed. A message specifying which test file was skipped is printed to the standard error stream whenever this occurs.</p>
|
1208
|
-
</li>
|
1209
|
-
|
1210
|
-
<li>
|
1211
|
-
<p>Before a test is executed, its corresponding unit is automatically loaded into the Ruby environment using <code class="line">require()</code>.</p>
|
1212
|
-
</li>
|
1213
|
-
</ul>
|
1214
|
-
|
1215
|
-
<p>The details of test execution are left to the integration libraries specified by the <code class="line"><span style="color:#A60">:test_with</span></code> parameter of the <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.rake()</code> method. Possible values for this parameter are:</p>
|
1216
|
-
|
1217
|
-
<ul>
|
1218
|
-
<li><tt>bacon</tt> — Integration for the <a href='http://github.com/chneukirchen/bacon'>Bacon library</a>.</li>
|
1219
|
-
|
1220
|
-
<li><tt>context</tt> — Integration for the <a href='http://github.com/jeremymcanally/context'>Context library</a>.</li>
|
1221
|
-
|
1222
|
-
<li><tt>dfect</tt> — Integration for the <a href='http://snk.tuxfamily.org/lib/dfect/'>Dfect library</a>.</li>
|
1223
|
-
|
1224
|
-
<li><tt>matchy</tt> — Integration for the <a href='http://github.com/jeremymcanally/matchy'>Matchy library</a></li>
|
1225
|
-
|
1226
|
-
<li><tt>minitest</tt> — Integration for the <a href='http://blog.zenspider.com/minitest/'>Minitest library</a>.</li>
|
1227
|
-
|
1228
|
-
<li><tt>mocha</tt> — Integration for the <a href='http://mocha.rubyforge.org'>Mocha library</a>.</li>
|
1229
|
-
|
1230
|
-
<li><tt>rspec</tt> — Integration for the <a href='http://rspec.info'>RSpec library</a>.</li>
|
1231
|
-
|
1232
|
-
<li><tt>shoulda</tt> — Integration for the <a href='http://thoughtbot.com/projects/shoulda/'>Shoulda library</a>.</li>
|
1233
|
-
|
1234
|
-
<li><tt>test_spec</tt> — Integration for the <a href='http://chneukirchen.org/repos/testspec/README'>test/spec library</a>.</li>
|
1235
|
-
|
1236
|
-
<li><tt>test_unit</tt> — Integration for the <a href='http://test-unit.rubyforge.org'>Test::Unit library</a>.</li>
|
1237
|
-
</ul></div>
|
1238
|
-
</div><div class="paragraph">
|
1239
|
-
<a name="Helper-libraries"/><div class="nav" id="Helper-libraries"><a title="Focus this segment" href="#Helper-libraries"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Test-execution"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Translate-your-project"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Helper-libraries"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1240
|
-
<p class="title">Helper libraries</p>
|
1241
|
-
<div class="content"><p>Your project’s main directory is added to Ruby’s load path. So if your tests have helper libraries stored in your project’s <tt>test/</tt> directory, you can load them into your tests by adding a “test/” prefix.</p>
|
1242
|
-
|
1243
|
-
<p>For example, if your <tt>test/foo/bar.rb</tt> test has a <tt>test/foo/qux.rb</tt> helper library, then you would write the following code inside the test to load the helper library:</p>
|
1244
|
-
|
1245
|
-
<p><ins><pre class="para">require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">test/foo/qux</span><span style="color:#710">'</span></span>
|
1246
|
-
</pre></ins></p></div>
|
1247
|
-
</div><p> </p></div>
|
1248
|
-
</div><div class="section">
|
1249
|
-
<a name="Translate-your-project"/><div class="nav" id="Translate-your-project"><a title="Focus this segment" href="#Translate-your-project"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Helper-libraries"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Language-phrases"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Translate-your-project"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1250
|
-
<h3 class="title">
|
1251
|
-
3.3.6 Translate your project
|
1252
|
-
</h3>
|
1253
|
-
<div class="content"><p>Although English is the <em>lingua franca</em> of today, your project’s users may prefer to interact with it in their native language. Inochi makes it easy to translate your project and also makes it easy for users to correct and contribute translations to your project.</p>
|
1254
|
-
|
1255
|
-
<div class="section">
|
1256
|
-
<a name="Language-phrases"/><div class="nav" id="Language-phrases"><a title="Focus this segment" href="#Language-phrases"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Translate-your-project"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Parameterizing-language-phrases"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Language-phrases"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1257
|
-
<h4 class="title">
|
1258
|
-
3.3.6.1 Language phrases
|
1259
|
-
</h4>
|
1260
|
-
<div class="content"><p>Inochi equips your project module with a <code class="line"><span style="color:#036;font-weight:bold">PHRASES</span></code> constant (see the <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>::<span style="color:#036;font-weight:bold">Phrases</span></code> class) which provides access to translations of language phrases used in your project.</p>
|
1261
|
-
|
1262
|
-
<p>The <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>::<span style="color:#036;font-weight:bold">Phrases</span><span style="color:#888">#[]</span></code> method translates a given language phrase into the user’s preferred language, which is automatically inferred from their environment, but may be explictly overridden by the user via the <tt>--locale</tt> option of <a class="xref" href="#Run-project-executable" title="Paragraph. "Run project executable"">your project’s main executable</a>:</p>
|
1263
|
-
|
1264
|
-
<p><ins><pre class="para">your_project::<span style="color:#036;font-weight:bold">PHRASES</span>[<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">Have a nice day!</span><span style="color:#710">'</span></span>]
|
1265
|
-
</pre></ins></p>
|
1266
|
-
|
1267
|
-
<p>If there is no <a class="xref" href="#Translation-files" title="Section 3.3.6.2. "Translation files"">translation file</a> for the user’s preferred language, or it does not define a translation for a particular language phrase, then the language phrase will be used untranslated:</p>
|
1268
|
-
|
1269
|
-
<p><ins><pre class="para">your_project::<span style="color:#036;font-weight:bold">PHRASES</span>[<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">No translation for this</span><span style="color:#710">'</span></span>]
|
1270
|
-
<span style="color:#888">#=> 'No translation for this'</span>
|
1271
|
-
</pre></ins></p>
|
1272
|
-
|
1273
|
-
<div class="paragraph">
|
1274
|
-
<a name="Parameterizing-language-phrases"/><div class="nav" id="Parameterizing-language-phrases"><a title="Focus this segment" href="#Parameterizing-language-phrases"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Language-phrases"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Explicit-translation-into-a-language"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Parameterizing-language-phrases"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1275
|
-
<p class="title">Parameterizing language phrases</p>
|
1276
|
-
<div class="content"><p>Language phrases can be parameterized using <a href='http://en.wikipedia.org/wiki/Printf#printf_format_placeholders'><code class="line">printf</code> format placeholders</a> to ease translation:</p>
|
1277
|
-
|
1278
|
-
<p><ins><pre class="para">your_project::<span style="color:#036;font-weight:bold">PHRASES</span>[<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">Good afternoon, %s.</span><span style="color:#710">'</span></span>, user_name]
|
1279
|
-
your_project::<span style="color:#036;font-weight:bold">PHRASES</span>[<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">You are %d years old.</span><span style="color:#710">'</span></span>, user_age]
|
1280
|
-
</pre></ins></p></div>
|
1281
|
-
</div><div class="paragraph">
|
1282
|
-
<a name="Explicit-translation-into-a-language"/><div class="nav" id="Explicit-translation-into-a-language"><a title="Focus this segment" href="#Explicit-translation-into-a-language"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Parameterizing-language-phrases"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Translation-files"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Explicit-translation-into-a-language"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1283
|
-
<p class="title">Explicit translation into a language</p>
|
1284
|
-
<div class="content"><p>If a language phrase must be translated into a specific language, regardless of the user’s preference, you can invoke the respective method (whose name is the same as the <a href='http://en.wikipedia.org/wiki/ISO_639'>ISO-639 language code</a> of the language into which you wish to translate) on your <code class="line"><span style="color:#036;font-weight:bold">PHRASES</span></code> object:</p>
|
1285
|
-
|
1286
|
-
<p><ins><pre class="para"><span style="color:#888"># explictly translate into Japanese (ja)</span>
|
1287
|
-
your_project::<span style="color:#036;font-weight:bold">PHRASES</span>.ja(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">Goodbye %s!</span><span style="color:#710">'</span></span>, user_name)
|
1288
|
-
|
1289
|
-
<span style="color:#888"># explictly translate into French (fr)</span>
|
1290
|
-
your_project::<span style="color:#036;font-weight:bold">PHRASES</span>.fr(<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">Farewell %s!</span><span style="color:#710">'</span></span>, user_name)
|
1291
|
-
</pre></ins></p></div>
|
1292
|
-
</div><p> </p></div>
|
1293
|
-
</div><div class="section">
|
1294
|
-
<a name="Translation-files"/><div class="nav" id="Translation-files"><a title="Focus this segment" href="#Translation-files"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Explicit-translation-into-a-language"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Extracting-language-phrases"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Translation-files"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1295
|
-
<h4 class="title">
|
1296
|
-
3.3.6.2 Translation files
|
1297
|
-
</h4>
|
1298
|
-
<div class="content"><p>Translation files are <a href='http://yaml.kwiki.org/?YamlInFiveMinutes'>YAML documents</a> that reside in your project’s <tt>lang/</tt> directory. They provide translations for <a class="xref" href="#Language-phrases" title="Section 3.3.6.1. "Language phrases"">language phrases</a> used in your project.</p>
|
1299
|
-
|
1300
|
-
<p>For example, suppose that your language phrases are written in English, the <tt>lang/es.yaml</tt> (Spanish) translation file would appear like this:</p>
|
1301
|
-
|
1302
|
-
<pre>#
|
1303
|
-
# (this is a comment)
|
1304
|
-
#
|
1305
|
-
# language phrase : translation
|
1306
|
-
#
|
1307
|
-
Hello %s! : ¡Hola %s!
|
1308
|
-
Money : Dinero
|
1309
|
-
Ticket : Tarjeta
|
1310
|
-
See you later %s! : ¡Hasta la vista %s!
|
1311
|
-
"%s: Quickly, please!" : "%s: ¡Rápidamente, por favor!"</pre><p></p>
|
1312
|
-
|
1313
|
-
<p>On each line, the original language phrase (as used in your project) appears first, then a single semicolon (:), followed by the translation.</p>
|
1314
|
-
|
1315
|
-
<p>Also, notice that if a language phrase contains a semicolon, then the entire phrase must be enclosed in quotation marks. The same rule applies to its corresponding translation.</p></div>
|
1316
|
-
</div><div class="section">
|
1317
|
-
<a name="Extracting-language-phrases"/><div class="nav" id="Extracting-language-phrases"><a title="Focus this segment" href="#Extracting-language-phrases"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Translation-files"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Dynamic-analysis"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Extracting-language-phrases"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1318
|
-
<h4 class="title">
|
1319
|
-
3.3.6.3 Extracting language phrases
|
1320
|
-
</h4>
|
1321
|
-
<div class="content"><pre># rake lang:dump
|
1322
|
-
(in /tmp/rake20090504-12012-13p4oou-0/word_count)
|
1323
|
-
Inochi establishment tests passed!
|
1324
|
-
Extracted 0 language phrases into "/tmp/rake20090504-12012-13p4oou-0/word_count/lang/phrases.yaml"
|
1325
|
-
</pre><p></p>
|
1326
|
-
|
1327
|
-
<p>The above command exercises your project’s code and extracts all <em>utilized</em> language phrases into the <tt>lang/phrases.yaml</tt> file. Continue reading to learn how this is accomplished.</p>
|
1328
|
-
|
1329
|
-
<div class="paragraph">
|
1330
|
-
<a name="Dynamic-analysis"/><div class="nav" id="Dynamic-analysis"><a title="Focus this segment" href="#Dynamic-analysis"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Extracting-language-phrases"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Static-analysis"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Dynamic-analysis"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1331
|
-
<p class="title">Dynamic analysis</p>
|
1332
|
-
<div class="content"><p>Because Ruby is a dynamically interpreted language, the easiest way to extract language phrases is to evaluate the code that defines them and keep track of which phrases are defined.</p>
|
1333
|
-
|
1334
|
-
<p>But how can Inochi exercise all Ruby code in your project? The answer is through <em>unit tests</em>. Because unit tests already exercise your project’s code, Inochi can use them to reach and extract all language phrases from your project.</p>
|
1335
|
-
|
1336
|
-
<p>However, note that if your unit tests <em>do not</em> exercise a part of your project that defines language phrases, then those phrases <em>will not</em> be extracted by Inochi.</p>
|
1337
|
-
|
1338
|
-
<p>This gives you extra motivation to improve the coverage of your test suite—at least to the point where all code that defines language phrases is covered.</p></div>
|
1339
|
-
</div><div class="paragraph">
|
1340
|
-
<a name="Static-analysis"/><div class="nav" id="Static-analysis"><a title="Focus this segment" href="#Static-analysis"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Dynamic-analysis"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Translating-language-phrases"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Static-analysis"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1341
|
-
<p class="title">Static analysis</p>
|
1342
|
-
<div class="content"><p>In a future release, I plan to extract language phrases through static analysis of Ruby code. This approach will supplement the current practice of reaching language phrases through unit tests.</p>
|
1343
|
-
|
1344
|
-
<p>Patches are welcome! :-)</p></div>
|
1345
|
-
</div><p> </p></div>
|
1346
|
-
</div><div class="section">
|
1347
|
-
<a name="Translating-language-phrases"/><div class="nav" id="Translating-language-phrases"><a title="Focus this segment" href="#Translating-language-phrases"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Static-analysis"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Publish-your-project"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Translating-language-phrases"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1348
|
-
<h4 class="title">
|
1349
|
-
3.3.6.4 Translating language phrases
|
1350
|
-
</h4>
|
1351
|
-
<div class="content"><p>After you have extracted all language phrases from your project (either manually or via <a class="xref" href="#Extracting-language-phrases" title="Section 3.3.6.3">Extracting language phrases</a>) into the <tt>lang/phrases.yaml</tt> file, Inochi can automatically translate them into various languages using the <a href='http://babelfish.yahoo.com'>Yahoo! BabelFish translation service</a>:</p>
|
1352
|
-
|
1353
|
-
<pre># rake lang:conv from=LANGUAGE_CODE
|
1354
|
-
rake aborted!
|
1355
|
-
The "from" parameter must be specified as follows:
|
1356
|
-
rake lang:conv from=it # from Italian
|
1357
|
-
rake lang:conv from=ja # from Japanese
|
1358
|
-
rake lang:conv from=de # from German
|
1359
|
-
rake lang:conv from=fr # from French
|
1360
|
-
rake lang:conv from=es # from Spanish
|
1361
|
-
rake lang:conv from=ru # from Russian
|
1362
|
-
rake lang:conv from=zh # from Chinese-simp
|
1363
|
-
rake lang:conv from=pt # from Portuguese
|
1364
|
-
rake lang:conv from=ko # from Korean
|
1365
|
-
rake lang:conv from=zt # from Chinese-trad
|
1366
|
-
rake lang:conv from=el # from Greek
|
1367
|
-
rake lang:conv from=nl # from Dutch
|
1368
|
-
rake lang:conv from=en # from English
|
1369
|
-
|
1370
|
-
(See full trace by running task with --trace)
|
1371
|
-
(in /tmp/rake20090504-12012-13p4oou-0/word_count)
|
1372
|
-
</pre><p></p>
|
1373
|
-
|
1374
|
-
<p>Notice that you must specify the language in which your phrases are written, via the <tt>from=</tt> parameter. Inochi cannot determine this automatically.</p></div>
|
1375
|
-
</div><p> </p></div>
|
1376
|
-
</div><div class="section">
|
1377
|
-
<a name="Publish-your-project"/><div class="nav" id="Publish-your-project"><a title="Focus this segment" href="#Publish-your-project"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Translating-language-phrases"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Build-a-RubyGem"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Publish-your-project"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1378
|
-
<h3 class="title">
|
1379
|
-
3.3.7 Publish your project
|
1380
|
-
</h3>
|
1381
|
-
<div class="content"><pre># rake pub</pre><p></p>
|
1382
|
-
|
1383
|
-
<p>The above command performs all automated steps described in the following sections.</p>
|
1384
|
-
|
1385
|
-
<div class="section">
|
1386
|
-
<a name="Build-a-RubyGem"/><div class="nav" id="Build-a-RubyGem"><a title="Focus this segment" href="#Build-a-RubyGem"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Publish-your-project"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Publish-a-RubyGem"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Build-a-RubyGem"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1387
|
-
<h4 class="title">
|
1388
|
-
3.3.7.1 Build a RubyGem
|
1389
|
-
</h4>
|
1390
|
-
<div class="content"><p>Build a RubyGem by running:</p>
|
1391
|
-
|
1392
|
-
<pre># rake gem
|
1393
|
-
(in /tmp/rake20090504-12012-13p4oou-0/word_count)
|
1394
|
-
Parsing sources with 2 thread(s)...
|
1395
|
-
33% [ 1/ 3] LICENSE
|
1396
|
-
66% [ 2/ 3] CREDITS
|
1397
|
-
100% [ 3/ 3] lib/word_count.rb
|
1398
|
-
|
1399
|
-
|
1400
|
-
Files: 3
|
1401
|
-
Classes: 0
|
1402
|
-
Modules: 0
|
1403
|
-
Methods: 0
|
1404
|
-
Elapsed: 0.2s
|
1405
|
-
(in /tmp/rake20090504-12012-13p4oou-0/word_count)
|
1406
|
-
Inochi establishment tests passed!
|
1407
|
-
Successfully built RubyGem
|
1408
|
-
Name: word_count
|
1409
|
-
Version: 0.0.0
|
1410
|
-
File: word_count-0.0.0.gem
|
1411
|
-
</pre><p></p>
|
1412
|
-
|
1413
|
-
<p>See the RubyGem contents:</p>
|
1414
|
-
|
1415
|
-
<pre># gem spec pkg/*.gem
|
1416
|
-
<ins><pre class="para" lang="yaml"><span style="color:#f8f;background:#505"><span style="color:#f4f">---</span></span> <span style="color:#339;font-weight:bold">!ruby/object</span>:<span style="color:#B06;font-weight:bold">Gem::Specification</span>
|
1417
|
-
<span style="color:#808">name</span>: <span style="background-color:#fff0f0;color:#D20">word_count</span>
|
1418
|
-
<span style="color:#808">version</span>: <span style="color:#339;font-weight:bold">!ruby/object</span>:<span style="color:#B06;font-weight:bold">Gem::Version</span>
|
1419
|
-
<span style="color:#808">version</span>: <span style="background-color:#fff0f0;color:#D20">0.0.0</span>
|
1420
|
-
<span style="color:#808">platform</span>: <span style="background-color:#fff0f0;color:#D20">ruby</span>
|
1421
|
-
<span style="color:#808">authors</span>:
|
1422
|
-
- <span style="background-color:#fff0f0;color:#D20">Your Name</span>
|
1423
|
-
<span style="color:#808">autorequire</span>:
|
1424
|
-
<span style="color:#808">bindir</span>: <span style="background-color:#fff0f0;color:#D20">bin</span>
|
1425
|
-
<span style="color:#808">cert_chain</span>: <span style="background-color:#fff0f0;color:#D20">[]</span>
|
1426
|
-
|
1427
|
-
<span style="color:#808">date</span>: <span style="background-color:#fff0f0;color:#D20">2009-05-04 00:00:00 -07:00</span>
|
1428
|
-
<span style="color:#808">default_executable</span>:
|
1429
|
-
<span style="color:#808">dependencies</span>:
|
1430
|
-
- <span style="color:#339;font-weight:bold">!ruby/object</span>:<span style="color:#B06;font-weight:bold">Gem::Dependency</span>
|
1431
|
-
<span style="color:#808">name</span>: <span style="background-color:#fff0f0;color:#D20">inochi</span>
|
1432
|
-
<span style="color:#808">type</span>: <span style="background-color:#fff0f0;color:#D20">:development</span>
|
1433
|
-
<span style="color:#808">version_requirement</span>:
|
1434
|
-
<span style="color:#808">version_requirements</span>: <span style="color:#339;font-weight:bold">!ruby/object</span>:<span style="color:#B06;font-weight:bold">Gem::Requirement</span>
|
1435
|
-
<span style="color:#808">requirements</span>:
|
1436
|
-
- <span style="background-color:#fff0f0;color:#D20">- ~></span>
|
1437
|
-
- <span style="color:#339;font-weight:bold">!ruby/object</span>:<span style="color:#B06;font-weight:bold">Gem::Version</span>
|
1438
|
-
<span style="color:#808">version</span>: <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">1</span><span style="color:#710">"</span></span>
|
1439
|
-
<span style="color:#808">version</span>:
|
1440
|
-
- <span style="color:#339;font-weight:bold">!ruby/object</span>:<span style="color:#B06;font-weight:bold">Gem::Dependency</span>
|
1441
|
-
<span style="color:#808">name</span>: <span style="background-color:#fff0f0;color:#D20">inochi</span>
|
1442
|
-
<span style="color:#808">type</span>: <span style="background-color:#fff0f0;color:#D20">:runtime</span>
|
1443
|
-
<span style="color:#808">version_requirement</span>:
|
1444
|
-
<span style="color:#808">version_requirements</span>: <span style="color:#339;font-weight:bold">!ruby/object</span>:<span style="color:#B06;font-weight:bold">Gem::Requirement</span>
|
1445
|
-
<span style="color:#808">requirements</span>:
|
1446
|
-
- <span style="background-color:#fff0f0;color:#D20">- ~></span>
|
1447
|
-
- <span style="color:#339;font-weight:bold">!ruby/object</span>:<span style="color:#B06;font-weight:bold">Gem::Version</span>
|
1448
|
-
<span style="color:#808">version</span>: <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">1</span><span style="color:#710">"</span></span>
|
1449
|
-
<span style="color:#808">version</span>:
|
1450
|
-
<span style="color:#808">description</span>: <span style="background-color:#fff0f0;color:#D20">put a single line description of your project here</span>
|
1451
|
-
<span style="color:#808">email</span>: <span style="background-color:#fff0f0;color:#D20">your@email.here</span>
|
1452
|
-
<span style="color:#808">executables</span>:
|
1453
|
-
- <span style="background-color:#fff0f0;color:#D20">word_count</span>
|
1454
|
-
<span style="color:#808">extensions</span>: <span style="background-color:#fff0f0;color:#D20">[]</span>
|
1455
|
-
|
1456
|
-
<span style="color:#808">extra_rdoc_files</span>: <span style="background-color:#fff0f0;color:#D20">[]</span>
|
1457
|
-
|
1458
|
-
<span style="color:#808">files</span>:
|
1459
|
-
- <span style="background-color:#fff0f0;color:#D20">lib/word_count.rb</span>
|
1460
|
-
- <span style="background-color:#fff0f0;color:#D20">test/word_count.rb</span>
|
1461
|
-
- <span style="background-color:#fff0f0;color:#D20">bin/word_count</span>
|
1462
|
-
- <span style="background-color:#fff0f0;color:#D20">LICENSE</span>
|
1463
|
-
- <span style="background-color:#fff0f0;color:#D20">rakefile</span>
|
1464
|
-
- <span style="background-color:#fff0f0;color:#D20">CREDITS</span>
|
1465
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/usage.erb</span>
|
1466
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/index.erb</span>
|
1467
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/history.erb</span>
|
1468
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/intro.erb</span>
|
1469
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/index.xhtml</span>
|
1470
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/setup.erb</span>
|
1471
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/i/tree_bg.png</span>
|
1472
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/i/results_bg.png</span>
|
1473
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/i/arrows.png</span>
|
1474
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/index.html</span>
|
1475
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/panel/index.html</span>
|
1476
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/panel/search_index.js</span>
|
1477
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/panel/tree.js</span>
|
1478
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/css/panel.css</span>
|
1479
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/css/reset.css</span>
|
1480
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/css/main.css</span>
|
1481
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/files/LICENSE.html</span>
|
1482
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/files/lib/word_count_rb.html</span>
|
1483
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/files/CREDITS.html</span>
|
1484
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/created.rid</span>
|
1485
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/js/main.js</span>
|
1486
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/js/searchdoc.js</span>
|
1487
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/js/jquery-1.3.2.min.js</span>
|
1488
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/api/js/jquery-effect.js</span>
|
1489
|
-
- <span style="background-color:#fff0f0;color:#D20">doc/theory.erb</span>
|
1490
|
-
- <span style="background-color:#fff0f0;color:#D20">lang/phrases.yaml</span>
|
1491
|
-
<span style="color:#808">has_rdoc</span>: <span style="background-color:#fff0f0;color:#D20">true</span>
|
1492
|
-
<span style="color:#808">homepage</span>: <span style="background-color:#fff0f0;color:#D20">http://word_count.rubyforge.org</span>
|
1493
|
-
<span style="color:#808">licenses</span>: <span style="background-color:#fff0f0;color:#D20">[]</span>
|
1494
|
-
|
1495
|
-
<span style="color:#808">post_install_message</span>:
|
1496
|
-
<span style="color:#808">rdoc_options</span>: <span style="background-color:#fff0f0;color:#D20">[]</span>
|
1497
|
-
|
1498
|
-
<span style="color:#808">require_paths</span>:
|
1499
|
-
- <span style="background-color:#fff0f0;color:#D20">lib</span>
|
1500
|
-
<span style="color:#808">required_ruby_version</span>: <span style="color:#339;font-weight:bold">!ruby/object</span>:<span style="color:#B06;font-weight:bold">Gem::Requirement</span>
|
1501
|
-
<span style="color:#808">requirements</span>:
|
1502
|
-
- <span style="background-color:#fff0f0;color:#D20">- ">="</span>
|
1503
|
-
- <span style="color:#339;font-weight:bold">!ruby/object</span>:<span style="color:#B06;font-weight:bold">Gem::Version</span>
|
1504
|
-
<span style="color:#808">version</span>: <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">0</span><span style="color:#710">"</span></span>
|
1505
|
-
<span style="color:#808">version</span>:
|
1506
|
-
<span style="color:#808">required_rubygems_version</span>: <span style="color:#339;font-weight:bold">!ruby/object</span>:<span style="color:#B06;font-weight:bold">Gem::Requirement</span>
|
1507
|
-
<span style="color:#808">requirements</span>:
|
1508
|
-
- <span style="background-color:#fff0f0;color:#D20">- ">="</span>
|
1509
|
-
- <span style="color:#339;font-weight:bold">!ruby/object</span>:<span style="color:#B06;font-weight:bold">Gem::Version</span>
|
1510
|
-
<span style="color:#808">version</span>: <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">0</span><span style="color:#710">"</span></span>
|
1511
|
-
<span style="color:#808">version</span>:
|
1512
|
-
<span style="color:#808">requirements</span>: <span style="background-color:#fff0f0;color:#D20">[]</span>
|
1513
|
-
|
1514
|
-
<span style="color:#808">rubyforge_project</span>: <span style="background-color:#fff0f0;color:#D20">word_count</span>
|
1515
|
-
<span style="color:#808">rubygems_version</span>: <span style="background-color:#fff0f0;color:#D20">1.3.2</span>
|
1516
|
-
<span style="color:#808">signing_key</span>:
|
1517
|
-
<span style="color:#808">specification_version</span>: <span style="background-color:#fff0f0;color:#D20">3</span>
|
1518
|
-
<span style="color:#808">summary</span>: <span style="background-color:#fff0f0;color:#D20">put a single line description of your project here</span>
|
1519
|
-
<span style="color:#808">test_files</span>: <span style="background-color:#fff0f0;color:#D20">[]</span></pre></ins></pre><p></p></div>
|
1520
|
-
</div><div class="section">
|
1521
|
-
<a name="Publish-a-RubyGem"/><div class="nav" id="Publish-a-RubyGem"><a title="Focus this segment" href="#Publish-a-RubyGem"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Build-a-RubyGem"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Announce-a-release"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Publish-a-RubyGem"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1522
|
-
<h4 class="title">
|
1523
|
-
3.3.7.2 Publish a RubyGem
|
1524
|
-
</h4>
|
1525
|
-
<div class="content"><p>You must first register your project on <a href='http://rubyforge.org'>RubyForge</a> before you can publish a RubyGem. If your RubyForge project name is different from your actual project name, then you should pass the <code class="line"><span style="color:#A60">:rubyforge_project</span></code> and <code class="line"><span style="color:#A60">:rubyforge_section</span></code> options to the <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.rake()</code> method.</p>
|
1526
|
-
|
1527
|
-
<p>Publish a RubyGem by running:</p>
|
1528
|
-
|
1529
|
-
<pre># rake pub:gem</pre><p></p></div>
|
1530
|
-
</div><div class="section">
|
1531
|
-
<a name="Announce-a-release"/><div class="nav" id="Announce-a-release"><a title="Focus this segment" href="#Announce-a-release"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Publish-a-RubyGem"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Login-information"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Announce-a-release"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1532
|
-
<h4 class="title">
|
1533
|
-
3.3.7.3 Announce a release
|
1534
|
-
</h4>
|
1535
|
-
<div class="content"><p>You must first provide your <a class="xref" href="#Login-information" title="Paragraph">Login information</a> to Inochi. If you do not want to do this, then see <a class="xref" href="#Manual-release-announcement" title="Section 3.3.7.3.1">Manual release announcement</a>.</p>
|
1536
|
-
|
1537
|
-
<p>Announce a release by running:</p>
|
1538
|
-
|
1539
|
-
<pre># rake pub:ann</pre><p></p>
|
1540
|
-
|
1541
|
-
<div class="paragraph">
|
1542
|
-
<a name="Login-information"/><div class="nav" id="Login-information"><a title="Focus this segment" href="#Login-information"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Announce-a-release"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Manual-release-announcement"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Login-information"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1543
|
-
<p class="title">Login information</p>
|
1544
|
-
<div class="content"><p>In order to automate the announcement of releases, Inochi needs to know your login information for the <a href='http://raa.ruby-lang.org'>RAA (Ruby Application Archive)</a> and <a href='http://www.ruby-forum.com/forum/4'>RubyForum</a>, which serves as a gateway to the <a href='http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/'>ruby-talk mailing list</a>.</p>
|
1545
|
-
|
1546
|
-
<p>This information is expected to be stored in a <tt>~/.config/inochi/logins.yaml</tt> file (this location can be overridden by passing the <code class="line"><span style="color:#A60">:logins_file</span></code> option to the <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.rake()</code> method), where <tt>~</tt> denotes the path to your home directory. This file is a <a href='http://yaml.kwiki.org/?YamlInFiveMinutes'>YAML document</a> containing the following parameters:</p>
|
1547
|
-
|
1548
|
-
<p><ins><pre class="para" lang="yaml"><span style="color:#F00;background-color:#FAA">www.ruby-forum.com</span>:
|
1549
|
-
<span style="color:#808">user</span>: <span style="background-color:#fff0f0;color:#D20">YOUR_USERNAME_HERE</span>
|
1550
|
-
<span style="color:#808">pass</span>: <span style="background-color:#fff0f0;color:#D20">YOUR_PASSWORD_HERE</span>
|
1551
|
-
|
1552
|
-
<span style="color:#F00;background-color:#FAA">raa.ruby-lang.org</span>:
|
1553
|
-
<span style="color:#808">pass</span>: <span style="background-color:#fff0f0;color:#D20">YOUR_PASSWORD_HERE</span>
|
1554
|
-
</pre></ins></p>
|
1555
|
-
|
1556
|
-
<p>For better security, you should ensure that this file is only readable and writable by you and is not accessible by anyone else. In a UNIX environment, this can be accomplished by running the following command:</p>
|
1557
|
-
|
1558
|
-
<pre># chmod 0600 ~/.config/inochi/logins.yaml</pre></div>
|
1559
|
-
</div><div class="section">
|
1560
|
-
<a name="Manual-release-announcement"/><div class="nav" id="Manual-release-announcement"><a title="Focus this segment" href="#Manual-release-announcement"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Login-information"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Publish-the-documentation"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Manual-release-announcement"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1561
|
-
<h5 class="title">
|
1562
|
-
3.3.7.3.1 Manual release announcement
|
1563
|
-
</h5>
|
1564
|
-
<div class="content"><p>Build release announcements by running:</p>
|
1565
|
-
|
1566
|
-
<pre># rake ann
|
1567
|
-
(in /tmp/rake20090504-12012-13p4oou-0/word_count)
|
1568
|
-
</pre><p></p>
|
1569
|
-
|
1570
|
-
<p>This produces the following files in your project directory:</p>
|
1571
|
-
|
1572
|
-
<ul>
|
1573
|
-
<li><tt>ANN.eml</tt></li>
|
1574
|
-
|
1575
|
-
<li><tt>ANN.html</tt></li>
|
1576
|
-
|
1577
|
-
<li><tt>ANN.txt</tt></li>
|
1578
|
-
</ul>
|
1579
|
-
|
1580
|
-
<p>Now you can manually announce your release using these files.</p></div>
|
1581
|
-
</div><p> </p></div>
|
1582
|
-
</div><div class="section">
|
1583
|
-
<a name="Publish-the-documentation"/><div class="nav" id="Publish-the-documentation"><a title="Focus this segment" href="#Publish-the-documentation"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Manual-release-announcement"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#History"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Publish-the-documentation"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1584
|
-
<h4 class="title">
|
1585
|
-
3.3.7.4 Publish the documentation
|
1586
|
-
</h4>
|
1587
|
-
<div class="content"><p>Publish the user manual and API documentation by running:</p>
|
1588
|
-
|
1589
|
-
<pre># rake pub:doc</pre><p></p>
|
1590
|
-
|
1591
|
-
<p>If your documentation website (see the <code class="line"><span style="color:#A60">:docsite</span></code> option for the <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.init()</code> method) is hosted on RubyForge, then the above command will automatically upload your project’s documentation to the correct place.</p></div>
|
1592
|
-
</div><p> </p></div>
|
1593
|
-
</div><p></p></div>
|
1594
|
-
</div><p> </p></div>
|
1595
|
-
</div>
|
1596
|
-
|
1597
|
-
<div class="chapter">
|
1598
|
-
<a name="History"/><div class="nav" id="History"><a title="Focus this segment" href="#History"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Publish-the-documentation"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-1.0.0-2009-05-03"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:History"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1599
|
-
<h1 class="title">
|
1600
|
-
Chapter 4
|
1601
|
-
<br/>
|
1602
|
-
<big>History</big>
|
1603
|
-
</h1>
|
1604
|
-
<div class="content"><div class="section">
|
1605
|
-
<a name="Version-1.0.0-2009-05-03"/><div class="nav" id="Version-1.0.0-2009-05-03"><a title="Focus this segment" href="#Version-1.0.0-2009-05-03"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#History"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Incompatible-changes"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-1.0.0-2009-05-03"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1606
|
-
<h2 class="title">
|
1607
|
-
4.1 Version 1.0.0 (2009-05-03)
|
1608
|
-
</h2>
|
1609
|
-
<div class="content"><p>This release allows your gems to not depend on Inochi, lets you choose which unit testing library to use, adds new utility libraries and rake tasks, and fixes some bugs.</p>
|
1610
|
-
|
1611
|
-
<div class="paragraph">
|
1612
|
-
<a name="Incompatible-changes"/><div class="nav" id="Incompatible-changes"><a title="Focus this segment" href="#Incompatible-changes"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-1.0.0-2009-05-03"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#New-features"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Incompatible-changes"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1613
|
-
<p class="title">Incompatible changes</p>
|
1614
|
-
<div class="content"><ul>
|
1615
|
-
<li>
|
1616
|
-
<p>Your program is no longer halted by <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.init()</code> and <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.rake()</code> if gem dependencies are not satified. A warning is issued instead.</p>
|
1617
|
-
</li>
|
1618
|
-
|
1619
|
-
<li>
|
1620
|
-
<p>The <code class="line">project_summary</code> and <code class="line">project_history</code> nodes, which are provided by <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.book()</code> to the user manual, have been renamed to <code class="line">project</code> and “history” respectively.</p>
|
1621
|
-
</li>
|
1622
|
-
|
1623
|
-
<li>
|
1624
|
-
<p>ERBook 7.0.0 is now used for generating the user manual. This is a major step up from the previous version, and so it has incompatible changes. See its release notes for details.</p>
|
1625
|
-
</li>
|
1626
|
-
|
1627
|
-
<li>
|
1628
|
-
<p><a href='http://github.com/voloko/sdoc/tree/master'>SDoc</a> is now used to generate API documentation instead of <a href='http://yard.rubyforge.org'>YARD</a>. If you link to particular classes or methods in the generated API documentation, be sure to update your link addresses!</p>
|
1629
|
-
</li>
|
1630
|
-
|
1631
|
-
<li>
|
1632
|
-
<p>Minitest is no longer the default testing library. You must specify which testing library you want to use via the <code class="line"><span style="color:#A60">:test_with</span></code> option of the <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.rake()</code> method. See <a class="xref" href="#Test-execution" title="Paragraph">Test execution</a> for details.</p>
|
1633
|
-
</li>
|
1634
|
-
|
1635
|
-
<li>
|
1636
|
-
<p>The “pak” rake task, which is provided by <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.rake()</code>, has been renamed to “gem”.</p>
|
1637
|
-
</li>
|
1638
|
-
</ul></div>
|
1639
|
-
</div><div class="paragraph">
|
1640
|
-
<a name="New-features"/><div class="nav" id="New-features"><a title="Focus this segment" href="#New-features"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Incompatible-changes"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Bug-fixes"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:New-features"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1641
|
-
<p class="title">New features</p>
|
1642
|
-
<div class="content"><ul>
|
1643
|
-
<li>
|
1644
|
-
<p>Add <code class="line"><span style="color:#A60">:inochi_consumer</span></code> and <code class="line"><span style="color:#A60">:inochi_producer</span></code> options to <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.rake()</code> which allows you to <em>avoid</em> having Inochi as a runtime and development dependency, respectively, for your project’s gem.</p>
|
1645
|
-
|
1646
|
-
<p>This is useful if you just want to use Inochi facilities for building a gem for a pure Ruby library that does not have any need for Inochi’s runtime convenience facilities.</p>
|
1647
|
-
</li>
|
1648
|
-
|
1649
|
-
<li>
|
1650
|
-
<p>Add <code class="line"><span style="color:#A60">:develop</span></code> option for <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.init()</code> which lets you specify RubyGems as development dependencies in the same way as the <code class="line"><span style="color:#A60">:require</span></code> option.</p>
|
1651
|
-
</li>
|
1652
|
-
|
1653
|
-
<li>
|
1654
|
-
<p>Add “lint” rake task which reports <a href='http://www.infoq.com/news/2008/11/static-analysis-tool-roundup'>code quality statistics</a>.</p>
|
1655
|
-
</li>
|
1656
|
-
|
1657
|
-
<li>
|
1658
|
-
<p>Add “test:cov” rake task which reports code coverage statistics.</p>
|
1659
|
-
</li>
|
1660
|
-
|
1661
|
-
<li>
|
1662
|
-
<p>Add “test:ruby” task which runs all tests with <a href='http://www.infoq.com/news/2008/02/multiruby-testing'>multiruby</a>.</p>
|
1663
|
-
</li>
|
1664
|
-
|
1665
|
-
<li>
|
1666
|
-
<p>Add ‘rake opts=’ environment variable, which lets you specify command-line arguments directly to the Ruby interpreter, for all test* rake tasks.</p>
|
1667
|
-
</li>
|
1668
|
-
|
1669
|
-
<li>
|
1670
|
-
<p>Add <tt>inochi/util/combo</tt> combinatorics library for enumerations, permutations, and combinations which are all useful in exhaustive brute-force unit testing.</p>
|
1671
|
-
</li>
|
1672
|
-
|
1673
|
-
<li>
|
1674
|
-
<p>Add <tt>inochi/util/tempdir</tt> library which really should be in the Ruby standard library.</p>
|
1675
|
-
</li>
|
1676
|
-
</ul></div>
|
1677
|
-
</div><div class="paragraph">
|
1678
|
-
<a name="Bug-fixes"/><div class="nav" id="Bug-fixes"><a title="Focus this segment" href="#Bug-fixes"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#New-features"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Housekeeping"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Bug-fixes"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1679
|
-
<p class="title">Bug fixes</p>
|
1680
|
-
<div class="content"><ul>
|
1681
|
-
<li>
|
1682
|
-
<p>The “enable email notification” checkbox was not activated properly when posting announcement to ruby-talk mailing list via Ruby-Forum.</p>
|
1683
|
-
</li>
|
1684
|
-
|
1685
|
-
<li>
|
1686
|
-
<p>Mark gems needed by <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.rake()</code> as <em>development</em> dependencies.</p>
|
1687
|
-
|
1688
|
-
<p>A user would now have to install Inochi using <pre>gem install --development</pre> to install all these gems. This also solves the recursive dependency problem between Inochi and ERBook.</p>
|
1689
|
-
</li>
|
1690
|
-
|
1691
|
-
<li>
|
1692
|
-
<p>Set executable in gem specification only if it exists.</p>
|
1693
|
-
</li>
|
1694
|
-
|
1695
|
-
<li>
|
1696
|
-
<p>Fix parsing of stack trace in Ruby 1.9.</p>
|
1697
|
-
</li>
|
1698
|
-
</ul></div>
|
1699
|
-
</div><div class="paragraph">
|
1700
|
-
<a name="Housekeeping"/><div class="nav" id="Housekeeping"><a title="Focus this segment" href="#Housekeeping"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Bug-fixes"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-0.3.0-2009-02-12"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Housekeeping"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1701
|
-
<p class="title">Housekeeping</p>
|
1702
|
-
<div class="content"><ul>
|
1703
|
-
<li>
|
1704
|
-
<p>Write contributor names in <tt>CREDITS</tt> file instead of in the user manual.</p>
|
1705
|
-
</li>
|
1706
|
-
|
1707
|
-
<li>
|
1708
|
-
<p>Use completely lowercase name for <tt>Rakefile</tt>.</p>
|
1709
|
-
</li>
|
1710
|
-
|
1711
|
-
<li>
|
1712
|
-
<p>Add copyright statement at the top of every source file.</p>
|
1713
|
-
</li>
|
1714
|
-
</ul></div>
|
1715
|
-
</div><p> </p></div>
|
1716
|
-
</div><div class="section">
|
1717
|
-
<a name="Version-0.3.0-2009-02-12"/><div class="nav" id="Version-0.3.0-2009-02-12"><a title="Focus this segment" href="#Version-0.3.0-2009-02-12"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Housekeeping"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#New-features-609439008"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-0.3.0-2009-02-12"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1718
|
-
<h2 class="title">
|
1719
|
-
4.2 Version 0.3.0 (2009-02-12)
|
1720
|
-
</h2>
|
1721
|
-
<div class="content"><p>This release adds support for <a class="xref" href="#Translate-your-project" title="Section 3.3.6. "Translate your project"">language translations / internationalization / multilingualization</a>, improves the user interface, and fixes a show-stopper bug for Windows users.</p>
|
1722
|
-
|
1723
|
-
<div class="paragraph">
|
1724
|
-
<a name="New-features-609439008"/><div class="nav" id="New-features-609439008"><a title="Focus this segment" href="#New-features-609439008"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-0.3.0-2009-02-12"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Bug-fixes-609465768"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:New-features-609439008"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1725
|
-
<p class="title">New features</p>
|
1726
|
-
<div class="content"><ul>
|
1727
|
-
<li>
|
1728
|
-
<p>Add support for <a class="xref" href="#Translate-your-project" title="Section 3.3.6. "Translate your project"">language translations</a> of phrases used in a project.</p>
|
1729
|
-
|
1730
|
-
<ul>
|
1731
|
-
<li>
|
1732
|
-
<p>Add “lang:dump” Rake task for extracting language phrases from project.</p>
|
1733
|
-
</li>
|
1734
|
-
|
1735
|
-
<li>
|
1736
|
-
<p>Add “lang:conv” Rake task for translating dumped phrases into various languages using the BabelFish translation service.</p>
|
1737
|
-
</li>
|
1738
|
-
|
1739
|
-
<li>
|
1740
|
-
<p>Add <tt>--locale</tt> option to a project’s main executable for setting user’s preferred language in spite of the user’s locale environment.</p>
|
1741
|
-
</li>
|
1742
|
-
</ul>
|
1743
|
-
</li>
|
1744
|
-
|
1745
|
-
<li>
|
1746
|
-
<p>Notify user when attempting to publish announcements in the “pub” Rake tasks.</p>
|
1747
|
-
</li>
|
1748
|
-
</ul></div>
|
1749
|
-
</div><div class="paragraph">
|
1750
|
-
<a name="Bug-fixes-609465768"/><div class="nav" id="Bug-fixes-609465768"><a title="Focus this segment" href="#Bug-fixes-609465768"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#New-features-609439008"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Housekeeping-609499748"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Bug-fixes-609465768"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1751
|
-
<p class="title">Bug fixes</p>
|
1752
|
-
<div class="content"><ul>
|
1753
|
-
<li>
|
1754
|
-
<p>In Windows, <code class="line"><span style="color:#036;font-weight:bold">ENV</span>[<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">USERPROFILE</span><span style="color:#710">'</span></span>]</code> gives the path to the user’s home directory and <code class="line"><span style="color:#036;font-weight:bold">ENV</span>[<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">HOME</span><span style="color:#710">'</span></span>]</code> is not defined.</p>
|
1755
|
-
</li>
|
1756
|
-
|
1757
|
-
<li>
|
1758
|
-
<p>The only real solution to the circular gem dependency problem is:</p>
|
1759
|
-
|
1760
|
-
<pre>gem install --force</pre>
|
1761
|
-
|
1762
|
-
<p>You should update <a class="xref" href="#Setup" title="Chapter 2">Setup</a> in your projects’ user manuals accordingly.</p>
|
1763
|
-
</li>
|
1764
|
-
</ul></div>
|
1765
|
-
</div><div class="paragraph">
|
1766
|
-
<a name="Housekeeping-609499748"/><div class="nav" id="Housekeeping-609499748"><a title="Focus this segment" href="#Housekeeping-609499748"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Bug-fixes-609465768"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-0.2.0-2009-01-25"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Housekeeping-609499748"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1767
|
-
<p class="title">Housekeeping</p>
|
1768
|
-
<div class="content"><ul>
|
1769
|
-
<li>
|
1770
|
-
<p>Break the huge <tt>lib/inochi/inochi.rb</tt> library into smaller files.</p>
|
1771
|
-
</li>
|
1772
|
-
|
1773
|
-
<li>
|
1774
|
-
<p>Instead of adding methods to singleton classes directly, define modules and extend to them so that YARDoc documents the methods appropriately.</p>
|
1775
|
-
</li>
|
1776
|
-
|
1777
|
-
<li>
|
1778
|
-
<p>List all project contributors globally in the “Credits” section.</p>
|
1779
|
-
</li>
|
1780
|
-
|
1781
|
-
<li>
|
1782
|
-
<p>Remove “Contributor kudos” paragraph in release notes in favor of crediting contributors inline with each item in the release notes.</p>
|
1783
|
-
</li>
|
1784
|
-
|
1785
|
-
<li>
|
1786
|
-
<p>Mention that the project license is ISC for the reader’s convenience.</p>
|
1787
|
-
</li>
|
1788
|
-
</ul></div>
|
1789
|
-
</div><p> </p></div>
|
1790
|
-
</div><div class="section">
|
1791
|
-
<a name="Version-0.2.0-2009-01-25"/><div class="nav" id="Version-0.2.0-2009-01-25"><a title="Focus this segment" href="#Version-0.2.0-2009-01-25"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Housekeeping-609499748"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#New-features-609532608"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-0.2.0-2009-01-25"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1792
|
-
<h2 class="title">
|
1793
|
-
4.3 Version 0.2.0 (2009-01-25)
|
1794
|
-
</h2>
|
1795
|
-
<div class="content"><p>This release adds support for unit testing, improves the portability of <strong>Inochi</strong> and configurability of your projects, adds new content to the user manual, and fixes some bugs.</p>
|
1796
|
-
|
1797
|
-
<div class="paragraph">
|
1798
|
-
<a name="New-features-609532608"/><div class="nav" id="New-features-609532608"><a title="Focus this segment" href="#New-features-609532608"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-0.2.0-2009-01-25"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Bug-fixes-609551988"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:New-features-609532608"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1799
|
-
<p class="title">New features</p>
|
1800
|
-
<div class="content"><ul>
|
1801
|
-
<li>
|
1802
|
-
<p>Added <a class="xref" href="#Test-your-project" title="Section 3.3.5. "Test your project"">support for unit testing</a> via the <a href='http://rubyforge.org/projects/bfts/'>minitest</a> library.</p>
|
1803
|
-
|
1804
|
-
<ul>
|
1805
|
-
<li>The scaffold generator now emits a default unit test for the main project library.</li>
|
1806
|
-
</ul>
|
1807
|
-
</li>
|
1808
|
-
|
1809
|
-
<li>
|
1810
|
-
<p>Added optional ProgramName parameter to the scaffold generator. This allows you to specify reasonable program names when your project module has a strange capitalization:</p>
|
1811
|
-
|
1812
|
-
<pre># inochi ERBook
|
1813
|
-
create er_book/LICENSE
|
1814
|
-
|
1815
|
-
# inochi ERBook erbook
|
1816
|
-
create erbook/LICENSE
|
1817
|
-
|
1818
|
-
# inochi ERBook foobar
|
1819
|
-
create foobar/LICENSE</pre>
|
1820
|
-
</li>
|
1821
|
-
|
1822
|
-
<li>
|
1823
|
-
<p>Allow project authors to be specified via</p>
|
1824
|
-
|
1825
|
-
<p><code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.init <span style="color:#A60">:YourProject</span>, <span style="color:#A60">:authors</span> => [[<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">name</span><span style="color:#710">'</span></span>, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">mail</span><span style="color:#710">'</span></span>]]</code></p>
|
1826
|
-
|
1827
|
-
<p>(Florian Gilcher)</p>
|
1828
|
-
</li>
|
1829
|
-
</ul></div>
|
1830
|
-
</div><div class="paragraph">
|
1831
|
-
<a name="Bug-fixes-609551988"/><div class="nav" id="Bug-fixes-609551988"><a title="Focus this segment" href="#Bug-fixes-609551988"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#New-features-609532608"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Housekeeping-609561708"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Bug-fixes-609551988"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1832
|
-
<p class="title">Bug fixes</p>
|
1833
|
-
<div class="content"><ul>
|
1834
|
-
<li>
|
1835
|
-
<p>Run on both JRuby and normal Ruby in multiple versions and with different executable names on Windows. (Florian Gilcher)</p>
|
1836
|
-
</li>
|
1837
|
-
|
1838
|
-
<li>
|
1839
|
-
<p>Use <code class="line"><span style="color:#036;font-weight:bold">Gem</span>::<span style="color:#036;font-weight:bold">RubyGemsVersion</span></code> instead of a shell command to determine rubygems version for generation of <tt>setup.erb</tt>. (Florian Gilcher)</p>
|
1840
|
-
</li>
|
1841
|
-
|
1842
|
-
<li>
|
1843
|
-
<p>Add blank lines between all list items, not just multi-line ones, in the plain-text version of the relase announcement for improved readability.</p>
|
1844
|
-
</li>
|
1845
|
-
|
1846
|
-
<li>
|
1847
|
-
<p>Omit LaTeX-style heading numbers from release announcements. They caused confusion, especially in plain-text announcements, when trying to determine which version of a project was released.</p>
|
1848
|
-
</li>
|
1849
|
-
</ul></div>
|
1850
|
-
</div><div class="paragraph">
|
1851
|
-
<a name="Housekeeping-609561708"/><div class="nav" id="Housekeeping-609561708"><a title="Focus this segment" href="#Housekeeping-609561708"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Bug-fixes-609551988"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-0.1.0-2009-01-13"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Housekeeping-609561708"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1852
|
-
<p class="title">Housekeeping</p>
|
1853
|
-
<div class="content"><ul>
|
1854
|
-
<li>Added unit tests for utility methods provided by the <strong>Inochi</strong> module: project name calculation and CamelCase to snake_case conversion.</li>
|
1855
|
-
</ul></div>
|
1856
|
-
</div><p> </p></div>
|
1857
|
-
</div><div class="section">
|
1858
|
-
<a name="Version-0.1.0-2009-01-13"/><div class="nav" id="Version-0.1.0-2009-01-13"><a title="Focus this segment" href="#Version-0.1.0-2009-01-13"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Housekeeping-609561708"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#New-features-609595238"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-0.1.0-2009-01-13"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1859
|
-
<h2 class="title">
|
1860
|
-
4.4 Version 0.1.0 (2009-01-13)
|
1861
|
-
</h2>
|
1862
|
-
<div class="content"><p>This release reattempts to fix the <a href='http://www.ruby-forum.com/topic/176173#771281'>circular dependency problem</a> that occurred when installing either <strong>Inochi</strong> or <strong>ERBook</strong>.</p>
|
1863
|
-
|
1864
|
-
<div class="paragraph">
|
1865
|
-
<a name="New-features-609595238"/><div class="nav" id="New-features-609595238"><a title="Focus this segment" href="#New-features-609595238"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-0.1.0-2009-01-13"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Bug-fixes-609627068"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:New-features-609595238"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1866
|
-
<p class="title">New features</p>
|
1867
|
-
<div class="content"><ul>
|
1868
|
-
<li><code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.init()</code> now adds <code class="line"><span style="color:#888">#major()</span></code>, <code class="line"><span style="color:#888">#series()</span></code>, and <code class="line"><span style="color:#888">#requirement()</span></code> instance methods to a project’s <code class="line"><span style="color:#036;font-weight:bold">VERSION</span></code> constant.</li>
|
1869
|
-
</ul></div>
|
1870
|
-
</div><div class="paragraph">
|
1871
|
-
<a name="Bug-fixes-609627068"/><div class="nav" id="Bug-fixes-609627068"><a title="Focus this segment" href="#Bug-fixes-609627068"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#New-features-609595238"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-0.0.1-2009-01-13"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Bug-fixes-609627068"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1872
|
-
<p class="title">Bug fixes</p>
|
1873
|
-
<div class="content"><ul>
|
1874
|
-
<li>
|
1875
|
-
<p>Solved circular dependency problem by making inochi gem not dependent on erbook gem. However, ERBook is still required during runtime and is supplied on the <code class="line">gem install</code> command for <strong>Inochi</strong>.</p>
|
1876
|
-
|
1877
|
-
<p><a class="xref" href="#Installation" title="Section 2.2">Installation</a> has been updated accordingly.</p>
|
1878
|
-
</li>
|
1879
|
-
|
1880
|
-
<li>
|
1881
|
-
<p>Add forgotten Rake dependency for <strong>Inochi</strong> gem.</p>
|
1882
|
-
</li>
|
1883
|
-
</ul></div>
|
1884
|
-
</div><p> </p></div>
|
1885
|
-
</div><div class="section">
|
1886
|
-
<a name="Version-0.0.1-2009-01-13"/><div class="nav" id="Version-0.0.1-2009-01-13"><a title="Focus this segment" href="#Version-0.0.1-2009-01-13"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Bug-fixes-609627068"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Bug-fixes-609677068"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-0.0.1-2009-01-13"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1887
|
-
<h2 class="title">
|
1888
|
-
4.5 Version 0.0.1 (2009-01-13)
|
1889
|
-
</h2>
|
1890
|
-
<div class="content"><p>This release fixes some show-stopper bugs.</p>
|
1891
|
-
|
1892
|
-
<div class="paragraph">
|
1893
|
-
<a name="Bug-fixes-609677068"/><div class="nav" id="Bug-fixes-609677068"><a title="Focus this segment" href="#Bug-fixes-609677068"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-0.0.1-2009-01-13"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Housekeeping-609697358"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Bug-fixes-609677068"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1894
|
-
<p class="title">Bug fixes</p>
|
1895
|
-
<div class="content"><ul>
|
1896
|
-
<li>
|
1897
|
-
<p>The name of the project library was <a href='http://www.ruby-forum.com/topic/176173#771351'>being determined incorrectly</a>. (Florian Gilcher)</p>
|
1898
|
-
</li>
|
1899
|
-
|
1900
|
-
<li>
|
1901
|
-
<p>There was a <a href='http://www.ruby-forum.com/topic/176173#771281'>circular dependency problem</a> when installing the <strong>Inochi</strong> gem. (Florian Gilcher)</p>
|
1902
|
-
|
1903
|
-
<p>The solution is to specify the <tt>--force</tt> option when installing the gem. <a class="xref" href="#Installation" title="Section 2.2">Installation</a> has been updated accordingly.</p>
|
1904
|
-
</li>
|
1905
|
-
|
1906
|
-
<li>
|
1907
|
-
<p>Generated project scaffolds now check against the major version of the <strong>Inochi</strong> gem, to avoid runtime version conflicts.</p>
|
1908
|
-
</li>
|
1909
|
-
</ul></div>
|
1910
|
-
</div><div class="paragraph">
|
1911
|
-
<a name="Housekeeping-609697358"/><div class="nav" id="Housekeeping-609697358"><a title="Focus this segment" href="#Housekeeping-609697358"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Bug-fixes-609677068"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-0.0.0-2009-01-13"><img class="icon" alt="↓" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Housekeeping-609697358"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1912
|
-
<p class="title">Housekeeping</p>
|
1913
|
-
<div class="content"><ul>
|
1914
|
-
<li>Only add project libraries to <code class="line"><span style="color:#d70;font-weight:bold">$LOAD_PATH</span></code> if not already there.</li>
|
1915
|
-
</ul></div>
|
1916
|
-
</div><p> </p></div>
|
1917
|
-
</div><div class="section">
|
1918
|
-
<a name="Version-0.0.0-2009-01-13"/><div class="nav" id="Version-0.0.0-2009-01-13"><a title="Focus this segment" href="#Version-0.0.0-2009-01-13"><img class="icon" alt="∗" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Housekeeping-609697358"><img class="icon" alt="↑" src="&icon_nav_prev;"/></a> <a title="Return to listing" href="#rev:Version-0.0.0-2009-01-13"><img class="icon" alt="≡" src="&icon_nav_list;"/></a></div>
|
1919
|
-
<h2 class="title">
|
1920
|
-
4.6 Version 0.0.0 (2009-01-13)
|
1921
|
-
</h2>
|
1922
|
-
<div class="content"><p>This is the first release of <strong>Inochi</strong>.</p>
|
1923
|
-
|
1924
|
-
<p>Happy birthday!</p></div>
|
1925
|
-
</div><p></p><p></p></div>
|
1926
|
-
</div>
|
1927
|
-
</div>
|
1928
|
-
|
1929
|
-
|
1930
|
-
<br style="display: none"/>
|
1931
|
-
<hr style="display: none"/>
|
1932
|
-
<br style="display: none"/>
|
1933
|
-
|
1934
|
-
|
1935
|
-
|
1936
|
-
|
1937
|
-
<div id="footer">
|
1938
|
-
|
1939
|
-
Generated by <a href="http://snk.tuxfamily.org/lib/erbook/">ERBook 7.0.0</a> on Mon May 04 01:16:05 -0700 2009.
|
1940
|
-
|
1941
|
-
<div id="footer-credits">
|
1942
|
-
<p>
|
1943
|
-
<img class="icon" alt="here_frag" src="&icon_here_frag;"/>
|
1944
|
-
<img class="icon" alt="caution" src="&icon_caution;"/>
|
1945
|
-
<img class="icon" alt="nav_here" src="&icon_nav_here;"/>
|
1946
|
-
<img class="icon" alt="nav_prev" src="&icon_nav_prev;"/>
|
1947
|
-
<img class="icon" alt="tip" src="&icon_tip;"/>
|
1948
|
-
<img class="icon" alt="important" src="&icon_important;"/>
|
1949
|
-
<img class="icon" alt="nav_list" src="&icon_nav_list;"/>
|
1950
|
-
<img class="icon" alt="note" src="&icon_note;"/>
|
1951
|
-
<img class="icon" alt="warning" src="&icon_warning;"/>
|
1952
|
-
<img class="icon" alt="quote" src="&icon_quote;"/>
|
1953
|
-
<img class="icon" alt="nav_next" src="&icon_nav_next;"/>
|
1954
|
-
|
1955
|
-
<br/>
|
1956
|
-
|
1957
|
-
The icons shown above are part of <a href="http://tango.freedesktop.org/Tango_Icon_Library">Tango Icon Theme</a>, which is copyright © 2005 <a href="http://tango.freedesktop.org">Tango Desktop Project</a> and is distributed under <a href="http://creativecommons.org/licenses/by-sa/2.5/">Creative Commons Attribution-ShareAlike 2.5 License Agreement</a>.
|
1958
|
-
</p>
|
1959
|
-
|
1960
|
-
<p>
|
1961
|
-
<img class="icon" alt="hyperlink" src="&icon_hyperlink;"/>
|
1962
|
-
|
1963
|
-
<br/>
|
1964
|
-
|
1965
|
-
The icons shown above are part of <a href="http://www.mediawiki.org/wiki/MediaWiki">MediaWiki</a>, which is copyright © 2007 <a href="https://www.ohloh.net/projects/mediawiki/contributors">MediaWiki contributors</a> and is distributed under <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, version 2</a>.
|
1966
|
-
</p>
|
1967
|
-
|
1968
|
-
<p style="margin-top: 3em">
|
1969
|
-
<a href="http://validator.w3.org/check?uri=referer"><img
|
1970
|
-
src="http://www.w3.org/Icons/valid-xhtml10-blue"
|
1971
|
-
alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
|
1972
|
-
|
1973
|
-
<a href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3"><img
|
1974
|
-
src="http://jigsaw.w3.org/css-validator/images/vcss-blue"
|
1975
|
-
alt="Valid CSS!" height="31" width="88" /></a>
|
1976
|
-
</p>
|
1977
|
-
</div>
|
1978
|
-
|
1979
|
-
</div>
|
1980
|
-
|
1981
|
-
|
1982
|
-
</div>
|
1983
|
-
</body>
|
1984
|
-
</html>
|