inochi 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  #--
2
- # Copyright 2008 Suraj N. Kurapati
3
- # See the LICENSE file for details.
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.0.0',
21
- :release => '2009-05-03',
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
@@ -1,6 +1,6 @@
1
1
  #--
2
- # Copyright 2008 Suraj N. Kurapati
3
- # See the LICENSE file for details.
2
+ # Copyright protects this work.
3
+ # See LICENSE file for details.
4
4
  #++
5
5
 
6
6
  module Inochi
@@ -1,6 +1,6 @@
1
1
  #--
2
- # Copyright 2008 Suraj N. Kurapati
3
- # See the LICENSE file for details.
2
+ # Copyright protects this work.
3
+ # See LICENSE file for details.
4
4
  #++
5
5
 
6
6
  require 'yaml'
@@ -1,6 +1,6 @@
1
1
  #--
2
- # Copyright 2008 Suraj N. Kurapati
3
- # See the LICENSE file for details.
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.xhtml')
74
+ manual = File.join(project_module::INSTALL, 'doc', 'index.html')
75
75
  Launchy::Browser.run manual
76
76
 
77
77
  exit
@@ -1,6 +1,6 @@
1
1
  #--
2
- # Copyright 2008 Suraj N. Kurapati
3
- # See the LICENSE file for details.
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' => lang_dump_file
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.xhtml'
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 shtml generator
385
- t.rdoc_files.include '[A-Z]*', 'lib/**/*.rb', 'ext/**/*.{rb,c*}'
381
+ t.options.push '--fmt', 'shtml' # explictly set SDoc generator
382
+ t.rdoc_files.include '[A-Z]*', '{lib,ext}/**/*.{rb,c}'
386
383
 
387
- # regen when sources change
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
- unless ann_text
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
- desc 'Build a release.'
601
- task :gem => [:clobber, :doc] do
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 = gem.summary
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
- yield gem if gem_config
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
- task :clobber => "gem:clobber_package"
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:"
@@ -1,6 +1,6 @@
1
1
  #--
2
- # Copyright 2008 Suraj N. Kurapati
3
- # See the LICENSE file for details.
2
+ # Copyright protects this work.
3
+ # See LICENSE file for details.
4
4
  #++
5
5
 
6
6
  class << Inochi
@@ -1,6 +1,6 @@
1
1
  #--
2
- # Copyright 2009 Suraj N. Kurapati
3
- # See the LICENSE file for details.
2
+ # Copyright protects this work.
3
+ # See LICENSE file for details.
4
4
  #++
5
5
 
6
6
  class Array
@@ -1,6 +1,6 @@
1
1
  #--
2
- # Copyright 2009 Suraj N. Kurapati
3
- # See the LICENSE file for details.
2
+ # Copyright protects this work.
3
+ # See LICENSE file for details.
4
4
  #++
5
5
 
6
6
  require 'tempfile'
data/rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  #--
2
- # Copyright 2008 Suraj N. Kurapati
3
- # See the LICENSE file for details.
2
+ # Copyright protects this work.
3
+ # See LICENSE file for details.
4
4
  #++
5
5
 
6
6
  require 'lib/inochi'
@@ -1,6 +1,6 @@
1
1
  #--
2
- # Copyright 2009 Suraj N. Kurapati
3
- # See the LICENSE file for details.
2
+ # Copyright protects this work.
3
+ # See LICENSE file for details.
4
4
  #++
5
5
 
6
6
  describe 'Inochi.calc_program_name' do
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.0.0
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-05-04 00:00:00 -07:00
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.2
264
+ rubygems_version: 1.3.5
263
265
  signing_key:
264
266
  specification_version: 3
265
267
  summary: Gives life to RubyGems-based software
@@ -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> &middot; <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. &quot;Credits&quot;"><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="&lowast;" src="&icon_nav_here;"/></a> <a title="Return to listing" href="#rev:Contents"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
160
- <h1 class="title">Contents</h1>
161
- <ul><li>1&nbsp;&nbsp;<a id="rev:Introduction" href="#Introduction">Introduction</a><ul><li><a id="rev:Etymology" href="#Etymology">Etymology</a></li><li>1.1&nbsp;&nbsp;<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&nbsp;&nbsp;<a id="rev:License" href="#License">License</a></li><li>1.3&nbsp;&nbsp;<a id="rev:Credits" href="#Credits">Credits</a></li></ul></li><li>2&nbsp;&nbsp;<a id="rev:Setup" href="#Setup">Setup</a><ul><li>2.1&nbsp;&nbsp;<a id="rev:Requirements" href="#Requirements">Requirements</a></li><li>2.2&nbsp;&nbsp;<a id="rev:Installation" href="#Installation">Installation</a></li><li>2.3&nbsp;&nbsp;<a id="rev:Manifest" href="#Manifest">Manifest</a></li></ul></li><li>3&nbsp;&nbsp;<a id="rev:Usage" href="#Usage">Usage</a><ul><li>3.1&nbsp;&nbsp;<a id="rev:Command-line-interface" href="#Command-line-interface">Command-line interface</a></li><li>3.2&nbsp;&nbsp;<a id="rev:Ruby-library-interface" href="#Ruby-library-interface">Ruby library interface</a></li><li>3.3&nbsp;&nbsp;<a id="rev:Tutorial" href="#Tutorial">Tutorial</a><ul><li>3.3.1&nbsp;&nbsp;<a id="rev:Have-a-brilliant-idea" href="#Have-a-brilliant-idea">Have a brilliant idea</a></li><li>3.3.2&nbsp;&nbsp;<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&nbsp;&nbsp;<a id="rev:Configure-your-project" href="#Configure-your-project">Configure your project</a><ul><li>3.3.3.1&nbsp;&nbsp;<a id="rev:Project-information" href="#Project-information">Project information</a></li><li>3.3.3.2&nbsp;&nbsp;<a id="rev:Project-executable" href="#Project-executable">Project executable</a></li><li>3.3.3.3&nbsp;&nbsp;<a id="rev:Rake-tasks" href="#Rake-tasks">Rake tasks</a></li><li>3.3.3.4&nbsp;&nbsp;<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&nbsp;&nbsp;<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&nbsp;&nbsp;<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&nbsp;&nbsp;<a id="rev:Translate-your-project" href="#Translate-your-project">Translate your project</a><ul><li>3.3.6.1&nbsp;&nbsp;<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&nbsp;&nbsp;<a id="rev:Translation-files" href="#Translation-files">Translation files</a></li><li>3.3.6.3&nbsp;&nbsp;<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&nbsp;&nbsp;<a id="rev:Translating-language-phrases" href="#Translating-language-phrases">Translating language phrases</a></li></ul></li><li>3.3.7&nbsp;&nbsp;<a id="rev:Publish-your-project" href="#Publish-your-project">Publish your project</a><ul><li>3.3.7.1&nbsp;&nbsp;<a id="rev:Build-a-RubyGem" href="#Build-a-RubyGem">Build a RubyGem</a></li><li>3.3.7.2&nbsp;&nbsp;<a id="rev:Publish-a-RubyGem" href="#Publish-a-RubyGem">Publish a RubyGem</a></li><li>3.3.7.3&nbsp;&nbsp;<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&nbsp;&nbsp;<a id="rev:Manual-release-announcement" href="#Manual-release-announcement">Manual release announcement</a></li></ul></li><li>3.3.7.4&nbsp;&nbsp;<a id="rev:Publish-the-documentation" href="#Publish-the-documentation">Publish the documentation</a></li></ul></li></ul></li></ul></li><li>4&nbsp;&nbsp;<a id="rev:History" href="#History">History</a><ul><li>4.1&nbsp;&nbsp;<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&nbsp;&nbsp;<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&nbsp;&nbsp;<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&nbsp;&nbsp;<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&nbsp;&nbsp;<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&nbsp;&nbsp;<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="&lowast;" src="&icon_nav_here;"/></a> <a title="Return to listing" href="#rev:Tips"><img class="icon" alt="&equiv;" 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus next segment" href="#Etymology"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Introduction"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
177
- <h1 class="title">
178
- Chapter&nbsp;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&#8217;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. &quot;Translate your project&quot;">translate your project</a> into many languages.</li>
204
-
205
- <li>Provides a single point of entry to your project&#8217;s libraries.</li>
206
-
207
- <li>Keeps your project&#8217;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Introduction"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Logistics"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Etymology"><img class="icon" alt="&equiv;" 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 &#8220;inochi&#8221;, 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Etymology"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-numbers"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Logistics"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
252
- <h2 class="title">
253
- 1.1&nbsp;&nbsp;Logistics
254
- </h2>
255
- <div class="content"><ul>
256
- <li><a class="xref" href="#History" title="Chapter 4. &quot;History&quot;">Release notes</a> &#8212; history of project releases.</li>
257
-
258
- <li><a href='http://github.com/sunaku/inochi'>Source code</a> &#8212; 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> &#8212; documentation for source code.</li>
261
-
262
- <li><a href='http://snk.tuxfamily.org/lib/inochi'>Project home</a> &#8212; 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. &quot;License&quot;">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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Logistics"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#License"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-numbers"><img class="icon" alt="&equiv;" 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-numbers"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Credits"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:License"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
307
- <h2 class="title">
308
- 1.2&nbsp;&nbsp;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'>&#115;&#117;&#110;&#097;&#107;&#117;&#064;&#103;&#109;&#097;&#105;&#108;&#046;&#099;&#111;&#109;</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 &#8220;AS IS&#8221; 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#License"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Setup"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Credits"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
319
- <h2 class="title">
320
- 1.3&nbsp;&nbsp;Credits
321
- </h2>
322
- <div class="content"><a href='#Credits' class='xref' title='Section 1.3. &quot;Credits&quot;'><img src='inochi.png' alt='Inochi logo' /></a>
323
- <p>The &#8220;inochi.png&#8221; image and its &#8220;inochi.svg&#8221; source utilize the <a href='http://openclipart.org/media/files/Peileppe/8978'>&#8220;3 flowers&#8221;</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. &quot;History&quot;">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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Credits"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Requirements"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Setup"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
335
- <h1 class="title">
336
- Chapter&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Setup"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Installation"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Requirements"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
342
- <h2 class="title">
343
- 2.1&nbsp;&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Requirements"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Manifest"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Installation"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
352
- <h2 class="title">
353
- 2.2&nbsp;&nbsp;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. &quot;License&quot;">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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Installation"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Usage"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Manifest"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
374
- <h2 class="title">
375
- 2.3&nbsp;&nbsp;Manifest
376
- </h2>
377
- <div class="content"><p>You will see the following items inside Inochi&#8217;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> &#8212; 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> &#8212; 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> &#8212; API reference documentation.</p>
404
- </li>
405
-
406
- <li>
407
- <p><tt>index.erb</tt> &#8212; source of this user manual.</p>
408
- </li>
409
- </ul>
410
- </li>
411
-
412
- <li>
413
- <p><tt>lang/</tt> &#8212; translations of language phrases.</p>
414
- </li>
415
-
416
- <li>
417
- <p><tt>LICENSE</tt> &#8212; 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Manifest"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Command-line-interface"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Usage"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
426
- <h1 class="title">
427
- Part&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Usage"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Merging-files-with-kdiff3"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Command-line-interface"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
433
- <h2 class="title">
434
- 3.1&nbsp;&nbsp;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 &lt;s&gt;: 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 &lt;s&gt;: 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Command-line-interface"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Ruby-library-interface"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Merging-files-with-kdiff3"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
491
- <p class="title">Tip 1.&nbsp;&nbsp;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 &quot;$old_file&quot; &quot;$new_file&quot; --output &quot;$output_file&quot;</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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Merging-files-with-kdiff3"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Tutorial"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Ruby-library-interface"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
536
- <h2 class="title">
537
- 3.2&nbsp;&nbsp;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&#8217;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&#8217;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&#8217;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&#8217;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Ruby-library-interface"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Have-a-brilliant-idea"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Tutorial"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
552
- <h2 class="title">
553
- 3.3&nbsp;&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Tutorial"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Generate-your-project"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Have-a-brilliant-idea"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
559
- <h3 class="title">
560
- 3.3.1&nbsp;&nbsp;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>&#8212;</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>&#8212; you think,</p>
575
-
576
- <blockquote>
577
- <p>What am I doing to myself?</p>
578
-
579
- <p>I&#8217;ve got to get <em>outside</em>.</p>
580
-
581
- <p>I&#8217;ve got to get <em>away</em>&#8230;</p>
582
-
583
- <p>Away from this computer&#8230; this&#8230; 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&#8217;s eye as your thoughts fade&#8230;</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&#8217;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&#8217;t much time. What can you do? Let&#8217;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Have-a-brilliant-idea"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#View-Rake-tasks"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Generate-your-project"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
613
- <h3 class="title">
614
- 3.3.2&nbsp;&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Generate-your-project"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Run-unit-tests"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:View-Rake-tasks"><img class="icon" alt="&equiv;" 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#View-Rake-tasks"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Run-project-executable"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Run-unit-tests"><img class="icon" alt="&equiv;" 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Run-unit-tests"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Show-user-manual"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Run-project-executable"><img class="icon" alt="&equiv;" 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=&gt;false, :locale=&gt;nil, :version=&gt;false, :help=&gt;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 &lt;s&gt;: 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 &amp; 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Run-project-executable"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Configure-your-project"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Show-user-manual"><img class="icon" alt="&equiv;" 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 &#8220;unclosed span&#8221; 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Show-user-manual"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Project-information"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Configure-your-project"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
734
- <h3 class="title">
735
- 3.3.3&nbsp;&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Configure-your-project"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Project-executable"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Project-information"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
741
- <h4 class="title">
742
- 3.3.3.1&nbsp;&nbsp;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 &lt;your@email.here&gt;
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 &quot;AS IS&quot; 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="">~&gt; 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> =&gt; <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> =&gt; <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> =&gt; <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> =&gt; <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> =&gt; <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> =&gt; {
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' =&gt; '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' =&gt; 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Project-information"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Rake-tasks"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Project-executable"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
789
- <h4 class="title">
790
- 3.3.3.2&nbsp;&nbsp;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="">~&gt; 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">&quot;</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">&quot;</span></span>
828
- puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</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">&quot;</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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Project-executable"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#User-manual"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Rake-tasks"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
833
- <h4 class="title">
834
- 3.3.3.3&nbsp;&nbsp;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="">~&gt; 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Rake-tasks"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#doc-index.erb"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:User-manual"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
853
- <h4 class="title">
854
- 3.3.3.4&nbsp;&nbsp;User manual
855
- </h4>
856
- <div class="content"><p>The user manual&#8217;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&#8217;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#User-manual"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#doc-intro.erb"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:doc-index.erb"><img class="icon" alt="&equiv;" 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
- %+ &quot;intro.erb&quot;
866
- %+ &quot;setup.erb&quot;
867
- %+ &quot;theory.erb&quot;
868
- %+ &quot;usage.erb&quot;
869
- %+ &quot;history.erb&quot;
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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#doc-index.erb"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#doc-setup.erb"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:doc-intro.erb"><img class="icon" alt="&equiv;" 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 &quot;Introduction&quot;
879
- %|project
880
- <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: explain the purpose of your project
881
-
882
- <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%&gt;</span></span> is a __________ that __________.
883
-
884
- <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: explain why your project is important
885
-
886
- <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%&gt;</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">&gt;</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">&lt;%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%&gt;</span></span> from the competition:
894
- * [competitor 1](http://)
895
- * [competitor 2](http://)
896
- * [competitor 3](http://)
897
-
898
- %|paragraph &quot;Etymology&quot;
899
- <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: explain the meaning of the name of your project
900
-
901
- %|section &quot;Logistics&quot;
902
- * <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> xref <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">History</span><span style="color:#710">&quot;</span></span>, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">Release notes</span><span style="color:#710">&quot;</span></span> <span style="font-weight:bold;color:#777">%&gt;</span></span> --- history of project releases.
903
- * [Source code](<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> repo_url <span style="font-weight:bold;color:#777">%&gt;</span></span>) --- obtain via <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> repo_scm <span style="font-weight:bold;color:#777">%&gt;</span></span> or browse online.
904
- * [API reference](<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> api_url <span style="font-weight:bold;color:#777">%&gt;</span></span>) --- documentation for source code.
905
- * [Project home](<span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$website</span> <span style="font-weight:bold;color:#777">%&gt;</span></span>) --- the <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%&gt;</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">&lt;%=</span> xref <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">License</span><span style="color:#710">&quot;</span></span>, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">contact the author(s)</span><span style="color:#710">&quot;</span></span> <span style="font-weight:bold;color:#777">%&gt;</span></span>.
909
-
910
- %|paragraph &quot;Version numbers&quot;
911
- <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%&gt;</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">&lt;table</span> <span style="color:#007">markdown</span>=<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">1</span><span style="color:#710">&quot;</span></span><span style="color:#070">&gt;</span>
917
- <span style="color:#070">&lt;thead&gt;</span>
918
- <span style="color:#070">&lt;tr&gt;</span>
919
- <span style="color:#070">&lt;td</span> <span style="color:#007">rowspan</span>=<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">2</span><span style="color:#710">&quot;</span></span><span style="color:#070">&gt;</span>What increased in the version number?<span style="color:#070">&lt;/td&gt;</span>
920
- <span style="color:#070">&lt;td</span> <span style="color:#007">colspan</span>=<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">3</span><span style="color:#710">&quot;</span></span><span style="color:#070">&gt;</span>The increase indicates that the release:<span style="color:#070">&lt;/td&gt;</span>
921
- <span style="color:#070">&lt;/tr&gt;</span>
922
- <span style="color:#070">&lt;tr&gt;</span>
923
- <span style="color:#070">&lt;th&gt;</span>Is backward compatible?<span style="color:#070">&lt;/th&gt;</span>
924
- <span style="color:#070">&lt;th&gt;</span>Has new features?<span style="color:#070">&lt;/th&gt;</span>
925
- <span style="color:#070">&lt;th&gt;</span>Has bug fixes?<span style="color:#070">&lt;/th&gt;</span>
926
- <span style="color:#070">&lt;/tr&gt;</span>
927
- <span style="color:#070">&lt;/thead&gt;</span>
928
- <span style="color:#070">&lt;tbody&gt;</span>
929
- <span style="color:#070">&lt;tr&gt;</span>
930
- <span style="color:#070">&lt;th&gt;</span>major<span style="color:#070">&lt;/th&gt;</span>
931
- <span style="color:#070">&lt;td</span> <span style="color:#007">style</span>=<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">background-color: #FFE4E1;</span><span style="color:#710">&quot;</span></span><span style="color:#070">&gt;</span>No<span style="color:#070">&lt;/td&gt;</span>
932
- <span style="color:#070">&lt;td&gt;</span>Yes<span style="color:#070">&lt;/td&gt;</span>
933
- <span style="color:#070">&lt;td&gt;</span>Yes<span style="color:#070">&lt;/td&gt;</span>
934
- <span style="color:#070">&lt;/tr&gt;</span>
935
- <span style="color:#070">&lt;tr&gt;</span>
936
- <span style="color:#070">&lt;th&gt;</span>minor<span style="color:#070">&lt;/th&gt;</span>
937
- <span style="color:#070">&lt;td&gt;</span>Yes<span style="color:#070">&lt;/td&gt;</span>
938
- <span style="color:#070">&lt;td&gt;</span>Yes<span style="color:#070">&lt;/td&gt;</span>
939
- <span style="color:#070">&lt;td&gt;</span>Yes<span style="color:#070">&lt;/td&gt;</span>
940
- <span style="color:#070">&lt;/tr&gt;</span>
941
- <span style="color:#070">&lt;tr&gt;</span>
942
- <span style="color:#070">&lt;th&gt;</span>patch<span style="color:#070">&lt;/th&gt;</span>
943
- <span style="color:#070">&lt;td&gt;</span>Yes<span style="color:#070">&lt;/td&gt;</span>
944
- <span style="color:#070">&lt;td</span> <span style="color:#007">style</span>=<span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">background-color: #FFE4E1;</span><span style="color:#710">&quot;</span></span><span style="color:#070">&gt;</span>No<span style="color:#070">&lt;/td&gt;</span>
945
- <span style="color:#070">&lt;td&gt;</span>Yes<span style="color:#070">&lt;/td&gt;</span>
946
- <span style="color:#070">&lt;/tr&gt;</span>
947
- <span style="color:#070">&lt;/tbody&gt;</span>
948
- <span style="color:#070">&lt;/table&gt;</span>
949
-
950
- %|paragraph &quot;License&quot;
951
- %<span style="color:#F00;background-color:#FAA">&lt;</span> &quot;../LICENSE&quot;
952
-
953
- %|section &quot;Credits&quot;
954
- <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: give attribution to your predecessors and contributors
955
-
956
- <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%&gt;</span></span> is made possible by
957
- <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> xref <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">History</span><span style="color:#710">&quot;</span></span>, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">contributions</span><span style="color:#710">&quot;</span></span> <span style="font-weight:bold;color:#777">%&gt;</span></span>
958
- from users like you:
959
-
960
- %<span style="color:#F00;background-color:#FAA">&lt;</span> &quot;../CREDITS&quot;
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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#doc-intro.erb"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#doc-theory.erb"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:doc-setup.erb"><img class="icon" alt="&equiv;" 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 &quot;Setup&quot;
966
- %|section &quot;Requirements&quot;
967
- Your system needs the following software to run <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%&gt;</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 &quot;Installation&quot;
975
- You can install <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%&gt;</span></span> by running this command:
976
-
977
- gem install <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$program</span> <span style="font-weight:bold;color:#777">%&gt;</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">&lt;%=</span> <span style="color:#d70;font-weight:bold">$program</span> <span style="font-weight:bold;color:#777">%&gt;</span></span> --version
982
-
983
- If the installation was successful, you will see output like this:
984
-
985
- <span style="color:#070">&lt;pre&gt;</span><span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</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">%&gt;</span></span><span style="color:#070">&lt;/pre&gt;</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">&lt;%=</span> xref <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">License</span><span style="color:#710">&quot;</span></span>, <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">ask the author(s)</span><span style="color:#710">&quot;</span></span> <span style="font-weight:bold;color:#777">%&gt;</span></span> for help.
989
-
990
- %|section &quot;Manifest&quot;
991
- You will see the following items inside <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%&gt;</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">&lt;%=</span> <span style="color:#d70;font-weight:bold">$program</span> <span style="font-weight:bold;color:#777">%&gt;</span></span> --version
995
-
996
- <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: list important files your project provides here
997
-
998
- * <span style="color:#070">&lt;tt&gt;</span>bin/<span style="color:#070">&lt;/tt&gt;</span>
999
-
1000
- * <span style="color:#070">&lt;tt&gt;</span><span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$program</span> <span style="font-weight:bold;color:#777">%&gt;</span></span><span style="color:#070">&lt;/tt&gt;</span> --- the main <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%&gt;</span></span> executable.
1001
-
1002
- * <span style="color:#070">&lt;tt&gt;</span>lib/<span style="color:#070">&lt;/tt&gt;</span>
1003
-
1004
- * <span style="color:#070">&lt;tt&gt;</span><span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$program</span> <span style="font-weight:bold;color:#777">%&gt;</span></span>.rb<span style="color:#070">&lt;/tt&gt;</span> --- the main <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%&gt;</span></span> library.
1005
-
1006
- * <span style="color:#070">&lt;tt&gt;</span><span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$program</span> <span style="font-weight:bold;color:#777">%&gt;</span></span>/<span style="color:#070">&lt;/tt&gt;</span>
1007
-
1008
- <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: list sub-libraries your project provides here
1009
-
1010
- * <span style="color:#070">&lt;tt&gt;</span>doc/<span style="color:#070">&lt;/tt&gt;</span>
1011
-
1012
- * <span style="color:#070">&lt;tt&gt;</span>api/<span style="color:#070">&lt;/tt&gt;</span> --- API reference documentation.
1013
-
1014
- * <span style="color:#070">&lt;tt&gt;</span>index.erb<span style="color:#070">&lt;/tt&gt;</span> --- source of this user manual.
1015
-
1016
- * <span style="color:#070">&lt;tt&gt;</span>lang/<span style="color:#070">&lt;/tt&gt;</span> --- translations of language phrases.
1017
-
1018
- * <span style="color:#070">&lt;tt&gt;</span>LICENSE<span style="color:#070">&lt;/tt&gt;</span> --- copyright notice and legal conditions.
1019
-
1020
- * <span style="color:#070">&lt;tt&gt;</span>CREDITS<span style="color:#070">&lt;/tt&gt;</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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#doc-setup.erb"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#doc-usage.erb"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:doc-theory.erb"><img class="icon" alt="&equiv;" 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 &quot;Theory of operation&quot;
1026
- <span style="color:#F00;background-color:#FAA">&gt;</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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#doc-theory.erb"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#doc-history.erb"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:doc-usage.erb"><img class="icon" alt="&equiv;" 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 &quot;Usage&quot;
1032
- %|section &quot;Command-line interface&quot;
1033
- When you run this command:
1034
-
1035
- <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$program</span> <span style="font-weight:bold;color:#777">%&gt;</span></span> --help
1036
-
1037
- You will see this output:
1038
-
1039
- <span style="color:#070">&lt;pre&gt;</span><span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</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">%&gt;</span></span><span style="color:#070">&lt;/pre&gt;</span>
1040
-
1041
- <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: explain the command-line arguments
1042
-
1043
- %|section &quot;Ruby library interface&quot;
1044
- <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: explain how to use your project's Ruby library
1045
- <span style="color:#F00;background-color:#FAA">&gt;</span> from inside another Ruby program or library
1046
-
1047
- %|section &quot;Tutorial&quot;
1048
- This tutorial shows how <span style="background:#eee;color:black"><span style="font-weight:bold;color:#777">&lt;%=</span> <span style="color:#d70;font-weight:bold">$project</span> <span style="font-weight:bold;color:#777">%&gt;</span></span> is used to __________.
1049
-
1050
- <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: give examples for doing common tasks
1051
-
1052
- <span style="color:#F00;background-color:#FAA">&gt;</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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#doc-usage.erb"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Implement-your-project"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:doc-history.erb"><img class="icon" alt="&equiv;" 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 &quot;History&quot;
1058
- <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: put a brief history about your project here
1059
-
1060
- %|history
1061
- <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: put release notes for your project
1062
- <span style="color:#F00;background-color:#FAA">&gt;</span> here -- newest first, oldest last.
1063
-
1064
- %|section &quot;Version 0.0.0 (2009-05-04)&quot;
1065
- <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: write a short summary of the changes in this release
1066
-
1067
- This release changes __________, adds __________, and fixes __________.
1068
-
1069
- %|paragraph &quot;Thank you&quot;
1070
- <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: list everyone who contributed to this release
1071
-
1072
- * __________ contributed __________
1073
-
1074
- * __________ suggested __________
1075
-
1076
- * __________ helped to __________
1077
-
1078
- %|paragraph &quot;Incompatible changes&quot;
1079
- <span style="color:#F00;background-color:#FAA">&gt;</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 &quot;New features&quot;
1088
- <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: list new features added in this release
1089
-
1090
- * __________ ---contributor name
1091
-
1092
- * __________ ---contributor name
1093
-
1094
- * __________ ---contributor name
1095
-
1096
- %|paragraph &quot;Bug fixes&quot;
1097
- <span style="color:#F00;background-color:#FAA">&gt;</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 &quot;Housekeeping&quot;
1106
- <span style="color:#F00;background-color:#FAA">&gt;</span> TODO: list the refactorings, clean ups, and other
1107
- <span style="color:#F00;background-color:#FAA">&gt;</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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#doc-history.erb"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Goodbye-LOAD_PATH-hello-require"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Implement-your-project"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1119
- <h3 class="title">
1120
- 3.3.4&nbsp;&nbsp;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">&quot;</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">&quot;</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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Implement-your-project"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Test-your-project"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Goodbye-LOAD_PATH-hello-require"><img class="icon" alt="&equiv;" 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Goodbye-LOAD_PATH-hello-require"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Units-and-tests"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Test-your-project"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1187
- <h3 class="title">
1188
- 3.3.5&nbsp;&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Test-your-project"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Test-execution"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Units-and-tests"><img class="icon" alt="&equiv;" 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&#8217;s <tt>lib/</tt> directory is considered to be a <strong>unit</strong>. Likewise, every Ruby source file in your project&#8217;s <tt>test/</tt> is considered to be a <strong>test</strong>.</p>
1196
-
1197
- <p>As a result, your project&#8217;s <tt>test/</tt> directory structure <em>mirrors</em> the structure of your project&#8217;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Units-and-tests"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Helper-libraries"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Test-execution"><img class="icon" alt="&equiv;" 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> &#8212; Integration for the <a href='http://github.com/chneukirchen/bacon'>Bacon library</a>.</li>
1219
-
1220
- <li><tt>context</tt> &#8212; Integration for the <a href='http://github.com/jeremymcanally/context'>Context library</a>.</li>
1221
-
1222
- <li><tt>dfect</tt> &#8212; Integration for the <a href='http://snk.tuxfamily.org/lib/dfect/'>Dfect library</a>.</li>
1223
-
1224
- <li><tt>matchy</tt> &#8212; Integration for the <a href='http://github.com/jeremymcanally/matchy'>Matchy library</a></li>
1225
-
1226
- <li><tt>minitest</tt> &#8212; Integration for the <a href='http://blog.zenspider.com/minitest/'>Minitest library</a>.</li>
1227
-
1228
- <li><tt>mocha</tt> &#8212; Integration for the <a href='http://mocha.rubyforge.org'>Mocha library</a>.</li>
1229
-
1230
- <li><tt>rspec</tt> &#8212; Integration for the <a href='http://rspec.info'>RSpec library</a>.</li>
1231
-
1232
- <li><tt>shoulda</tt> &#8212; Integration for the <a href='http://thoughtbot.com/projects/shoulda/'>Shoulda library</a>.</li>
1233
-
1234
- <li><tt>test_spec</tt> &#8212; Integration for the <a href='http://chneukirchen.org/repos/testspec/README'>test/spec library</a>.</li>
1235
-
1236
- <li><tt>test_unit</tt> &#8212; 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Test-execution"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Translate-your-project"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Helper-libraries"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1240
- <p class="title">Helper libraries</p>
1241
- <div class="content"><p>Your project&#8217;s main directory is added to Ruby&#8217;s load path. So if your tests have helper libraries stored in your project&#8217;s <tt>test/</tt> directory, you can load them into your tests by adding a &#8220;test/&#8221; 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Helper-libraries"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Language-phrases"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Translate-your-project"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1250
- <h3 class="title">
1251
- 3.3.6&nbsp;&nbsp;Translate your project
1252
- </h3>
1253
- <div class="content"><p>Although English is the <em>lingua franca</em> of today, your project&#8217;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Translate-your-project"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Parameterizing-language-phrases"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Language-phrases"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1257
- <h4 class="title">
1258
- 3.3.6.1&nbsp;&nbsp;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&#8217;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. &quot;Run project executable&quot;">your project&#8217;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. &quot;Translation files&quot;">translation file</a> for the user&#8217;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">#=&gt; '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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Language-phrases"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Explicit-translation-into-a-language"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Parameterizing-language-phrases"><img class="icon" alt="&equiv;" 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Parameterizing-language-phrases"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Translation-files"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Explicit-translation-into-a-language"><img class="icon" alt="&equiv;" 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&#8217;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Explicit-translation-into-a-language"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Extracting-language-phrases"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Translation-files"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1295
- <h4 class="title">
1296
- 3.3.6.2&nbsp;&nbsp;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&#8217;s <tt>lang/</tt> directory. They provide translations for <a class="xref" href="#Language-phrases" title="Section 3.3.6.1. &quot;Language phrases&quot;">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
- &quot;%s: Quickly, please!&quot; : &quot;%s: ¡Rápidamente, por favor!&quot;</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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Translation-files"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Dynamic-analysis"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Extracting-language-phrases"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1318
- <h4 class="title">
1319
- 3.3.6.3&nbsp;&nbsp;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 &quot;/tmp/rake20090504-12012-13p4oou-0/word_count/lang/phrases.yaml&quot;
1325
- </pre><p></p>
1326
-
1327
- <p>The above command exercises your project&#8217;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Extracting-language-phrases"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Static-analysis"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Dynamic-analysis"><img class="icon" alt="&equiv;" 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&#8217;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&#8212;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Dynamic-analysis"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Translating-language-phrases"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Static-analysis"><img class="icon" alt="&equiv;" 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Static-analysis"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Publish-your-project"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Translating-language-phrases"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1348
- <h4 class="title">
1349
- 3.3.6.4&nbsp;&nbsp;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 &quot;from&quot; 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Translating-language-phrases"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Build-a-RubyGem"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Publish-your-project"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1378
- <h3 class="title">
1379
- 3.3.7&nbsp;&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Publish-your-project"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Publish-a-RubyGem"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Build-a-RubyGem"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1387
- <h4 class="title">
1388
- 3.3.7.1&nbsp;&nbsp;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">- ~&gt;</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">&quot;</span><span style="">1</span><span style="color:#710">&quot;</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">- ~&gt;</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">&quot;</span><span style="">1</span><span style="color:#710">&quot;</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">- &quot;&gt;=&quot;</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">&quot;</span><span style="">0</span><span style="color:#710">&quot;</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">- &quot;&gt;=&quot;</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">&quot;</span><span style="">0</span><span style="color:#710">&quot;</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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Build-a-RubyGem"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Announce-a-release"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Publish-a-RubyGem"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1522
- <h4 class="title">
1523
- 3.3.7.2&nbsp;&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Publish-a-RubyGem"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Login-information"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Announce-a-release"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1532
- <h4 class="title">
1533
- 3.3.7.3&nbsp;&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Announce-a-release"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Manual-release-announcement"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Login-information"><img class="icon" alt="&equiv;" 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Login-information"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Publish-the-documentation"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Manual-release-announcement"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1561
- <h5 class="title">
1562
- 3.3.7.3.1&nbsp;&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Manual-release-announcement"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#History"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Publish-the-documentation"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1584
- <h4 class="title">
1585
- 3.3.7.4&nbsp;&nbsp;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&#8217;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Publish-the-documentation"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-1.0.0-2009-05-03"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:History"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1599
- <h1 class="title">
1600
- Chapter&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#History"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Incompatible-changes"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-1.0.0-2009-05-03"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1606
- <h2 class="title">
1607
- 4.1&nbsp;&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-1.0.0-2009-05-03"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#New-features"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Incompatible-changes"><img class="icon" alt="&equiv;" 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 &#8220;history&#8221; 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 &#8220;pak&#8221; rake task, which is provided by <code class="line"><span style="color:#036;font-weight:bold">Inochi</span>.rake()</code>, has been renamed to &#8220;gem&#8221;.</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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Incompatible-changes"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Bug-fixes"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:New-features"><img class="icon" alt="&equiv;" 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&#8217;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&#8217;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 &#8220;lint&#8221; 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 &#8220;test:cov&#8221; rake task which reports code coverage statistics.</p>
1659
- </li>
1660
-
1661
- <li>
1662
- <p>Add &#8220;test:ruby&#8221; 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 &#8216;rake opts=&#8217; 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#New-features"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Housekeeping"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Bug-fixes"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1679
- <p class="title">Bug fixes</p>
1680
- <div class="content"><ul>
1681
- <li>
1682
- <p>The &#8220;enable email notification&#8221; 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Bug-fixes"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-0.3.0-2009-02-12"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Housekeeping"><img class="icon" alt="&equiv;" 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Housekeeping"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#New-features-609439008"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-0.3.0-2009-02-12"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1718
- <h2 class="title">
1719
- 4.2&nbsp;&nbsp;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. &quot;Translate your project&quot;">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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-0.3.0-2009-02-12"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Bug-fixes-609465768"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:New-features-609439008"><img class="icon" alt="&equiv;" 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. &quot;Translate your project&quot;">language translations</a> of phrases used in a project.</p>
1729
-
1730
- <ul>
1731
- <li>
1732
- <p>Add &#8220;lang:dump&#8221; Rake task for extracting language phrases from project.</p>
1733
- </li>
1734
-
1735
- <li>
1736
- <p>Add &#8220;lang:conv&#8221; 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&#8217;s main executable for setting user&#8217;s preferred language in spite of the user&#8217;s locale environment.</p>
1741
- </li>
1742
- </ul>
1743
- </li>
1744
-
1745
- <li>
1746
- <p>Notify user when attempting to publish announcements in the &#8220;pub&#8221; 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#New-features-609439008"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Housekeeping-609499748"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Bug-fixes-609465768"><img class="icon" alt="&equiv;" 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&#8217;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&#8217; 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Bug-fixes-609465768"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-0.2.0-2009-01-25"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Housekeeping-609499748"><img class="icon" alt="&equiv;" 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 &#8220;Credits&#8221; section.</p>
1779
- </li>
1780
-
1781
- <li>
1782
- <p>Remove &#8220;Contributor kudos&#8221; 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&#8217;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Housekeeping-609499748"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#New-features-609532608"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-0.2.0-2009-01-25"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1792
- <h2 class="title">
1793
- 4.3&nbsp;&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-0.2.0-2009-01-25"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Bug-fixes-609551988"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:New-features-609532608"><img class="icon" alt="&equiv;" 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. &quot;Test your project&quot;">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> =&gt; [[<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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#New-features-609532608"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Housekeeping-609561708"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Bug-fixes-609551988"><img class="icon" alt="&equiv;" 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Bug-fixes-609551988"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-0.1.0-2009-01-13"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Housekeeping-609561708"><img class="icon" alt="&equiv;" 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Housekeeping-609561708"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#New-features-609595238"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-0.1.0-2009-01-13"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1859
- <h2 class="title">
1860
- 4.4&nbsp;&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-0.1.0-2009-01-13"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Bug-fixes-609627068"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:New-features-609595238"><img class="icon" alt="&equiv;" 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&#8217;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#New-features-609595238"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-0.0.1-2009-01-13"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Bug-fixes-609627068"><img class="icon" alt="&equiv;" 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Bug-fixes-609627068"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Bug-fixes-609677068"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-0.0.1-2009-01-13"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1887
- <h2 class="title">
1888
- 4.5&nbsp;&nbsp;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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-0.0.1-2009-01-13"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Housekeeping-609697358"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Bug-fixes-609677068"><img class="icon" alt="&equiv;" 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Bug-fixes-609677068"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-0.0.0-2009-01-13"><img class="icon" alt="&darr;" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Housekeeping-609697358"><img class="icon" alt="&equiv;" 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="&lowast;" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Housekeeping-609697358"><img class="icon" alt="&uarr;" src="&icon_nav_prev;"/></a> <a title="Return to listing" href="#rev:Version-0.0.0-2009-01-13"><img class="icon" alt="&equiv;" src="&icon_nav_list;"/></a></div>
1919
- <h2 class="title">
1920
- 4.6&nbsp;&nbsp;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 &copy; 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 &copy; 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>