changeset 246:eeebe205a056 cannam

* Merge from default branch, bringing us up to SVN trunk rev 4993
author Chris Cannam
date Thu, 03 Mar 2011 12:02:03 +0000
parents fca2657f4aa5 (current diff) 051f544170fe (diff)
children 73ff0e6a11b1
files .svn/all-wcprops .svn/entries app/.svn/all-wcprops app/.svn/entries app/controllers/.svn/all-wcprops app/controllers/.svn/entries app/controllers/.svn/text-base/repositories_controller.rb.svn-base app/controllers/account_controller.rb app/controllers/issues_controller.rb app/controllers/repositories_controller.rb app/helpers/.svn/all-wcprops app/helpers/.svn/entries app/helpers/.svn/text-base/application_helper.rb.svn-base app/helpers/.svn/text-base/repositories_helper.rb.svn-base app/helpers/application_helper.rb app/helpers/repositories_helper.rb app/models/.svn/all-wcprops app/models/.svn/entries app/models/.svn/text-base/changeset.rb.svn-base app/models/.svn/text-base/mail_handler.rb.svn-base app/models/.svn/text-base/repository.rb.svn-base app/models/.svn/text-base/user.rb.svn-base app/models/changeset.rb app/models/issue.rb app/models/mail_handler.rb app/models/repository.rb app/models/repository/.svn/all-wcprops app/models/repository/.svn/entries app/models/repository/.svn/text-base/mercurial.rb.svn-base app/models/repository/git.rb app/models/repository/mercurial.rb app/models/user.rb app/sweepers/.svn/entries app/views/.svn/all-wcprops app/views/.svn/entries app/views/account/.svn/entries app/views/activities/.svn/entries app/views/admin/.svn/entries app/views/attachments/.svn/entries app/views/auth_sources/.svn/entries app/views/auto_completes/.svn/entries app/views/boards/.svn/entries app/views/calendars/.svn/entries app/views/common/.svn/entries app/views/context_menus/.svn/entries app/views/custom_fields/.svn/entries app/views/documents/.svn/entries app/views/enumerations/.svn/entries app/views/files/.svn/entries app/views/gantts/.svn/all-wcprops app/views/gantts/.svn/entries app/views/groups/.svn/entries app/views/issue_categories/.svn/entries app/views/issue_moves/.svn/entries app/views/issue_relations/.svn/entries app/views/issue_statuses/.svn/entries app/views/issues/.svn/all-wcprops app/views/issues/.svn/entries app/views/journals/.svn/entries app/views/layouts/.svn/all-wcprops app/views/layouts/.svn/entries app/views/layouts/base.rhtml app/views/ldap_auth_sources/.svn/entries app/views/mailer/.svn/entries app/views/members/.svn/entries app/views/messages/.svn/entries app/views/my/.svn/entries app/views/my/blocks/.svn/entries app/views/news/.svn/entries app/views/previews/.svn/entries app/views/projects/.svn/entries app/views/projects/settings/.svn/entries app/views/queries/.svn/entries app/views/reports/.svn/entries app/views/repositories/.svn/all-wcprops app/views/repositories/.svn/entries app/views/repositories/_dir_list_content.rhtml app/views/roles/.svn/entries app/views/search/.svn/entries app/views/settings/.svn/all-wcprops app/views/settings/.svn/entries app/views/time_entry_reports/.svn/entries app/views/timelog/.svn/entries app/views/trackers/.svn/entries app/views/users/.svn/all-wcprops app/views/users/.svn/entries app/views/versions/.svn/entries app/views/watchers/.svn/entries app/views/welcome/.svn/entries app/views/wiki/.svn/all-wcprops app/views/wiki/.svn/entries app/views/wikis/.svn/entries app/views/workflows/.svn/all-wcprops app/views/workflows/.svn/entries config/.svn/all-wcprops config/.svn/entries config/.svn/prop-base/email.yml.example.svn-base config/.svn/text-base/email.yml.example.svn-base config/email.yml.example config/environments/.svn/entries config/initializers/.svn/all-wcprops config/initializers/.svn/entries config/initializers/.svn/prop-base/40-email.rb.svn-base config/initializers/.svn/text-base/40-email.rb.svn-base config/initializers/40-email.rb config/locales/.svn/all-wcprops config/locales/.svn/entries config/locales/.svn/text-base/nl.yml.svn-base config/locales/bg.yml config/locales/bs.yml config/locales/ca.yml config/locales/cs.yml config/locales/da.yml config/locales/de.yml config/locales/el.yml config/locales/en-GB.yml config/locales/en.yml config/locales/es.yml config/locales/eu.yml config/locales/fi.yml config/locales/fr.yml config/locales/gl.yml config/locales/he.yml config/locales/hr.yml config/locales/hu.yml config/locales/id.yml config/locales/it.yml config/locales/ja.yml config/locales/ko.yml config/locales/lt.yml config/locales/lv.yml config/locales/mk.yml config/locales/mn.yml config/locales/nl.yml config/locales/no.yml config/locales/pl.yml config/locales/pt-BR.yml config/locales/pt.yml config/locales/ro.yml config/locales/ru.yml config/locales/sk.yml config/locales/sl.yml config/locales/sr-YU.yml config/locales/sr.yml config/locales/sv.yml config/locales/th.yml config/locales/tr.yml config/locales/uk.yml config/locales/vi.yml config/locales/zh-TW.yml config/locales/zh.yml db/.svn/all-wcprops db/.svn/entries db/migrate/.svn/all-wcprops db/migrate/.svn/entries doc/.svn/all-wcprops doc/.svn/entries extra/.svn/entries extra/mail_handler/.svn/entries extra/sample_plugin/.svn/entries extra/sample_plugin/app/.svn/entries extra/sample_plugin/app/controllers/.svn/entries extra/sample_plugin/app/models/.svn/entries extra/sample_plugin/app/views/.svn/entries extra/sample_plugin/app/views/example/.svn/entries extra/sample_plugin/app/views/my/.svn/entries extra/sample_plugin/app/views/my/blocks/.svn/entries extra/sample_plugin/app/views/settings/.svn/entries extra/sample_plugin/assets/.svn/entries extra/sample_plugin/assets/images/.svn/entries extra/sample_plugin/assets/stylesheets/.svn/entries extra/sample_plugin/config/.svn/entries extra/sample_plugin/config/locales/.svn/entries extra/sample_plugin/db/.svn/entries extra/sample_plugin/db/migrate/.svn/entries extra/svn/.svn/entries files/.svn/entries lib/.svn/all-wcprops lib/.svn/entries lib/SVG/.svn/entries lib/SVG/Graph/.svn/entries lib/generators/.svn/entries lib/generators/redmine_plugin/.svn/entries lib/generators/redmine_plugin/templates/.svn/entries lib/generators/redmine_plugin_controller/.svn/entries lib/generators/redmine_plugin_controller/templates/.svn/entries lib/generators/redmine_plugin_model/.svn/entries lib/generators/redmine_plugin_model/templates/.svn/entries lib/plugins/.svn/entries lib/redmine/.svn/all-wcprops lib/redmine/.svn/entries lib/redmine/.svn/text-base/version.rb.svn-base lib/redmine/activity/.svn/entries lib/redmine/core_ext/.svn/entries lib/redmine/core_ext/string/.svn/entries lib/redmine/default_data/.svn/entries lib/redmine/export/.svn/entries lib/redmine/helpers/.svn/all-wcprops lib/redmine/helpers/.svn/entries lib/redmine/scm/.svn/all-wcprops lib/redmine/scm/.svn/entries lib/redmine/scm/adapters/.svn/all-wcprops lib/redmine/scm/adapters/.svn/entries lib/redmine/scm/adapters/.svn/text-base/cvs_adapter.rb.svn-base lib/redmine/scm/adapters/.svn/text-base/mercurial_adapter.rb.svn-base lib/redmine/scm/adapters/abstract_adapter.rb lib/redmine/scm/adapters/cvs_adapter.rb lib/redmine/scm/adapters/mercurial/.svn/all-wcprops lib/redmine/scm/adapters/mercurial/.svn/entries lib/redmine/scm/adapters/mercurial_adapter.rb lib/redmine/version.rb lib/redmine/views/.svn/entries lib/redmine/views/builders/.svn/entries lib/redmine/views/my_page/.svn/entries lib/redmine/wiki_formatting/.svn/entries lib/redmine/wiki_formatting/textile/.svn/entries lib/tasks/.svn/all-wcprops lib/tasks/.svn/entries log/.svn/entries public/.htaccess public/.svn/all-wcprops public/.svn/entries public/.svn/prop-base/.htaccess.svn-base public/.svn/text-base/.htaccess.svn-base public/favicon.ico public/help/.svn/entries public/images/.svn/all-wcprops public/images/.svn/entries public/images/files/.svn/entries public/images/jstoolbar/.svn/entries public/javascripts/.svn/all-wcprops public/javascripts/.svn/entries public/javascripts/calendar/.svn/entries public/javascripts/calendar/lang/.svn/entries public/javascripts/jstoolbar/.svn/entries public/javascripts/jstoolbar/lang/.svn/entries public/stylesheets/.svn/all-wcprops public/stylesheets/.svn/entries public/stylesheets/.svn/text-base/application.css.svn-base public/stylesheets/.svn/tmp/application.css.tmp public/stylesheets/.svn/tmp/tempfile.tmp public/stylesheets/application.css public/themes/.svn/entries public/themes/alternate/.svn/entries public/themes/alternate/stylesheets/.svn/entries public/themes/classic/.svn/entries public/themes/classic/images/.svn/entries public/themes/classic/stylesheets/.svn/entries script/.svn/entries script/performance/.svn/entries script/process/.svn/entries test/.svn/all-wcprops test/.svn/entries test/exemplars/.svn/entries test/fixtures/.svn/all-wcprops test/fixtures/.svn/entries test/fixtures/diffs/.svn/entries test/fixtures/encoding/.svn/entries test/fixtures/files/.svn/entries test/fixtures/ldap/.svn/entries test/fixtures/mail_handler/.svn/all-wcprops test/fixtures/mail_handler/.svn/entries test/fixtures/mailer/.svn/entries test/fixtures/repositories/.svn/all-wcprops test/fixtures/repositories/.svn/entries test/functional/.svn/all-wcprops test/functional/.svn/entries test/functional/.svn/text-base/repositories_mercurial_controller_test.rb.svn-base test/functional/repositories_mercurial_controller_test.rb test/integration/.svn/entries test/integration/api_test/.svn/entries test/integration/lib/.svn/entries test/integration/lib/redmine/.svn/entries test/mocks/.svn/entries test/mocks/development/.svn/entries test/mocks/test/.svn/entries test/unit/.svn/all-wcprops test/unit/.svn/entries test/unit/.svn/text-base/repository_mercurial_test.rb.svn-base test/unit/helpers/.svn/all-wcprops test/unit/helpers/.svn/entries test/unit/helpers/.svn/text-base/application_helper_test.rb.svn-base test/unit/helpers/application_helper_test.rb test/unit/lib/.svn/all-wcprops test/unit/lib/.svn/entries test/unit/lib/redmine/.svn/all-wcprops test/unit/lib/redmine/.svn/entries test/unit/lib/redmine/.svn/text-base/i18n_test.rb.svn-base test/unit/lib/redmine/helpers/.svn/entries test/unit/lib/redmine/i18n_test.rb test/unit/lib/redmine/menu_manager/.svn/entries test/unit/lib/redmine/scm/.svn/all-wcprops test/unit/lib/redmine/scm/.svn/entries test/unit/lib/redmine/scm/adapters/.svn/all-wcprops test/unit/lib/redmine/scm/adapters/.svn/entries test/unit/lib/redmine/scm/adapters/.svn/text-base/mercurial_adapter_test.rb.svn-base test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb test/unit/lib/redmine/views/.svn/entries test/unit/lib/redmine/views/builders/.svn/entries test/unit/lib/redmine/wiki_formatting/.svn/entries test/unit/repository_mercurial_test.rb tmp/.svn/entries tmp/cache/.svn/entries tmp/sessions/.svn/entries tmp/sockets/.svn/entries tmp/test/.svn/entries vendor/.svn/all-wcprops vendor/.svn/entries vendor/gems/.svn/entries vendor/gems/rubytree-0.5.2/.svn/entries vendor/gems/rubytree-0.5.2/lib/.svn/entries vendor/gems/rubytree-0.5.2/lib/tree/.svn/entries vendor/gems/rubytree-0.5.2/test/.svn/entries vendor/plugins/.svn/all-wcprops vendor/plugins/.svn/entries vendor/plugins/acts_as_activity_provider/.svn/entries vendor/plugins/acts_as_activity_provider/lib/.svn/entries vendor/plugins/acts_as_attachable/.svn/entries vendor/plugins/acts_as_attachable/lib/.svn/entries vendor/plugins/acts_as_customizable/.svn/all-wcprops vendor/plugins/acts_as_customizable/.svn/entries vendor/plugins/acts_as_customizable/lib/.svn/all-wcprops vendor/plugins/acts_as_customizable/lib/.svn/entries vendor/plugins/acts_as_event/.svn/entries vendor/plugins/acts_as_event/lib/.svn/entries vendor/plugins/acts_as_list/.svn/entries vendor/plugins/acts_as_list/lib/.svn/entries vendor/plugins/acts_as_list/lib/active_record/.svn/entries vendor/plugins/acts_as_list/lib/active_record/acts/.svn/entries vendor/plugins/acts_as_list/test/.svn/entries vendor/plugins/acts_as_searchable/.svn/entries vendor/plugins/acts_as_searchable/lib/.svn/entries vendor/plugins/acts_as_tree/.svn/entries vendor/plugins/acts_as_tree/lib/.svn/entries vendor/plugins/acts_as_tree/lib/active_record/.svn/entries vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/entries vendor/plugins/acts_as_tree/test/.svn/entries vendor/plugins/acts_as_tree/test/fixtures/.svn/entries vendor/plugins/acts_as_versioned/.svn/entries vendor/plugins/acts_as_versioned/lib/.svn/entries vendor/plugins/acts_as_versioned/test/.svn/entries vendor/plugins/acts_as_versioned/test/fixtures/.svn/entries vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/entries vendor/plugins/acts_as_watchable/.svn/entries vendor/plugins/acts_as_watchable/lib/.svn/entries vendor/plugins/awesome_nested_set/.svn/entries vendor/plugins/awesome_nested_set/lib/.svn/entries vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/entries vendor/plugins/awesome_nested_set/rails/.svn/entries vendor/plugins/awesome_nested_set/test/.svn/entries vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/entries vendor/plugins/awesome_nested_set/test/db/.svn/entries vendor/plugins/awesome_nested_set/test/fixtures/.svn/entries vendor/plugins/classic_pagination/.svn/entries vendor/plugins/classic_pagination/lib/.svn/entries vendor/plugins/classic_pagination/test/.svn/entries vendor/plugins/classic_pagination/test/fixtures/.svn/entries vendor/plugins/coderay-0.9.2/.svn/entries vendor/plugins/coderay-0.9.2/.svn/prop-base/LICENSE.svn-base vendor/plugins/coderay-0.9.2/.svn/text-base/LICENSE.svn-base vendor/plugins/coderay-0.9.2/LICENSE vendor/plugins/coderay-0.9.2/lib/.svn/entries vendor/plugins/coderay-0.9.2/lib/.svn/prop-base/README.svn-base vendor/plugins/coderay-0.9.2/lib/.svn/prop-base/coderay.rb.svn-base vendor/plugins/coderay-0.9.2/lib/.svn/text-base/README.svn-base vendor/plugins/coderay-0.9.2/lib/.svn/text-base/coderay.rb.svn-base vendor/plugins/coderay-0.9.2/lib/README vendor/plugins/coderay-0.9.2/lib/coderay.rb vendor/plugins/coderay-0.9.2/lib/coderay/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/duo.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/encoder.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/for_redcloth.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/scanner.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/style.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/token_classes.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/tokens.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/duo.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/encoder.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/for_redcloth.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/scanner.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/style.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/token_classes.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/tokens.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/duo.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoder.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/_map.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/comment_filter.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/count.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/debug.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/div.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/filter.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/html.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/json.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/lines_of_code.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/null.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/page.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/span.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/statistic.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/term.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/text.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/token_class_filter.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/xml.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/yaml.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/_map.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/comment_filter.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/count.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/debug.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/div.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/filter.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/html.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/json.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/lines_of_code.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/null.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/page.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/span.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/statistic.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/term.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/text.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/token_class_filter.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/xml.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/yaml.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/_map.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/comment_filter.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/count.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/debug.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/div.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/filter.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/prop-base/css.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/prop-base/numerization.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/prop-base/output.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/text-base/css.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/text-base/numerization.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/text-base/output.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/css.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/numerization.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/json.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/lines_of_code.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/null.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/page.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/span.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/statistic.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/term.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/text.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/token_class_filter.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/xml.rb vendor/plugins/coderay-0.9.2/lib/coderay/encoders/yaml.rb vendor/plugins/coderay-0.9.2/lib/coderay/for_redcloth.rb vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/file_type.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/gzip_simple.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/plugin.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/word_list.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/file_type.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/gzip_simple.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/plugin.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/word_list.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/helpers/file_type.rb vendor/plugins/coderay-0.9.2/lib/coderay/helpers/gzip_simple.rb vendor/plugins/coderay-0.9.2/lib/coderay/helpers/plugin.rb vendor/plugins/coderay-0.9.2/lib/coderay/helpers/word_list.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanner.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/_map.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/c.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/cpp.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/css.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/debug.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/delphi.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/diff.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/groovy.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/html.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/java.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/java_script.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/json.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/nitro_xhtml.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/php.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/plaintext.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/python.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/rhtml.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/ruby.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/scheme.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/sql.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/xml.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/yaml.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/_map.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/c.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/cpp.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/css.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/debug.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/delphi.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/diff.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/groovy.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/html.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/java.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/java_script.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/json.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/nitro_xhtml.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/php.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/plaintext.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/python.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/rhtml.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/ruby.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/scheme.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/sql.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/xml.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/yaml.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/_map.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/c.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/cpp.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/css.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/debug.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/delphi.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/diff.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/groovy.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/html.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/prop-base/builtin_types.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/text-base/builtin_types.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/builtin_types.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java_script.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/json.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/nitro_xhtml.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/php.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/plaintext.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/python.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/rhtml.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/prop-base/patterns.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/text-base/patterns.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/patterns.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/scheme.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/sql.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/xml.rb vendor/plugins/coderay-0.9.2/lib/coderay/scanners/yaml.rb vendor/plugins/coderay-0.9.2/lib/coderay/style.rb vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/entries vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/prop-base/_map.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/prop-base/cycnus.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/prop-base/murphy.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/text-base/_map.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/text-base/cycnus.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/text-base/murphy.rb.svn-base vendor/plugins/coderay-0.9.2/lib/coderay/styles/_map.rb vendor/plugins/coderay-0.9.2/lib/coderay/styles/cycnus.rb vendor/plugins/coderay-0.9.2/lib/coderay/styles/murphy.rb vendor/plugins/coderay-0.9.2/lib/coderay/token_classes.rb vendor/plugins/coderay-0.9.2/lib/coderay/tokens.rb vendor/plugins/engines/.svn/entries vendor/plugins/engines/generators/.svn/entries vendor/plugins/engines/generators/plugin_migration/.svn/entries vendor/plugins/engines/generators/plugin_migration/templates/.svn/entries vendor/plugins/engines/lib/.svn/entries vendor/plugins/engines/lib/engines/.svn/entries vendor/plugins/engines/lib/engines/plugin/.svn/entries vendor/plugins/engines/lib/engines/rails_extensions/.svn/entries vendor/plugins/engines/tasks/.svn/entries vendor/plugins/engines/test/.svn/entries vendor/plugins/engines/test/app/.svn/entries vendor/plugins/engines/test/app/controllers/.svn/entries vendor/plugins/engines/test/app/controllers/namespace/.svn/entries vendor/plugins/engines/test/app/helpers/.svn/entries vendor/plugins/engines/test/app/models/.svn/entries vendor/plugins/engines/test/app/things/.svn/entries vendor/plugins/engines/test/app/views/.svn/entries vendor/plugins/engines/test/app/views/app_and_plugin/.svn/entries vendor/plugins/engines/test/app/views/namespace/.svn/entries vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/entries vendor/plugins/engines/test/app/views/notify_mail/.svn/entries vendor/plugins/engines/test/app/views/plugin_mail/.svn/entries vendor/plugins/engines/test/functional/.svn/entries vendor/plugins/engines/test/lib/.svn/entries vendor/plugins/engines/test/plugins/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/entries vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/entries vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/entries vendor/plugins/engines/test/plugins/not_a_plugin/.svn/entries vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/entries vendor/plugins/engines/test/plugins/test_assets/.svn/entries vendor/plugins/engines/test/plugins/test_assets/app/.svn/entries vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/entries vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/entries vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/entries vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/entries vendor/plugins/engines/test/plugins/test_assets/public/.svn/entries vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/entries vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/entries vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/entries vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/entries vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/entries vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/entries vendor/plugins/engines/test/plugins/test_code_mixing/.svn/entries vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/entries vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/entries vendor/plugins/engines/test/plugins/test_load_path/.svn/entries vendor/plugins/engines/test/plugins/test_migration/.svn/entries vendor/plugins/engines/test/plugins/test_migration/db/.svn/entries vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/entries vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/entries vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/entries vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/entries vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/entries vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/entries vendor/plugins/engines/test/plugins/test_routing/.svn/entries vendor/plugins/engines/test/plugins/test_routing/app/.svn/entries vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/entries vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/entries vendor/plugins/engines/test/plugins/test_routing/config/.svn/entries vendor/plugins/engines/test/plugins/test_testing/.svn/entries vendor/plugins/engines/test/plugins/test_testing/app/.svn/entries vendor/plugins/engines/test/plugins/test_testing/test/.svn/entries vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/entries vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/entries vendor/plugins/engines/test/unit/.svn/entries vendor/plugins/engines/test/unit/test_testing/.svn/entries vendor/plugins/gravatar/.svn/entries vendor/plugins/gravatar/lib/.svn/entries vendor/plugins/gravatar/spec/.svn/entries vendor/plugins/open_id_authentication/.svn/entries vendor/plugins/open_id_authentication/generators/.svn/entries vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/entries vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/entries vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/entries vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/entries vendor/plugins/open_id_authentication/lib/.svn/entries vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/entries vendor/plugins/open_id_authentication/tasks/.svn/entries vendor/plugins/open_id_authentication/test/.svn/entries vendor/plugins/prepend_engine_views/.svn/entries vendor/plugins/rfpdf/.svn/entries vendor/plugins/rfpdf/lib/.svn/entries vendor/plugins/rfpdf/lib/rfpdf/.svn/entries vendor/plugins/rfpdf/test/.svn/entries vendor/plugins/ruby-net-ldap-0.0.4/.svn/entries vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/entries vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/entries vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/entries vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/entries
diffstat 1207 files changed, 62947 insertions(+), 32622 deletions(-) [+]
line wrap: on
line diff
--- a/.gitignore	Thu Jan 20 09:59:02 2011 +0000
+++ b/.gitignore	Thu Mar 03 12:02:03 2011 +0000
@@ -1,4 +1,7 @@
+/.project
+/.loadpath
 /config/additional_environment.rb
+/config/configuration.yml
 /config/database.yml
 /config/email.yml
 /config/initializers/session_store.rb
@@ -7,6 +10,8 @@
 /db/*.sqlite3
 /db/schema.rb
 /files/*
+/lib/redmine/scm/adapters/mercurial/redminehelper.pyc
+/lib/redmine/scm/adapters/mercurial/redminehelper.pyo
 /log/*.log*
 /log/mongrel_debug
 /public/dispatch.*
--- a/.hgignore	Thu Jan 20 09:59:02 2011 +0000
+++ b/.hgignore	Thu Mar 03 12:02:03 2011 +0000
@@ -1,6 +1,9 @@
 syntax: glob
 
+.project
+.loadpath
 config/additional_environment.rb
+config/configuration.yml
 config/database.yml
 config/email.yml
 config/initializers/session_store.rb
@@ -9,11 +12,12 @@
 db/*.sqlite3
 db/schema.rb
 files/*
+lib/redmine/scm/adapters/mercurial/redminehelper.pyc
+lib/redmine/scm/adapters/mercurial/redminehelper.pyo
 log/*.log*
 log/mongrel_debug
 public/dispatch.*
 public/plugin_assets
-tmp/*
 tmp/cache/*
 tmp/sessions/*
 tmp/sockets/*
--- a/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,17 +1,29 @@
 K 25
 svn:wc:ra_dav:version-url
-V 38
-/svn/!svn/ver/4731/trunk
+V 24
+/svn/!svn/ver/4993/trunk
 END
 .hgignore
 K 25
 svn:wc:ra_dav:version-url
 V 34
-/svn/!svn/ver/4606/trunk/.hgignore
+/svn/!svn/ver/4834/trunk/.hgignore
 END
-.hgignore
+Rakefile
 K 25
 svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/4607/branches/1.1-stable/.hgignore
+V 31
+/svn/!svn/ver/67/trunk/Rakefile
 END
+README.rdoc
+K 25
+svn:wc:ra_dav:version-url
+V 36
+/svn/!svn/ver/3849/trunk/README.rdoc
+END
+.gitignore
+K 25
+svn:wc:ra_dav:version-url
+V 35
+/svn/!svn/ver/4834/trunk/.gitignore
+END
--- a/.svn/dir-prop-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/.svn/dir-prop-base	Thu Mar 03 12:02:03 2011 +0000
@@ -4,7 +4,9 @@
 e93f8b46-1217-0410-a6f0-8f06a7374b81:/trunk:1751
 K 10
 svn:ignore
-V 9
+V 28
 coverage
+.project
+.loadpath
 
 END
--- a/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable
+4993
+http://redmine.rubyforge.org/svn/trunk
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-16T16:36:58.753919Z
-4731
-jplang
+2011-03-03T05:51:46.224821Z
+4993
+tmaruyama
 has-props
 
 
@@ -35,33 +35,11 @@
 
 
 
-2011-01-13T14:11:09.000000Z
-0f5961e6af62737d2a1f5e3ad47f8c89
-2011-01-01T21:07:43.412022Z
-4606
+
+970b3ffe21e2c668737cf5abf0d0ac48
+2011-02-15T11:04:52.942730Z
+4834
 tmaruyama
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-317
 
 app
 dir
@@ -75,7 +53,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 bbf560d44f092d22a30d3a562436ad8c
 2006-12-05T20:45:04.842118Z
 67
@@ -103,13 +81,16 @@
 
 307
 
+extra
+dir
+
 README.rdoc
 file
 
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 67c937b1f1d0603e69f322de34bbfe04
 2010-07-18T15:49:24.341728Z
 3849
@@ -137,9 +118,6 @@
 
 208
 
-extra
-dir
-
 db
 dir
 
@@ -167,11 +145,11 @@
 
 
 
-2010-08-12T15:03:25.000000Z
-201a803b90bbd2a1624c4ce1dd260098
-2010-06-09T22:01:21.132822Z
-3768
-edavis10
+2011-03-03T11:40:18.000000Z
+84dbba0b6ddcd80d28c62a3f8e344bc4
+2011-02-15T11:04:52.942730Z
+4834
+tmaruyama
 
 
 
@@ -193,7 +171,7 @@
 
 
 
-322
+477
 
 lib
 dir
--- a/.svn/text-base/.gitignore.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/.svn/text-base/.gitignore.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,4 +1,7 @@
+/.project
+/.loadpath
 /config/additional_environment.rb
+/config/configuration.yml
 /config/database.yml
 /config/email.yml
 /config/initializers/session_store.rb
@@ -7,6 +10,8 @@
 /db/*.sqlite3
 /db/schema.rb
 /files/*
+/lib/redmine/scm/adapters/mercurial/redminehelper.pyc
+/lib/redmine/scm/adapters/mercurial/redminehelper.pyo
 /log/*.log*
 /log/mongrel_debug
 /public/dispatch.*
--- a/.svn/text-base/.hgignore.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/.svn/text-base/.hgignore.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,6 +1,9 @@
 syntax: glob
 
+.project
+.loadpath
 config/additional_environment.rb
+config/configuration.yml
 config/database.yml
 config/email.yml
 config/initializers/session_store.rb
@@ -9,6 +12,8 @@
 db/*.sqlite3
 db/schema.rb
 files/*
+lib/redmine/scm/adapters/mercurial/redminehelper.pyc
+lib/redmine/scm/adapters/mercurial/redminehelper.pyo
 log/*.log*
 log/mongrel_debug
 public/dispatch.*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.svn/tmp/.hgignore.tmp	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,26 @@
+syntax: glob
+
+.project
+.loadpath
+config/additional_environment.rb
+config/configuration.yml
+config/database.yml
+config/email.yml
+config/initializers/session_store.rb
+coverage
+db/*.db
+db/*.sqlite3
+db/schema.rb
+files/*
+lib/redmine/scm/adapters/mercurial/redminehelper.pyc
+lib/redmine/scm/adapters/mercurial/redminehelper.pyo
+log/*.log*
+log/mongrel_debug
+public/dispatch.*
+public/plugin_assets
+tmp/cache/*
+tmp/sessions/*
+tmp/sockets/*
+tmp/test/*
+vendor/rails
+*.rbc
--- a/app/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
-V 42
-/svn/!svn/ver/4731/trunk/app
+V 28
+/svn/!svn/ver/4990/trunk/app
 END
--- a/app/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app
+4993
+http://redmine.rubyforge.org/svn/trunk/app
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-16T16:36:58.753919Z
-4731
-jplang
+2011-03-03T03:30:10.954225Z
+4990
+tmaruyama
 
 
 
--- a/app/controllers/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/controllers/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 40
-/svn/!svn/ver/4729/trunk/app/controllers
+/svn/!svn/ver/4954/trunk/app/controllers
 END
 issues_controller.rb
 K 25
 svn:wc:ra_dav:version-url
 V 61
-/svn/!svn/ver/4652/trunk/app/controllers/issues_controller.rb
+/svn/!svn/ver/4741/trunk/app/controllers/issues_controller.rb
 END
 queries_controller.rb
 K 25
@@ -57,29 +57,23 @@
 V 62
 /svn/!svn/ver/3784/trunk/app/controllers/members_controller.rb
 END
+context_menus_controller.rb
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/4580/trunk/app/controllers/context_menus_controller.rb
+END
 welcome_controller.rb
 K 25
 svn:wc:ra_dav:version-url
 V 62
 /svn/!svn/ver/2941/trunk/app/controllers/welcome_controller.rb
 END
-context_menus_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4580/trunk/app/controllers/context_menus_controller.rb
-END
 journals_controller.rb
 K 25
 svn:wc:ra_dav:version-url
 V 63
-/svn/!svn/ver/4535/trunk/app/controllers/journals_controller.rb
-END
-workflows_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/3536/trunk/app/controllers/workflows_controller.rb
+/svn/!svn/ver/4954/trunk/app/controllers/journals_controller.rb
 END
 time_entry_reports_controller.rb
 K 25
@@ -87,6 +81,12 @@
 V 73
 /svn/!svn/ver/4232/trunk/app/controllers/time_entry_reports_controller.rb
 END
+workflows_controller.rb
+K 25
+svn:wc:ra_dav:version-url
+V 64
+/svn/!svn/ver/4895/trunk/app/controllers/workflows_controller.rb
+END
 reports_controller.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -105,18 +105,18 @@
 V 68
 /svn/!svn/ver/3627/trunk/app/controllers/custom_fields_controller.rb
 END
+settings_controller.rb
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/4432/trunk/app/controllers/settings_controller.rb
+END
 timelog_controller.rb
 K 25
 svn:wc:ra_dav:version-url
 V 62
 /svn/!svn/ver/4511/trunk/app/controllers/timelog_controller.rb
 END
-settings_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/4432/trunk/app/controllers/settings_controller.rb
-END
 issue_moves_controller.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -147,18 +147,18 @@
 V 63
 /svn/!svn/ver/4174/trunk/app/controllers/previews_controller.rb
 END
+ldap_auth_sources_controller.rb
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/3744/trunk/app/controllers/ldap_auth_sources_controller.rb
+END
 auth_sources_controller.rb
 K 25
 svn:wc:ra_dav:version-url
 V 67
 /svn/!svn/ver/3744/trunk/app/controllers/auth_sources_controller.rb
 END
-ldap_auth_sources_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/3744/trunk/app/controllers/ldap_auth_sources_controller.rb
-END
 search_controller.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -171,18 +171,18 @@
 V 63
 /svn/!svn/ver/3528/trunk/app/controllers/messages_controller.rb
 END
+issue_relations_controller.rb
+K 25
+svn:wc:ra_dav:version-url
+V 70
+/svn/!svn/ver/4764/trunk/app/controllers/issue_relations_controller.rb
+END
 versions_controller.rb
 K 25
 svn:wc:ra_dav:version-url
 V 63
 /svn/!svn/ver/4354/trunk/app/controllers/versions_controller.rb
 END
-issue_relations_controller.rb
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/3591/trunk/app/controllers/issue_relations_controller.rb
-END
 boards_controller.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -235,7 +235,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 67
-/svn/!svn/ver/4711/trunk/app/controllers/repositories_controller.rb
+/svn/!svn/ver/4860/trunk/app/controllers/repositories_controller.rb
 END
 admin_controller.rb
 K 25
@@ -253,7 +253,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 62
-/svn/!svn/ver/3906/trunk/app/controllers/account_controller.rb
+/svn/!svn/ver/4757/trunk/app/controllers/account_controller.rb
 END
 calendars_controller.rb
 K 25
--- a/app/controllers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/controllers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/controllers
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-16T15:23:11.666065Z
-4729
+2011-02-27T13:34:41.060565Z
+4954
 jplang
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-01-13T14:09:10.000000Z
-2166617cc44ef66371dcac04c09755c2
-2011-01-08T00:19:51.192586Z
-4652
-tmaruyama
+2011-03-03T11:05:10.000000Z
+b2f39d4816a34c8fdbe451324ff298e4
+2011-01-22T13:28:20.816262Z
+4741
+jplang
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-12149
+12253
 
 queries_controller.rb
 file
@@ -66,7 +66,7 @@
 
 
 
-2010-09-23T14:37:44.399747Z
+2011-03-03T11:05:10.000000Z
 7ad6758cfd160c4b6ef6d71be06e087c
 2010-04-19T15:08:28.751734Z
 3684
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:44.399747Z
+2011-03-03T11:05:10.000000Z
 7a73aba15fcd447531d1552de01706d9
 2009-12-20T09:44:28.044710Z
 3201
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:44.395735Z
+2011-03-03T11:05:10.000000Z
 612f3e7497e14c728934e83fbe5778c4
 2009-12-20T09:45:04.782778Z
 3202
@@ -168,7 +168,7 @@
 
 
 
-2010-09-23T14:37:44.399747Z
+2011-03-03T11:05:10.000000Z
 3ee494bd8196306eab8913bd462b44da
 2010-06-20T16:08:15.578906Z
 3798
@@ -202,7 +202,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:10.000000Z
 edbdb443ff7cc8f299f7772b3532eca1
 2010-12-12T16:06:43.892596Z
 4503
@@ -236,7 +236,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:10.000000Z
 40ea055e0f9f9aa83680751fdab5a0a5
 2010-12-12T14:25:23.262992Z
 4497
@@ -270,7 +270,7 @@
 
 
 
-2010-09-24T12:48:26.271687Z
+2011-03-03T11:05:10.000000Z
 c2289eb9b654117a101c072955d4c705
 2010-09-23T15:20:19.085385Z
 4172
@@ -304,7 +304,7 @@
 
 
 
-2010-09-23T14:37:44.395735Z
+2011-03-03T11:05:10.000000Z
 20e245fa61dc0dcb2f105a8f0e6af98c
 2010-06-19T19:51:43.174421Z
 3784
@@ -332,13 +332,47 @@
 
 3447
 
+context_menus_controller.rb
+file
+
+
+
+
+2011-03-03T11:05:10.000000Z
+596c3ab10f8cf4687f6d8b163e7a2243
+2010-12-29T19:55:52.079810Z
+4580
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1847
+
 welcome_controller.rb
 file
 
 
 
 
-2010-09-23T14:37:44.403745Z
+2011-03-03T11:05:10.000000Z
 95ad1acf7766861a4dbd0aebd9c847de
 2009-10-21T03:21:31.657956Z
 2941
@@ -366,50 +400,16 @@
 
 1091
 
-context_menus_controller.rb
-file
-
-
-
-
-2011-01-13T14:09:10.000000Z
-596c3ab10f8cf4687f6d8b163e7a2243
-2010-12-29T19:55:52.079810Z
-4580
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1847
-
 journals_controller.rb
 file
 
 
 
 
-2011-01-13T14:09:10.000000Z
-bec68711fe4573cf428799354ea68f5d
-2010-12-18T17:11:41.680297Z
-4535
+2011-03-03T11:40:18.000000Z
+0610cb98929633e94c97f1060f4f1566
+2011-02-27T13:34:41.060565Z
+4954
 jplang
 has-props
 
@@ -432,41 +432,7 @@
 
 
 
-3490
-
-workflows_controller.rb
-file
-
-
-
-
-2010-09-23T14:37:44.403745Z
-5052c701a12ad27e88950dd4a745b0f8
-2010-03-04T05:33:45.236699Z
-3536
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3346
+4081
 
 time_entry_reports_controller.rb
 file
@@ -474,7 +440,7 @@
 
 
 
-2010-11-19T13:04:46.996826Z
+2011-03-03T11:05:10.000000Z
 dadcb57d89dc3c90c5fa099b143c07f8
 2010-10-05T16:07:17.015270Z
 4232
@@ -502,13 +468,47 @@
 
 9308
 
+workflows_controller.rb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+73cdba17212ad890eea7b7c7ee140d7e
+2011-02-20T15:38:07.840581Z
+4895
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4041
+
 reports_controller.rb
 file
 
 
 
 
-2010-09-23T14:37:44.399747Z
+2011-03-03T11:05:10.000000Z
 8f7e6e7308912a6169a700b0c88174a0
 2010-04-27T16:43:52.584075Z
 3692
@@ -542,7 +542,7 @@
 
 
 
-2010-09-24T12:48:26.271687Z
+2011-03-03T11:05:10.000000Z
 828b364ba2850ceddb3caa566bf10124
 2010-09-10T16:00:49.687515Z
 4075
@@ -570,13 +570,47 @@
 
 856
 
+custom_fields_controller.rb
+file
+
+
+
+
+2011-03-03T11:05:10.000000Z
+00272455ac5be11da48f92c4a443c538
+2010-04-03T11:54:24.331654Z
+3627
+winterheart
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2373
+
 settings_controller.rb
 file
 
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:10.000000Z
 98c4c9f33f038160a44752d229926c32
 2010-11-27T14:06:11.754120Z
 4432
@@ -604,47 +638,13 @@
 
 2271
 
-custom_fields_controller.rb
-file
-
-
-
-
-2010-09-23T14:37:44.391741Z
-00272455ac5be11da48f92c4a443c538
-2010-04-03T11:54:24.331654Z
-3627
-winterheart
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2373
-
 timelog_controller.rb
 file
 
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:10.000000Z
 3e6698f208a263105c7b4a59c60b26b3
 2010-12-14T18:29:24.891563Z
 4511
@@ -672,13 +672,47 @@
 
 10484
 
+issue_moves_controller.rb
+file
+
+
+
+
+2011-03-03T11:05:10.000000Z
+cacd6ffe0ce299e2ede9d45b7ef8af42
+2010-10-25T18:44:46.868009Z
+4292
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2441
+
 users_controller.rb
 file
 
 
 
 
-2011-01-19T15:03:32.000000Z
+2011-03-03T11:05:10.000000Z
 7860374d98cda03916d9b06d9ec8d370
 2011-01-16T15:23:11.666065Z
 4729
@@ -706,47 +740,13 @@
 
 8474
 
-issue_moves_controller.rb
-file
-
-
-
-
-2010-11-19T13:04:47.000764Z
-cacd6ffe0ce299e2ede9d45b7ef8af42
-2010-10-25T18:44:46.868009Z
-4292
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2441
-
 files_controller.rb
 file
 
 
 
 
-2010-11-19T13:04:47.000764Z
+2011-03-03T11:05:10.000000Z
 f0246e8f8dde5ea7b93e4dc2162181fc
 2010-09-26T08:07:41.604064Z
 4177
@@ -780,7 +780,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:10.000000Z
 218c497f1c4c6d7b41cdac214e595156
 2010-12-23T14:49:14.339855Z
 4573
@@ -808,13 +808,47 @@
 
 15545
 
+previews_controller.rb
+file
+
+
+
+
+2011-03-03T11:05:10.000000Z
+c5ae4fae18159e70fd81c2487bb1daa1
+2010-09-24T16:26:46.819682Z
+4174
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+957
+
 ldap_auth_sources_controller.rb
 file
 
 
 
 
-2010-09-23T14:37:44.395735Z
+2011-03-03T11:05:10.000000Z
 5f7b9cb2e9c8a60db58ea0833cf481c5
 2010-05-23T03:16:31.304135Z
 3744
@@ -848,7 +882,7 @@
 
 
 
-2010-09-23T14:37:44.391741Z
+2011-03-03T11:05:10.000000Z
 237280766d09418161536250d514a7bf
 2010-05-23T03:16:31.304135Z
 3744
@@ -876,47 +910,13 @@
 
 2542
 
-previews_controller.rb
-file
-
-
-
-
-2010-11-19T13:04:47.000764Z
-c5ae4fae18159e70fd81c2487bb1daa1
-2010-09-24T16:26:46.819682Z
-4174
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-957
-
 search_controller.rb
 file
 
 
 
 
-2010-09-23T14:37:44.399747Z
+2011-03-03T11:05:10.000000Z
 0015154998f830227b636ee423f007f3
 2010-06-20T20:01:32.722003Z
 3806
@@ -950,7 +950,7 @@
 
 
 
-2010-09-23T14:37:44.395735Z
+2011-03-03T11:05:10.000000Z
 f3f4378ec15e1401ead0dcac4e9cb059
 2010-03-03T17:05:00.967826Z
 3528
@@ -984,11 +984,11 @@
 
 
 
-2010-09-23T14:37:44.395735Z
-c57448661f2eaab81c76f23d7f51e0ab
-2010-03-16T15:17:47.586688Z
-3591
-edavis10
+2011-03-03T11:05:10.000000Z
+8c5249f85056c74e0ab06b5dfa9fed72
+2011-01-27T21:38:47.430923Z
+4764
+jplang
 has-props
 
 
@@ -1010,7 +1010,7 @@
 
 
 
-2220
+2450
 
 versions_controller.rb
 file
@@ -1018,7 +1018,7 @@
 
 
 
-2010-11-19T13:04:47.000764Z
+2011-03-03T11:05:10.000000Z
 a98fb262a20669600a85c0f72202c5e6
 2010-11-01T13:13:32.982466Z
 4354
@@ -1052,7 +1052,7 @@
 
 
 
-2010-09-23T14:37:44.391741Z
+2011-03-03T11:05:10.000000Z
 52638c82da929081099076d5aa0f9212
 2010-08-16T23:39:27.396462Z
 3942
@@ -1086,7 +1086,7 @@
 
 
 
-2010-09-23T14:37:44.391741Z
+2011-03-03T11:05:10.000000Z
 21c0e5d894d1429ac39f3253ae021594
 2010-01-05T18:16:03.565347Z
 3281
@@ -1120,7 +1120,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:10.000000Z
 cb358f888a6a92cc99bef83af92cd766
 2010-12-12T17:00:52.100205Z
 4505
@@ -1154,7 +1154,7 @@
 
 
 
-2010-09-23T14:37:44.399747Z
+2011-03-03T11:05:10.000000Z
 a5e793eb94e501be4c1a39acc65cc568
 2010-04-03T11:54:24.331654Z
 3627
@@ -1188,7 +1188,7 @@
 
 
 
-2010-09-23T14:37:44.395735Z
+2011-03-03T11:05:10.000000Z
 77209ec52ddcefafb0bfbb76195167ec
 2010-08-10T22:37:00.826946Z
 3934
@@ -1222,7 +1222,7 @@
 
 
 
-2010-09-23T14:37:44.395735Z
+2011-03-03T11:05:10.000000Z
 f0fdda9126d71c0b2d4638de50ab1097
 2010-02-12T19:15:39.389877Z
 3416
@@ -1256,7 +1256,7 @@
 
 
 
-2010-09-23T14:37:44.399747Z
+2011-03-03T11:05:10.000000Z
 28f2e44219870c62c9844354b78af6e1
 2010-04-03T11:54:24.331654Z
 3627
@@ -1290,7 +1290,7 @@
 
 
 
-2010-09-23T14:37:44.403745Z
+2011-03-03T11:05:10.000000Z
 7ae79a9d22586240a01af73834b718a3
 2010-02-05T16:57:02.094258Z
 3370
@@ -1324,11 +1324,11 @@
 
 
 
-2011-01-19T15:03:32.000000Z
-9c3c92ca908cc2101e23ecbbc6f723c0
-2011-01-14T20:24:03.783512Z
-4711
-jplang
+2011-03-03T11:40:18.000000Z
+5511ecf5c7190efe44398994a222b486
+2011-02-17T14:17:04.791825Z
+4860
+tmaruyama
 has-props
 
 
@@ -1350,7 +1350,7 @@
 
 
 
-11263
+11539
 
 admin_controller.rb
 file
@@ -1358,7 +1358,7 @@
 
 
 
-2010-09-23T14:37:44.391741Z
+2011-03-03T11:05:10.000000Z
 ed65a11326fe54914ba3a750a2b6f943
 2009-12-19T20:33:24.113306Z
 3200
@@ -1392,7 +1392,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:10.000000Z
 c07d79c1bd100dd8972ea408c4fe549f
 2011-01-06T20:57:17.003359Z
 4647
@@ -1426,11 +1426,11 @@
 
 
 
-2010-09-23T14:37:44.391741Z
-d0ff6be1c749b765d9d64bef64c27537
-2010-08-03T15:26:50.842290Z
-3906
-edavis10
+2011-03-03T11:05:10.000000Z
+7b162cad903bb22948f7040a48509256
+2011-01-23T11:40:07.678287Z
+4757
+jplang
 has-props
 
 
@@ -1452,7 +1452,7 @@
 
 
 
-8962
+9350
 
 calendars_controller.rb
 file
@@ -1460,7 +1460,7 @@
 
 
 
-2010-11-19T13:04:47.000764Z
+2011-03-03T11:05:10.000000Z
 0be20cab6d5ea49f428a90cf3afef3e3
 2010-11-07T22:38:10.728638Z
 4388
@@ -1494,7 +1494,7 @@
 
 
 
-2010-09-23T14:37:44.395735Z
+2011-03-03T11:05:10.000000Z
 119ceb4a27aa554d03867f46cb142d0e
 2010-03-17T15:41:58.766740Z
 3597
@@ -1528,7 +1528,7 @@
 
 
 
-2010-11-19T13:04:47.000764Z
+2011-03-03T11:05:10.000000Z
 81dbee1745da99b9ea499f3fbe1d3944
 2010-11-07T22:38:10.728638Z
 4388
@@ -1562,7 +1562,7 @@
 
 
 
-2010-09-23T14:37:44.391741Z
+2011-03-03T11:05:10.000000Z
 c2c68bf5fa3ed22a8f55c8414d1efce9
 2010-03-17T15:41:58.766740Z
 3597
@@ -1596,7 +1596,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:10.000000Z
 ccc57886f63cb0efb0149b601dd2ac43
 2010-11-27T10:34:44.408431Z
 4429
@@ -1630,7 +1630,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:10.000000Z
 ad33818a03b408419be4e616e8c88b5c
 2010-12-29T19:37:42.740543Z
 4579
@@ -1664,7 +1664,7 @@
 
 
 
-2010-09-23T14:37:44.391741Z
+2011-03-03T11:05:10.000000Z
 1caaedc7bb0a3085878dc94446c70ab0
 2010-03-02T20:03:09.514061Z
 3524
--- a/app/controllers/.svn/text-base/account_controller.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/controllers/.svn/text-base/account_controller.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -203,12 +203,24 @@
     self.logged_user = user
     # generate a key and set cookie if autologin
     if params[:autologin] && Setting.autologin?
-      token = Token.create(:user => user, :action => 'autologin')
-      cookies[:autologin] = { :value => token.value, :expires => 1.year.from_now }
+      set_autologin_cookie(user)
     end
     call_hook(:controller_account_success_authentication_after, {:user => user })
     redirect_back_or_default :controller => 'my', :action => 'page'
   end
+  
+  def set_autologin_cookie(user)
+    token = Token.create(:user => user, :action => 'autologin')
+    cookie_name = Redmine::Configuration['autologin_cookie_name'] || 'autologin'
+    cookie_options = {
+      :value => token.value,
+      :expires => 1.year.from_now,
+      :path => (Redmine::Configuration['autologin_cookie_path'] || '/'),
+      :secure => (Redmine::Configuration['autologin_cookie_secure'] ? true : false),
+      :httponly => true
+    }
+    cookies[cookie_name] = cookie_options
+  end
 
   # Onthefly creation failed, display the registration form to fill/fix attributes
   def onthefly_creation_failed(user, auth_source_options = { })
--- a/app/controllers/.svn/text-base/issue_relations_controller.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/controllers/.svn/text-base/issue_relations_controller.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -28,6 +28,7 @@
     respond_to do |format|
       format.html { redirect_to :controller => 'issues', :action => 'show', :id => @issue }
       format.js do
+        @relations = @issue.relations.select {|r| r.other_issue(@issue) && r.other_issue(@issue).visible? }
         render :update do |page|
           page.replace_html "relations", :partial => 'issues/relations'
           if @relation.errors.empty?
@@ -47,7 +48,10 @@
     end
     respond_to do |format|
       format.html { redirect_to :controller => 'issues', :action => 'show', :id => @issue }
-      format.js { render(:update) {|page| page.replace_html "relations", :partial => 'issues/relations'} }
+      format.js {
+        @relations = @issue.relations.select {|r| r.other_issue(@issue) && r.other_issue(@issue).visible? }
+        render(:update) {|page| page.replace_html "relations", :partial => 'issues/relations'}
+      }
     end
   end
   
--- a/app/controllers/.svn/text-base/issues_controller.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/controllers/.svn/text-base/issues_controller.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -108,6 +108,7 @@
     @journals.reverse! if User.current.wants_comments_in_reverse_order?
     @changesets = @issue.changesets.visible.all
     @changesets.reverse! if User.current.wants_comments_in_reverse_order?
+    @relations = @issue.relations.select {|r| r.other_issue(@issue) && r.other_issue(@issue).visible? }
     @allowed_statuses = @issue.new_statuses_allowed_to(User.current)
     @edit_allowed = User.current.allowed_to?(:edit_issues, @project)
     @priorities = IssuePriority.all
--- a/app/controllers/.svn/text-base/journals_controller.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/controllers/.svn/text-base/journals_controller.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -16,12 +16,13 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 class JournalsController < ApplicationController
-  before_filter :find_journal, :only => [:edit]
+  before_filter :find_journal, :only => [:edit, :diff]
   before_filter :find_issue, :only => [:new]
   before_filter :find_optional_project, :only => [:index]
-  before_filter :authorize, :only => [:new, :edit]
+  before_filter :authorize, :only => [:new, :edit, :diff]
   accept_key_auth :index
-
+  menu_item :issues
+  
   helper :issues
   helper :queries
   include QueriesHelper
@@ -43,6 +44,17 @@
     render_404
   end
   
+  def diff
+    @issue = @journal.issue
+    if params[:detail_id].present?
+      @detail = @journal.details.find_by_id(params[:detail_id])
+    else
+      @detail = @journal.details.detect {|d| d.prop_key == 'description'}
+    end
+    (render_404; return false) unless @issue && @detail
+    @diff = Redmine::Helpers::Diff.new(@detail.value, @detail.old_value)
+  end
+  
   def new
     journal = Journal.find(params[:journal_id]) if params[:journal_id]
     if journal
@@ -67,6 +79,7 @@
   end
   
   def edit
+    (render_403; return false) unless @journal.editable_by?(User.current)
     if request.post?
       @journal.update_attributes(:notes => params[:notes]) if params[:notes]
       @journal.destroy if @journal.details.empty? && @journal.notes.blank?
@@ -75,13 +88,21 @@
         format.html { redirect_to :controller => 'issues', :action => 'show', :id => @journal.journalized_id }
         format.js { render :action => 'update' }
       end
+    else
+      respond_to do |format|
+        format.html {
+          # TODO: implement non-JS journal update
+          render :nothing => true 
+        }
+        format.js
+      end
     end
   end
   
-private
+  private
+  
   def find_journal
     @journal = Journal.find(params[:id])
-    (render_403; return false) unless @journal.editable_by?(User.current)
     @project = @journal.journalized.project
   rescue ActiveRecord::RecordNotFound
     render_404
--- a/app/controllers/.svn/text-base/repositories_controller.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/controllers/.svn/text-base/repositories_controller.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -67,13 +67,13 @@
       redirect_to :action => 'committers', :id => @project
     end
   end
-  
+
   def destroy
     @repository.destroy
     redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'repository'
   end
-  
-  def show 
+
+  def show
     @repository.fetch_changesets if Setting.autofetch_changesets? && @path.empty?
 
     @entries = @repository.entries(@path, @rev)
@@ -88,30 +88,31 @@
   end
 
   alias_method :browse, :show
-  
+
   def changes
     @entry = @repository.entry(@path, @rev)
     (show_error_not_found; return) unless @entry
     @changesets = @repository.latest_changesets(@path, @rev, Setting.repository_log_display_limit.to_i)
     @properties = @repository.properties(@path, @rev)
+    @changeset = @repository.find_changeset_by_name(@rev)
   end
-  
+
   def revisions
     @changeset_count = @repository.changesets.count
     @changeset_pages = Paginator.new self, @changeset_count,
-								      per_page_option,
-								      params['page']								
+                                     per_page_option,
+                                     params['page']
     @changesets = @repository.changesets.find(:all,
-						:limit  =>  @changeset_pages.items_per_page,
-						:offset =>  @changeset_pages.current.offset,
-            :include => [:user, :repository])
+                       :limit  =>  @changeset_pages.items_per_page,
+                       :offset =>  @changeset_pages.current.offset,
+                       :include => [:user, :repository])
 
     respond_to do |format|
       format.html { render :layout => false if request.xhr? }
       format.atom { render_feed(@changesets, :title => "#{@project.name}: #{l(:label_revision_plural)}") }
     end
   end
-  
+
   def entry
     @entry = @repository.entry(@path, @rev)
     (show_error_not_found; return) unless @entry
@@ -121,23 +122,26 @@
 
     @content = @repository.cat(@path, @rev)
     (show_error_not_found; return) unless @content
-    if 'raw' == params[:format] || @content.is_binary_data? || (@entry.size && @entry.size > Setting.file_max_size_displayed.to_i.kilobyte)
+    if 'raw' == params[:format] || @content.is_binary_data? ||
+         (@entry.size && @entry.size > Setting.file_max_size_displayed.to_i.kilobyte)
       # Force the download
-      send_data @content, :filename => @path.split('/').last
+      send_data @content, :filename => filename_for_content_disposition(@path.split('/').last)
     else
       # Prevent empty lines when displaying a file with Windows style eol
       @content.gsub!("\r\n", "\n")
+      @changeset = @repository.find_changeset_by_name(@rev)
    end
   end
-  
+
   def annotate
     @entry = @repository.entry(@path, @rev)
     (show_error_not_found; return) unless @entry
-    
+
     @annotate = @repository.scm.annotate(@path, @rev)
     (render_error l(:error_scm_annotate); return) if @annotate.nil? || @annotate.empty?
+    @changeset = @repository.find_changeset_by_name(@rev)
   end
-  
+
   def revision
     raise ChangesetNotFound if @rev.blank?
     @changeset = @repository.find_changeset_by_name(@rev)
@@ -150,7 +154,7 @@
   rescue ChangesetNotFound
     show_error_not_found
   end
-  
+
   def diff
     if params[:format] == 'diff'
       @diff = @repository.diff(@path, @rev, @rev_to)
@@ -182,11 +186,11 @@
     end
   end
 
-  def stats  
+  def stats
   end
-  
+
   def graph
-    data = nil    
+    data = nil
     case params[:graph]
     when "commits_per_month"
       data = graph_commits_per_month(@repository)
@@ -214,7 +218,7 @@
     @rev = params[:rev].blank? ? @repository.default_branch : params[:rev].strip
     @rev_to = params[:rev_to]
     
-    unless @rev.to_s.match(REV_PARAM_RE) && @rev.to_s.match(REV_PARAM_RE)
+    unless @rev.to_s.match(REV_PARAM_RE) && @rev_to.to_s.match(REV_PARAM_RE)
       if @repository.branches.blank?
         raise InvalidRevisionParam
       end
--- a/app/controllers/.svn/text-base/workflows_controller.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/controllers/.svn/text-base/workflows_controller.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -32,14 +32,17 @@
     
     if request.post?
       Workflow.destroy_all( ["role_id=? and tracker_id=?", @role.id, @tracker.id])
-      (params[:issue_status] || []).each { |old, news| 
-        news.each { |new| 
-          @role.workflows.build(:tracker_id => @tracker.id, :old_status_id => old, :new_status_id => new) 
+      (params[:issue_status] || []).each { |status_id, transitions|
+        transitions.each { |new_status_id, options|
+          author = options.is_a?(Array) && options.include?('author') && !options.include?('always')
+          assignee = options.is_a?(Array) && options.include?('assignee') && !options.include?('always')
+          @role.workflows.build(:tracker_id => @tracker.id, :old_status_id => status_id, :new_status_id => new_status_id, :author => author, :assignee => assignee) 
         }
       }
       if @role.save
         flash[:notice] = l(:notice_successful_update)
         redirect_to :action => 'edit', :role_id => @role, :tracker_id => @tracker
+        return
       end
     end
     
@@ -48,6 +51,14 @@
       @statuses = @tracker.issue_statuses
     end
     @statuses ||= IssueStatus.find(:all, :order => 'position')
+    
+    if @tracker && @role && @statuses.any?
+      workflows = Workflow.all(:conditions => {:role_id => @role.id, :tracker_id => @tracker.id})
+      @workflows = {}
+      @workflows['always'] = workflows.select {|w| !w.author && !w.assignee}
+      @workflows['author'] = workflows.select {|w| w.author}
+      @workflows['assignee'] = workflows.select {|w| w.assignee}
+    end
   end
   
   def copy
--- a/app/controllers/account_controller.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/controllers/account_controller.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -214,12 +214,24 @@
     self.logged_user = user
     # generate a key and set cookie if autologin
     if params[:autologin] && Setting.autologin?
-      token = Token.create(:user => user, :action => 'autologin')
-      cookies[:autologin] = { :value => token.value, :expires => 1.year.from_now }
+      set_autologin_cookie(user)
     end
     call_hook(:controller_account_success_authentication_after, {:user => user })
     redirect_back_or_default :controller => 'my', :action => 'page'
   end
+  
+  def set_autologin_cookie(user)
+    token = Token.create(:user => user, :action => 'autologin')
+    cookie_name = Redmine::Configuration['autologin_cookie_name'] || 'autologin'
+    cookie_options = {
+      :value => token.value,
+      :expires => 1.year.from_now,
+      :path => (Redmine::Configuration['autologin_cookie_path'] || '/'),
+      :secure => (Redmine::Configuration['autologin_cookie_secure'] ? true : false),
+      :httponly => true
+    }
+    cookies[cookie_name] = cookie_options
+  end
 
   # Onthefly creation failed, display the registration form to fill/fix attributes
   def onthefly_creation_failed(user, auth_source_options = { })
--- a/app/controllers/issue_relations_controller.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/controllers/issue_relations_controller.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -28,6 +28,7 @@
     respond_to do |format|
       format.html { redirect_to :controller => 'issues', :action => 'show', :id => @issue }
       format.js do
+        @relations = @issue.relations.select {|r| r.other_issue(@issue) && r.other_issue(@issue).visible? }
         render :update do |page|
           page.replace_html "relations", :partial => 'issues/relations'
           if @relation.errors.empty?
@@ -47,7 +48,10 @@
     end
     respond_to do |format|
       format.html { redirect_to :controller => 'issues', :action => 'show', :id => @issue }
-      format.js { render(:update) {|page| page.replace_html "relations", :partial => 'issues/relations'} }
+      format.js {
+        @relations = @issue.relations.select {|r| r.other_issue(@issue) && r.other_issue(@issue).visible? }
+        render(:update) {|page| page.replace_html "relations", :partial => 'issues/relations'}
+      }
     end
   end
   
--- a/app/controllers/issues_controller.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/controllers/issues_controller.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -108,6 +108,7 @@
     @journals.reverse! if User.current.wants_comments_in_reverse_order?
     @changesets = @issue.changesets.visible.all
     @changesets.reverse! if User.current.wants_comments_in_reverse_order?
+    @relations = @issue.relations.select {|r| r.other_issue(@issue) && r.other_issue(@issue).visible? }
     @allowed_statuses = @issue.new_statuses_allowed_to(User.current)
     @edit_allowed = User.current.allowed_to?(:edit_issues, @project)
     @priorities = IssuePriority.all
--- a/app/controllers/journals_controller.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/controllers/journals_controller.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -16,12 +16,13 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 class JournalsController < ApplicationController
-  before_filter :find_journal, :only => [:edit]
+  before_filter :find_journal, :only => [:edit, :diff]
   before_filter :find_issue, :only => [:new]
   before_filter :find_optional_project, :only => [:index]
-  before_filter :authorize, :only => [:new, :edit]
+  before_filter :authorize, :only => [:new, :edit, :diff]
   accept_key_auth :index
-
+  menu_item :issues
+  
   helper :issues
   helper :queries
   include QueriesHelper
@@ -43,6 +44,17 @@
     render_404
   end
   
+  def diff
+    @issue = @journal.issue
+    if params[:detail_id].present?
+      @detail = @journal.details.find_by_id(params[:detail_id])
+    else
+      @detail = @journal.details.detect {|d| d.prop_key == 'description'}
+    end
+    (render_404; return false) unless @issue && @detail
+    @diff = Redmine::Helpers::Diff.new(@detail.value, @detail.old_value)
+  end
+  
   def new
     journal = Journal.find(params[:journal_id]) if params[:journal_id]
     if journal
@@ -67,6 +79,7 @@
   end
   
   def edit
+    (render_403; return false) unless @journal.editable_by?(User.current)
     if request.post?
       @journal.update_attributes(:notes => params[:notes]) if params[:notes]
       @journal.destroy if @journal.details.empty? && @journal.notes.blank?
@@ -75,13 +88,21 @@
         format.html { redirect_to :controller => 'issues', :action => 'show', :id => @journal.journalized_id }
         format.js { render :action => 'update' }
       end
+    else
+      respond_to do |format|
+        format.html {
+          # TODO: implement non-JS journal update
+          render :nothing => true 
+        }
+        format.js
+      end
     end
   end
   
-private
+  private
+  
   def find_journal
     @journal = Journal.find(params[:id])
-    (render_403; return false) unless @journal.editable_by?(User.current)
     @project = @journal.journalized.project
   rescue ActiveRecord::RecordNotFound
     render_404
--- a/app/controllers/repositories_controller.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/controllers/repositories_controller.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -67,13 +67,13 @@
       redirect_to :action => 'committers', :id => @project
     end
   end
-  
+
   def destroy
     @repository.destroy
     redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'repository'
   end
-  
-  def show 
+
+  def show
     @repository.fetch_changesets if Setting.autofetch_changesets? && @path.empty?
 
     @entries = @repository.entries(@path, @rev)
@@ -88,30 +88,31 @@
   end
 
   alias_method :browse, :show
-  
+
   def changes
     @entry = @repository.entry(@path, @rev)
     (show_error_not_found; return) unless @entry
     @changesets = @repository.latest_changesets(@path, @rev, Setting.repository_log_display_limit.to_i)
     @properties = @repository.properties(@path, @rev)
+    @changeset = @repository.find_changeset_by_name(@rev)
   end
-  
+
   def revisions
     @changeset_count = @repository.changesets.count
     @changeset_pages = Paginator.new self, @changeset_count,
-								      per_page_option,
-								      params['page']								
+                                     per_page_option,
+                                     params['page']
     @changesets = @repository.changesets.find(:all,
-						:limit  =>  @changeset_pages.items_per_page,
-						:offset =>  @changeset_pages.current.offset,
-            :include => [:user, :repository])
+                       :limit  =>  @changeset_pages.items_per_page,
+                       :offset =>  @changeset_pages.current.offset,
+                       :include => [:user, :repository])
 
     respond_to do |format|
       format.html { render :layout => false if request.xhr? }
       format.atom { render_feed(@changesets, :title => "#{@project.name}: #{l(:label_revision_plural)}") }
     end
   end
-  
+
   def entry
     @entry = @repository.entry(@path, @rev)
     (show_error_not_found; return) unless @entry
@@ -121,23 +122,26 @@
 
     @content = @repository.cat(@path, @rev)
     (show_error_not_found; return) unless @content
-    if 'raw' == params[:format] || @content.is_binary_data? || (@entry.size && @entry.size > Setting.file_max_size_displayed.to_i.kilobyte)
+    if 'raw' == params[:format] || @content.is_binary_data? ||
+         (@entry.size && @entry.size > Setting.file_max_size_displayed.to_i.kilobyte)
       # Force the download
-      send_data @content, :filename => @path.split('/').last
+      send_data @content, :filename => filename_for_content_disposition(@path.split('/').last)
     else
       # Prevent empty lines when displaying a file with Windows style eol
       @content.gsub!("\r\n", "\n")
+      @changeset = @repository.find_changeset_by_name(@rev)
    end
   end
-  
+
   def annotate
     @entry = @repository.entry(@path, @rev)
     (show_error_not_found; return) unless @entry
-    
+
     @annotate = @repository.scm.annotate(@path, @rev)
     (render_error l(:error_scm_annotate); return) if @annotate.nil? || @annotate.empty?
+    @changeset = @repository.find_changeset_by_name(@rev)
   end
-  
+
   def revision
     raise ChangesetNotFound if @rev.blank?
     @changeset = @repository.find_changeset_by_name(@rev)
@@ -150,7 +154,7 @@
   rescue ChangesetNotFound
     show_error_not_found
   end
-  
+
   def diff
     if params[:format] == 'diff'
       @diff = @repository.diff(@path, @rev, @rev_to)
@@ -182,11 +186,11 @@
     end
   end
 
-  def stats  
+  def stats
   end
-  
+
   def graph
-    data = nil    
+    data = nil
     case params[:graph]
     when "commits_per_month"
       data = graph_commits_per_month(@repository)
@@ -214,7 +218,7 @@
     @rev = params[:rev].blank? ? @repository.default_branch : params[:rev].strip
     @rev_to = params[:rev_to]
     
-    unless @rev.to_s.match(REV_PARAM_RE) && @rev.to_s.match(REV_PARAM_RE)
+    unless @rev.to_s.match(REV_PARAM_RE) && @rev_to.to_s.match(REV_PARAM_RE)
       if @repository.branches.blank?
         raise InvalidRevisionParam
       end
--- a/app/controllers/workflows_controller.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/controllers/workflows_controller.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -32,14 +32,17 @@
     
     if request.post?
       Workflow.destroy_all( ["role_id=? and tracker_id=?", @role.id, @tracker.id])
-      (params[:issue_status] || []).each { |old, news| 
-        news.each { |new| 
-          @role.workflows.build(:tracker_id => @tracker.id, :old_status_id => old, :new_status_id => new) 
+      (params[:issue_status] || []).each { |status_id, transitions|
+        transitions.each { |new_status_id, options|
+          author = options.is_a?(Array) && options.include?('author') && !options.include?('always')
+          assignee = options.is_a?(Array) && options.include?('assignee') && !options.include?('always')
+          @role.workflows.build(:tracker_id => @tracker.id, :old_status_id => status_id, :new_status_id => new_status_id, :author => author, :assignee => assignee) 
         }
       }
       if @role.save
         flash[:notice] = l(:notice_successful_update)
         redirect_to :action => 'edit', :role_id => @role, :tracker_id => @tracker
+        return
       end
     end
     
@@ -48,6 +51,14 @@
       @statuses = @tracker.issue_statuses
     end
     @statuses ||= IssueStatus.find(:all, :order => 'position')
+    
+    if @tracker && @role && @statuses.any?
+      workflows = Workflow.all(:conditions => {:role_id => @role.id, :tracker_id => @tracker.id})
+      @workflows = {}
+      @workflows['always'] = workflows.select {|w| !w.author && !w.assignee}
+      @workflows['author'] = workflows.select {|w| w.author}
+      @workflows['assignee'] = workflows.select {|w| w.assignee}
+    end
   end
   
   def copy
--- a/app/helpers/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/helpers/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 36
-/svn/!svn/ver/4694/trunk/app/helpers
+/svn/!svn/ver/4990/trunk/app/helpers
 END
 trackers_helper.rb
 K 25
@@ -37,7 +37,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/4613/trunk/app/helpers/repositories_helper.rb
+/svn/!svn/ver/4990/trunk/app/helpers/repositories_helper.rb
 END
 admin_helper.rb
 K 25
@@ -79,7 +79,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/4375/trunk/app/helpers/wiki_helper.rb
+/svn/!svn/ver/4952/trunk/app/helpers/wiki_helper.rb
 END
 enumerations_helper.rb
 K 25
@@ -91,7 +91,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 53
-/svn/!svn/ver/4465/trunk/app/helpers/issues_helper.rb
+/svn/!svn/ver/4954/trunk/app/helpers/issues_helper.rb
+END
+queries_helper.rb
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/4387/trunk/app/helpers/queries_helper.rb
 END
 gantt_helper.rb
 K 25
@@ -99,12 +105,6 @@
 V 52
 /svn/!svn/ver/4283/trunk/app/helpers/gantt_helper.rb
 END
-queries_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/4387/trunk/app/helpers/queries_helper.rb
-END
 mail_handler_helper.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -135,29 +135,29 @@
 V 53
 /svn/!svn/ver/333/trunk/app/helpers/welcome_helper.rb
 END
+journals_helper.rb
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/!svn/ver/4062/trunk/app/helpers/journals_helper.rb
+END
 workflows_helper.rb
 K 25
 svn:wc:ra_dav:version-url
 V 56
 /svn/!svn/ver/1914/trunk/app/helpers/workflows_helper.rb
 END
-journals_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4062/trunk/app/helpers/journals_helper.rb
-END
 reports_helper.rb
 K 25
 svn:wc:ra_dav:version-url
 V 53
 /svn/!svn/ver/629/trunk/app/helpers/reports_helper.rb
 END
-custom_fields_helper.rb
+timelog_helper.rb
 K 25
 svn:wc:ra_dav:version-url
-V 60
-/svn/!svn/ver/4480/trunk/app/helpers/custom_fields_helper.rb
+V 54
+/svn/!svn/ver/3708/trunk/app/helpers/timelog_helper.rb
 END
 settings_helper.rb
 K 25
@@ -165,11 +165,17 @@
 V 55
 /svn/!svn/ver/4222/trunk/app/helpers/settings_helper.rb
 END
-timelog_helper.rb
+custom_fields_helper.rb
 K 25
 svn:wc:ra_dav:version-url
-V 54
-/svn/!svn/ver/3708/trunk/app/helpers/timelog_helper.rb
+V 60
+/svn/!svn/ver/4480/trunk/app/helpers/custom_fields_helper.rb
+END
+issue_moves_helper.rb
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/svn/!svn/ver/3936/trunk/app/helpers/issue_moves_helper.rb
 END
 users_helper.rb
 K 25
@@ -177,17 +183,11 @@
 V 52
 /svn/!svn/ver/4497/trunk/app/helpers/users_helper.rb
 END
-issue_moves_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 58
-/svn/!svn/ver/3936/trunk/app/helpers/issue_moves_helper.rb
-END
 application_helper.rb
 K 25
 svn:wc:ra_dav:version-url
 V 58
-/svn/!svn/ver/4694/trunk/app/helpers/application_helper.rb
+/svn/!svn/ver/4900/trunk/app/helpers/application_helper.rb
 END
 auth_sources_helper.rb
 K 25
@@ -205,7 +205,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 55
-/svn/!svn/ver/3373/trunk/app/helpers/messages_helper.rb
+/svn/!svn/ver/4760/trunk/app/helpers/messages_helper.rb
+END
+issue_relations_helper.rb
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/!svn/ver/506/trunk/app/helpers/issue_relations_helper.rb
 END
 versions_helper.rb
 K 25
@@ -213,12 +219,6 @@
 V 54
 /svn/!svn/ver/955/trunk/app/helpers/versions_helper.rb
 END
-issue_relations_helper.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/506/trunk/app/helpers/issue_relations_helper.rb
-END
 boards_helper.rb
 K 25
 svn:wc:ra_dav:version-url
--- a/app/helpers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/helpers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/helpers
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-11T16:02:36.869666Z
-4694
+2011-03-03T03:30:10.954225Z
+4990
 tmaruyama
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:44.431779Z
+2011-03-03T11:05:09.000000Z
 e1b19c2c81df384b2026001d1d9605fd
 2007-03-12T17:59:02.654744Z
 333
@@ -66,7 +66,7 @@
 
 
 
-2010-09-23T14:37:44.427784Z
+2011-03-03T11:05:09.000000Z
 ab0af291fb143223852a6edddc64b74b
 2009-09-12T08:36:46.650954Z
 2869
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:44.427784Z
+2011-03-03T11:05:09.000000Z
 0cd3093356b7034ee950ca327fc7aabc
 2007-03-12T17:59:02.654744Z
 333
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:44.431779Z
+2011-03-03T11:05:09.000000Z
 69869e026dc6cbacc618214e4bb13b1b
 2007-03-12T17:59:02.654744Z
 333
@@ -168,7 +168,7 @@
 
 
 
-2010-09-23T14:37:44.431779Z
+2011-03-03T11:05:09.000000Z
 491ead5828edb57adcd7333943656c94
 2010-03-27T16:55:20.312262Z
 3618
@@ -202,10 +202,10 @@
 
 
 
-2011-01-13T14:09:10.000000Z
-ec30c91fbf601169b281a5cd859df2ab
-2011-01-02T09:45:05.291687Z
-4613
+2011-03-03T11:40:18.000000Z
+824b766582f7177458a587dcfcf980f5
+2011-03-03T03:30:10.954225Z
+4990
 tmaruyama
 has-props
 
@@ -228,7 +228,7 @@
 
 
 
-7902
+9702
 
 admin_helper.rb
 file
@@ -236,7 +236,7 @@
 
 
 
-2010-09-24T12:48:25.903794Z
+2011-03-03T11:05:09.000000Z
 258ebc9ad13b3111585e5118ec607d1b
 2010-09-10T23:07:10.817821Z
 4080
@@ -270,7 +270,7 @@
 
 
 
-2010-09-23T14:37:44.427784Z
+2011-03-03T11:05:09.000000Z
 19efbd2b30f44f233d5140437e2707a0
 2010-08-08T07:07:20.961363Z
 3924
@@ -304,7 +304,7 @@
 
 
 
-2010-09-23T14:37:44.423776Z
+2011-03-03T11:05:09.000000Z
 42d20ee00a3c45e3411634dbb09e2447
 2007-03-12T17:59:02.654744Z
 333
@@ -338,7 +338,7 @@
 
 
 
-2010-09-24T12:48:25.903794Z
+2011-03-03T11:05:09.000000Z
 c8780c65337211f34097d74a8c3c9f6e
 2010-08-26T16:37:26.575205Z
 4046
@@ -372,7 +372,7 @@
 
 
 
-2010-09-23T14:37:44.427784Z
+2011-03-03T11:05:09.000000Z
 1257aafe6669c839ab46dac2b2732ae0
 2007-03-12T17:59:02.654744Z
 333
@@ -406,7 +406,7 @@
 
 
 
-2010-09-23T14:37:44.423776Z
+2011-03-03T11:05:09.000000Z
 ceb0fce7a4c271df3ae182c29caf9c03
 2007-03-12T17:59:02.654744Z
 333
@@ -440,10 +440,10 @@
 
 
 
-2010-11-19T13:04:46.900732Z
-3e6762604b5e9a201b7a7bb2edc1f78f
-2010-11-06T14:30:32.528294Z
-4375
+2011-03-03T11:40:18.000000Z
+44832549db555bb9e047a67ae330f34a
+2011-02-27T12:35:31.414622Z
+4952
 jplang
 has-props
 
@@ -466,7 +466,7 @@
 
 
 
-2297
+1315
 
 enumerations_helper.rb
 file
@@ -474,7 +474,7 @@
 
 
 
-2010-09-23T14:37:44.427784Z
+2011-03-03T11:05:09.000000Z
 fc5ec20dd0ca3ce1d954b219417eff70
 2007-03-12T17:59:02.654744Z
 333
@@ -508,10 +508,10 @@
 
 
 
-2011-01-13T14:09:10.000000Z
-5bc8f95d2852e1136e9034fe21aaa2fb
-2010-12-04T13:02:14.466576Z
-4465
+2011-03-03T11:40:18.000000Z
+9dfadb196899bf96fdff7c7c34914e8c
+2011-02-27T13:34:41.060565Z
+4954
 jplang
 has-props
 
@@ -534,7 +534,7 @@
 
 
 
-10511
+11599
 
 queries_helper.rb
 file
@@ -542,7 +542,7 @@
 
 
 
-2010-11-19T13:04:46.900732Z
+2011-03-03T11:05:09.000000Z
 6b997d023cc081b101be1949eb18f893
 2010-11-07T15:38:51.908839Z
 4387
@@ -576,7 +576,7 @@
 
 
 
-2010-11-19T13:04:46.900732Z
+2011-03-03T11:05:09.000000Z
 dfac5226f31c3c232d7dcc9416172071
 2010-10-23T09:08:55.877887Z
 4283
@@ -610,7 +610,7 @@
 
 
 
-2010-09-23T14:37:44.427784Z
+2011-03-03T11:05:09.000000Z
 c79faf6237abac40fabce0eacbfbb4cb
 2008-06-25T19:25:28.386590Z
 1584
@@ -644,7 +644,7 @@
 
 
 
-2010-09-23T14:37:44.431779Z
+2011-03-03T11:05:09.000000Z
 fc71d3a83fe0178e0c6d9519c7a62dde
 2010-03-13T17:45:41.194736Z
 3579
@@ -678,7 +678,7 @@
 
 
 
-2010-09-23T14:37:44.427784Z
+2011-03-03T11:05:09.000000Z
 d7134d76eff99aef107d8930903b10e0
 2007-03-12T17:59:02.654744Z
 333
@@ -712,7 +712,7 @@
 
 
 
-2010-09-23T14:37:44.427784Z
+2011-03-03T11:05:09.000000Z
 cc94b2fd5c6a87acac13bbe6e91bd39a
 2007-03-12T17:59:02.654744Z
 333
@@ -746,7 +746,7 @@
 
 
 
-2010-09-23T14:37:44.431779Z
+2011-03-03T11:05:09.000000Z
 2d03eb3683f312ec26736c696319ec76
 2007-03-12T17:59:02.654744Z
 333
@@ -780,7 +780,7 @@
 
 
 
-2010-09-24T12:48:25.903794Z
+2011-03-03T11:05:09.000000Z
 b64edde44bceed7fb0911f87dba971aa
 2010-09-05T22:57:20.669640Z
 4062
@@ -814,7 +814,7 @@
 
 
 
-2010-09-23T14:37:44.431779Z
+2011-03-03T11:05:09.000000Z
 4f7bcbe149363ecb18080e3ce6c3f761
 2008-09-28T12:03:17.584169Z
 1914
@@ -848,7 +848,7 @@
 
 
 
-2010-09-23T14:37:44.431779Z
+2011-03-03T11:05:09.000000Z
 9daafcfffa933849b3ee09fe5fd7b0cc
 2007-08-13T17:00:59.400243Z
 629
@@ -882,7 +882,7 @@
 
 
 
-2010-09-23T14:37:44.431779Z
+2011-03-03T11:05:09.000000Z
 1888fd2d4a1be5fa0d6ad8a63238e2b4
 2010-04-30T12:18:11.536180Z
 3708
@@ -916,7 +916,7 @@
 
 
 
-2010-11-19T13:04:46.900732Z
+2011-03-03T11:05:09.000000Z
 868d0dc19e332ae2c817321637a8e31f
 2010-09-28T21:09:06.467392Z
 4222
@@ -950,7 +950,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 19a8f1c143030c42136fe167f167db15
 2010-12-10T10:12:19.202442Z
 4480
@@ -978,13 +978,47 @@
 
 5702
 
+issue_moves_helper.rb
+file
+
+
+
+
+2011-03-03T11:05:09.000000Z
+66e99bd3af036c92a773a91e92a725f9
+2010-08-11T14:42:10.119704Z
+3936
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+28
+
 users_helper.rb
 file
 
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 1bedb4287035a6f89074da0b37640c28
 2010-12-12T14:25:23.262992Z
 4497
@@ -1012,51 +1046,17 @@
 
 2767
 
-issue_moves_helper.rb
-file
-
-
-
-
-2010-09-23T14:37:44.427784Z
-66e99bd3af036c92a773a91e92a725f9
-2010-08-11T14:42:10.119704Z
-3936
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-28
-
 application_helper.rb
 file
 
 
 
 
-2011-01-13T14:09:10.000000Z
-183212fd485ef2b4682dbe8023cd489b
-2011-01-11T16:02:36.869666Z
-4694
-tmaruyama
+2011-03-03T11:40:18.000000Z
+9d39fe6e2dd4535f7a006a77150961bc
+2011-02-21T09:53:29.844413Z
+4900
+jplang
 has-props
 
 
@@ -1078,7 +1078,7 @@
 
 
 
-35143
+36020
 
 auth_sources_helper.rb
 file
@@ -1086,7 +1086,7 @@
 
 
 
-2010-09-23T14:37:44.423776Z
+2011-03-03T11:05:09.000000Z
 19759b6e665f9063140da8ac473d9e31
 2007-03-12T17:59:02.654744Z
 333
@@ -1120,7 +1120,7 @@
 
 
 
-2010-11-19T13:04:46.900732Z
+2011-03-03T11:05:09.000000Z
 dedb3c62af67e076703aa2f60c97fb2b
 2010-11-01T12:55:15.292443Z
 4353
@@ -1154,10 +1154,10 @@
 
 
 
-2010-09-23T14:37:44.427784Z
-70db854f3fd0a38d203a65c44d93bb13
-2010-02-06T12:54:13.653502Z
-3373
+2011-03-03T11:05:09.000000Z
+d083581ae234853db09e79e4e88d6ad3
+2011-01-23T17:02:10.030897Z
+4760
 jplang
 has-props
 
@@ -1180,7 +1180,41 @@
 
 
 
-1364
+823
+
+issue_relations_helper.rb
+file
+
+
+
+
+2011-03-03T11:05:09.000000Z
+fef3a97e6644b418b44f9551aa65af95
+2007-05-05T13:22:27.245135Z
+506
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1017
 
 versions_helper.rb
 file
@@ -1188,7 +1222,7 @@
 
 
 
-2010-09-23T14:37:44.431779Z
+2011-03-03T11:05:09.000000Z
 fd18226266f3e53f6af000ac07a13313
 2007-12-07T10:26:07.864320Z
 955
@@ -1216,47 +1250,13 @@
 
 2170
 
-issue_relations_helper.rb
-file
-
-
-
-
-2010-09-23T14:37:44.427784Z
-fef3a97e6644b418b44f9551aa65af95
-2007-05-05T13:22:27.245135Z
-506
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1017
-
 boards_helper.rb
 file
 
 
 
 
-2010-09-23T14:37:44.423776Z
+2011-03-03T11:05:09.000000Z
 0ca8f33522734ee0417089366037a7cb
 2007-05-13T17:09:56.765659Z
 529
@@ -1290,7 +1290,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 58bc2391be7fedbf3e55ef07454cb04c
 2011-01-01T19:12:35.568700Z
 4605
@@ -1324,7 +1324,7 @@
 
 
 
-2010-09-23T14:37:44.427784Z
+2011-03-03T11:05:09.000000Z
 d808f6794a2fa7cd059ed56d5c8d1b28
 2007-03-12T17:59:02.654744Z
 333
--- a/app/helpers/.svn/text-base/application_helper.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/helpers/.svn/text-base/application_helper.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -109,6 +109,20 @@
     link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => rev},
             :title => l(:label_revision_id, format_revision(revision)))
   end
+  
+  # Generates a link to a message
+  def link_to_message(message, options={}, html_options = nil)
+    link_to(
+      h(truncate(message.subject, :length => 60)),
+      { :controller => 'messages', :action => 'show',
+        :board_id => message.board_id,
+        :id => message.root,
+        :r => (message.parent_id && message.id),
+        :anchor => (message.parent_id ? "message-#{message.id}" : nil)
+      }.merge(options),
+      html_options
+    )
+  end
 
   # Generates a link to a project if active
   # Examples:
@@ -588,16 +602,26 @@
   #     source:some/file#L120 -> Link to line 120 of the file
   #     source:some/file@52#L120 -> Link to line 120 of the file's revision 52
   #     export:some/file -> Force the download of the file
-  #  Forum messages:
+  #   Forum messages:
   #     message#1218 -> Link to message with id 1218
+  #
+  #   Links can refer other objects from other projects, using project identifier:
+  #     identifier:r52
+  #     identifier:document:"Some document"
+  #     identifier:version:1.0.0
+  #     identifier:source:some/file
   def parse_redmine_links(text, project, obj, attr, only_path, options)
-    text.gsub!(%r{([\s\(,\-\[\>]|^)(!)?(attachment|document|version|commit|source|export|message|project)?((#|r)(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|,|\s|\]|<|$)}) do |m|
-      leading, esc, prefix, sep, identifier = $1, $2, $3, $5 || $7, $6 || $8
+    text.gsub!(%r{([\s\(,\-\[\>]|^)(!)?(([a-z0-9\-]+):)?(attachment|document|version|commit|source|export|message|project)?((#|r)(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|,|\s|\]|<|$)}) do |m|
+      leading, esc, project_prefix, project_identifier, prefix, sep, identifier = $1, $2, $3, $4, $5, $7 || $9, $8 || $10
       link = nil
+      if project_identifier
+        project = Project.visible.find_by_identifier(project_identifier)
+      end
       if esc.nil?
         if prefix.nil? && sep == 'r'
-          if project && (changeset = project.changesets.find_by_revision(identifier))
-            link = link_to("r#{identifier}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.revision},
+          # project.changesets.visible raises an SQL error because of a double join on repositories
+          if project && project.repository && (changeset = Changeset.visible.find_by_repository_id_and_revision(project.repository.id, identifier))
+            link = link_to("#{project_prefix}r#{identifier}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.revision},
                                       :class => 'changeset',
                                       :title => truncate_single_line(changeset.comments, :length => 100))
           end
@@ -611,24 +635,18 @@
                                         :title => "#{truncate(issue.subject, :length => 100)} (#{issue.status.name})")
             end
           when 'document'
-            if document = Document.find_by_id(oid, :include => [:project], :conditions => Project.visible_by(User.current))
+            if document = Document.visible.find_by_id(oid)
               link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document},
                                                 :class => 'document'
             end
           when 'version'
-            if version = Version.find_by_id(oid, :include => [:project], :conditions => Project.visible_by(User.current))
+            if version = Version.visible.find_by_id(oid)
               link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version},
                                               :class => 'version'
             end
           when 'message'
-            if message = Message.find_by_id(oid, :include => [:parent, {:board => :project}], :conditions => Project.visible_by(User.current))
-              link = link_to h(truncate(message.subject, :length => 60)), {:only_path => only_path,
-                                                                :controller => 'messages',
-                                                                :action => 'show',
-                                                                :board_id => message.board,
-                                                                :id => message.root,
-                                                                :anchor => (message.parent ? "message-#{message.id}" : nil)},
-                                                 :class => 'message'
+            if message = Message.visible.find_by_id(oid, :include => :parent)
+              link = link_to_message(message, {:only_path => only_path}, :class => 'message')
             end
           when 'project'
             if p = Project.visible.find_by_id(oid)
@@ -640,26 +658,26 @@
           name = identifier.gsub(%r{^"(.*)"$}, "\\1")
           case prefix
           when 'document'
-            if project && document = project.documents.find_by_title(name)
+            if project && document = project.documents.visible.find_by_title(name)
               link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document},
                                                 :class => 'document'
             end
           when 'version'
-            if project && version = project.versions.find_by_name(name)
+            if project && version = project.versions.visible.find_by_name(name)
               link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version},
                                               :class => 'version'
             end
           when 'commit'
-            if project && (changeset = project.changesets.find(:first, :conditions => ["scmid LIKE ?", "#{name}%"]))
-              link = link_to h("#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.identifier},
+            if project && project.repository && (changeset = Changeset.visible.find(:first, :conditions => ["repository_id = ? AND scmid LIKE ?", project.repository.id, "#{name}%"]))
+              link = link_to h("#{project_prefix}#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.identifier},
                                            :class => 'changeset',
                                            :title => truncate_single_line(changeset.comments, :length => 100)
             end
           when 'source', 'export'
-            if project && project.repository
+            if project && project.repository && User.current.allowed_to?(:browse_repository, project)
               name =~ %r{^[/\\]*(.*?)(@([0-9a-f]+))?(#(L\d+))?$}
               path, rev, anchor = $1, $3, $5
-              link = link_to h("#{prefix}:#{name}"), {:controller => 'repositories', :action => 'entry', :id => project,
+              link = link_to h("#{project_prefix}#{prefix}:#{name}"), {:controller => 'repositories', :action => 'entry', :id => project,
                                                       :path => to_path_param(path),
                                                       :rev => rev,
                                                       :anchor => anchor,
@@ -679,7 +697,7 @@
           end
         end
       end
-      leading + (link || "#{prefix}#{sep}#{identifier}")
+      leading + (link || "#{project_prefix}#{prefix}#{sep}#{identifier}")
     end
   end
   
@@ -876,6 +894,15 @@
       ''
     end
   end
+  
+  # Returns the javascript tags that are included in the html layout head
+  def javascript_heads
+    tags = javascript_include_tag(:defaults)
+    unless User.current.pref.warn_on_leaving_unsaved == '0'
+      tags << "\n" + javascript_tag("Event.observe(window, 'load', function(){ new WarnLeavingUnsaved('#{escape_javascript( l(:text_warn_on_leaving_unsaved) )}'); });")
+    end
+    tags
+  end
 
   def favicon
     "<link rel='shortcut icon' href='#{image_path('/favicon.ico')}' />"
--- a/app/helpers/.svn/text-base/issues_helper.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/helpers/.svn/text-base/issues_helper.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -106,13 +106,32 @@
       # Project specific queries and global queries
       visible << (@project.nil? ? ["project_id IS NULL"] : ["project_id IS NULL OR project_id = ?", @project.id])
       @sidebar_queries = Query.find(:all, 
-                                    :select => 'id, name',
+                                    :select => 'id, name, is_public',
                                     :order => "name ASC",
                                     :conditions => visible.conditions)
     end
     @sidebar_queries
   end
 
+  def query_links(title, queries)
+    # links to #index on issues/show
+    url_params = controller_name == 'issues' ? {:controller => 'issues', :action => 'index', :project_id => @project} : params
+  
+    content_tag('h3', title) +
+      queries.collect {|query|
+          link_to(h(query.name), url_params.merge(:query_id => query))
+        }.join('<br />')
+  end
+  
+  def render_sidebar_queries
+    out = ''
+    queries = sidebar_queries.select {|q| !q.is_public?}
+    out << query_links(l(:label_my_queries), queries) if queries.any?
+    queries = sidebar_queries.select {|q| q.is_public?}
+    out << query_links(l(:label_query_plural), queries) if queries.any?
+    out
+  end
+
   def show_detail(detail, no_html=false)
     case detail.property
     when 'attr'
@@ -164,7 +183,16 @@
       end
     end
     
-    if !detail.value.blank?
+    if detail.property == 'attr' && detail.prop_key == 'description'
+      s = l(:text_journal_changed_no_detail, :label => label)
+      unless no_html
+        diff_link = link_to 'diff', 
+          {:controller => 'journals', :action => 'diff', :id => detail.journal_id, :detail_id => detail.id},
+          :title => l(:label_view_diff)
+        s << " (#{ diff_link })"
+      end
+      s
+    elsif !detail.value.blank?
       case detail.property
       when 'attr', 'cf'
         if !detail.old_value.blank?
--- a/app/helpers/.svn/text-base/messages_helper.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/helpers/.svn/text-base/messages_helper.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -16,14 +16,4 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 module MessagesHelper
-
-  def link_to_message(message)
-    return '' unless message
-    link_to h(truncate(message.subject, :length => 60)), :controller => 'messages',
-                                           :action => 'show',
-                                           :board_id => message.board_id,
-                                           :id => message.root,
-                                           :r => (message.parent_id && message.id),
-                                           :anchor => (message.parent_id ? "message-#{message.id}" : nil)
-  end
 end
--- a/app/helpers/.svn/text-base/repositories_helper.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/helpers/.svn/text-base/repositories_helper.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -25,13 +25,13 @@
       revision.to_s
     end
   end
-  
+
   def truncate_at_line_break(text, length = 255)
     if text
       text.gsub(%r{^(.{#{length}}[^\n]*)\n.+$}m, '\\1...')
     end
   end
-  
+
   def render_properties(properties)
     unless properties.nil? || properties.empty?
       content = ''
@@ -41,7 +41,7 @@
       content_tag('ul', content, :class => 'properties')
     end
   end
-  
+
   def render_changeset_changes
     changes = @changeset.changes.find(:all, :limit => 1000, :order => 'path').collect do |change|
       case change.action
@@ -75,10 +75,10 @@
     
     render_changes_tree(tree[:s])
   end
-  
+
   def render_changes_tree(tree)
     return '' if tree.nil?
-    
+
     output = ''
     output << '<ul>'
     tree.keys.sort.each do |file|
@@ -115,15 +115,18 @@
     output << '</ul>'
     output
   end
-  
+
   def to_utf8(str)
+    return str if str.blank?
     if str.respond_to?(:force_encoding)
       str.force_encoding('UTF-8')
-      return str if str.valid_encoding?
     else
+      # TODO:
+      # Japanese Shift_JIS(CP932) is not compatible with ASCII.
+      # UTF-7 and Japanese ISO-2022-JP are 7bits clean.
       return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
     end
-    
+
     @encodings ||= Setting.repositories_encodings.split(',').collect(&:strip)
     @encodings.each do |encoding|
       begin
@@ -132,67 +135,118 @@
         # do nothing here and try the next encoding
       end
     end
+    str = replace_invalid_utf8(str)
+  end
+
+  def replace_invalid_utf8(str)
+    if str.respond_to?(:force_encoding)
+      str.force_encoding('UTF-8')
+      if ! str.valid_encoding?
+        str = str.encode("US-ASCII", :invalid => :replace,
+              :undef => :replace, :replace => '?').encode("UTF-8")
+      end
+    end
     str
   end
-  
-  def repository_field_tags(form, repository)    
+
+  def repository_field_tags(form, repository)
     method = repository.class.name.demodulize.underscore + "_field_tags"
-    send(method, form, repository) if repository.is_a?(Repository) && respond_to?(method) && method != 'repository_field_tags'
+    if repository.is_a?(Repository) &&
+        respond_to?(method) && method != 'repository_field_tags'
+      send(method, form, repository)
+    end
   end
-  
+
   def scm_select_tag(repository)
     scm_options = [["--- #{l(:actionview_instancetag_blank_option)} ---", '']]
     Redmine::Scm::Base.all.each do |scm|
-      scm_options << ["Repository::#{scm}".constantize.scm_name, scm] if Setting.enabled_scm.include?(scm) || (repository && repository.class.name.demodulize == scm)
+    if Setting.enabled_scm.include?(scm) ||
+          (repository && repository.class.name.demodulize == scm)
+        scm_options << ["Repository::#{scm}".constantize.scm_name, scm]
+      end
     end
-    
     select_tag('repository_scm', 
                options_for_select(scm_options, repository.class.name.demodulize),
                :disabled => (repository && !repository.new_record?),
-               :onchange => remote_function(:url => { :controller => 'repositories', :action => 'edit', :id => @project }, :method => :get, :with => "Form.serialize(this.form)")
+               :onchange => remote_function(
+                  :url => {
+                      :controller => 'repositories',
+                      :action => 'edit',
+                      :id => @project
+                        },
+               :method => :get,
+               :with => "Form.serialize(this.form)")
                )
   end
-  
+
   def with_leading_slash(path)
     path.to_s.starts_with?('/') ? path : "/#{path}"
   end
-  
+
   def without_leading_slash(path)
     path.gsub(%r{^/+}, '')
   end
 
   def subversion_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?)) +
+      content_tag('p', form.text_field(:url, :size => 60, :required => true,
+                       :disabled => (repository && !repository.root_url.blank?)) +
                        '<br />(file:///, http://, https://, svn://, svn+[tunnelscheme]://)') +
       content_tag('p', form.text_field(:login, :size => 30)) +
-      content_tag('p', form.password_field(:password, :size => 30, :name => 'ignore',
-                                           :value => ((repository.new_record? || repository.password.blank?) ? '' : ('x'*15)),
-                                           :onfocus => "this.value=''; this.name='repository[password]';",
-                                           :onchange => "this.name='repository[password]';"))
+      content_tag('p', form.password_field(
+                            :password, :size => 30, :name => 'ignore',
+                            :value => ((repository.new_record? || repository.password.blank?) ? '' : ('x'*15)),
+                            :onfocus => "this.value=''; this.name='repository[password]';",
+                            :onchange => "this.name='repository[password]';"))
   end
 
   def darcs_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.new_record?)))
+      content_tag('p', form.text_field(:url, :label => 'Root directory',
+                       :size => 60, :required => true,
+                       :disabled => (repository && !repository.new_record?))) +
+      content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS,
+                                 :label => 'Commit messages encoding', :required => true))
   end
-  
+
   def mercurial_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?)))
+      content_tag('p', form.text_field(:url, :label => 'Root directory',
+                       :size => 60, :required => true,
+                       :disabled => (repository && !repository.root_url.blank?)) +
+                       '<br />local repository (e.g. /hgrepo, c:\hgrepo)' )
   end
 
   def git_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Path to .git directory', :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?)))
+      content_tag('p', form.text_field(:url, :label => 'Path to repository',
+                       :size => 60, :required => true,
+                       :disabled => (repository && !repository.root_url.blank?)) +
+                       '<br />a bare and local repository (e.g. /gitrepo, c:\gitrepo)')
   end
 
   def cvs_field_tags(form, repository)
-      content_tag('p', form.text_field(:root_url, :label => 'CVSROOT', :size => 60, :required => true, :disabled => !repository.new_record?)) +
-      content_tag('p', form.text_field(:url, :label => 'Module', :size => 30, :required => true, :disabled => !repository.new_record?))
+      content_tag('p', form.text_field(:root_url,
+                       :label => 'CVSROOT', :size => 60, :required => true,
+                       :disabled => !repository.new_record?)) +
+      content_tag('p', form.text_field(:url, :label => 'Module',
+                       :size => 30, :required => true,
+                       :disabled => !repository.new_record?)) +
+      content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS,
+                                 :label => 'Commit messages encoding', :required => true))
   end
 
   def bazaar_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.new_record?)))
+      content_tag('p', form.text_field(:url, :label => 'Root directory',
+                       :size => 60, :required => true,
+                       :disabled => (repository && !repository.new_record?))) +
+      content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS,
+                                 :label => 'Commit messages encoding', :required => true))
   end
-  
+
   def filesystem_field_tags(form, repository)
-    content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?)))
+    content_tag('p', form.text_field(:url, :label => 'Root directory',
+                     :size => 60, :required => true,
+                     :disabled => (repository && !repository.root_url.blank?))) +
+    content_tag('p', form.select(
+                        :path_encoding, [nil] + Setting::ENCODINGS,
+                        :label => 'Path encoding') +
+                        '<br />Default: UTF-8')
   end
 end
--- a/app/helpers/.svn/text-base/wiki_helper.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/helpers/.svn/text-base/wiki_helper.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -29,41 +29,4 @@
     end
     s
   end
-  
-  def html_diff(wdiff)
-    words = wdiff.words.collect{|word| h(word)}
-    words_add = 0
-    words_del = 0
-    dels = 0
-    del_off = 0
-    wdiff.diff.diffs.each do |diff|
-      add_at = nil
-      add_to = nil
-      del_at = nil
-      deleted = ""	    
-      diff.each do |change|
-        pos = change[1]
-        if change[0] == "+"
-          add_at = pos + dels unless add_at
-          add_to = pos + dels
-          words_add += 1
-        else
-          del_at = pos unless del_at
-          deleted << ' ' + h(change[2])
-          words_del	 += 1
-        end
-      end
-      if add_at
-        words[add_at] = '<span class="diff_in">' + words[add_at]
-        words[add_to] = words[add_to] + '</span>'
-      end
-      if del_at
-        words.insert del_at - del_off + dels + words_add, '<span class="diff_out">' + deleted + '</span>'
-        dels += 1
-        del_off += words_del
-        words_del = 0
-      end
-    end
-    simple_format_without_paragraph(words.join(' '))
-  end
 end
--- a/app/helpers/application_helper.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/helpers/application_helper.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -109,6 +109,20 @@
     link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => rev},
             :title => l(:label_revision_id, format_revision(revision)))
   end
+  
+  # Generates a link to a message
+  def link_to_message(message, options={}, html_options = nil)
+    link_to(
+      h(truncate(message.subject, :length => 60)),
+      { :controller => 'messages', :action => 'show',
+        :board_id => message.board_id,
+        :id => message.root,
+        :r => (message.parent_id && message.id),
+        :anchor => (message.parent_id ? "message-#{message.id}" : nil)
+      }.merge(options),
+      html_options
+    )
+  end
 
   # Generates a link to a project if active
   # Examples:
@@ -588,16 +602,26 @@
   #     source:some/file#L120 -> Link to line 120 of the file
   #     source:some/file@52#L120 -> Link to line 120 of the file's revision 52
   #     export:some/file -> Force the download of the file
-  #  Forum messages:
+  #   Forum messages:
   #     message#1218 -> Link to message with id 1218
+  #
+  #   Links can refer other objects from other projects, using project identifier:
+  #     identifier:r52
+  #     identifier:document:"Some document"
+  #     identifier:version:1.0.0
+  #     identifier:source:some/file
   def parse_redmine_links(text, project, obj, attr, only_path, options)
-    text.gsub!(%r{([\s\(,\-\[\>]|^)(!)?(attachment|document|version|commit|source|export|message|project)?((#|r)(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|,|\s|\]|<|$)}) do |m|
-      leading, esc, prefix, sep, identifier = $1, $2, $3, $5 || $7, $6 || $8
+    text.gsub!(%r{([\s\(,\-\[\>]|^)(!)?(([a-z0-9\-]+):)?(attachment|document|version|commit|source|export|message|project)?((#|r)(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|,|\s|\]|<|$)}) do |m|
+      leading, esc, project_prefix, project_identifier, prefix, sep, identifier = $1, $2, $3, $4, $5, $7 || $9, $8 || $10
       link = nil
+      if project_identifier
+        project = Project.visible.find_by_identifier(project_identifier)
+      end
       if esc.nil?
         if prefix.nil? && sep == 'r'
-          if project && (changeset = project.changesets.find_by_revision(identifier))
-            link = link_to("r#{identifier}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.revision},
+          # project.changesets.visible raises an SQL error because of a double join on repositories
+          if project && project.repository && (changeset = Changeset.visible.find_by_repository_id_and_revision(project.repository.id, identifier))
+            link = link_to("#{project_prefix}r#{identifier}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.revision},
                                       :class => 'changeset',
                                       :title => truncate_single_line(changeset.comments, :length => 100))
           end
@@ -611,24 +635,18 @@
                                         :title => "#{truncate(issue.subject, :length => 100)} (#{issue.status.name})")
             end
           when 'document'
-            if document = Document.find_by_id(oid, :include => [:project], :conditions => Project.visible_by(User.current))
+            if document = Document.visible.find_by_id(oid)
               link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document},
                                                 :class => 'document'
             end
           when 'version'
-            if version = Version.find_by_id(oid, :include => [:project], :conditions => Project.visible_by(User.current))
+            if version = Version.visible.find_by_id(oid)
               link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version},
                                               :class => 'version'
             end
           when 'message'
-            if message = Message.find_by_id(oid, :include => [:parent, {:board => :project}], :conditions => Project.visible_by(User.current))
-              link = link_to h(truncate(message.subject, :length => 60)), {:only_path => only_path,
-                                                                :controller => 'messages',
-                                                                :action => 'show',
-                                                                :board_id => message.board,
-                                                                :id => message.root,
-                                                                :anchor => (message.parent ? "message-#{message.id}" : nil)},
-                                                 :class => 'message'
+            if message = Message.visible.find_by_id(oid, :include => :parent)
+              link = link_to_message(message, {:only_path => only_path}, :class => 'message')
             end
           when 'project'
             if p = Project.visible.find_by_id(oid)
@@ -640,26 +658,26 @@
           name = identifier.gsub(%r{^"(.*)"$}, "\\1")
           case prefix
           when 'document'
-            if project && document = project.documents.find_by_title(name)
+            if project && document = project.documents.visible.find_by_title(name)
               link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document},
                                                 :class => 'document'
             end
           when 'version'
-            if project && version = project.versions.find_by_name(name)
+            if project && version = project.versions.visible.find_by_name(name)
               link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version},
                                               :class => 'version'
             end
           when 'commit'
-            if project && (changeset = project.changesets.find(:first, :conditions => ["scmid LIKE ?", "#{name}%"]))
-              link = link_to h("#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.identifier},
+            if project && project.repository && (changeset = Changeset.visible.find(:first, :conditions => ["repository_id = ? AND scmid LIKE ?", project.repository.id, "#{name}%"]))
+              link = link_to h("#{project_prefix}#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.identifier},
                                            :class => 'changeset',
                                            :title => truncate_single_line(changeset.comments, :length => 100)
             end
           when 'source', 'export'
-            if project && project.repository
+            if project && project.repository && User.current.allowed_to?(:browse_repository, project)
               name =~ %r{^[/\\]*(.*?)(@([0-9a-f]+))?(#(L\d+))?$}
               path, rev, anchor = $1, $3, $5
-              link = link_to h("#{prefix}:#{name}"), {:controller => 'repositories', :action => 'entry', :id => project,
+              link = link_to h("#{project_prefix}#{prefix}:#{name}"), {:controller => 'repositories', :action => 'entry', :id => project,
                                                       :path => to_path_param(path),
                                                       :rev => rev,
                                                       :anchor => anchor,
@@ -679,7 +697,7 @@
           end
         end
       end
-      leading + (link || "#{prefix}#{sep}#{identifier}")
+      leading + (link || "#{project_prefix}#{prefix}#{sep}#{identifier}")
     end
   end
   
@@ -876,6 +894,15 @@
       ''
     end
   end
+  
+  # Returns the javascript tags that are included in the html layout head
+  def javascript_heads
+    tags = javascript_include_tag(:defaults)
+    unless User.current.pref.warn_on_leaving_unsaved == '0'
+      tags << "\n" + javascript_tag("Event.observe(window, 'load', function(){ new WarnLeavingUnsaved('#{escape_javascript( l(:text_warn_on_leaving_unsaved) )}'); });")
+    end
+    tags
+  end
 
   def favicon
     "<link rel='shortcut icon' href='#{image_path('/favicon.ico')}' />"
--- a/app/helpers/issues_helper.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/helpers/issues_helper.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -106,13 +106,32 @@
       # Project specific queries and global queries
       visible << (@project.nil? ? ["project_id IS NULL"] : ["project_id IS NULL OR project_id = ?", @project.id])
       @sidebar_queries = Query.find(:all, 
-                                    :select => 'id, name',
+                                    :select => 'id, name, is_public',
                                     :order => "name ASC",
                                     :conditions => visible.conditions)
     end
     @sidebar_queries
   end
 
+  def query_links(title, queries)
+    # links to #index on issues/show
+    url_params = controller_name == 'issues' ? {:controller => 'issues', :action => 'index', :project_id => @project} : params
+  
+    content_tag('h3', title) +
+      queries.collect {|query|
+          link_to(h(query.name), url_params.merge(:query_id => query))
+        }.join('<br />')
+  end
+  
+  def render_sidebar_queries
+    out = ''
+    queries = sidebar_queries.select {|q| !q.is_public?}
+    out << query_links(l(:label_my_queries), queries) if queries.any?
+    queries = sidebar_queries.select {|q| q.is_public?}
+    out << query_links(l(:label_query_plural), queries) if queries.any?
+    out
+  end
+
   def show_detail(detail, no_html=false)
     case detail.property
     when 'attr'
@@ -164,7 +183,16 @@
       end
     end
     
-    if !detail.value.blank?
+    if detail.property == 'attr' && detail.prop_key == 'description'
+      s = l(:text_journal_changed_no_detail, :label => label)
+      unless no_html
+        diff_link = link_to 'diff', 
+          {:controller => 'journals', :action => 'diff', :id => detail.journal_id, :detail_id => detail.id},
+          :title => l(:label_view_diff)
+        s << " (#{ diff_link })"
+      end
+      s
+    elsif !detail.value.blank?
       case detail.property
       when 'attr', 'cf'
         if !detail.old_value.blank?
--- a/app/helpers/messages_helper.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/helpers/messages_helper.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -16,14 +16,4 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 module MessagesHelper
-
-  def link_to_message(message)
-    return '' unless message
-    link_to h(truncate(message.subject, :length => 60)), :controller => 'messages',
-                                           :action => 'show',
-                                           :board_id => message.board_id,
-                                           :id => message.root,
-                                           :r => (message.parent_id && message.id),
-                                           :anchor => (message.parent_id ? "message-#{message.id}" : nil)
-  end
 end
--- a/app/helpers/repositories_helper.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/helpers/repositories_helper.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -25,13 +25,13 @@
       revision.to_s
     end
   end
-  
+
   def truncate_at_line_break(text, length = 255)
     if text
       text.gsub(%r{^(.{#{length}}[^\n]*)\n.+$}m, '\\1...')
     end
   end
-  
+
   def render_properties(properties)
     unless properties.nil? || properties.empty?
       content = ''
@@ -41,7 +41,7 @@
       content_tag('ul', content, :class => 'properties')
     end
   end
-  
+
   def render_changeset_changes
     changes = @changeset.changes.find(:all, :limit => 1000, :order => 'path').collect do |change|
       case change.action
@@ -75,10 +75,10 @@
     
     render_changes_tree(tree[:s])
   end
-  
+
   def render_changes_tree(tree)
     return '' if tree.nil?
-    
+
     output = ''
     output << '<ul>'
     tree.keys.sort.each do |file|
@@ -115,15 +115,18 @@
     output << '</ul>'
     output
   end
-  
+
   def to_utf8(str)
+    return str if str.blank?
     if str.respond_to?(:force_encoding)
       str.force_encoding('UTF-8')
-      return str if str.valid_encoding?
     else
+      # TODO:
+      # Japanese Shift_JIS(CP932) is not compatible with ASCII.
+      # UTF-7 and Japanese ISO-2022-JP are 7bits clean.
       return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
     end
-    
+
     @encodings ||= Setting.repositories_encodings.split(',').collect(&:strip)
     @encodings.each do |encoding|
       begin
@@ -132,67 +135,118 @@
         # do nothing here and try the next encoding
       end
     end
+    str = replace_invalid_utf8(str)
+  end
+
+  def replace_invalid_utf8(str)
+    if str.respond_to?(:force_encoding)
+      str.force_encoding('UTF-8')
+      if ! str.valid_encoding?
+        str = str.encode("US-ASCII", :invalid => :replace,
+              :undef => :replace, :replace => '?').encode("UTF-8")
+      end
+    end
     str
   end
-  
-  def repository_field_tags(form, repository)    
+
+  def repository_field_tags(form, repository)
     method = repository.class.name.demodulize.underscore + "_field_tags"
-    send(method, form, repository) if repository.is_a?(Repository) && respond_to?(method) && method != 'repository_field_tags'
+    if repository.is_a?(Repository) &&
+        respond_to?(method) && method != 'repository_field_tags'
+      send(method, form, repository)
+    end
   end
-  
+
   def scm_select_tag(repository)
     scm_options = [["--- #{l(:actionview_instancetag_blank_option)} ---", '']]
     Redmine::Scm::Base.all.each do |scm|
-      scm_options << ["Repository::#{scm}".constantize.scm_name, scm] if Setting.enabled_scm.include?(scm) || (repository && repository.class.name.demodulize == scm)
+    if Setting.enabled_scm.include?(scm) ||
+          (repository && repository.class.name.demodulize == scm)
+        scm_options << ["Repository::#{scm}".constantize.scm_name, scm]
+      end
     end
-    
     select_tag('repository_scm', 
                options_for_select(scm_options, repository.class.name.demodulize),
                :disabled => (repository && !repository.new_record?),
-               :onchange => remote_function(:url => { :controller => 'repositories', :action => 'edit', :id => @project }, :method => :get, :with => "Form.serialize(this.form)")
+               :onchange => remote_function(
+                  :url => {
+                      :controller => 'repositories',
+                      :action => 'edit',
+                      :id => @project
+                        },
+               :method => :get,
+               :with => "Form.serialize(this.form)")
                )
   end
-  
+
   def with_leading_slash(path)
     path.to_s.starts_with?('/') ? path : "/#{path}"
   end
-  
+
   def without_leading_slash(path)
     path.gsub(%r{^/+}, '')
   end
 
   def subversion_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?)) +
+      content_tag('p', form.text_field(:url, :size => 60, :required => true,
+                       :disabled => (repository && !repository.root_url.blank?)) +
                        '<br />(file:///, http://, https://, svn://, svn+[tunnelscheme]://)') +
       content_tag('p', form.text_field(:login, :size => 30)) +
-      content_tag('p', form.password_field(:password, :size => 30, :name => 'ignore',
-                                           :value => ((repository.new_record? || repository.password.blank?) ? '' : ('x'*15)),
-                                           :onfocus => "this.value=''; this.name='repository[password]';",
-                                           :onchange => "this.name='repository[password]';"))
+      content_tag('p', form.password_field(
+                            :password, :size => 30, :name => 'ignore',
+                            :value => ((repository.new_record? || repository.password.blank?) ? '' : ('x'*15)),
+                            :onfocus => "this.value=''; this.name='repository[password]';",
+                            :onchange => "this.name='repository[password]';"))
   end
 
   def darcs_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.new_record?)))
+      content_tag('p', form.text_field(:url, :label => 'Root directory',
+                       :size => 60, :required => true,
+                       :disabled => (repository && !repository.new_record?))) +
+      content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS,
+                                 :label => 'Commit messages encoding', :required => true))
   end
-  
+
   def mercurial_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?)))
+      content_tag('p', form.text_field(:url, :label => 'Root directory',
+                       :size => 60, :required => true,
+                       :disabled => (repository && !repository.root_url.blank?)) +
+                       '<br />local repository (e.g. /hgrepo, c:\hgrepo)' )
   end
 
   def git_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Path to .git directory', :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?)))
+      content_tag('p', form.text_field(:url, :label => 'Path to repository',
+                       :size => 60, :required => true,
+                       :disabled => (repository && !repository.root_url.blank?)) +
+                       '<br />a bare and local repository (e.g. /gitrepo, c:\gitrepo)')
   end
 
   def cvs_field_tags(form, repository)
-      content_tag('p', form.text_field(:root_url, :label => 'CVSROOT', :size => 60, :required => true, :disabled => !repository.new_record?)) +
-      content_tag('p', form.text_field(:url, :label => 'Module', :size => 30, :required => true, :disabled => !repository.new_record?))
+      content_tag('p', form.text_field(:root_url,
+                       :label => 'CVSROOT', :size => 60, :required => true,
+                       :disabled => !repository.new_record?)) +
+      content_tag('p', form.text_field(:url, :label => 'Module',
+                       :size => 30, :required => true,
+                       :disabled => !repository.new_record?)) +
+      content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS,
+                                 :label => 'Commit messages encoding', :required => true))
   end
 
   def bazaar_field_tags(form, repository)
-      content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.new_record?)))
+      content_tag('p', form.text_field(:url, :label => 'Root directory',
+                       :size => 60, :required => true,
+                       :disabled => (repository && !repository.new_record?))) +
+      content_tag('p', form.select(:log_encoding, [nil] + Setting::ENCODINGS,
+                                 :label => 'Commit messages encoding', :required => true))
   end
-  
+
   def filesystem_field_tags(form, repository)
-    content_tag('p', form.text_field(:url, :label => 'Root directory', :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?)))
+    content_tag('p', form.text_field(:url, :label => 'Root directory',
+                     :size => 60, :required => true,
+                     :disabled => (repository && !repository.root_url.blank?))) +
+    content_tag('p', form.select(
+                        :path_encoding, [nil] + Setting::ENCODINGS,
+                        :label => 'Path encoding') +
+                        '<br />Default: UTF-8')
   end
 end
--- a/app/helpers/wiki_helper.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/helpers/wiki_helper.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -29,41 +29,4 @@
     end
     s
   end
-  
-  def html_diff(wdiff)
-    words = wdiff.words.collect{|word| h(word)}
-    words_add = 0
-    words_del = 0
-    dels = 0
-    del_off = 0
-    wdiff.diff.diffs.each do |diff|
-      add_at = nil
-      add_to = nil
-      del_at = nil
-      deleted = ""	    
-      diff.each do |change|
-        pos = change[1]
-        if change[0] == "+"
-          add_at = pos + dels unless add_at
-          add_to = pos + dels
-          words_add += 1
-        else
-          del_at = pos unless del_at
-          deleted << ' ' + h(change[2])
-          words_del	 += 1
-        end
-      end
-      if add_at
-        words[add_at] = '<span class="diff_in">' + words[add_at]
-        words[add_to] = words[add_to] + '</span>'
-      end
-      if del_at
-        words.insert del_at - del_off + dels + words_add, '<span class="diff_out">' + deleted + '</span>'
-        dels += 1
-        del_off += words_del
-        words_del = 0
-      end
-    end
-    simple_format_without_paragraph(words.join(' '))
-  end
 end
--- a/app/models/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,25 +1,25 @@
 K 25
 svn:wc:ra_dav:version-url
 V 35
-/svn/!svn/ver/4730/trunk/app/models
+/svn/!svn/ver/4982/trunk/app/models
 END
 document.rb
 K 25
 svn:wc:ra_dav:version-url
 V 47
-/svn/!svn/ver/3358/trunk/app/models/document.rb
+/svn/!svn/ver/4759/trunk/app/models/document.rb
 END
 mail_handler.rb
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/4682/trunk/app/models/mail_handler.rb
+/svn/!svn/ver/4820/trunk/app/models/mail_handler.rb
 END
 repository.rb
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/4712/trunk/app/models/repository.rb
+/svn/!svn/ver/4982/trunk/app/models/repository.rb
 END
 time_entry.rb
 K 25
@@ -43,7 +43,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 55
-/svn/!svn/ver/3492/trunk/app/models/auth_source_ldap.rb
+/svn/!svn/ver/4950/trunk/app/models/auth_source_ldap.rb
 END
 principal.rb
 K 25
@@ -81,11 +81,17 @@
 V 50
 /svn/!svn/ver/3240/trunk/app/models/enumeration.rb
 END
+member_role.rb
+K 25
+svn:wc:ra_dav:version-url
+V 50
+/svn/!svn/ver/3250/trunk/app/models/member_role.rb
+END
 issue.rb
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/4723/trunk/app/models/issue.rb
+/svn/!svn/ver/4954/trunk/app/models/issue.rb
 END
 time_entry_activity_custom_field.rb
 K 25
@@ -93,12 +99,6 @@
 V 71
 /svn/!svn/ver/2952/trunk/app/models/time_entry_activity_custom_field.rb
 END
-member_role.rb
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/3250/trunk/app/models/member_role.rb
-END
 issue_priority.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -111,29 +111,29 @@
 V 55
 /svn/!svn/ver/3169/trunk/app/models/message_observer.rb
 END
+watcher.rb
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/3167/trunk/app/models/watcher.rb
+END
 wiki_content.rb
 K 25
 svn:wc:ra_dav:version-url
 V 51
 /svn/!svn/ver/4296/trunk/app/models/wiki_content.rb
 END
-watcher.rb
+enabled_module.rb
 K 25
 svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/3167/trunk/app/models/watcher.rb
+V 53
+/svn/!svn/ver/2970/trunk/app/models/enabled_module.rb
 END
 wiki_page.rb
 K 25
 svn:wc:ra_dav:version-url
 V 48
-/svn/!svn/ver/4296/trunk/app/models/wiki_page.rb
-END
-enabled_module.rb
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/2970/trunk/app/models/enabled_module.rb
+/svn/!svn/ver/4952/trunk/app/models/wiki_page.rb
 END
 comment.rb
 K 25
@@ -151,7 +151,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/4553/trunk/app/models/query.rb
+/svn/!svn/ver/4888/trunk/app/models/query.rb
 END
 member.rb
 K 25
@@ -169,7 +169,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 45
-/svn/!svn/ver/4373/trunk/app/models/mailer.rb
+/svn/!svn/ver/4752/trunk/app/models/mailer.rb
+END
+journal.rb
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/4062/trunk/app/models/journal.rb
 END
 workflow.rb
 K 25
@@ -177,12 +183,6 @@
 V 47
 /svn/!svn/ver/3709/trunk/app/models/workflow.rb
 END
-journal.rb
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4062/trunk/app/models/journal.rb
-END
 user_custom_field.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -205,19 +205,19 @@
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/3417/trunk/app/models/setting.rb
+/svn/!svn/ver/4899/trunk/app/models/setting.rb
 END
 user.rb
 K 25
 svn:wc:ra_dav:version-url
 V 43
-/svn/!svn/ver/4730/trunk/app/models/user.rb
+/svn/!svn/ver/4936/trunk/app/models/user.rb
 END
 auth_source.rb
 K 25
 svn:wc:ra_dav:version-url
 V 50
-/svn/!svn/ver/3745/trunk/app/models/auth_source.rb
+/svn/!svn/ver/4950/trunk/app/models/auth_source.rb
 END
 news_observer.rb
 K 25
@@ -229,7 +229,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/3373/trunk/app/models/message.rb
+/svn/!svn/ver/4759/trunk/app/models/message.rb
 END
 wiki_redirect.rb
 K 25
@@ -271,7 +271,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/3774/trunk/app/models/attachment.rb
+/svn/!svn/ver/4755/trunk/app/models/attachment.rb
 END
 group_custom_field.rb
 K 25
@@ -283,7 +283,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/4599/trunk/app/models/issue_status.rb
+/svn/!svn/ver/4895/trunk/app/models/issue_status.rb
 END
 time_entry_activity.rb
 K 25
@@ -300,8 +300,8 @@
 journal_detail.rb
 K 25
 svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/478/trunk/app/models/journal_detail.rb
+V 53
+/svn/!svn/ver/4954/trunk/app/models/journal_detail.rb
 END
 group.rb
 K 25
@@ -319,7 +319,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 48
-/svn/!svn/ver/4613/trunk/app/models/changeset.rb
+/svn/!svn/ver/4962/trunk/app/models/changeset.rb
 END
 role.rb
 K 25
@@ -367,5 +367,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 54
-/svn/!svn/ver/1623/trunk/app/models/user_preference.rb
+/svn/!svn/ver/4900/trunk/app/models/user_preference.rb
 END
--- a/app/models/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/models
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-16T15:36:42.998302Z
-4730
-jplang
+2011-03-01T10:27:30.170724Z
+4982
+tmaruyama
 
 
 
@@ -35,11 +35,11 @@
 
 
 
-2010-09-23T14:37:44.471831Z
-6edd75717c818c718387e30ec7aee840
-2010-02-01T18:57:12.733490Z
-3358
-edavis10
+2011-03-03T11:05:09.000000Z
+190c117fe2ccfc4b1ebe70ae94e0d779
+2011-01-23T16:47:59.732003Z
+4759
+jplang
 has-props
 
 
@@ -61,7 +61,7 @@
 
 
 
-1995
+2197
 
 mail_handler.rb
 file
@@ -69,11 +69,11 @@
 
 
 
-2011-01-13T14:09:10.000000Z
-122f4a542fc3b0425bacdf2365e83004
-2011-01-10T19:57:41.641529Z
-4682
-jplang
+2011-03-03T11:40:18.000000Z
+ed655ccb5c306f548b3997d2dd3e3d60
+2011-02-12T10:08:11.630366Z
+4820
+jbbarth
 has-props
 
 
@@ -95,7 +95,7 @@
 
 
 
-13721
+13778
 
 repository.rb
 file
@@ -103,10 +103,10 @@
 
 
 
-2011-01-19T15:03:32.000000Z
-ef582464c7d04e61c0149608ea3dd11c
-2011-01-14T22:51:12.547821Z
-4712
+2011-03-03T11:40:18.000000Z
+a3fb46324c320aab8869e523c2a35d2a
+2011-03-01T10:27:30.170724Z
+4982
 tmaruyama
 has-props
 
@@ -129,7 +129,7 @@
 
 
 
-7023
+8497
 
 time_entry.rb
 file
@@ -137,7 +137,7 @@
 
 
 
-2011-01-19T15:03:32.000000Z
+2011-03-03T11:05:09.000000Z
 db327d70b8e3bcf04992bf7c69522467
 2011-01-14T18:04:16.470040Z
 4708
@@ -171,7 +171,7 @@
 
 
 
-2010-09-23T14:37:44.487730Z
+2011-03-03T11:05:09.000000Z
 441a5648e149e471c91928dc7f3f29a6
 2009-06-02T17:24:50.360628Z
 2778
@@ -205,7 +205,7 @@
 
 
 
-2010-11-19T13:04:46.956816Z
+2011-03-03T11:05:09.000000Z
 7d895b3a013ce8f4e63dd4e7aab7eb20
 2010-09-28T20:20:00.843023Z
 4221
@@ -239,10 +239,10 @@
 
 
 
-2010-09-23T14:37:44.467732Z
-87f2ff0401993963de36fe7502cd6949
-2010-02-26T09:13:12.187275Z
-3492
+2011-03-03T11:40:18.000000Z
+82898965a0c07d8fa25a52cfced3139f
+2011-02-26T13:09:25.657748Z
+4950
 jplang
 has-props
 
@@ -273,7 +273,7 @@
 
 
 
-2010-09-24T12:48:25.923798Z
+2011-03-03T11:05:09.000000Z
 01332c0957f952b76c01e7c7ebd112f0
 2010-09-10T18:46:23.747988Z
 4076
@@ -307,7 +307,7 @@
 
 
 
-2010-09-23T14:37:44.491776Z
+2011-03-03T11:05:09.000000Z
 6bf31c0491d87fff1481a91519f66363
 2009-11-15T15:22:55.021661Z
 3064
@@ -341,7 +341,7 @@
 
 
 
-2010-09-23T14:37:44.471831Z
+2011-03-03T11:05:09.000000Z
 cd405a055651d29541f2ebcf4e22f8dc
 2007-03-15T22:11:02.843262Z
 337
@@ -375,7 +375,7 @@
 
 
 
-2010-09-23T14:37:44.471831Z
+2011-03-03T11:05:09.000000Z
 da42817b3f290549a03ada82a93dc5d0
 2007-12-07T10:26:07.864320Z
 955
@@ -409,7 +409,7 @@
 
 
 
-2010-09-23T14:37:44.467732Z
+2011-03-03T11:05:09.000000Z
 622826f16c01373c631876eb1e480a65
 2010-07-24T00:19:32.307471Z
 3860
@@ -443,7 +443,7 @@
 
 
 
-2010-09-23T14:37:44.471831Z
+2011-03-03T11:05:09.000000Z
 90ec955317994a58df9a5a7f85b810e7
 2009-12-25T17:13:58.090736Z
 3240
@@ -477,10 +477,10 @@
 
 
 
-2011-01-19T15:03:32.000000Z
-910893e1e82a08d072a65d7c7c3dc8a8
-2011-01-15T14:12:18.630628Z
-4723
+2011-03-03T11:40:18.000000Z
+de5e44263227d075bddb23d8f478e24d
+2011-02-27T13:34:41.060565Z
+4954
 jplang
 has-props
 
@@ -503,7 +503,7 @@
 
 
 
-32309
+32300
 
 member_role.rb
 file
@@ -511,7 +511,7 @@
 
 
 
-2010-09-23T14:37:44.475780Z
+2011-03-03T11:05:09.000000Z
 95caba31fc55fea2d5ff257e70cf14b2
 2009-12-26T16:14:55.591181Z
 3250
@@ -545,7 +545,7 @@
 
 
 
-2010-09-23T14:37:44.487730Z
+2011-03-03T11:05:09.000000Z
 d5549b2847a255d4bdd7185a670988b5
 2009-10-21T22:35:03.091600Z
 2952
@@ -579,7 +579,7 @@
 
 
 
-2010-09-23T14:37:44.471831Z
+2011-03-03T11:05:09.000000Z
 028b9a9be35e74573921f9865f953439
 2009-12-25T17:13:58.090736Z
 3240
@@ -613,7 +613,7 @@
 
 
 
-2010-09-23T14:37:44.475780Z
+2011-03-03T11:05:09.000000Z
 50c2305c38ffecfb2138cd437e1c255c
 2009-12-13T14:26:54.396245Z
 3169
@@ -647,7 +647,7 @@
 
 
 
-2010-09-23T14:37:44.491776Z
+2011-03-03T11:05:09.000000Z
 c72443f206052fafae720378fba40163
 2009-12-13T12:39:22.716082Z
 3167
@@ -681,7 +681,7 @@
 
 
 
-2010-11-19T13:04:46.956816Z
+2011-03-03T11:05:09.000000Z
 3cac6a9c934a472fcbdf99cd00e5bfbb
 2010-10-27T16:27:06.240747Z
 4296
@@ -715,7 +715,7 @@
 
 
 
-2010-09-23T14:37:44.471831Z
+2011-03-03T11:05:09.000000Z
 56631baa5560f63cbb213855761c8fcc
 2009-10-25T10:31:01.135799Z
 2970
@@ -749,11 +749,11 @@
 
 
 
-2010-11-19T13:04:46.956816Z
-a45da72d99c7bc05ce93eb86205942e5
-2010-10-27T16:27:06.240747Z
-4296
-edavis10
+2011-03-03T11:40:18.000000Z
+f95a3be2b4090d0bd5b7d74b9e1d0a7c
+2011-02-27T12:35:31.414622Z
+4952
+jplang
 has-props
 
 
@@ -775,7 +775,7 @@
 
 
 
-6720
+6539
 
 comment.rb
 file
@@ -783,7 +783,7 @@
 
 
 
-2010-09-23T14:37:44.467732Z
+2011-03-03T11:05:09.000000Z
 0ca314834c39ddc12f2993caf5722e79
 2007-04-25T15:06:20.062636Z
 479
@@ -817,7 +817,7 @@
 
 
 
-2010-09-23T14:37:44.491776Z
+2011-03-03T11:05:09.000000Z
 a6804cb0c0abc6de72a184e7384ed36d
 2009-05-17T09:55:13.601447Z
 2749
@@ -851,10 +851,10 @@
 
 
 
-2011-01-13T14:09:10.000000Z
-05f6de2ec101b91c331e3b69602f73de
-2010-12-21T21:46:54.984442Z
-4553
+2011-03-03T11:40:18.000000Z
+886a34f5ef28f29a9eadb6e24dee89d6
+2011-02-20T13:03:32.835478Z
+4888
 jplang
 has-props
 
@@ -877,7 +877,7 @@
 
 
 
-26177
+26359
 
 member.rb
 file
@@ -885,7 +885,7 @@
 
 
 
-2010-09-23T14:37:44.475780Z
+2011-03-03T11:05:09.000000Z
 84d28844bbac90dab2c56a27ed58db18
 2010-08-09T05:10:00.803890Z
 3929
@@ -919,7 +919,7 @@
 
 
 
-2010-09-23T14:37:44.471831Z
+2011-03-03T11:05:09.000000Z
 60dadf29c4da2a4e97f463a647b8e98d
 2009-10-21T22:34:22.740755Z
 2945
@@ -953,10 +953,10 @@
 
 
 
-2010-11-19T13:04:46.956816Z
-1c4b2494e527ab830998b06f67b18f52
-2010-11-06T13:23:23.456511Z
-4373
+2011-03-03T11:05:09.000000Z
+f7340d6a500dabc6fa0aae801539d5e5
+2011-01-23T10:22:00.456857Z
+4752
 jplang
 has-props
 
@@ -979,7 +979,7 @@
 
 
 
-18490
+18498
 
 journal.rb
 file
@@ -987,7 +987,7 @@
 
 
 
-2010-09-24T12:48:25.923798Z
+2011-03-03T11:05:09.000000Z
 f3797cd6a4b7e4d256aba15e317e98b1
 2010-09-05T22:57:20.669640Z
 4062
@@ -1021,7 +1021,7 @@
 
 
 
-2010-09-23T14:37:44.491776Z
+2011-03-03T11:05:09.000000Z
 4561dfcb12b3fa066a9516c59a9eef94
 2010-04-30T12:19:51.238583Z
 3709
@@ -1055,7 +1055,7 @@
 
 
 
-2010-09-23T14:37:44.487730Z
+2011-03-03T11:05:09.000000Z
 47067c42f4d6607335adf75d11c3323b
 2007-03-12T17:59:02.654744Z
 333
@@ -1089,7 +1089,7 @@
 
 
 
-2010-09-23T14:37:44.487730Z
+2011-03-03T11:05:09.000000Z
 7dbc4f88d9fcd8f1057ea6d5982a1099
 2008-07-22T18:52:00.008047Z
 1689
@@ -1123,7 +1123,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 a81e0b41100d375e6327075ab1f59242
 2010-12-31T15:30:50.544770Z
 4599
@@ -1157,11 +1157,11 @@
 
 
 
-2010-09-23T14:37:44.487730Z
-5a0ad520fc95e7fefd2c6e6a1c9c3e76
-2010-02-12T22:08:02.981984Z
-3417
-edavis10
+2011-03-03T11:40:18.000000Z
+2815413f18c2ff6c015f0742ac28710a
+2011-02-21T09:41:34.953350Z
+4899
+tmaruyama
 has-props
 
 
@@ -1183,7 +1183,7 @@
 
 
 
-5164
+5188
 
 user.rb
 file
@@ -1191,10 +1191,10 @@
 
 
 
-2011-01-19T15:03:32.000000Z
-f1782d2190897c738b4abde29795c25c
-2011-01-16T15:36:42.998302Z
-4730
+2011-03-03T11:40:18.000000Z
+8616fc89354fef549fdfc741600c1118
+2011-02-23T17:27:31.762248Z
+4936
 jplang
 has-props
 
@@ -1217,7 +1217,7 @@
 
 
 
-17792
+19152
 
 auth_source.rb
 file
@@ -1225,11 +1225,11 @@
 
 
 
-2010-09-23T14:37:44.467732Z
-837db713425e094779466a392a668679
-2010-05-23T03:16:37.499264Z
-3745
-edavis10
+2011-03-03T11:40:18.000000Z
+f746a9534698bb8db5abf4bb7c9dd5ef
+2011-02-26T13:09:25.657748Z
+4950
+jplang
 has-props
 
 
@@ -1251,7 +1251,7 @@
 
 
 
-1811
+2013
 
 news_observer.rb
 file
@@ -1259,7 +1259,7 @@
 
 
 
-2010-09-23T14:37:44.475780Z
+2011-03-03T11:05:09.000000Z
 b98015db4679606ee5f8d75e55574745
 2009-03-28T00:38:57.780983Z
 2637
@@ -1293,10 +1293,10 @@
 
 
 
-2010-09-23T14:37:44.475780Z
-66b09263cf7988c661307523991d83d5
-2010-02-06T12:54:13.653502Z
-3373
+2011-03-03T11:05:09.000000Z
+82f0a68c26f05f4ed6aa94418a447a00
+2011-01-23T16:47:59.732003Z
+4759
 jplang
 has-props
 
@@ -1319,7 +1319,7 @@
 
 
 
-3576
+3789
 
 wiki_redirect.rb
 file
@@ -1327,7 +1327,7 @@
 
 
 
-2010-09-23T14:37:44.491776Z
+2011-03-03T11:05:09.000000Z
 4e4c64bab677a9e081fc1230ff6a3773
 2007-09-09T17:05:38.846724Z
 720
@@ -1361,7 +1361,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 e79f69fb89a7015471e190050ba97847
 2010-12-04T18:10:02.635321Z
 4467
@@ -1395,7 +1395,7 @@
 
 
 
-2010-09-23T14:37:44.471831Z
+2011-03-03T11:05:09.000000Z
 b76852d33bcfab19bb6c4e3e727da0ed
 2009-03-28T00:38:57.780983Z
 2637
@@ -1429,7 +1429,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 9fdcb569734799b2fface5b9c6207856
 2010-12-23T14:58:52.304263Z
 4574
@@ -1463,7 +1463,7 @@
 
 
 
-2010-09-23T14:37:44.475780Z
+2011-03-03T11:05:09.000000Z
 478dceec50480a17a7f2c321fc59e794
 2009-10-21T22:34:22.740755Z
 2945
@@ -1497,7 +1497,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 aaa3cd558c500d4db3bb506878e12fc1
 2010-11-27T12:42:11.793330Z
 4431
@@ -1531,11 +1531,11 @@
 
 
 
-2010-09-23T14:37:44.467732Z
-56226fcf13a57b18ed9faf979b5cf1bc
-2010-06-19T03:54:28.250424Z
-3774
-edavis10
+2011-03-03T11:05:09.000000Z
+527c189ff333588f46ed31db163dcc5c
+2011-01-23T10:41:43.320139Z
+4755
+jplang
 has-props
 
 
@@ -1557,7 +1557,7 @@
 
 
 
-6702
+6756
 
 group_custom_field.rb
 file
@@ -1565,7 +1565,7 @@
 
 
 
-2010-09-23T14:37:44.471831Z
+2011-03-03T11:05:09.000000Z
 2c07c440361210f71d2eb821ce95ce12
 2009-09-12T08:36:46.650954Z
 2869
@@ -1599,10 +1599,10 @@
 
 
 
-2011-01-13T14:09:10.000000Z
-b659d10bfe8c0debcf69013051422682
-2010-12-31T15:30:50.544770Z
-4599
+2011-03-03T11:40:18.000000Z
+4670d7c2c9ef9e23b0812e79c84c02de
+2011-02-20T15:38:07.840581Z
+4895
 jplang
 has-props
 
@@ -1625,7 +1625,7 @@
 
 
 
-3392
+3396
 
 time_entry_activity.rb
 file
@@ -1633,7 +1633,7 @@
 
 
 
-2010-09-23T14:37:44.487730Z
+2011-03-03T11:05:09.000000Z
 2508e3911e5bb016a9925502244b358f
 2009-12-25T17:13:58.090736Z
 3240
@@ -1667,7 +1667,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 e7d08a30fb7e14fd7486a7d7e04efccb
 2010-12-31T15:30:50.544770Z
 4599
@@ -1701,10 +1701,10 @@
 
 
 
-2010-09-23T14:37:44.475780Z
-4b700215d4c3bf72071a45448fa2b0e3
-2007-04-24T18:26:42.003879Z
-478
+2011-03-03T11:40:18.000000Z
+5f341c076b3e061541111187994969c8
+2011-02-27T13:34:41.060565Z
+4954
 jplang
 has-props
 
@@ -1727,7 +1727,7 @@
 
 
 
-1028
+864
 
 group.rb
 file
@@ -1735,7 +1735,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 a6be23c5316bf4e17cd5601624202b18
 2010-11-27T14:46:51.426568Z
 4437
@@ -1769,7 +1769,7 @@
 
 
 
-2010-09-23T14:37:44.471831Z
+2011-03-03T11:05:09.000000Z
 d4026d660fcb2601834d26268468aec2
 2009-03-28T00:38:57.780983Z
 2637
@@ -1803,10 +1803,10 @@
 
 
 
-2011-01-13T14:09:10.000000Z
-31b78fcec84fafc7077e80a8782e8889
-2011-01-02T09:45:05.291687Z
-4613
+2011-03-03T11:40:18.000000Z
+949462e61d78ec8bd5afc1af77363985
+2011-02-28T12:09:32.515358Z
+4962
 tmaruyama
 has-props
 
@@ -1829,7 +1829,7 @@
 
 
 
-8976
+9103
 
 role.rb
 file
@@ -1837,7 +1837,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 15c62eb20c0904d6061c427984ea5ad6
 2010-12-31T15:30:50.544770Z
 4599
@@ -1871,7 +1871,7 @@
 
 
 
-2010-09-23T14:37:44.479733Z
+2011-03-03T11:05:09.000000Z
 926ef98901f13ba13688fdc3ab0184fc
 2007-03-12T17:59:02.654744Z
 333
@@ -1905,7 +1905,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 c1467b11ffdf01173add19cbdcbecccd
 2011-01-10T18:32:04.408692Z
 4680
@@ -1939,7 +1939,7 @@
 
 
 
-2010-11-19T13:04:46.960863Z
+2011-03-03T11:05:09.000000Z
 6938d61d0f9e1fc190bb1d0e6c05546e
 2010-11-07T14:15:01.891476Z
 4382
@@ -1973,7 +1973,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 85527d6304192255d188255b78b10fb5
 2011-01-06T20:36:31.826591Z
 4645
@@ -2007,7 +2007,7 @@
 
 
 
-2010-09-23T14:37:44.471831Z
+2011-03-03T11:05:09.000000Z
 aeaf540cf9f940cbec4ddfc984dd6af5
 2009-12-25T17:13:58.090736Z
 3240
@@ -2041,7 +2041,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 ce0648ce457209d4a582b3076287bf01
 2010-12-12T17:00:52.100205Z
 4505
@@ -2075,10 +2075,10 @@
 
 
 
-2010-09-23T14:37:44.487730Z
-41ea06399352eb7b8c2903357abe1ab0
-2008-07-04T17:58:14.743502Z
-1623
+2011-03-03T11:40:18.000000Z
+feac9af79af67a78c767bd3def262255
+2011-02-21T09:53:29.844413Z
+4900
 jplang
 has-props
 
@@ -2101,5 +2101,5 @@
 
 
 
-1513
+1671
 
--- a/app/models/.svn/text-base/attachment.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/attachment.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -43,7 +43,7 @@
                                                         "LEFT JOIN #{Project.table_name} ON #{Document.table_name}.project_id = #{Project.table_name}.id"}
 
   cattr_accessor :storage_path
-  @@storage_path = "#{RAILS_ROOT}/files"
+  @@storage_path = Redmine::Configuration['attachments_storage_path'] || "#{RAILS_ROOT}/files"
   
   def validate
     if self.filesize > Setting.attachment_max_size.to_i.kilobytes
--- a/app/models/.svn/text-base/auth_source.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/auth_source.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -16,6 +16,8 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 class AuthSource < ActiveRecord::Base
+  include Redmine::Ciphering
+  
   has_many :users
   
   validates_presence_of :name
@@ -31,6 +33,14 @@
   def auth_method_name
     "Abstract"
   end
+  
+  def account_password
+    read_ciphered_attribute(:account_password)
+  end
+  
+  def account_password=(arg)
+    write_ciphered_attribute(:account_password, arg)
+  end
 
   def allow_password_changes?
     self.class.allow_password_changes?
--- a/app/models/.svn/text-base/auth_source_ldap.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/auth_source_ldap.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -20,8 +20,8 @@
 
 class AuthSourceLdap < AuthSource 
   validates_presence_of :host, :port, :attr_login
-  validates_length_of :name, :host, :account_password, :maximum => 60, :allow_nil => true
-  validates_length_of :account, :base_dn, :maximum => 255, :allow_nil => true
+  validates_length_of :name, :host, :maximum => 60, :allow_nil => true
+  validates_length_of :account, :account_password, :base_dn, :maximum => 255, :allow_nil => true
   validates_length_of :attr_login, :attr_firstname, :attr_lastname, :attr_mail, :maximum => 30, :allow_nil => true
   validates_numericality_of :port, :only_integer => true
   
--- a/app/models/.svn/text-base/changeset.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/changeset.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -56,10 +56,6 @@
       revision.to_s
     end
   end
-  
-  def comments=(comment)
-    write_attribute(:comments, Changeset.normalize_comments(comment))
-  end
 
   def committed_on=(date)
     self.commit_date = date
@@ -75,10 +71,6 @@
     end
   end
   
-  def committer=(arg)
-    write_attribute(:committer, self.class.to_utf8(arg.to_s))
-  end
-
   def project
     repository.project
   end
@@ -88,20 +80,24 @@
   end
   
   def before_create
-    self.user = repository.find_committer_user(committer)
+    self.committer = self.class.to_utf8(self.committer, repository.repo_log_encoding)
+    self.comments  = self.class.normalize_comments(self.comments, repository.repo_log_encoding)
+    self.user = repository.find_committer_user(self.committer)
   end
-  
+
   def after_create
     scan_comment_for_issue_ids
   end
   
   TIMELOG_RE = /
     (
-    (\d+([.,]\d+)?)h?
+    ((\d+)(h|hours?))((\d+)(m|min)?)?
+    |
+    ((\d+)(h|hours?|m|min))
     |
     (\d+):(\d+)
     |
-    ((\d+)(h|hours?))?((\d+)(m|min)?)?
+    (\d+([\.,]\d+)?)h?
     )
     /x
   
@@ -161,11 +157,6 @@
     @next ||= Changeset.find(:first, :conditions => ['id > ? AND repository_id = ?', self.id, self.repository_id], :order => 'id ASC')
   end
   
-  # Strips and reencodes a commit log before insertion into the database
-  def self.normalize_comments(str)
-    to_utf8(str.to_s.strip)
-  end
-
   # Creates a new Change from it's common parameters
   def create_change(change)
     Change.create(:changeset => self,
@@ -174,7 +165,7 @@
                   :from_path => change[:from_path],
                   :from_revision => change[:from_revision])
   end
-  
+
   private
 
   # Finds an issue that can be referenced by the commit message
@@ -244,15 +235,17 @@
     return @short_comments, @long_comments
   end
 
-  def self.to_utf8(str)
-    if str.respond_to?(:force_encoding)
-      str.force_encoding('UTF-8')
-      return str if str.valid_encoding?
-    else
-      return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
-    end
+  public
 
-    encoding = Setting.commit_logs_encoding.to_s.strip
+  # Strips and reencodes a commit log before insertion into the database
+  def self.normalize_comments(str, encoding)
+    Changeset.to_utf8(str.to_s.strip, encoding)
+  end
+
+  private
+
+  def self.to_utf8(str, encoding)
+    return str if str.blank?
     unless encoding.blank? || encoding == 'UTF-8'
       begin
         str = Iconv.conv('UTF-8', encoding, str)
@@ -260,12 +253,20 @@
         # do nothing here
       end
     end
-    # removes invalid UTF8 sequences
-    begin
-      Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + '  ')[0..-3]
-    rescue Iconv::InvalidEncoding
-      # "UTF-8//IGNORE" is not supported on some OS
-      str
+    if str.respond_to?(:force_encoding)
+      str.force_encoding('UTF-8')
+      if ! str.valid_encoding?
+        str = str.encode("US-ASCII", :invalid => :replace,
+              :undef => :replace, :replace => '?').encode("UTF-8")
+      end
+    else
+      # removes invalid UTF8 sequences
+      begin
+        str = Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + '  ')[0..-3]
+      rescue Iconv::InvalidEncoding
+        # "UTF-8//IGNORE" is not supported on some OS
+      end
     end
+    str
   end
 end
--- a/app/models/.svn/text-base/document.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/document.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -29,6 +29,9 @@
   validates_presence_of :project, :title, :category
   validates_length_of :title, :maximum => 60
   
+  named_scope :visible, lambda {|*args| { :include => :project,
+                                          :conditions => Project.allowed_to_condition(args.first || User.current, :view_documents) } }
+  
   def visible?(user=User.current)
     !user.nil? && user.allowed_to?(:view_documents, project)
   end
--- a/app/models/.svn/text-base/issue.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/issue.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -34,7 +34,7 @@
   has_many :relations_from, :class_name => 'IssueRelation', :foreign_key => 'issue_from_id', :dependent => :delete_all
   has_many :relations_to, :class_name => 'IssueRelation', :foreign_key => 'issue_to_id', :dependent => :delete_all
   
-  acts_as_nested_set :scope => 'root_id'
+  acts_as_nested_set :scope => 'root_id', :dependent => :destroy
   acts_as_attachable :after_remove => :attachment_removed
   acts_as_customizable
   acts_as_watchable
@@ -89,7 +89,6 @@
   before_create :default_assign
   before_save :close_duplicates, :update_done_ratio_from_issue_status
   after_save :reschedule_following_issues, :update_nested_set_attributes, :update_parent_attributes, :create_journal
-  after_destroy :destroy_children
   after_destroy :update_parent_attributes
   
   # Returns true if usr or current user is allowed to view the issue
@@ -423,7 +422,12 @@
   
   # Returns an array of status that user is able to apply
   def new_statuses_allowed_to(user, include_default=false)
-    statuses = status.find_new_statuses_allowed_to(user.roles_for_project(project), tracker)
+    statuses = status.find_new_statuses_allowed_to(
+      user.roles_for_project(project),
+      tracker,
+      author == user,
+      assigned_to_id_changed? ? assigned_to_id_was == user.id : assigned_to_id == user.id
+      )
     statuses << status unless statuses.empty?
     statuses << IssueStatus.default if include_default
     statuses = statuses.uniq.sort
@@ -758,14 +762,6 @@
     end
   end
   
-  def destroy_children
-    unless leaf?
-      children.each do |child|
-        child.destroy
-      end
-    end
-  end
-  
   # Update issues so their versions are not pointing to a
   # fixed_version that is not shared with the issue's project
   def self.update_versions(conditions=nil)
@@ -833,7 +829,7 @@
   def create_journal
     if @current_journal
       # attributes changes
-      (Issue.column_names - %w(id description root_id lft rgt lock_version created_on updated_on)).each {|c|
+      (Issue.column_names - %w(id root_id lft rgt lock_version created_on updated_on)).each {|c|
         @current_journal.details << JournalDetail.new(:property => 'attr',
                                                       :prop_key => c,
                                                       :old_value => @issue_before_change.send(c),
--- a/app/models/.svn/text-base/issue_status.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/issue_status.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -50,10 +50,16 @@
 
   # Returns an array of all statuses the given role can switch to
   # Uses association cache when called more than one time
-  def new_statuses_allowed_to(roles, tracker)
+  def new_statuses_allowed_to(roles, tracker, author=false, assignee=false)
     if roles && tracker
       role_ids = roles.collect(&:id)
-      new_statuses = workflows.select {|w| role_ids.include?(w.role_id) && w.tracker_id == tracker.id}.collect{|w| w.new_status}.compact.sort
+      transitions = workflows.select do |w|
+        role_ids.include?(w.role_id) &&
+        w.tracker_id == tracker.id && 
+        (author || !w.author) &&
+        (assignee || !w.assignee)
+      end
+      transitions.collect{|w| w.new_status}.compact.sort
     else
       []
     end
@@ -61,24 +67,19 @@
   
   # Same thing as above but uses a database query
   # More efficient than the previous method if called just once
-  def find_new_statuses_allowed_to(roles, tracker)
+  def find_new_statuses_allowed_to(roles, tracker, author=false, assignee=false)
     if roles && tracker
+      conditions = {:role_id => roles.collect(&:id), :tracker_id => tracker.id}
+      conditions[:author] = false unless author
+      conditions[:assignee] = false unless assignee
+      
       workflows.find(:all,
                      :include => :new_status,
-                     :conditions => { :role_id => roles.collect(&:id), 
-                                      :tracker_id => tracker.id}).collect{ |w| w.new_status }.compact.sort
+                     :conditions => conditions).collect{|w| w.new_status}.compact.sort
     else
       []
     end
   end
-  
-  def new_status_allowed_to?(status, roles, tracker)
-    if status && roles && tracker
-      !workflows.find(:first, :conditions => {:new_status_id => status.id, :role_id => roles.collect(&:id), :tracker_id => tracker.id}).nil?
-    else
-      false
-    end
-  end
 
   def <=>(status)
     position <=> status.position
--- a/app/models/.svn/text-base/journal_detail.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/journal_detail.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -17,9 +17,4 @@
 
 class JournalDetail < ActiveRecord::Base
   belongs_to :journal
-  
-  def before_save
-    self.value = value[0..254] if value && value.is_a?(String)
-    self.old_value = old_value[0..254] if old_value && old_value.is_a?(String)
-  end
 end
--- a/app/models/.svn/text-base/mail_handler.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/mail_handler.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -100,7 +100,7 @@
     elsif m = email.subject.match(MESSAGE_REPLY_SUBJECT_RE)
       receive_message_reply(m[1].to_i)
     else
-      receive_issue
+      dispatch_to_default
     end
   rescue ActiveRecord::RecordInvalid => e
     # TODO: send a email to the user
@@ -113,6 +113,10 @@
     logger.error "MailHandler: unauthorized attempt from #{user}" if logger
     false
   end
+
+  def dispatch_to_default
+    receive_issue
+  end
   
   # Creates a new issue
   def receive_issue
--- a/app/models/.svn/text-base/mailer.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/mailer.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -296,7 +296,7 @@
       if raise_errors
         raise e
       elsif mylogger
-        mylogger.error "The following error occured while sending email notification: \"#{e.message}\". Check your configuration in config/email.yml."
+        mylogger.error "The following error occured while sending email notification: \"#{e.message}\". Check your configuration in config/configuration.yml."
       end
     ensure
       self.class.raise_delivery_errors = raise_errors
--- a/app/models/.svn/text-base/message.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/message.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -42,6 +42,9 @@
   
   after_create :add_author_as_watcher
   
+  named_scope :visible, lambda {|*args| { :include => {:board => :project},
+                                          :conditions => Project.allowed_to_condition(args.first || User.current, :view_messages) } }
+  
   def visible?(user=User.current)
     !user.nil? && user.allowed_to?(:view_messages, project)
   end
--- a/app/models/.svn/text-base/query.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/query.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -566,9 +566,19 @@
     sql = ''
     case operator
     when "="
-      sql = "#{db_table}.#{db_field} IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + ")"
+      if value.any?
+        sql = "#{db_table}.#{db_field} IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + ")"
+      else
+        # IN an empty set
+        sql = "1=0"
+      end
     when "!"
-      sql = "(#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} NOT IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + "))"
+      if value.any?
+        sql = "(#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} NOT IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + "))"
+      else
+        # NOT IN an empty set
+        sql = "1=1"
+      end
     when "!*"
       sql = "#{db_table}.#{db_field} IS NULL"
       sql << " OR #{db_table}.#{db_field} = ''" if is_custom_filter
--- a/app/models/.svn/text-base/repository.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/repository.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -16,6 +16,8 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 class Repository < ActiveRecord::Base
+  include Redmine::Ciphering
+  
   belongs_to :project
   has_many :changesets, :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC"
   has_many :changes, :through => :changesets
@@ -24,29 +26,43 @@
   # has_many :changesets, :dependent => :destroy is too slow for big repositories
   before_destroy :clear_changesets
   
+  validates_length_of :password, :maximum => 255, :allow_nil => true
   # Checks if the SCM is enabled when creating a repository
   validate_on_create { |r| r.errors.add(:type, :invalid) unless Setting.enabled_scm.include?(r.class.name.demodulize) }
-  
+
   # Removes leading and trailing whitespace
   def url=(arg)
     write_attribute(:url, arg ? arg.to_s.strip : nil)
   end
-  
+
   # Removes leading and trailing whitespace
   def root_url=(arg)
     write_attribute(:root_url, arg ? arg.to_s.strip : nil)
   end
+  
+  def password
+    read_ciphered_attribute(:password)
+  end
+  
+  def password=(arg)
+    write_ciphered_attribute(:password, arg)
+  end
+
+  def scm_adapter
+    self.class.scm_adapter_class
+  end
 
   def scm
-    @scm ||= self.scm_adapter.new url, root_url, login, password
+    @scm ||= self.scm_adapter.new(url, root_url,
+                                  login, password, path_encoding)
     update_attribute(:root_url, @scm.root_url) if root_url.blank?
     @scm
   end
-  
+
   def scm_name
     self.class.scm_name
   end
-  
+
   def supports_cat?
     scm.supports_cat?
   end
@@ -173,18 +189,27 @@
       user
     end
   end
-  
+
+  def repo_log_encoding
+    encoding = log_encoding.to_s.strip
+    encoding.blank? ? 'UTF-8' : encoding
+  end
+
   # Fetches new changesets for all repositories of active projects
   # Can be called periodically by an external script
   # eg. ruby script/runner "Repository.fetch_changesets"
   def self.fetch_changesets
     Project.active.has_module(:repository).find(:all, :include => :repository).each do |project|
       if project.repository
-        project.repository.fetch_changesets
+        begin
+          project.repository.fetch_changesets
+        rescue Redmine::Scm::Adapters::CommandFailed => e
+          logger.error "scm: error during fetching changesets: #{e.message}"
+        end
       end
     end
   end
-  
+
   # scan changeset comments to find related and fixed issues for all repositories
   def self.scan_changesets_for_issue_ids
     find(:all).each(&:scan_changesets_for_issue_ids)
@@ -197,16 +222,50 @@
   def self.available_scm
     subclasses.collect {|klass| [klass.scm_name, klass.name]}
   end
-  
+
   def self.factory(klass_name, *args)
     klass = "Repository::#{klass_name}".constantize
     klass.new(*args)
   rescue
     nil
   end
-  
+
+  def self.scm_adapter_class
+    nil
+  end
+
+  def self.scm_command
+    ret = ""
+    begin
+      ret = self.scm_adapter_class.client_command if self.scm_adapter_class
+    rescue Redmine::Scm::Adapters::CommandFailed => e
+      logger.error "scm: error during get command: #{e.message}"
+    end
+    ret
+  end
+
+  def self.scm_version_string
+    ret = ""
+    begin
+      ret = self.scm_adapter_class.client_version_string if self.scm_adapter_class
+    rescue Redmine::Scm::Adapters::CommandFailed => e
+      logger.error "scm: error during get version string: #{e.message}"
+    end
+    ret
+  end
+
+  def self.scm_available
+    ret = false
+    begin
+      ret = self.scm_adapter_class.client_available if self.scm_adapter_class 
+    rescue Redmine::Scm::Adapters::CommandFailed => e
+      logger.error "scm: error during get scm available: #{e.message}"
+    end
+    ret
+  end
+
   private
-  
+
   def before_save
     # Strips url and root_url
     url.strip!
--- a/app/models/.svn/text-base/setting.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/setting.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -65,6 +65,7 @@
                   UTF-16LE
                   EUC-JP
                   Shift_JIS
+                  CP932
                   GB18030
                   GBK
                   ISCII91
--- a/app/models/.svn/text-base/user.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/user.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -83,7 +83,9 @@
   
   def before_save
     # update hashed_password if password was set
-    self.hashed_password = User.hash_password(self.password) if self.password && self.auth_source_id.blank?
+    if self.password && self.auth_source_id.blank?
+      salt_password(password)
+    end
   end
   
   def reload(*args)
@@ -121,7 +123,7 @@
         return nil unless user.auth_source.authenticate(login, password)
       else
         # authentication with local password
-        return nil unless User.hash_password(password) == user.hashed_password        
+        return nil unless user.check_password?(password)
       end
     else
       # user is not yet registered, try to authenticate with available sources
@@ -200,13 +202,21 @@
     update_attribute(:status, STATUS_LOCKED)
   end
 
+  # Returns true if +clear_password+ is the correct user's password, otherwise false
   def check_password?(clear_password)
     if auth_source_id.present?
       auth_source.authenticate(self.login, clear_password)
     else
-      User.hash_password(clear_password) == self.hashed_password
+      User.hash_password("#{salt}#{User.hash_password clear_password}") == hashed_password
     end
   end
+  
+  # Generates a random salt and computes hashed_password for +clear_password+
+  # The hashed password is stored in the following form: SHA1(salt + SHA1(password))
+  def salt_password(clear_password)
+    self.salt = User.generate_salt
+    self.hashed_password = User.hash_password("#{salt}#{User.hash_password clear_password}")
+  end
 
   # Does the backend storage allow this user to change their password?
   def change_password_allowed?
@@ -424,7 +434,12 @@
     when 'all'
       true
     when 'selected'
-      # Handled by the Project
+      # user receives notifications for created/assigned issues on unselected projects
+      if object.is_a?(Issue) && (object.author == self || object.assigned_to == self)
+        true
+      else
+        false
+      end
     when 'none'
       false
     when 'only_my_events'
@@ -468,6 +483,20 @@
     end
     anonymous_user
   end
+
+  # Salts all existing unsalted passwords
+  # It changes password storage scheme from SHA1(password) to SHA1(salt + SHA1(password))
+  # This method is used in the SaltPasswords migration and is to be kept as is
+  def self.salt_unsalted_passwords!
+    transaction do
+      User.find_each(:conditions => "salt IS NULL OR salt = ''") do |user|
+        next if user.hashed_password.blank?
+        salt = User.generate_salt
+        hashed_password = User.hash_password("#{salt}#{user.hashed_password}")
+        User.update_all("salt = '#{salt}', hashed_password = '#{hashed_password}'", ["id = ?", user.id] )
+      end
+    end
+  end
   
   protected
   
@@ -509,6 +538,12 @@
   def self.hash_password(clear_password)
     Digest::SHA1.hexdigest(clear_password || "")
   end
+  
+  # Returns a 128bits random salt as a hex string (32 chars long)
+  def self.generate_salt
+    ActiveSupport::SecureRandom.hex(16)
+  end
+  
 end
 
 class AnonymousUser < User
--- a/app/models/.svn/text-base/user_preference.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/user_preference.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -51,4 +51,7 @@
   
   def comments_sorting; self[:comments_sorting] end
   def comments_sorting=(order); self[:comments_sorting]=order end
+  
+  def warn_on_leaving_unsaved; self[:warn_on_leaving_unsaved] || '1'; end
+  def warn_on_leaving_unsaved=(value); self[:warn_on_leaving_unsaved]=value; end
 end
--- a/app/models/.svn/text-base/wiki_page.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/.svn/text-base/wiki_page.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -149,17 +149,13 @@
   end
 end
 
-class WikiDiff
-  attr_reader :diff, :words, :content_to, :content_from
+class WikiDiff < Redmine::Helpers::Diff
+  attr_reader :content_to, :content_from
   
   def initialize(content_to, content_from)
     @content_to = content_to
     @content_from = content_from
-    @words = content_to.text.split(/(\s+)/)
-    @words = @words.select {|word| word != ' '}
-    words_from = content_from.text.split(/(\s+)/)
-    words_from = words_from.select {|word| word != ' '}    
-    @diff = words_from.diff @words
+    super(content_to.text, content_from.text)
   end
 end
 
--- a/app/models/attachment.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/attachment.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -43,7 +43,7 @@
                                                         "LEFT JOIN #{Project.table_name} ON #{Document.table_name}.project_id = #{Project.table_name}.id"}
 
   cattr_accessor :storage_path
-  @@storage_path = "#{RAILS_ROOT}/files"
+  @@storage_path = Redmine::Configuration['attachments_storage_path'] || "#{RAILS_ROOT}/files"
   
   def validate
     if self.filesize > Setting.attachment_max_size.to_i.kilobytes
--- a/app/models/auth_source.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/auth_source.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -16,6 +16,8 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 class AuthSource < ActiveRecord::Base
+  include Redmine::Ciphering
+  
   has_many :users
   
   validates_presence_of :name
@@ -31,6 +33,14 @@
   def auth_method_name
     "Abstract"
   end
+  
+  def account_password
+    read_ciphered_attribute(:account_password)
+  end
+  
+  def account_password=(arg)
+    write_ciphered_attribute(:account_password, arg)
+  end
 
   def allow_password_changes?
     self.class.allow_password_changes?
--- a/app/models/auth_source_ldap.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/auth_source_ldap.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -20,8 +20,8 @@
 
 class AuthSourceLdap < AuthSource 
   validates_presence_of :host, :port, :attr_login
-  validates_length_of :name, :host, :account_password, :maximum => 60, :allow_nil => true
-  validates_length_of :account, :base_dn, :maximum => 255, :allow_nil => true
+  validates_length_of :name, :host, :maximum => 60, :allow_nil => true
+  validates_length_of :account, :account_password, :base_dn, :maximum => 255, :allow_nil => true
   validates_length_of :attr_login, :attr_firstname, :attr_lastname, :attr_mail, :maximum => 30, :allow_nil => true
   validates_numericality_of :port, :only_integer => true
   
--- a/app/models/changeset.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/changeset.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -56,10 +56,6 @@
       revision.to_s
     end
   end
-  
-  def comments=(comment)
-    write_attribute(:comments, Changeset.normalize_comments(comment))
-  end
 
   def committed_on=(date)
     self.commit_date = date
@@ -75,10 +71,6 @@
     end
   end
   
-  def committer=(arg)
-    write_attribute(:committer, self.class.to_utf8(arg.to_s))
-  end
-
   def project
     repository.project
   end
@@ -88,20 +80,24 @@
   end
   
   def before_create
-    self.user = repository.find_committer_user(committer)
+    self.committer = self.class.to_utf8(self.committer, repository.repo_log_encoding)
+    self.comments  = self.class.normalize_comments(self.comments, repository.repo_log_encoding)
+    self.user = repository.find_committer_user(self.committer)
   end
-  
+
   def after_create
     scan_comment_for_issue_ids
   end
   
   TIMELOG_RE = /
     (
-    (\d+([.,]\d+)?)h?
+    ((\d+)(h|hours?))((\d+)(m|min)?)?
+    |
+    ((\d+)(h|hours?|m|min))
     |
     (\d+):(\d+)
     |
-    ((\d+)(h|hours?))?((\d+)(m|min)?)?
+    (\d+([\.,]\d+)?)h?
     )
     /x
   
@@ -161,11 +157,6 @@
     @next ||= Changeset.find(:first, :conditions => ['id > ? AND repository_id = ?', self.id, self.repository_id], :order => 'id ASC')
   end
   
-  # Strips and reencodes a commit log before insertion into the database
-  def self.normalize_comments(str)
-    to_utf8(str.to_s.strip)
-  end
-
   # Creates a new Change from it's common parameters
   def create_change(change)
     Change.create(:changeset => self,
@@ -174,7 +165,7 @@
                   :from_path => change[:from_path],
                   :from_revision => change[:from_revision])
   end
-  
+
   private
 
   # Finds an issue that can be referenced by the commit message
@@ -244,15 +235,17 @@
     return @short_comments, @long_comments
   end
 
-  def self.to_utf8(str)
-    if str.respond_to?(:force_encoding)
-      str.force_encoding('UTF-8')
-      return str if str.valid_encoding?
-    else
-      return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
-    end
+  public
 
-    encoding = Setting.commit_logs_encoding.to_s.strip
+  # Strips and reencodes a commit log before insertion into the database
+  def self.normalize_comments(str, encoding)
+    Changeset.to_utf8(str.to_s.strip, encoding)
+  end
+
+  private
+
+  def self.to_utf8(str, encoding)
+    return str if str.blank?
     unless encoding.blank? || encoding == 'UTF-8'
       begin
         str = Iconv.conv('UTF-8', encoding, str)
@@ -260,12 +253,20 @@
         # do nothing here
       end
     end
-    # removes invalid UTF8 sequences
-    begin
-      Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + '  ')[0..-3]
-    rescue Iconv::InvalidEncoding
-      # "UTF-8//IGNORE" is not supported on some OS
-      str
+    if str.respond_to?(:force_encoding)
+      str.force_encoding('UTF-8')
+      if ! str.valid_encoding?
+        str = str.encode("US-ASCII", :invalid => :replace,
+              :undef => :replace, :replace => '?').encode("UTF-8")
+      end
+    else
+      # removes invalid UTF8 sequences
+      begin
+        str = Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + '  ')[0..-3]
+      rescue Iconv::InvalidEncoding
+        # "UTF-8//IGNORE" is not supported on some OS
+      end
     end
+    str
   end
 end
--- a/app/models/document.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/document.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -29,6 +29,9 @@
   validates_presence_of :project, :title, :category
   validates_length_of :title, :maximum => 60
   
+  named_scope :visible, lambda {|*args| { :include => :project,
+                                          :conditions => Project.allowed_to_condition(args.first || User.current, :view_documents) } }
+  
   def visible?(user=User.current)
     !user.nil? && user.allowed_to?(:view_documents, project)
   end
--- a/app/models/issue.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/issue.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -34,7 +34,7 @@
   has_many :relations_from, :class_name => 'IssueRelation', :foreign_key => 'issue_from_id', :dependent => :delete_all
   has_many :relations_to, :class_name => 'IssueRelation', :foreign_key => 'issue_to_id', :dependent => :delete_all
   
-  acts_as_nested_set :scope => 'root_id'
+  acts_as_nested_set :scope => 'root_id', :dependent => :destroy
   acts_as_attachable :after_remove => :attachment_removed
   acts_as_customizable
   acts_as_watchable
@@ -89,7 +89,6 @@
   before_create :default_assign
   before_save :close_duplicates, :update_done_ratio_from_issue_status
   after_save :reschedule_following_issues, :update_nested_set_attributes, :update_parent_attributes, :create_journal
-  after_destroy :destroy_children
   after_destroy :update_parent_attributes
   
   # Returns true if usr or current user is allowed to view the issue
@@ -423,7 +422,12 @@
   
   # Returns an array of status that user is able to apply
   def new_statuses_allowed_to(user, include_default=false)
-    statuses = status.find_new_statuses_allowed_to(user.roles_for_project(project), tracker)
+    statuses = status.find_new_statuses_allowed_to(
+      user.roles_for_project(project),
+      tracker,
+      author == user,
+      assigned_to_id_changed? ? assigned_to_id_was == user.id : assigned_to_id == user.id
+      )
     statuses << status unless statuses.empty?
     statuses << IssueStatus.default if include_default
     statuses = statuses.uniq.sort
@@ -758,14 +762,6 @@
     end
   end
   
-  def destroy_children
-    unless leaf?
-      children.each do |child|
-        child.destroy
-      end
-    end
-  end
-  
   # Update issues so their versions are not pointing to a
   # fixed_version that is not shared with the issue's project
   def self.update_versions(conditions=nil)
@@ -833,7 +829,7 @@
   def create_journal
     if @current_journal
       # attributes changes
-      (Issue.column_names - %w(id description root_id lft rgt lock_version created_on updated_on)).each {|c|
+      (Issue.column_names - %w(id root_id lft rgt lock_version created_on updated_on)).each {|c|
         @current_journal.details << JournalDetail.new(:property => 'attr',
                                                       :prop_key => c,
                                                       :old_value => @issue_before_change.send(c),
--- a/app/models/issue_status.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/issue_status.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -50,10 +50,16 @@
 
   # Returns an array of all statuses the given role can switch to
   # Uses association cache when called more than one time
-  def new_statuses_allowed_to(roles, tracker)
+  def new_statuses_allowed_to(roles, tracker, author=false, assignee=false)
     if roles && tracker
       role_ids = roles.collect(&:id)
-      new_statuses = workflows.select {|w| role_ids.include?(w.role_id) && w.tracker_id == tracker.id}.collect{|w| w.new_status}.compact.sort
+      transitions = workflows.select do |w|
+        role_ids.include?(w.role_id) &&
+        w.tracker_id == tracker.id && 
+        (author || !w.author) &&
+        (assignee || !w.assignee)
+      end
+      transitions.collect{|w| w.new_status}.compact.sort
     else
       []
     end
@@ -61,24 +67,19 @@
   
   # Same thing as above but uses a database query
   # More efficient than the previous method if called just once
-  def find_new_statuses_allowed_to(roles, tracker)
+  def find_new_statuses_allowed_to(roles, tracker, author=false, assignee=false)
     if roles && tracker
+      conditions = {:role_id => roles.collect(&:id), :tracker_id => tracker.id}
+      conditions[:author] = false unless author
+      conditions[:assignee] = false unless assignee
+      
       workflows.find(:all,
                      :include => :new_status,
-                     :conditions => { :role_id => roles.collect(&:id), 
-                                      :tracker_id => tracker.id}).collect{ |w| w.new_status }.compact.sort
+                     :conditions => conditions).collect{|w| w.new_status}.compact.sort
     else
       []
     end
   end
-  
-  def new_status_allowed_to?(status, roles, tracker)
-    if status && roles && tracker
-      !workflows.find(:first, :conditions => {:new_status_id => status.id, :role_id => roles.collect(&:id), :tracker_id => tracker.id}).nil?
-    else
-      false
-    end
-  end
 
   def <=>(status)
     position <=> status.position
--- a/app/models/journal_detail.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/journal_detail.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -17,9 +17,4 @@
 
 class JournalDetail < ActiveRecord::Base
   belongs_to :journal
-  
-  def before_save
-    self.value = value[0..254] if value && value.is_a?(String)
-    self.old_value = old_value[0..254] if old_value && old_value.is_a?(String)
-  end
 end
--- a/app/models/mail_handler.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/mail_handler.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -100,7 +100,7 @@
     elsif m = email.subject.match(MESSAGE_REPLY_SUBJECT_RE)
       receive_message_reply(m[1].to_i)
     else
-      receive_issue
+      dispatch_to_default
     end
   rescue ActiveRecord::RecordInvalid => e
     # TODO: send a email to the user
@@ -113,6 +113,10 @@
     logger.error "MailHandler: unauthorized attempt from #{user}" if logger
     false
   end
+
+  def dispatch_to_default
+    receive_issue
+  end
   
   # Creates a new issue
   def receive_issue
--- a/app/models/mailer.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/mailer.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -296,7 +296,7 @@
       if raise_errors
         raise e
       elsif mylogger
-        mylogger.error "The following error occured while sending email notification: \"#{e.message}\". Check your configuration in config/email.yml."
+        mylogger.error "The following error occured while sending email notification: \"#{e.message}\". Check your configuration in config/configuration.yml."
       end
     ensure
       self.class.raise_delivery_errors = raise_errors
--- a/app/models/message.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/message.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -42,6 +42,9 @@
   
   after_create :add_author_as_watcher
   
+  named_scope :visible, lambda {|*args| { :include => {:board => :project},
+                                          :conditions => Project.allowed_to_condition(args.first || User.current, :view_messages) } }
+  
   def visible?(user=User.current)
     !user.nil? && user.allowed_to?(:view_messages, project)
   end
--- a/app/models/query.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/query.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -566,9 +566,19 @@
     sql = ''
     case operator
     when "="
-      sql = "#{db_table}.#{db_field} IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + ")"
+      if value.any?
+        sql = "#{db_table}.#{db_field} IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + ")"
+      else
+        # IN an empty set
+        sql = "1=0"
+      end
     when "!"
-      sql = "(#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} NOT IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + "))"
+      if value.any?
+        sql = "(#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} NOT IN (" + value.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + "))"
+      else
+        # NOT IN an empty set
+        sql = "1=1"
+      end
     when "!*"
       sql = "#{db_table}.#{db_field} IS NULL"
       sql << " OR #{db_table}.#{db_field} = ''" if is_custom_filter
--- a/app/models/repository.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -16,6 +16,8 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 class Repository < ActiveRecord::Base
+  include Redmine::Ciphering
+  
   belongs_to :project
   has_many :changesets, :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC"
   has_many :changes, :through => :changesets
@@ -24,29 +26,43 @@
   # has_many :changesets, :dependent => :destroy is too slow for big repositories
   before_destroy :clear_changesets
   
+  validates_length_of :password, :maximum => 255, :allow_nil => true
   # Checks if the SCM is enabled when creating a repository
   validate_on_create { |r| r.errors.add(:type, :invalid) unless Setting.enabled_scm.include?(r.class.name.demodulize) }
-  
+
   # Removes leading and trailing whitespace
   def url=(arg)
     write_attribute(:url, arg ? arg.to_s.strip : nil)
   end
-  
+
   # Removes leading and trailing whitespace
   def root_url=(arg)
     write_attribute(:root_url, arg ? arg.to_s.strip : nil)
   end
+  
+  def password
+    read_ciphered_attribute(:password)
+  end
+  
+  def password=(arg)
+    write_ciphered_attribute(:password, arg)
+  end
+
+  def scm_adapter
+    self.class.scm_adapter_class
+  end
 
   def scm
-    @scm ||= self.scm_adapter.new url, root_url, login, password
+    @scm ||= self.scm_adapter.new(url, root_url,
+                                  login, password, path_encoding)
     update_attribute(:root_url, @scm.root_url) if root_url.blank?
     @scm
   end
-  
+
   def scm_name
     self.class.scm_name
   end
-  
+
   def supports_cat?
     scm.supports_cat?
   end
@@ -173,18 +189,27 @@
       user
     end
   end
-  
+
+  def repo_log_encoding
+    encoding = log_encoding.to_s.strip
+    encoding.blank? ? 'UTF-8' : encoding
+  end
+
   # Fetches new changesets for all repositories of active projects
   # Can be called periodically by an external script
   # eg. ruby script/runner "Repository.fetch_changesets"
   def self.fetch_changesets
     Project.active.has_module(:repository).find(:all, :include => :repository).each do |project|
       if project.repository
-        project.repository.fetch_changesets
+        begin
+          project.repository.fetch_changesets
+        rescue Redmine::Scm::Adapters::CommandFailed => e
+          logger.error "scm: error during fetching changesets: #{e.message}"
+        end
       end
     end
   end
-  
+
   # scan changeset comments to find related and fixed issues for all repositories
   def self.scan_changesets_for_issue_ids
     find(:all).each(&:scan_changesets_for_issue_ids)
@@ -197,16 +222,50 @@
   def self.available_scm
     subclasses.collect {|klass| [klass.scm_name, klass.name]}
   end
-  
+
   def self.factory(klass_name, *args)
     klass = "Repository::#{klass_name}".constantize
     klass.new(*args)
   rescue
     nil
   end
-  
+
+  def self.scm_adapter_class
+    nil
+  end
+
+  def self.scm_command
+    ret = ""
+    begin
+      ret = self.scm_adapter_class.client_command if self.scm_adapter_class
+    rescue Redmine::Scm::Adapters::CommandFailed => e
+      logger.error "scm: error during get command: #{e.message}"
+    end
+    ret
+  end
+
+  def self.scm_version_string
+    ret = ""
+    begin
+      ret = self.scm_adapter_class.client_version_string if self.scm_adapter_class
+    rescue Redmine::Scm::Adapters::CommandFailed => e
+      logger.error "scm: error during get version string: #{e.message}"
+    end
+    ret
+  end
+
+  def self.scm_available
+    ret = false
+    begin
+      ret = self.scm_adapter_class.client_available if self.scm_adapter_class 
+    rescue Redmine::Scm::Adapters::CommandFailed => e
+      logger.error "scm: error during get scm available: #{e.message}"
+    end
+    ret
+  end
+
   private
-  
+
   def before_save
     # Strips url and root_url
     url.strip!
--- a/app/models/repository/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,47 +1,47 @@
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4704/trunk/app/models/repository
+/svn/!svn/ver/4982/trunk/app/models/repository
 END
 subversion.rb
 K 25
 svn:wc:ra_dav:version-url
 V 60
-/svn/!svn/ver/3360/trunk/app/models/repository/subversion.rb
+/svn/!svn/ver/4962/trunk/app/models/repository/subversion.rb
 END
 bazaar.rb
 K 25
 svn:wc:ra_dav:version-url
 V 56
-/svn/!svn/ver/1537/trunk/app/models/repository/bazaar.rb
+/svn/!svn/ver/4982/trunk/app/models/repository/bazaar.rb
 END
 git.rb
 K 25
 svn:wc:ra_dav:version-url
 V 53
-/svn/!svn/ver/4613/trunk/app/models/repository/git.rb
+/svn/!svn/ver/4975/trunk/app/models/repository/git.rb
 END
 mercurial.rb
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/4704/trunk/app/models/repository/mercurial.rb
+/svn/!svn/ver/4975/trunk/app/models/repository/mercurial.rb
 END
 filesystem.rb
 K 25
 svn:wc:ra_dav:version-url
 V 60
-/svn/!svn/ver/1508/trunk/app/models/repository/filesystem.rb
+/svn/!svn/ver/4975/trunk/app/models/repository/filesystem.rb
 END
 cvs.rb
 K 25
 svn:wc:ra_dav:version-url
 V 53
-/svn/!svn/ver/1768/trunk/app/models/repository/cvs.rb
+/svn/!svn/ver/4982/trunk/app/models/repository/cvs.rb
 END
 darcs.rb
 K 25
 svn:wc:ra_dav:version-url
 V 55
-/svn/!svn/ver/3360/trunk/app/models/repository/darcs.rb
+/svn/!svn/ver/4982/trunk/app/models/repository/darcs.rb
 END
--- a/app/models/repository/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/models/repository
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-13T12:04:51.838288Z
-4704
+2011-03-01T10:27:30.170724Z
+4982
 tmaruyama
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-23T14:37:44.487730Z
-b02ecaea01c5990cbde09689be12ec7d
-2010-02-02T17:02:32.020293Z
-3360
-edavis10
+2011-03-03T11:40:18.000000Z
+b9f366b3f38bd42149e09e6ed0ed8755
+2011-02-28T12:09:32.515358Z
+4962
+tmaruyama
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-3306
+3358
 
 bazaar.rb
 file
@@ -66,11 +66,11 @@
 
 
 
-2010-09-23T14:37:44.483732Z
-84591e1c5afa1b74a10954dd521ceb4e
-2008-06-14T15:44:36.838876Z
-1537
-jplang
+2011-03-03T11:40:18.000000Z
+d6a230859a110341c0d64865248db51c
+2011-03-01T10:27:30.170724Z
+4982
+tmaruyama
 has-props
 
 
@@ -92,7 +92,7 @@
 
 
 
-3617
+3877
 
 git.rb
 file
@@ -100,10 +100,10 @@
 
 
 
-2011-01-13T14:09:10.000000Z
-a3363c594162378e93390bb64f908183
-2011-01-02T09:45:05.291687Z
-4613
+2011-03-03T11:40:18.000000Z
+dfce133f28c5c85af0740865903d5320
+2011-03-01T05:14:03.146872Z
+4975
 tmaruyama
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-3147
+4245
 
 mercurial.rb
 file
@@ -134,10 +134,10 @@
 
 
 
-2011-01-13T14:09:10.000000Z
-4b0702e606f495c7db57461f3527181e
-2011-01-13T12:04:51.838288Z
-4704
+2011-03-03T11:40:18.000000Z
+d659744391dfa02d54481d4dd8752930
+2011-03-01T05:14:03.146872Z
+4975
 tmaruyama
 has-props
 
@@ -160,7 +160,7 @@
 
 
 
-5003
+4022
 
 filesystem.rb
 file
@@ -168,11 +168,11 @@
 
 
 
-2010-09-23T14:37:44.483732Z
-ed75a7df6cfdc54b7059c9bb20c079d3
-2008-06-08T15:40:24.603157Z
-1508
-jplang
+2011-03-03T11:40:18.000000Z
+994276556c2feac05d149117eea01413
+2011-03-01T05:14:03.146872Z
+4975
+tmaruyama
 has-props
 
 
@@ -194,7 +194,7 @@
 
 
 
-1258
+1451
 
 cvs.rb
 file
@@ -202,11 +202,11 @@
 
 
 
-2010-09-23T14:37:44.483732Z
-4bf6afb2a5e03df854a06fb116fc6fd2
-2008-08-26T12:28:15.338708Z
-1768
-jplang
+2011-03-03T11:40:18.000000Z
+5eecf7abe1216489c4d1c2f6a107c36b
+2011-03-01T10:27:30.170724Z
+4982
+tmaruyama
 has-props
 
 
@@ -228,7 +228,7 @@
 
 
 
-6357
+6952
 
 darcs.rb
 file
@@ -236,11 +236,11 @@
 
 
 
-2010-09-23T14:37:44.483732Z
-75c2836fd6ba92e0aef7a9cfc249ebb7
-2010-02-02T17:02:32.020293Z
-3360
-edavis10
+2011-03-03T11:40:18.000000Z
+03bf9128aa09528266cabb76ff0808a9
+2011-03-01T10:27:30.170724Z
+4982
+tmaruyama
 has-props
 
 
@@ -262,5 +262,5 @@
 
 
 
-3566
+3826
 
--- a/app/models/repository/.svn/text-base/bazaar.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/.svn/text-base/bazaar.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -19,16 +19,24 @@
 
 class Repository::Bazaar < Repository
   attr_protected :root_url
-  validates_presence_of :url
+  validates_presence_of :url, :log_encoding
 
-  def scm_adapter
+  ATTRIBUTE_KEY_NAMES = {
+      "url"          => "Root directory",
+      "log_encoding" => "Commit messages encoding",
+    }
+  def self.human_attribute_name(attribute_key_name)
+    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+  end
+
+  def self.scm_adapter_class
     Redmine::Scm::Adapters::BazaarAdapter
   end
-  
+
   def self.scm_name
     'Bazaar'
   end
-  
+
   def entries(path=nil, identifier=nil)
     entries = scm.entries(path, identifier)
     if entries
--- a/app/models/repository/.svn/text-base/cvs.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/.svn/text-base/cvs.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -19,16 +19,25 @@
 require 'digest/sha1'
 
 class Repository::Cvs < Repository
-  validates_presence_of :url, :root_url
+  validates_presence_of :url, :root_url, :log_encoding
 
-  def scm_adapter
+  ATTRIBUTE_KEY_NAMES = {
+      "url"          => "CVSROOT",
+      "root_url"     => "Module",
+      "log_encoding" => "Commit messages encoding",
+    }
+  def self.human_attribute_name(attribute_key_name)
+    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+  end
+
+  def self.scm_adapter_class
     Redmine::Scm::Adapters::CvsAdapter
   end
-  
+
   def self.scm_name
     'CVS'
   end
-  
+
   def entry(path=nil, identifier=nil)
     rev = identifier.nil? ? nil : changesets.find_by_revision(identifier)
     scm.entry(path, rev.nil? ? nil : rev.committed_on)
@@ -104,23 +113,28 @@
       scm.revisions('', fetch_since, nil, :with_paths => true) do |revision|
         # only add the change to the database, if it doen't exists. the cvs log
         # is not exclusive at all. 
-        unless changes.find_by_path_and_revision(scm.with_leading_slash(revision.paths[0][:path]), revision.paths[0][:revision])
-          revision
+        tmp_time = revision.time.clone
+        unless changes.find_by_path_and_revision(
+	           scm.with_leading_slash(revision.paths[0][:path]), revision.paths[0][:revision])
+          cmt = Changeset.normalize_comments(revision.message, repo_log_encoding)
           cs = changesets.find(:first, :conditions=>{
-            :committed_on=>revision.time-time_delta..revision.time+time_delta,
+            :committed_on=>tmp_time - time_delta .. tmp_time + time_delta,
             :committer=>revision.author,
-            :comments=>Changeset.normalize_comments(revision.message)
+            :comments=>cmt
           })
         
           # create a new changeset.... 
           unless cs
             # we use a temporaray revision number here (just for inserting)
             # later on, we calculate a continous positive number
-            latest = changesets.find(:first, :order => 'id DESC')
+            tmp_time2 = tmp_time.clone.gmtime
+            branch = revision.paths[0][:branch]
+            scmid = branch + "-" + tmp_time2.strftime("%Y%m%d-%H%M%S")
             cs = Changeset.create(:repository => self,
-                                  :revision => "_#{tmp_rev_num}", 
+                                  :revision => "tmp#{tmp_rev_num}",
+                                  :scmid => scmid,
                                   :committer => revision.author, 
-                                  :committed_on => revision.time,
+                                  :committed_on => tmp_time,
                                   :comments => revision.message)
             tmp_rev_num += 1
           end
@@ -144,10 +158,13 @@
       end
       
       # Renumber new changesets in chronological order
-      changesets.find(:all, :order => 'committed_on ASC, id ASC', :conditions => "revision LIKE '_%'").each do |changeset|
+      changesets.find(
+              :all, :order => 'committed_on ASC, id ASC', :conditions => "revision LIKE 'tmp%'"
+           ).each do |changeset|
         changeset.update_attribute :revision, next_revision_number
       end
     end # transaction
+    @current_revision_number = nil
   end
   
   private
@@ -155,7 +172,9 @@
   # Returns the next revision number to assign to a CVS changeset
   def next_revision_number
     # Need to retrieve existing revision numbers to sort them as integers
-    @current_revision_number ||= (connection.select_values("SELECT revision FROM #{Changeset.table_name} WHERE repository_id = #{id} AND revision NOT LIKE '_%'").collect(&:to_i).max || 0)
+    sql = "SELECT revision FROM #{Changeset.table_name} "
+    sql << "WHERE repository_id = #{id} AND revision NOT LIKE 'tmp%'"
+    @current_revision_number ||= (connection.select_values(sql).collect(&:to_i).max || 0)
     @current_revision_number += 1
   end
 end
--- a/app/models/repository/.svn/text-base/darcs.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/.svn/text-base/darcs.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -18,16 +18,24 @@
 require 'redmine/scm/adapters/darcs_adapter'
 
 class Repository::Darcs < Repository
-  validates_presence_of :url
+  validates_presence_of :url, :log_encoding
 
-  def scm_adapter
+  ATTRIBUTE_KEY_NAMES = {
+      "url"          => "Root directory",
+      "log_encoding" => "Commit messages encoding",
+    }
+  def self.human_attribute_name(attribute_key_name)
+    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+  end
+
+  def self.scm_adapter_class
     Redmine::Scm::Adapters::DarcsAdapter
   end
-  
+
   def self.scm_name
     'Darcs'
   end
-  
+
   def entry(path=nil, identifier=nil)
     patch = identifier.nil? ? nil : changesets.find_by_revision(identifier)
     scm.entry(path, patch.nil? ? nil : patch.scmid)
--- a/app/models/repository/.svn/text-base/filesystem.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/.svn/text-base/filesystem.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -24,14 +24,21 @@
   attr_protected :root_url
   validates_presence_of :url
 
-  def scm_adapter
+  ATTRIBUTE_KEY_NAMES = {
+      "url"          => "Root directory",
+    }
+  def self.human_attribute_name(attribute_key_name)
+    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+  end
+
+  def self.scm_adapter_class
     Redmine::Scm::Adapters::FilesystemAdapter
   end
-  
+
   def self.scm_name
     'Filesystem'
   end
-  
+
   def entries(path=nil, identifier=nil)
     scm.entries(path, identifier)
   end
--- a/app/models/repository/.svn/text-base/git.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/.svn/text-base/git.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -21,14 +21,25 @@
   attr_protected :root_url
   validates_presence_of :url
 
-  def scm_adapter
+  ATTRIBUTE_KEY_NAMES = {
+      "url"          => "Path to repository",
+    }
+  def self.human_attribute_name(attribute_key_name)
+    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+  end
+
+  def self.scm_adapter_class
     Redmine::Scm::Adapters::GitAdapter
   end
-  
+
   def self.scm_name
     'Git'
   end
 
+  def repo_log_encoding
+    'UTF-8'
+  end
+
   # Returns the identifier for the given git changeset
   def self.changeset_identifier(changeset)
     changeset.scmid
@@ -47,6 +58,13 @@
     scm.tags
   end
 
+  def find_changeset_by_name(name)
+    return nil if name.nil? || name.empty?
+    e = changesets.find(:first, :conditions => ['revision = ?', name.to_s])
+    return e if e
+    changesets.find(:first, :conditions => ['scmid LIKE ?', "#{name}%"])
+  end
+
   # With SCM's that have a sequential commit numbering, redmine is able to be
   # clever and only fetch changesets going forward from the most recent one
   # it knows about.  However, with git, you never know if people have merged
@@ -72,7 +90,28 @@
     revisions.reject!{|r| recent_revisions.include?(r.scmid)}
 
     # Save the remaining ones to the database
-    revisions.each{|r| r.save(self)} unless revisions.nil?
+    unless revisions.nil?
+      revisions.each do |rev|
+        transaction do
+          changeset = Changeset.new(
+              :repository => self,
+              :revision   => rev.identifier,
+              :scmid      => rev.scmid,
+              :committer  => rev.author, 
+              :committed_on => rev.time,
+              :comments   => rev.message)
+            
+          if changeset.save
+            rev.paths.each do |file|
+              Change.create(
+                  :changeset => changeset,
+                  :action    => file[:action],
+                  :path      => file[:path])
+            end
+          end
+        end
+      end
+    end
   end
 
   def latest_changesets(path,rev,limit=10)
--- a/app/models/repository/.svn/text-base/mercurial.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/.svn/text-base/mercurial.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -24,7 +24,16 @@
   attr_protected :root_url
   validates_presence_of :url
 
-  def scm_adapter
+  FETCH_AT_ONCE = 100  # number of changesets to fetch at once
+
+  ATTRIBUTE_KEY_NAMES = {
+      "url"          => "Root directory",
+    }
+  def self.human_attribute_name(attribute_key_name)
+    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+  end
+
+  def self.scm_adapter_class
     Redmine::Scm::Adapters::MercurialAdapter
   end
 
@@ -32,6 +41,10 @@
     'Mercurial'
   end
 
+  def repo_log_encoding
+    'UTF-8'
+  end
+
   # Returns the readable identifier for the given mercurial changeset
   def self.format_changeset_identifier(changeset)
     "#{changeset.revision}:#{changeset.scmid}"
@@ -42,33 +55,18 @@
     changeset.scmid
   end
 
+  def branches
+    nil
+  end
+
+  def tags
+    nil
+  end
+
   def diff_format_revisions(cs, cs_to, sep=':')
     super(cs, cs_to, ' ')
   end
 
-  def entries(path=nil, identifier=nil)
-    entries=scm.entries(path, identifier)
-    if entries
-      entries.each do |entry|
-        next unless entry.is_file?
-        # Set the filesize unless browsing a specific revision
-        if identifier.nil?
-          full_path = File.join(root_url, entry.path)
-          entry.size = File.stat(full_path).size if File.file?(full_path)
-        end
-        # Search the DB for the entry's last change
-        change = changes.find(:first, :conditions => ["path = ?", scm.with_leading_slash(entry.path)], :order => "#{Changeset.table_name}.committed_on DESC")
-        if change
-          entry.lastrev.identifier = change.changeset.revision
-          entry.lastrev.name = change.changeset.revision
-          entry.lastrev.author = change.changeset.committer
-          entry.lastrev.revision = change.revision
-        end
-      end
-    end
-    entries
-  end
-
   # Finds and returns a revision with a number or the beginning of a hash
   def find_changeset_by_name(name)
     return nil if name.nil? || name.empty?
@@ -82,50 +80,39 @@
   end
 
   # Returns the latest changesets for +path+; sorted by revision number
+  # Default behavior is to search in cached changesets
   def latest_changesets(path, rev, limit=10)
     if path.blank?
       changesets.find(:all, :include => :user, :limit => limit)
     else
-      changes.find(:all, :include => {:changeset => :user},
-                         :conditions => ["path = ?", path.with_leading_slash],
-                         :order => "#{Changeset.table_name}.id DESC",
-                         :limit => limit).collect(&:changeset)
+      changesets.find(:all, :select => "DISTINCT #{Changeset.table_name}.*",
+                      :joins => :changes,
+                      :conditions => ["#{Change.table_name}.path = ? OR #{Change.table_name}.path LIKE ? ESCAPE ?",
+                                      path.with_leading_slash,
+                                      "#{path.with_leading_slash.gsub(/[%_\\]/) { |s| "\\#{s}" }}/%", '\\'],
+                      :include => :user, :limit => limit)
     end
   end
 
   def fetch_changesets
-    scm_info = scm.info
-    if scm_info
-      # latest revision found in database
-      db_revision = latest_changeset ? latest_changeset.revision.to_i : -1
-      # latest revision in the repository
-      latest_revision = scm_info.lastrev
-      return if latest_revision.nil?
-      scm_revision = latest_revision.identifier.to_i
-      if db_revision < scm_revision
-        logger.debug "Fetching changesets for repository #{url}" if logger && logger.debug?
-        identifier_from = db_revision + 1
-        while (identifier_from <= scm_revision)
-          # loads changesets by batches of 100
-          identifier_to = [identifier_from + 99, scm_revision].min
-          revisions = scm.revisions('', identifier_from, identifier_to, :with_paths => true)
-          transaction do
-            revisions.each do |revision|
-              changeset = Changeset.create(:repository => self,
-                                           :revision => revision.identifier,
-                                           :scmid => revision.scmid,
-                                           :committer => revision.author, 
-                                           :committed_on => revision.time,
-                                           :comments => revision.message)
-              
-              revision.paths.each do |change|
-                changeset.create_change(change)
-              end
-            end
-          end unless revisions.nil?
-          identifier_from = identifier_to + 1
+    scm_rev = scm.info.lastrev.revision.to_i
+    db_rev = latest_changeset ? latest_changeset.revision.to_i : -1
+    return unless db_rev < scm_rev  # already up-to-date
+
+    logger.debug "Fetching changesets for repository #{url}" if logger
+    (db_rev + 1).step(scm_rev, FETCH_AT_ONCE) do |i|
+      transaction do
+        scm.each_revision('', i, [i + FETCH_AT_ONCE - 1, scm_rev].min) do |re|
+          cs = Changeset.create(:repository => self,
+                                :revision => re.revision,
+                                :scmid => re.scmid,
+                                :committer => re.author,
+                                :committed_on => re.time,
+                                :comments => re.message)
+          re.paths.each { |e| cs.create_change(e) }
         end
       end
     end
+    self
   end
 end
--- a/app/models/repository/.svn/text-base/subversion.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/.svn/text-base/subversion.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -22,14 +22,18 @@
   validates_presence_of :url
   validates_format_of :url, :with => /^(http|https|svn(\+[^\s:\/\\]+)?|file):\/\/.+/i
 
-  def scm_adapter
+  def self.scm_adapter_class
     Redmine::Scm::Adapters::SubversionAdapter
   end
-  
+
   def self.scm_name
     'Subversion'
   end
 
+  def repo_log_encoding
+    'UTF-8'
+  end
+
   def latest_changesets(path, rev, limit=10)
     revisions = scm.revisions(path, rev, nil, :limit => limit)
     revisions ? changesets.find_all_by_revision(revisions.collect(&:identifier), :order => "committed_on DESC", :include => :user) : []
--- a/app/models/repository/bazaar.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/bazaar.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -19,16 +19,24 @@
 
 class Repository::Bazaar < Repository
   attr_protected :root_url
-  validates_presence_of :url
+  validates_presence_of :url, :log_encoding
 
-  def scm_adapter
+  ATTRIBUTE_KEY_NAMES = {
+      "url"          => "Root directory",
+      "log_encoding" => "Commit messages encoding",
+    }
+  def self.human_attribute_name(attribute_key_name)
+    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+  end
+
+  def self.scm_adapter_class
     Redmine::Scm::Adapters::BazaarAdapter
   end
-  
+
   def self.scm_name
     'Bazaar'
   end
-  
+
   def entries(path=nil, identifier=nil)
     entries = scm.entries(path, identifier)
     if entries
--- a/app/models/repository/cvs.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/cvs.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -19,16 +19,25 @@
 require 'digest/sha1'
 
 class Repository::Cvs < Repository
-  validates_presence_of :url, :root_url
+  validates_presence_of :url, :root_url, :log_encoding
 
-  def scm_adapter
+  ATTRIBUTE_KEY_NAMES = {
+      "url"          => "CVSROOT",
+      "root_url"     => "Module",
+      "log_encoding" => "Commit messages encoding",
+    }
+  def self.human_attribute_name(attribute_key_name)
+    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+  end
+
+  def self.scm_adapter_class
     Redmine::Scm::Adapters::CvsAdapter
   end
-  
+
   def self.scm_name
     'CVS'
   end
-  
+
   def entry(path=nil, identifier=nil)
     rev = identifier.nil? ? nil : changesets.find_by_revision(identifier)
     scm.entry(path, rev.nil? ? nil : rev.committed_on)
@@ -104,23 +113,28 @@
       scm.revisions('', fetch_since, nil, :with_paths => true) do |revision|
         # only add the change to the database, if it doen't exists. the cvs log
         # is not exclusive at all. 
-        unless changes.find_by_path_and_revision(scm.with_leading_slash(revision.paths[0][:path]), revision.paths[0][:revision])
-          revision
+        tmp_time = revision.time.clone
+        unless changes.find_by_path_and_revision(
+	           scm.with_leading_slash(revision.paths[0][:path]), revision.paths[0][:revision])
+          cmt = Changeset.normalize_comments(revision.message, repo_log_encoding)
           cs = changesets.find(:first, :conditions=>{
-            :committed_on=>revision.time-time_delta..revision.time+time_delta,
+            :committed_on=>tmp_time - time_delta .. tmp_time + time_delta,
             :committer=>revision.author,
-            :comments=>Changeset.normalize_comments(revision.message)
+            :comments=>cmt
           })
         
           # create a new changeset.... 
           unless cs
             # we use a temporaray revision number here (just for inserting)
             # later on, we calculate a continous positive number
-            latest = changesets.find(:first, :order => 'id DESC')
+            tmp_time2 = tmp_time.clone.gmtime
+            branch = revision.paths[0][:branch]
+            scmid = branch + "-" + tmp_time2.strftime("%Y%m%d-%H%M%S")
             cs = Changeset.create(:repository => self,
-                                  :revision => "_#{tmp_rev_num}", 
+                                  :revision => "tmp#{tmp_rev_num}",
+                                  :scmid => scmid,
                                   :committer => revision.author, 
-                                  :committed_on => revision.time,
+                                  :committed_on => tmp_time,
                                   :comments => revision.message)
             tmp_rev_num += 1
           end
@@ -144,10 +158,13 @@
       end
       
       # Renumber new changesets in chronological order
-      changesets.find(:all, :order => 'committed_on ASC, id ASC', :conditions => "revision LIKE '_%'").each do |changeset|
+      changesets.find(
+              :all, :order => 'committed_on ASC, id ASC', :conditions => "revision LIKE 'tmp%'"
+           ).each do |changeset|
         changeset.update_attribute :revision, next_revision_number
       end
     end # transaction
+    @current_revision_number = nil
   end
   
   private
@@ -155,7 +172,9 @@
   # Returns the next revision number to assign to a CVS changeset
   def next_revision_number
     # Need to retrieve existing revision numbers to sort them as integers
-    @current_revision_number ||= (connection.select_values("SELECT revision FROM #{Changeset.table_name} WHERE repository_id = #{id} AND revision NOT LIKE '_%'").collect(&:to_i).max || 0)
+    sql = "SELECT revision FROM #{Changeset.table_name} "
+    sql << "WHERE repository_id = #{id} AND revision NOT LIKE 'tmp%'"
+    @current_revision_number ||= (connection.select_values(sql).collect(&:to_i).max || 0)
     @current_revision_number += 1
   end
 end
--- a/app/models/repository/darcs.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/darcs.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -18,16 +18,24 @@
 require 'redmine/scm/adapters/darcs_adapter'
 
 class Repository::Darcs < Repository
-  validates_presence_of :url
+  validates_presence_of :url, :log_encoding
 
-  def scm_adapter
+  ATTRIBUTE_KEY_NAMES = {
+      "url"          => "Root directory",
+      "log_encoding" => "Commit messages encoding",
+    }
+  def self.human_attribute_name(attribute_key_name)
+    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+  end
+
+  def self.scm_adapter_class
     Redmine::Scm::Adapters::DarcsAdapter
   end
-  
+
   def self.scm_name
     'Darcs'
   end
-  
+
   def entry(path=nil, identifier=nil)
     patch = identifier.nil? ? nil : changesets.find_by_revision(identifier)
     scm.entry(path, patch.nil? ? nil : patch.scmid)
--- a/app/models/repository/filesystem.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/filesystem.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -24,14 +24,21 @@
   attr_protected :root_url
   validates_presence_of :url
 
-  def scm_adapter
+  ATTRIBUTE_KEY_NAMES = {
+      "url"          => "Root directory",
+    }
+  def self.human_attribute_name(attribute_key_name)
+    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+  end
+
+  def self.scm_adapter_class
     Redmine::Scm::Adapters::FilesystemAdapter
   end
-  
+
   def self.scm_name
     'Filesystem'
   end
-  
+
   def entries(path=nil, identifier=nil)
     scm.entries(path, identifier)
   end
--- a/app/models/repository/git.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/git.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -21,14 +21,25 @@
   attr_protected :root_url
   validates_presence_of :url
 
-  def scm_adapter
+  ATTRIBUTE_KEY_NAMES = {
+      "url"          => "Path to repository",
+    }
+  def self.human_attribute_name(attribute_key_name)
+    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+  end
+
+  def self.scm_adapter_class
     Redmine::Scm::Adapters::GitAdapter
   end
-  
+
   def self.scm_name
     'Git'
   end
 
+  def repo_log_encoding
+    'UTF-8'
+  end
+
   # Returns the identifier for the given git changeset
   def self.changeset_identifier(changeset)
     changeset.scmid
@@ -47,6 +58,13 @@
     scm.tags
   end
 
+  def find_changeset_by_name(name)
+    return nil if name.nil? || name.empty?
+    e = changesets.find(:first, :conditions => ['revision = ?', name.to_s])
+    return e if e
+    changesets.find(:first, :conditions => ['scmid LIKE ?', "#{name}%"])
+  end
+
   # With SCM's that have a sequential commit numbering, redmine is able to be
   # clever and only fetch changesets going forward from the most recent one
   # it knows about.  However, with git, you never know if people have merged
@@ -72,7 +90,28 @@
     revisions.reject!{|r| recent_revisions.include?(r.scmid)}
 
     # Save the remaining ones to the database
-    revisions.each{|r| r.save(self)} unless revisions.nil?
+    unless revisions.nil?
+      revisions.each do |rev|
+        transaction do
+          changeset = Changeset.new(
+              :repository => self,
+              :revision   => rev.identifier,
+              :scmid      => rev.scmid,
+              :committer  => rev.author, 
+              :committed_on => rev.time,
+              :comments   => rev.message)
+            
+          if changeset.save
+            rev.paths.each do |file|
+              Change.create(
+                  :changeset => changeset,
+                  :action    => file[:action],
+                  :path      => file[:path])
+            end
+          end
+        end
+      end
+    end
   end
 
   def latest_changesets(path,rev,limit=10)
--- a/app/models/repository/mercurial.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/mercurial.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -24,7 +24,16 @@
   attr_protected :root_url
   validates_presence_of :url
 
-  def scm_adapter
+  FETCH_AT_ONCE = 100  # number of changesets to fetch at once
+
+  ATTRIBUTE_KEY_NAMES = {
+      "url"          => "Root directory",
+    }
+  def self.human_attribute_name(attribute_key_name)
+    ATTRIBUTE_KEY_NAMES[attribute_key_name] || super
+  end
+
+  def self.scm_adapter_class
     Redmine::Scm::Adapters::MercurialAdapter
   end
 
@@ -32,6 +41,10 @@
     'Mercurial'
   end
 
+  def repo_log_encoding
+    'UTF-8'
+  end
+
   # Returns the readable identifier for the given mercurial changeset
   def self.format_changeset_identifier(changeset)
     "#{changeset.revision}:#{changeset.scmid}"
@@ -42,33 +55,18 @@
     changeset.scmid
   end
 
+  def branches
+    nil
+  end
+
+  def tags
+    nil
+  end
+
   def diff_format_revisions(cs, cs_to, sep=':')
     super(cs, cs_to, ' ')
   end
 
-  def entries(path=nil, identifier=nil)
-    entries=scm.entries(path, identifier)
-    if entries
-      entries.each do |entry|
-        next unless entry.is_file?
-        # Set the filesize unless browsing a specific revision
-        if identifier.nil?
-          full_path = File.join(root_url, entry.path)
-          entry.size = File.stat(full_path).size if File.file?(full_path)
-        end
-        # Search the DB for the entry's last change
-        change = changes.find(:first, :conditions => ["path = ?", scm.with_leading_slash(entry.path)], :order => "#{Changeset.table_name}.committed_on DESC")
-        if change
-          entry.lastrev.identifier = change.changeset.revision
-          entry.lastrev.name = change.changeset.revision
-          entry.lastrev.author = change.changeset.committer
-          entry.lastrev.revision = change.revision
-        end
-      end
-    end
-    entries
-  end
-
   # Finds and returns a revision with a number or the beginning of a hash
   def find_changeset_by_name(name)
     return nil if name.nil? || name.empty?
@@ -82,50 +80,39 @@
   end
 
   # Returns the latest changesets for +path+; sorted by revision number
+  # Default behavior is to search in cached changesets
   def latest_changesets(path, rev, limit=10)
     if path.blank?
       changesets.find(:all, :include => :user, :limit => limit)
     else
-      changes.find(:all, :include => {:changeset => :user},
-                         :conditions => ["path = ?", path.with_leading_slash],
-                         :order => "#{Changeset.table_name}.id DESC",
-                         :limit => limit).collect(&:changeset)
+      changesets.find(:all, :select => "DISTINCT #{Changeset.table_name}.*",
+                      :joins => :changes,
+                      :conditions => ["#{Change.table_name}.path = ? OR #{Change.table_name}.path LIKE ? ESCAPE ?",
+                                      path.with_leading_slash,
+                                      "#{path.with_leading_slash.gsub(/[%_\\]/) { |s| "\\#{s}" }}/%", '\\'],
+                      :include => :user, :limit => limit)
     end
   end
 
   def fetch_changesets
-    scm_info = scm.info
-    if scm_info
-      # latest revision found in database
-      db_revision = latest_changeset ? latest_changeset.revision.to_i : -1
-      # latest revision in the repository
-      latest_revision = scm_info.lastrev
-      return if latest_revision.nil?
-      scm_revision = latest_revision.identifier.to_i
-      if db_revision < scm_revision
-        logger.debug "Fetching changesets for repository #{url}" if logger && logger.debug?
-        identifier_from = db_revision + 1
-        while (identifier_from <= scm_revision)
-          # loads changesets by batches of 100
-          identifier_to = [identifier_from + 99, scm_revision].min
-          revisions = scm.revisions('', identifier_from, identifier_to, :with_paths => true)
-          transaction do
-            revisions.each do |revision|
-              changeset = Changeset.create(:repository => self,
-                                           :revision => revision.identifier,
-                                           :scmid => revision.scmid,
-                                           :committer => revision.author, 
-                                           :committed_on => revision.time,
-                                           :comments => revision.message)
-              
-              revision.paths.each do |change|
-                changeset.create_change(change)
-              end
-            end
-          end unless revisions.nil?
-          identifier_from = identifier_to + 1
+    scm_rev = scm.info.lastrev.revision.to_i
+    db_rev = latest_changeset ? latest_changeset.revision.to_i : -1
+    return unless db_rev < scm_rev  # already up-to-date
+
+    logger.debug "Fetching changesets for repository #{url}" if logger
+    (db_rev + 1).step(scm_rev, FETCH_AT_ONCE) do |i|
+      transaction do
+        scm.each_revision('', i, [i + FETCH_AT_ONCE - 1, scm_rev].min) do |re|
+          cs = Changeset.create(:repository => self,
+                                :revision => re.revision,
+                                :scmid => re.scmid,
+                                :committer => re.author,
+                                :committed_on => re.time,
+                                :comments => re.message)
+          re.paths.each { |e| cs.create_change(e) }
         end
       end
     end
+    self
   end
 end
--- a/app/models/repository/subversion.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/repository/subversion.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -22,14 +22,18 @@
   validates_presence_of :url
   validates_format_of :url, :with => /^(http|https|svn(\+[^\s:\/\\]+)?|file):\/\/.+/i
 
-  def scm_adapter
+  def self.scm_adapter_class
     Redmine::Scm::Adapters::SubversionAdapter
   end
-  
+
   def self.scm_name
     'Subversion'
   end
 
+  def repo_log_encoding
+    'UTF-8'
+  end
+
   def latest_changesets(path, rev, limit=10)
     revisions = scm.revisions(path, rev, nil, :limit => limit)
     revisions ? changesets.find_all_by_revision(revisions.collect(&:identifier), :order => "committed_on DESC", :include => :user) : []
--- a/app/models/setting.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/setting.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -65,6 +65,7 @@
                   UTF-16LE
                   EUC-JP
                   Shift_JIS
+                  CP932
                   GB18030
                   GBK
                   ISCII91
--- a/app/models/user.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/user.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -89,7 +89,9 @@
   
   def before_save
     # update hashed_password if password was set
-    self.hashed_password = User.hash_password(self.password) if self.password && self.auth_source_id.blank?
+    if self.password && self.auth_source_id.blank?
+      salt_password(password)
+    end
   end
   
   def reload(*args)
@@ -131,7 +133,7 @@
         return nil unless user.auth_source.authenticate(login, password)
       else
         # authentication with local password
-        return nil unless User.hash_password(password) == user.hashed_password        
+        return nil unless user.check_password?(password)
       end
     else
       # user is not yet registered, try to authenticate with available sources
@@ -210,13 +212,21 @@
     update_attribute(:status, STATUS_LOCKED)
   end
 
+  # Returns true if +clear_password+ is the correct user's password, otherwise false
   def check_password?(clear_password)
     if auth_source_id.present?
       auth_source.authenticate(self.login, clear_password)
     else
-      User.hash_password(clear_password) == self.hashed_password
+      User.hash_password("#{salt}#{User.hash_password clear_password}") == hashed_password
     end
   end
+  
+  # Generates a random salt and computes hashed_password for +clear_password+
+  # The hashed password is stored in the following form: SHA1(salt + SHA1(password))
+  def salt_password(clear_password)
+    self.salt = User.generate_salt
+    self.hashed_password = User.hash_password("#{salt}#{User.hash_password clear_password}")
+  end
 
   # Does the backend storage allow this user to change their password?
   def change_password_allowed?
@@ -434,7 +444,12 @@
     when 'all'
       true
     when 'selected'
-      # Handled by the Project
+      # user receives notifications for created/assigned issues on unselected projects
+      if object.is_a?(Issue) && (object.author == self || object.assigned_to == self)
+        true
+      else
+        false
+      end
     when 'none'
       false
     when 'only_my_events'
@@ -478,6 +493,20 @@
     end
     anonymous_user
   end
+
+  # Salts all existing unsalted passwords
+  # It changes password storage scheme from SHA1(password) to SHA1(salt + SHA1(password))
+  # This method is used in the SaltPasswords migration and is to be kept as is
+  def self.salt_unsalted_passwords!
+    transaction do
+      User.find_each(:conditions => "salt IS NULL OR salt = ''") do |user|
+        next if user.hashed_password.blank?
+        salt = User.generate_salt
+        hashed_password = User.hash_password("#{salt}#{user.hashed_password}")
+        User.update_all("salt = '#{salt}', hashed_password = '#{hashed_password}'", ["id = ?", user.id] )
+      end
+    end
+  end
   
   protected
   
@@ -519,6 +548,12 @@
   def self.hash_password(clear_password)
     Digest::SHA1.hexdigest(clear_password || "")
   end
+  
+  # Returns a 128bits random salt as a hex string (32 chars long)
+  def self.generate_salt
+    ActiveSupport::SecureRandom.hex(16)
+  end
+  
 end
 
 class AnonymousUser < User
--- a/app/models/user_preference.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/user_preference.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -51,4 +51,7 @@
   
   def comments_sorting; self[:comments_sorting] end
   def comments_sorting=(order); self[:comments_sorting]=order end
+  
+  def warn_on_leaving_unsaved; self[:warn_on_leaving_unsaved] || '1'; end
+  def warn_on_leaving_unsaved=(value); self[:warn_on_leaving_unsaved]=value; end
 end
--- a/app/models/wiki_page.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/models/wiki_page.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -149,17 +149,13 @@
   end
 end
 
-class WikiDiff
-  attr_reader :diff, :words, :content_to, :content_from
+class WikiDiff < Redmine::Helpers::Diff
+  attr_reader :content_to, :content_from
   
   def initialize(content_to, content_from)
     @content_to = content_to
     @content_from = content_from
-    @words = content_to.text.split(/(\s+)/)
-    @words = @words.select {|word| word != ' '}
-    words_from = content_from.text.split(/(\s+)/)
-    words_from = words_from.select {|word| word != ' '}    
-    @diff = words_from.diff @words
+    super(content_to.text, content_from.text)
   end
 end
 
--- a/app/sweepers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/sweepers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/sweepers
+4993
+http://redmine.rubyforge.org/svn/trunk/app/sweepers
 http://redmine.rubyforge.org/svn
 
 
--- a/app/views/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 34
-/svn/!svn/ver/4731/trunk/app/views
+/svn/!svn/ver/4983/trunk/app/views
 END
--- a/app/views/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-16T16:36:58.753919Z
-4731
-jplang
+2011-03-01T10:27:51.597350Z
+4983
+tmaruyama
 
 
 
@@ -38,52 +38,52 @@
 members
 dir
 
-welcome
+context_menus
 dir
 
-context_menus
+welcome
 dir
 
 journals
 dir
 
+time_entry_reports
+dir
+
 workflows
 dir
 
-time_entry_reports
-dir
-
 reports
 dir
 
-timelog
-dir
-
-settings
-dir
-
 layouts
 dir
 
 custom_fields
 dir
 
-issue_moves
+settings
+dir
+
+timelog
 dir
 
 users
 dir
 
+issue_moves
+dir
+
 files
 dir
 
 previews
 dir
 
-auth_sources
+ldap_auth_sources
 dir
 
-ldap_auth_sources
+auth_sources
 dir
 
 search
@@ -92,10 +92,10 @@
 messages
 dir
 
-versions
+issue_relations
 dir
 
-issue_relations
+versions
 dir
 
 mailer
--- a/app/views/account/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/account/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/account
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/account
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 232ce32581d2f869b81c300244decff5
 2010-01-28T18:54:51.800438Z
 3341
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 cf3d603bbb4825640988086c7871c165
 2007-09-22T13:17:49.935719Z
 747
@@ -100,7 +100,7 @@
 
 
 
-2011-01-13T12:46:09.000000Z
+2011-03-03T11:05:11.000000Z
 82c6920dc6c95e35b0248de4be82885b
 2009-04-21T13:43:57.529967Z
 2678
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 72b586f183037fcab519bc7575d3b2b5
 2010-03-03T20:21:05.265018Z
 3530
--- a/app/views/activities/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/activities/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/activities
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/activities
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-10-01T15:15:02.000000Z
+2011-03-03T11:05:11.000000Z
 9e6d9091be2c8769f8e262500d974f84
 2010-08-27T14:05:54.014502Z
 4047
--- a/app/views/admin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/admin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/admin
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/admin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 a7b3d0461b8dac7e68d5b758e6b93b45
 2009-12-19T20:33:24.113306Z
 3200
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 aacfd3ff934f52585eba4f460f52df31
 2008-11-16T17:12:02.001794Z
 2041
@@ -100,7 +100,7 @@
 
 
 
-2010-09-10T14:59:24.000000Z
+2011-03-03T11:05:11.000000Z
 a2dcf50c0d70604e64f18cd28f15280b
 2010-08-04T00:38:22.739166Z
 3909
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 8db715728d1f5851c242e085110f2bb6
 2008-01-05T11:33:49.132886Z
 1040
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 35378eb3f0e385475e3bd0586f22324a
 2009-12-17T18:21:02.630202Z
 3176
@@ -202,7 +202,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:11.000000Z
 9aaefdc17951db18479f38fb0db73ea7
 2010-10-22T15:11:04.321155Z
 4271
--- a/app/views/attachments/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/attachments/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/attachments
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/attachments
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 6f5329a1a81f3798a84a26b0261f5000
 2008-12-09T16:54:46.963649Z
 2116
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 b8bc854a91c56c3e3d45390e8ed4bb8d
 2009-04-25T09:35:14.494071Z
 2693
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 9cd3f9685ce632814961d9f7e67c4d26
 2010-07-25T10:34:55.569539Z
 3879
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 43e4ae1b5703daa55b37eb438a169304
 2009-04-25T09:35:14.494071Z
 2693
--- a/app/views/auth_sources/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/auth_sources/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/auth_sources
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/auth_sources
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 2f1b944eb2979ed37624c653969fa6bf
 2010-02-15T16:41:21.789274Z
 3436
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 6f4f645b6d66417180eaadb0e204a56e
 2007-03-12T17:59:02.654744Z
 333
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 4ea0fc7f46738e3709d552778de7a756
 2010-05-23T03:16:31.304135Z
 3744
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 1cc2f5049536de6e5d6d4e926f96ab38
 2007-03-12T17:59:02.654744Z
 333
--- a/app/views/auto_completes/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/auto_completes/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/auto_completes
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/auto_completes
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-10T14:59:24.000000Z
+2011-03-03T11:05:10.000000Z
 d325b0677890591680b96985e16a0139
 2010-08-17T15:03:58.074505Z
 3945
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/boards/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,35 @@
+K 25
+svn:wc:ra_dav:version-url
+V 41
+/svn/!svn/ver/4889/trunk/app/views/boards
+END
+show.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/4889/trunk/app/views/boards/show.rhtml
+END
+_form.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/529/trunk/app/views/boards/_form.rhtml
+END
+edit.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 51
+/svn/!svn/ver/529/trunk/app/views/boards/edit.rhtml
+END
+index.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/4047/trunk/app/views/boards/index.rhtml
+END
+new.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 50
+/svn/!svn/ver/529/trunk/app/views/boards/new.rhtml
+END
--- a/app/views/boards/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/boards/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/boards
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/boards
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-27T14:05:54.014502Z
-4047
-edavis10
+2011-02-20T13:11:10.508449Z
+4889
+jplang
 
 
 
@@ -32,10 +32,10 @@
 
 
 
-2010-08-12T15:03:25.000000Z
-74a37f0fbb3bb635f2c0389a2624988e
-2010-02-14T11:52:12.027647Z
-3426
+2011-03-03T11:40:18.000000Z
+0f9b1735f403a56ed575c63dc474a611
+2011-02-20T13:11:10.508449Z
+4889
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-3365
+3402
 
 _form.rhtml
 file
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 0416740cf4bf599b0da68e597c0cd44c
 2007-05-13T17:09:56.765659Z
 529
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 00f3643ebd3d5af2322b92c885a6eec6
 2007-05-13T17:09:56.765659Z
 529
@@ -134,7 +134,7 @@
 
 
 
-2010-10-01T15:15:02.000000Z
+2011-03-03T11:05:10.000000Z
 5c323ebf8fea05f556896ed49186773b
 2010-08-27T14:05:54.014502Z
 4047
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 b951b4d73988508c5a42fdb7b7df695c
 2007-05-13T17:09:56.765659Z
 529
--- a/app/views/boards/.svn/text-base/show.rhtml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/boards/.svn/text-base/show.rhtml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -69,4 +69,5 @@
 
 <% content_for :header_tags do %>
     <%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{@project}: #{@board}") %>
+    <%= stylesheet_link_tag 'scm' %>
 <% end %>
--- a/app/views/boards/show.rhtml	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/boards/show.rhtml	Thu Mar 03 12:02:03 2011 +0000
@@ -69,4 +69,5 @@
 
 <% content_for :header_tags do %>
     <%= auto_discovery_link_tag(:atom, {:format => 'atom', :key => User.current.rss_key}, :title => "#{@project}: #{@board}") %>
+    <%= stylesheet_link_tag 'scm' %>
 <% end %>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/calendars/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 44
+/svn/!svn/ver/4911/trunk/app/views/calendars
+END
+show.html.erb
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/svn/!svn/ver/4911/trunk/app/views/calendars/show.html.erb
+END
--- a/app/views/calendars/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/calendars/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/calendars
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/calendars
 http://redmine.rubyforge.org/svn
 
 
 
-2010-10-07T15:26:53.500793Z
-4238
-winterheart
+2011-02-21T14:02:22.565987Z
+4911
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-11-30T13:11:53.000000Z
-d47ece5d0e0ff017f3f1b5ce4b776ba0
-2010-10-07T15:26:53.500793Z
-4238
-winterheart
+2011-03-03T11:40:18.000000Z
+7da8933c1cb08241ebe459d9cabe8043
+2011-02-21T14:02:22.565987Z
+4911
+jplang
 has-props
 
 
@@ -58,5 +58,5 @@
 
 
 
-1946
+2007
 
--- a/app/views/calendars/.svn/text-base/show.html.erb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/calendars/.svn/text-base/show.html.erb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,10 +1,10 @@
-<h2><%= l(:label_calendar) %></h2>
+<h2><%= @query.new_record? ? l(:label_calendar) : h(@query.name) %></h2>
 
 <% form_tag(calendar_path, :method => :put, :id => 'query_form') do %>
   <%= hidden_field_tag('project_id', @project.to_param) if @project%>
-<fieldset id="filters" class="collapsible">
+<fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
   <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
-  <div>
+  <div style="<%= @query.new_record? ? "" : "display: none;" %>">
     <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
   </div>
 </fieldset>
@@ -20,16 +20,16 @@
 <%= select_year(@year, :prefix => "year", :discard_type => true) %>
 
 <%= link_to_remote l(:button_apply), 
-                   { :url => { :set_filter => (@query.new_record? ? 1 : nil) },
+                   { :url => { :set_filter => 1 },
                      :update => "content",
                      :with => "Form.serialize('query_form')"
                    }, :class => 'icon icon-checked' %>
                    
 <%= link_to_remote l(:button_clear),
-                   { :url => { :project_id => @project, :set_filter => (@query.new_record? ? 1 : nil) }, 
+                   { :url => { :project_id => @project, :set_filter => 1 }, 
                      :method => :put,
                      :update => "content",
-                   }, :class => 'icon icon-reload' if @query.new_record? %>
+                   }, :class => 'icon icon-reload' %>
 </p>
 <% end %>
 
--- a/app/views/calendars/show.html.erb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/calendars/show.html.erb	Thu Mar 03 12:02:03 2011 +0000
@@ -1,10 +1,10 @@
-<h2><%= l(:label_calendar) %></h2>
+<h2><%= @query.new_record? ? l(:label_calendar) : h(@query.name) %></h2>
 
 <% form_tag(calendar_path, :method => :put, :id => 'query_form') do %>
   <%= hidden_field_tag('project_id', @project.to_param) if @project%>
-<fieldset id="filters" class="collapsible">
+<fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
   <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
-  <div>
+  <div style="<%= @query.new_record? ? "" : "display: none;" %>">
     <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
   </div>
 </fieldset>
@@ -20,16 +20,16 @@
 <%= select_year(@year, :prefix => "year", :discard_type => true) %>
 
 <%= link_to_remote l(:button_apply), 
-                   { :url => { :set_filter => (@query.new_record? ? 1 : nil) },
+                   { :url => { :set_filter => 1 },
                      :update => "content",
                      :with => "Form.serialize('query_form')"
                    }, :class => 'icon icon-checked' %>
                    
 <%= link_to_remote l(:button_clear),
-                   { :url => { :project_id => @project, :set_filter => (@query.new_record? ? 1 : nil) }, 
+                   { :url => { :project_id => @project, :set_filter => 1 }, 
                      :method => :put,
                      :update => "content",
-                   }, :class => 'icon icon-reload' if @query.new_record? %>
+                   }, :class => 'icon icon-reload' %>
 </p>
 <% end %>
 
--- a/app/views/common/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/common/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -9,18 +9,18 @@
 V 53
 /svn/!svn/ver/3585/trunk/app/views/common/_file.rhtml
 END
+error.html.erb
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svn/!svn/ver/4286/trunk/app/views/common/error.html.erb
+END
 feed.atom.rxml
 K 25
 svn:wc:ra_dav:version-url
 V 56
 /svn/!svn/ver/2768/trunk/app/views/common/feed.atom.rxml
 END
-error.html.erb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/4286/trunk/app/views/common/error.html.erb
-END
 _preview.rhtml
 K 25
 svn:wc:ra_dav:version-url
--- a/app/views/common/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/common/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/common
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:44.523788Z
+2011-03-03T11:05:11.000000Z
 f95c4268a6ac374ab617da665e57a3ad
 2010-03-14T13:22:50.317701Z
 3585
@@ -60,13 +60,47 @@
 
 369
 
+error.html.erb
+file
+
+
+
+
+2011-03-03T11:05:11.000000Z
+882dace2c9ea129616067a2052cebef4
+2010-10-23T11:07:04.019894Z
+4286
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+156
+
 feed.atom.rxml
 file
 
 
 
 
-2010-09-23T14:37:44.523788Z
+2011-03-03T11:05:11.000000Z
 e2b0309f637e9a49ef39f8401f3190c5
 2009-05-26T08:28:36.964305Z
 2768
@@ -94,47 +128,13 @@
 
 1410
 
-error.html.erb
-file
-
-
-
-
-2010-11-19T13:04:49.456921Z
-882dace2c9ea129616067a2052cebef4
-2010-10-23T11:07:04.019894Z
-4286
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-156
-
 _preview.rhtml
 file
 
 
 
 
-2010-09-23T14:37:44.523788Z
+2011-03-03T11:05:11.000000Z
 d03b1c3719bd49af7d930d210a8e8328
 2008-07-26T12:54:54.604420Z
 1699
@@ -168,7 +168,7 @@
 
 
 
-2011-01-13T14:09:24.000000Z
+2011-03-03T11:05:11.000000Z
 1938ad8ac1793e75074891018e795398
 2011-01-01T13:40:36.520874Z
 4604
@@ -202,7 +202,7 @@
 
 
 
-2010-09-23T14:37:44.523788Z
+2011-03-03T11:05:11.000000Z
 18b2d631fabd5720aa07d369da11d0de
 2010-06-19T22:52:15.523619Z
 3790
@@ -236,7 +236,7 @@
 
 
 
-2010-09-23T14:37:44.523788Z
+2011-03-03T11:05:11.000000Z
 6e7716818f87ed1ad9839c6e9a92ed1b
 2009-12-14T20:13:29.438642Z
 3174
--- a/app/views/context_menus/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/context_menus/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/context_menus
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/context_menus
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:10.000000Z
 1a873e0d09f011b6b274e955460d35a1
 2010-11-16T19:49:08.085592Z
 4409
--- a/app/views/custom_fields/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/custom_fields/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/custom_fields
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/custom_fields
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:10.000000Z
 7c1accc3dd22bd872e2e9b6a7f02a5c2
 2010-11-07T14:15:01.891476Z
 4382
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 0c149f63c965988c70ecf48bde3222b3
 2009-12-09T10:49:58.529326Z
 3144
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 3372a4aeafa9f940744f07c4ce8ca434
 2010-04-16T15:33:49.924704Z
 3672
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 6441c559d374310cabfc9649eb5b3617
 2009-09-12T09:13:13.676884Z
 2871
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 7658107f6af4536cedfc075202ad3f7c
 2009-12-09T10:49:58.529326Z
 3144
--- a/app/views/documents/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/documents/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/documents
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/documents
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 755690362ea0b5f92a82326872d3b0ea
 2010-03-18T20:02:17.358992Z
 3602
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 a7c10b428fb4d74827a6ffdcc3651a25
 2010-03-18T20:06:16.936785Z
 3603
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 9d05f76602471c3dc339d8c54d2f4abc
 2009-05-30T23:30:36.923541Z
 2777
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 41a0e984e939e8fad03f2be67b33a4fc
 2007-03-12T17:59:02.654744Z
 333
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 cf8b8406d31262625c1f2ab2b66020b2
 2009-01-22T16:34:54.303755Z
 2295
@@ -202,7 +202,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 60e54f2c42af4454d69bfc812bbf55ca
 2008-02-29T19:46:58.834023Z
 1180
--- a/app/views/enumerations/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/enumerations/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/enumerations
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/enumerations
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 b4f45f24d2fb9546e609fd3299912be6
 2010-05-09T11:19:15.980195Z
 3734
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 0a47386b406e4f425fe541d12c780467
 2009-10-21T22:34:28.905707Z
 2946
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 668687299206262ccf34ac3a44f57c33
 2009-07-05T12:22:02.133266Z
 2810
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 b9c8a97c172197a30cbb6c08000a9fa7
 2008-06-17T19:10:54.015252Z
 1558
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 e6eaade1aac54267080f56f5a09d3fd1
 2009-07-05T12:22:02.133266Z
 2810
--- a/app/views/files/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/files/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/files
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/files
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:10.000000Z
 05986f09d13424caeb68601c7c9ff16b
 2010-10-22T14:45:02.987126Z
 4268
@@ -66,7 +66,7 @@
 
 
 
-2010-10-01T15:15:02.000000Z
+2011-03-03T11:05:10.000000Z
 7cd15d28fd27afa1f10b921c8b35cd7a
 2010-09-14T16:24:07.840869Z
 4085
--- a/app/views/gantts/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/gantts/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,11 +1,11 @@
 K 25
 svn:wc:ra_dav:version-url
 V 41
-/svn/!svn/ver/4528/trunk/app/views/gantts
+/svn/!svn/ver/4913/trunk/app/views/gantts
 END
 show.html.erb
 K 25
 svn:wc:ra_dav:version-url
 V 55
-/svn/!svn/ver/4528/trunk/app/views/gantts/show.html.erb
+/svn/!svn/ver/4913/trunk/app/views/gantts/show.html.erb
 END
--- a/app/views/gantts/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/gantts/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/gantts
 http://redmine.rubyforge.org/svn
 
 
 
-2010-12-17T15:25:07.681776Z
-4528
+2011-02-21T15:06:11.321114Z
+4913
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-01-13T14:09:29.000000Z
-85e8095f9a3c80cf6a53b73c6b694323
-2010-12-17T15:25:07.681776Z
-4528
+2011-03-03T11:40:18.000000Z
+6f609d119b323e4fd1a249dfbd614e38
+2011-02-21T15:06:11.321114Z
+4913
 jplang
 has-props
 
@@ -58,5 +58,5 @@
 
 
 
-6232
+6326
 
--- a/app/views/gantts/.svn/text-base/show.html.erb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/gantts/.svn/text-base/show.html.erb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,11 +1,11 @@
 <% @gantt.view = self %>
-<h2><%= l(:label_gantt) %></h2>
+<h2><%= @query.new_record? ? l(:label_gantt) : h(@query.name) %></h2>
 
 <% form_tag(gantt_path(:month => params[:month], :year => params[:year], :months => params[:months]), :method => :put, :id => 'query_form') do %>
   <%= hidden_field_tag('project_id', @project.to_param) if @project%>
-<fieldset id="filters" class="collapsible">
+<fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
   <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
-	<div>
+	<div style="<%= @query.new_record? ? "" : "display: none;" %>">
     <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
   </div>
 </fieldset>
@@ -23,16 +23,16 @@
 <%= hidden_field_tag 'zoom', @gantt.zoom %>
 
 <%= link_to_remote l(:button_apply), 
-                   { :url => { :set_filter => (@query.new_record? ? 1 : nil) },
+                   { :url => { :set_filter => 1 },
                      :update => "content",
                      :with => "Form.serialize('query_form')"
                    }, :class => 'icon icon-checked' %>
                    
 <%= link_to_remote l(:button_clear),
-                   { :url => { :project_id => @project, :set_filter => (@query.new_record? ? 1 : nil) }, 
+                   { :url => { :project_id => @project, :set_filter => 1 }, 
                    	 :method => :put,
                      :update => "content",
-                   }, :class => 'icon icon-reload' if @query.new_record? %>
+                   }, :class => 'icon icon-reload' %>
 </p>
 <% end %>
 
@@ -60,7 +60,7 @@
 # Width of the entire chart    
 g_width = (@gantt.date_to - @gantt.date_from + 1)*zoom
 
-@gantt.render(:top => headers_height + 8, :zoom => zoom, :g_width => g_width)
+@gantt.render(:top => headers_height + 8, :zoom => zoom, :g_width => g_width, :subject_width => subject_width)
 
 g_height = [(20 * (@gantt.number_of_rows + 6))+150, 206].max
 t_height = g_height + headers_height
--- a/app/views/gantts/show.html.erb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/gantts/show.html.erb	Thu Mar 03 12:02:03 2011 +0000
@@ -1,11 +1,11 @@
 <% @gantt.view = self %>
-<h2><%= l(:label_gantt) %></h2>
+<h2><%= @query.new_record? ? l(:label_gantt) : h(@query.name) %></h2>
 
 <% form_tag(gantt_path(:month => params[:month], :year => params[:year], :months => params[:months]), :method => :put, :id => 'query_form') do %>
   <%= hidden_field_tag('project_id', @project.to_param) if @project%>
-<fieldset id="filters" class="collapsible">
+<fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>">
   <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
-	<div>
+	<div style="<%= @query.new_record? ? "" : "display: none;" %>">
     <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
   </div>
 </fieldset>
@@ -23,16 +23,16 @@
 <%= hidden_field_tag 'zoom', @gantt.zoom %>
 
 <%= link_to_remote l(:button_apply), 
-                   { :url => { :set_filter => (@query.new_record? ? 1 : nil) },
+                   { :url => { :set_filter => 1 },
                      :update => "content",
                      :with => "Form.serialize('query_form')"
                    }, :class => 'icon icon-checked' %>
                    
 <%= link_to_remote l(:button_clear),
-                   { :url => { :project_id => @project, :set_filter => (@query.new_record? ? 1 : nil) }, 
+                   { :url => { :project_id => @project, :set_filter => 1 }, 
                    	 :method => :put,
                      :update => "content",
-                   }, :class => 'icon icon-reload' if @query.new_record? %>
+                   }, :class => 'icon icon-reload' %>
 </p>
 <% end %>
 
@@ -60,7 +60,7 @@
 # Width of the entire chart    
 g_width = (@gantt.date_to - @gantt.date_from + 1)*zoom
 
-@gantt.render(:top => headers_height + 8, :zoom => zoom, :g_width => g_width)
+@gantt.render(:top => headers_height + 8, :zoom => zoom, :g_width => g_width, :subject_width => subject_width)
 
 g_height = [(20 * (@gantt.number_of_rows + 6))+150, 206].max
 t_height = g_height + headers_height
--- a/app/views/groups/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/groups/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/groups
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/groups
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 8798190a9ed51cd47a32f7fa3b14962b
 2009-09-11T21:11:20.141433Z
 2864
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 77b68adb1216f00c034d0afa77a50bff
 2009-09-12T09:13:13.676884Z
 2871
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 61731ddfe926e25ea2108a99a7dc594d
 2009-07-05T11:38:40.659710Z
 2807
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 f122118621575d0b74331d392b4aba4b
 2010-02-06T13:26:29.318273Z
 3375
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 5fc442e9118fe012a7d4049daa4d68b4
 2009-09-12T16:12:42.876344Z
 2879
@@ -202,7 +202,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 5f484ae9be041e266944cc2710caa394
 2010-05-09T11:19:15.980195Z
 3734
@@ -236,7 +236,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:11.000000Z
 7738dc0db4c4ad48e82613829c1e991a
 2010-10-30T16:47:33.260585Z
 4312
@@ -270,7 +270,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 ee1e9b07710ccd0b0dee7791dddc93bb
 2009-07-05T13:54:34.821434Z
 2812
@@ -304,7 +304,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 09eeec211f50994f28b31bcff9be43ef
 2009-09-05T11:19:00.617770Z
 2858
--- a/app/views/issue_categories/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/issue_categories/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/issue_categories
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/issue_categories
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 61ef938e10897a71008d145439614aa8
 2010-03-06T18:43:00.594668Z
 3549
@@ -66,7 +66,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:11.000000Z
 e0d28729320423a7b8fcb6309b58de9a
 2010-11-07T14:56:12.614499Z
 4385
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 fc3f04670edce3c08e645d254198a89c
 2007-09-14T11:34:08.234701Z
 725
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 f7b34c60cf2f117d3c53be7b0840fe28
 2008-02-29T22:54:07.325361Z
 1182
--- a/app/views/issue_moves/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/issue_moves/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/issue_moves
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:09:16.000000Z
+2011-03-03T11:05:10.000000Z
 9a221a421165c46becefe4e15dc6266c
 2010-12-29T20:48:51.915261Z
 4583
--- a/app/views/issue_relations/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/issue_relations/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/issue_relations
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:09:24.000000Z
+2011-03-03T11:05:10.000000Z
 7024ae266ddb4d218d7c24c3b17fa790
 2010-12-12T16:04:28.950669Z
 4502
--- a/app/views/issue_statuses/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/issue_statuses/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/issue_statuses
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/issue_statuses
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 2d8b318bb1dbbe6dbb478716d52e65e9
 2010-03-17T20:46:22.413470Z
 3600
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 e4ea04eeab7c1f7265858a9dd09f1b7b
 2009-12-12T10:33:12.138303Z
 3157
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 21f8b2f134a83413d09ae7e4d004c642
 2009-07-05T12:22:02.133266Z
 2810
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 af751ca552f43d9954a0cb1bbdb6e362
 2009-07-05T12:22:02.133266Z
 2810
--- a/app/views/issues/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/issues/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 41
-/svn/!svn/ver/4652/trunk/app/views/issues
+/svn/!svn/ver/4908/trunk/app/views/issues
 END
 _relations.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 58
-/svn/!svn/ver/4065/trunk/app/views/issues/_relations.rhtml
+/svn/!svn/ver/4741/trunk/app/views/issues/_relations.rhtml
 END
 _history.rhtml
 K 25
@@ -49,7 +49,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 56
-/svn/!svn/ver/4012/trunk/app/views/issues/_sidebar.rhtml
+/svn/!svn/ver/4908/trunk/app/views/issues/_sidebar.rhtml
 END
 _list.rhtml
 K 25
@@ -93,23 +93,23 @@
 V 53
 /svn/!svn/ver/3946/trunk/app/views/issues/_edit.rhtml
 END
+edit.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/1129/trunk/app/views/issues/edit.rhtml
+END
 _attributes.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 59
 /svn/!svn/ver/4090/trunk/app/views/issues/_attributes.rhtml
 END
-edit.rhtml
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/1129/trunk/app/views/issues/edit.rhtml
-END
 show.api.rsb
 K 25
 svn:wc:ra_dav:version-url
 V 54
-/svn/!svn/ver/4512/trunk/app/views/issues/show.api.rsb
+/svn/!svn/ver/4741/trunk/app/views/issues/show.api.rsb
 END
 destroy.rhtml
 K 25
--- a/app/views/issues/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/issues/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/issues
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-08T00:19:51.192586Z
-4652
-tmaruyama
+2011-02-21T13:34:33.010064Z
+4908
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-24T12:48:29.596042Z
-4659150afe6ae87105eaa29894e4d488
-2010-09-06T00:48:44.764418Z
-4065
-edavis10
+2011-03-03T11:05:11.000000Z
+071e7d5deebfed5ec01c6fa478e57a6d
+2011-01-22T13:28:20.816262Z
+4741
+jplang
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-1816
+1763
 
 _history.rhtml
 file
@@ -66,7 +66,7 @@
 
 
 
-2010-09-24T12:48:29.596042Z
+2011-03-03T11:05:11.000000Z
 8d719ade30044f529f104cda9dcdd6f4
 2010-09-05T22:57:20.669640Z
 4062
@@ -100,7 +100,7 @@
 
 
 
-2010-11-19T13:04:50.824922Z
+2011-03-03T11:05:11.000000Z
 74c6e939ebb113c49a367fff0f463f63
 2010-10-15T23:11:05.712143Z
 4258
@@ -134,7 +134,7 @@
 
 
 
-2011-01-13T14:09:38.000000Z
+2011-03-03T11:05:11.000000Z
 f3bdc270087564333ffdacd38f1d363c
 2010-12-18T14:14:04.023240Z
 4533
@@ -168,7 +168,7 @@
 
 
 
-2010-11-19T13:04:50.824922Z
+2011-03-03T11:05:11.000000Z
 7c3d2a41291eabbd1c7e28139be69e49
 2010-10-30T16:15:31.867344Z
 4311
@@ -202,7 +202,7 @@
 
 
 
-2010-09-23T14:37:44.571741Z
+2011-03-03T11:05:11.000000Z
 00a1336147a304d10f556a97f7105a83
 2009-12-11T18:48:34.197724Z
 3151
@@ -236,7 +236,7 @@
 
 
 
-2010-09-24T12:48:29.596042Z
+2011-03-03T11:05:11.000000Z
 5a8516dceeaac8769ab1780f8e9cccd9
 2010-09-16T21:33:49.399868Z
 4093
@@ -270,11 +270,11 @@
 
 
 
-2010-09-23T14:37:44.571741Z
-c2e4e73b27a58d99224ccc2d7f35dc84
-2010-08-22T18:30:26.413363Z
-4012
-edavis10
+2011-03-03T11:40:18.000000Z
+b9c2ef98cde787dfe8b1b0b4df497613
+2011-02-21T13:34:33.010064Z
+4908
+jplang
 has-props
 
 
@@ -296,7 +296,7 @@
 
 
 
-1135
+901
 
 _list.rhtml
 file
@@ -304,7 +304,7 @@
 
 
 
-2010-09-24T12:48:29.596042Z
+2011-03-03T11:05:11.000000Z
 b5bd20e1b16f321b87b14ec6d0b7a9e7
 2010-09-03T19:59:49.465806Z
 4056
@@ -338,7 +338,7 @@
 
 
 
-2011-01-13T14:09:38.000000Z
+2011-03-03T11:05:11.000000Z
 db6f5533a330ebdcd1dd5e4c47098024
 2010-12-11T13:13:49.013705Z
 4489
@@ -372,7 +372,7 @@
 
 
 
-2011-01-13T14:09:38.000000Z
+2011-03-03T11:05:11.000000Z
 f147a1cbca0263a122d10bf674d6dcbf
 2010-12-18T13:40:50.641112Z
 4530
@@ -406,7 +406,7 @@
 
 
 
-2010-09-23T14:37:44.571741Z
+2011-03-03T11:05:11.000000Z
 5cac68d4655699c1a4ce40ef17da7b0a
 2009-07-29T19:04:27.717761Z
 2827
@@ -440,7 +440,7 @@
 
 
 
-2010-09-23T14:37:44.571741Z
+2011-03-03T11:05:11.000000Z
 334ec8cd87b661a181185092c242c41d
 2010-08-08T07:07:20.961363Z
 3924
@@ -474,7 +474,7 @@
 
 
 
-2011-01-13T14:09:38.000000Z
+2011-03-03T11:05:11.000000Z
 eca2b7cfea14ef6185c358e55f1b8b48
 2011-01-08T00:19:51.192586Z
 4652
@@ -508,7 +508,7 @@
 
 
 
-2010-09-23T14:37:44.571741Z
+2011-03-03T11:05:11.000000Z
 ebae2e20ea4028620967382b877b5860
 2010-08-18T15:01:35.032314Z
 3946
@@ -536,13 +536,47 @@
 
 2768
 
+edit.rhtml
+file
+
+
+
+
+2011-03-03T11:05:11.000000Z
+4b6048de503364b0ef668df08cceb602
+2008-02-09T16:11:18.249226Z
+1129
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+90
+
 _attributes.rhtml
 file
 
 
 
 
-2010-09-24T12:48:29.599802Z
+2011-03-03T11:05:11.000000Z
 e2c801f0755567e34186cdbbc510d29d
 2010-09-16T18:27:33.887969Z
 4090
@@ -570,16 +604,16 @@
 
 2461
 
-edit.rhtml
+show.api.rsb
 file
 
 
 
 
-2010-09-23T14:37:44.575742Z
-4b6048de503364b0ef668df08cceb602
-2008-02-09T16:11:18.249226Z
-1129
+2011-03-03T11:05:11.000000Z
+cdb3db6cd78da1f46578c9da61923c4e
+2011-01-22T13:28:20.816262Z
+4741
 jplang
 has-props
 
@@ -602,41 +636,7 @@
 
 
 
-90
-
-show.api.rsb
-file
-
-
-
-
-2011-01-13T14:09:38.000000Z
-47d5c2be3301716cd4351c51904801a3
-2010-12-14T19:03:17.057916Z
-4512
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2836
+2808
 
 destroy.rhtml
 file
@@ -644,7 +644,7 @@
 
 
 
-2010-09-23T14:37:44.571741Z
+2011-03-03T11:05:11.000000Z
 b429d0e7dd6b3ef7bc1a28bdf0aeaf34
 2009-04-24T17:18:36.117696Z
 2685
@@ -678,7 +678,7 @@
 
 
 
-2010-11-19T13:04:50.824922Z
+2011-03-03T11:05:11.000000Z
 9889d4cce0dfd6d224e85fc1f489c623
 2010-10-30T16:15:31.867344Z
 4311
--- a/app/views/issues/.svn/text-base/_relations.rhtml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/issues/.svn/text-base/_relations.rhtml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -6,9 +6,9 @@
 
 <p><strong><%=l(:label_related_issues)%></strong></p>
 
-<% if @issue.relations.any? %>
+<% if @relations.present? %>
 <table style="width:100%">
-<% @issue.relations.select {|r| r.other_issue(@issue).visible? }.each do |relation| %>
+<% @relations.each do |relation| %>
 <tr>
 <td><%= l(relation.label_for(@issue)) %> <%= "(#{l('datetime.distance_in_words.x_days', :count => relation.delay)})" if relation.delay && relation.delay != 0 %>
     <%= h(relation.other_issue(@issue).project) + ' - ' if Setting.cross_project_issue_relations? %>
--- a/app/views/issues/.svn/text-base/_sidebar.rhtml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/issues/.svn/text-base/_sidebar.rhtml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -13,11 +13,5 @@
 <% end %>
 <%= call_hook(:view_issues_sidebar_planning_bottom) %>
 
-<% unless sidebar_queries.empty? -%>
-<h3><%= l(:label_query_plural) %></h3>
-
-<% sidebar_queries.each do |query| -%>
-<%= link_to(h(query.name), :controller => 'issues', :action => 'index', :project_id => @project, :query_id => query) %><br />
-<% end -%>
+<%= render_sidebar_queries %>
 <%= call_hook(:view_issues_sidebar_queries_bottom) %>
-<% end -%>
--- a/app/views/issues/.svn/text-base/show.api.rsb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/issues/.svn/text-base/show.api.rsb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -26,10 +26,10 @@
   render_api_issue_children(@issue, api) if include_in_api_response?('children')
   
   api.array :relations do
-    @issue.relations.select {|r| r.other_issue(@issue).visible? }.each do |relation|
+    @relations.each do |relation|
       api.relation(:id => relation.id, :issue_id => relation.other_issue(@issue).id, :relation_type => relation.relation_type_for(@issue), :delay => relation.delay)
     end
-  end if include_in_api_response?('relations')
+  end if include_in_api_response?('relations') && @relations.present?
   
   api.array :changesets do
     @issue.changesets.each do |changeset|
--- a/app/views/issues/_relations.rhtml	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/issues/_relations.rhtml	Thu Mar 03 12:02:03 2011 +0000
@@ -6,9 +6,9 @@
 
 <p><strong><%=l(:label_related_issues)%></strong></p>
 
-<% if @issue.relations.any? %>
+<% if @relations.present? %>
 <table style="width:100%">
-<% @issue.relations.select {|r| r.other_issue(@issue).visible? }.each do |relation| %>
+<% @relations.each do |relation| %>
 <tr>
 <td><%= l(relation.label_for(@issue)) %> <%= "(#{l('datetime.distance_in_words.x_days', :count => relation.delay)})" if relation.delay && relation.delay != 0 %>
     <%= h(relation.other_issue(@issue).project) + ' - ' if Setting.cross_project_issue_relations? %>
--- a/app/views/issues/_sidebar.rhtml	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/issues/_sidebar.rhtml	Thu Mar 03 12:02:03 2011 +0000
@@ -13,11 +13,5 @@
 <% end %>
 <%= call_hook(:view_issues_sidebar_planning_bottom) %>
 
-<% unless sidebar_queries.empty? -%>
-<h3><%= l(:label_query_plural) %></h3>
-
-<% sidebar_queries.each do |query| -%>
-<%= link_to(h(query.name), :controller => 'issues', :action => 'index', :project_id => @project, :query_id => query) %><br />
-<% end -%>
+<%= render_sidebar_queries %>
 <%= call_hook(:view_issues_sidebar_queries_bottom) %>
-<% end -%>
--- a/app/views/issues/show.api.rsb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/issues/show.api.rsb	Thu Mar 03 12:02:03 2011 +0000
@@ -26,10 +26,10 @@
   render_api_issue_children(@issue, api) if include_in_api_response?('children')
   
   api.array :relations do
-    @issue.relations.select {|r| r.other_issue(@issue).visible? }.each do |relation|
+    @relations.each do |relation|
       api.relation(:id => relation.id, :issue_id => relation.other_issue(@issue).id, :relation_type => relation.relation_type_for(@issue), :delay => relation.delay)
     end
-  end if include_in_api_response?('relations')
+  end if include_in_api_response?('relations') && @relations.present?
   
   api.array :changesets do
     @issue.changesets.each do |changeset|
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/journals/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,35 @@
+K 25
+svn:wc:ra_dav:version-url
+V 43
+/svn/!svn/ver/4954/trunk/app/views/journals
+END
+_notes_form.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/!svn/ver/2924/trunk/app/views/journals/_notes_form.rhtml
+END
+update.rjs
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/3596/trunk/app/views/journals/update.rjs
+END
+edit.rjs
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/1105/trunk/app/views/journals/edit.rjs
+END
+diff.html.erb
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/!svn/ver/4954/trunk/app/views/journals/diff.html.erb
+END
+index.rxml
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/4034/trunk/app/views/journals/index.rxml
+END
--- a/app/views/journals/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/journals/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/journals
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/journals
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-23T15:04:36.844654Z
-4034
-edavis10
+2011-02-27T13:34:41.060565Z
+4954
+jplang
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 fb8a5b1bfdbadbbaaa17ce7fc1dfcf3c
 2009-10-11T10:36:11.599175Z
 2924
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 269ec86216a5d0340e02940f1b190d51
 2010-03-17T04:13:05.342620Z
 3596
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 ce552c52f7c423630412d0593cc1ee61
 2008-02-02T10:50:31.694950Z
 1105
@@ -128,13 +128,47 @@
 
 140
 
+diff.html.erb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+073352211ae7cecb9e1ff5ea1ce17150
+2011-02-27T13:34:41.060565Z
+4954
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+408
+
 index.rxml
 file
 
 
 
 
-2010-09-10T14:59:24.000000Z
+2011-03-03T11:05:10.000000Z
 ef7f777c9318cee52e909377c4f96e8b
 2010-08-23T15:04:36.844654Z
 4034
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/journals/.svn/prop-base/diff.html.erb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/journals/.svn/text-base/diff.html.erb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,10 @@
+<h2><%=h @issue.tracker %> #<%= @issue.id %></h2>
+<p><%= authoring @journal.created_on, @journal.user, :label => :label_updated_time_by %></p>
+
+<div class="text-diff">
+<%= simple_format_without_paragraph @diff.to_html %>
+</div>
+
+<p><%= link_to l(:button_back), issue_path(@issue), :onclick => 'history.back(); return false;' %></p>
+
+<% html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/journals/diff.html.erb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,10 @@
+<h2><%=h @issue.tracker %> #<%= @issue.id %></h2>
+<p><%= authoring @journal.created_on, @journal.user, :label => :label_updated_time_by %></p>
+
+<div class="text-diff">
+<%= simple_format_without_paragraph @diff.to_html %>
+</div>
+
+<p><%= link_to l(:button_back), issue_path(@issue), :onclick => 'history.back(); return false;' %></p>
+
+<% html_title "#{@issue.tracker.name} ##{@issue.id}: #{@issue.subject}" %>
--- a/app/views/layouts/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/layouts/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 42
-/svn/!svn/ver/4731/trunk/app/views/layouts
+/svn/!svn/ver/4965/trunk/app/views/layouts
 END
 base.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 53
-/svn/!svn/ver/4731/trunk/app/views/layouts/base.rhtml
+/svn/!svn/ver/4965/trunk/app/views/layouts/base.rhtml
 END
 mailer.text.plain.erb
 K 25
--- a/app/views/layouts/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/layouts/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/layouts
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-16T16:36:58.753919Z
-4731
+2011-02-28T16:44:02.921792Z
+4965
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-01-19T15:03:32.000000Z
-0bc162aa0af44b46e02548061da67700
-2011-01-16T16:36:58.753919Z
-4731
+2011-03-03T11:40:18.000000Z
+be984c02903b5fdba04df41a14c73242
+2011-02-28T16:44:02.921792Z
+4965
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-2927
+2912
 
 mailer.text.plain.erb
 file
@@ -66,7 +66,7 @@
 
 
 
-2010-11-19T13:04:48.184855Z
+2011-03-03T11:05:10.000000Z
 490231bbc42932a0f9e1735a94d06260
 2010-11-02T19:00:36.834304Z
 4362
@@ -100,7 +100,7 @@
 
 
 
-2010-11-19T13:04:48.184855Z
+2011-03-03T11:05:10.000000Z
 5073a425d4e7896c725996f9cf35f74b
 2010-11-02T19:00:36.834304Z
 4362
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:44.583752Z
+2011-03-03T11:05:10.000000Z
 cc6ca08e56314fb510561e8eeb4ede46
 2009-12-17T18:21:02.630202Z
 3176
--- a/app/views/layouts/.svn/text-base/base.rhtml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/layouts/.svn/text-base/base.rhtml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -8,7 +8,7 @@
 <%= favicon %>
 <%= stylesheet_link_tag 'application', :media => 'all' %>
 <%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
-<%= javascript_include_tag :defaults %>
+<%= javascript_heads %>
 <%= heads_for_theme %>
 <%= heads_for_wiki_formatter %>
 <!--[if IE 6]>
@@ -21,7 +21,7 @@
 <!-- page specific tags -->
 <%= yield :header_tags -%>
 </head>
-<body class="<%= body_css_classes %>">
+<body class="<%=h body_css_classes %>">
 <div id="wrapper">
 <div id="wrapper2">
 <div id="top-menu">
--- a/app/views/layouts/base.rhtml	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/layouts/base.rhtml	Thu Mar 03 12:02:03 2011 +0000
@@ -8,7 +8,7 @@
 <%= favicon %>
 <%= stylesheet_link_tag 'application', :media => 'all' %>
 <%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
-<%= javascript_include_tag :defaults %>
+<%= javascript_heads %>
 <%= heads_for_theme %>
 <%= heads_for_wiki_formatter %>
 <!--[if IE 6]>
@@ -21,7 +21,7 @@
 <!-- page specific tags -->
 <%= yield :header_tags -%>
 </head>
-<body class="<%= body_css_classes %>">
+<body class="<%=h body_css_classes %>">
 <div id="wrapper">
 <div id="wrapper2">
 <div id="top-menu">
--- a/app/views/ldap_auth_sources/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/ldap_auth_sources/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/ldap_auth_sources
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/ldap_auth_sources
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 7eaca2b2857c3c1ef6fa72633333d56f
 2010-05-23T03:16:31.304135Z
 3744
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/mailer/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,197 @@
+K 25
+svn:wc:ra_dav:version-url
+V 41
+/svn/!svn/ver/4892/trunk/app/views/mailer
+END
+wiki_content_added.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 77
+/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_added.text.plain.rhtml
+END
+account_activated.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svn/!svn/ver/2484/trunk/app/views/mailer/account_activated.text.plain.rhtml
+END
+register.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 65
+/svn/!svn/ver/877/trunk/app/views/mailer/register.text.html.rhtml
+END
+account_activation_request.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 84
+/svn/!svn/ver/915/trunk/app/views/mailer/account_activation_request.text.plain.rhtml
+END
+account_activation_request.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 84
+/svn/!svn/ver/3452/trunk/app/views/mailer/account_activation_request.text.html.rhtml
+END
+attachments_added.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 75
+/svn/!svn/ver/877/trunk/app/views/mailer/attachments_added.text.plain.rhtml
+END
+issue_edit.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 69
+/svn/!svn/ver/2493/trunk/app/views/mailer/issue_edit.text.plain.rhtml
+END
+issue_edit.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/3452/trunk/app/views/mailer/issue_edit.text.html.rhtml
+END
+issue_add.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 67
+/svn/!svn/ver/3452/trunk/app/views/mailer/issue_add.text.html.rhtml
+END
+message_posted.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/3452/trunk/app/views/mailer/message_posted.text.html.rhtml
+END
+reminder.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 67
+/svn/!svn/ver/2493/trunk/app/views/mailer/reminder.text.plain.rhtml
+END
+reminder.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 66
+/svn/!svn/ver/2814/trunk/app/views/mailer/reminder.text.html.rhtml
+END
+wiki_content_added.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_added.text.html.rhtml
+END
+test.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/877/trunk/app/views/mailer/test.text.plain.rhtml
+END
+test.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/!svn/ver/877/trunk/app/views/mailer/test.text.html.rhtml
+END
+account_activated.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 75
+/svn/!svn/ver/2484/trunk/app/views/mailer/account_activated.text.html.rhtml
+END
+register.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 66
+/svn/!svn/ver/877/trunk/app/views/mailer/register.text.plain.rhtml
+END
+_issue_text_plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 65
+/svn/!svn/ver/4892/trunk/app/views/mailer/_issue_text_plain.rhtml
+END
+_issue_text_html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 64
+/svn/!svn/ver/4892/trunk/app/views/mailer/_issue_text_html.rhtml
+END
+news_added.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/877/trunk/app/views/mailer/news_added.text.plain.rhtml
+END
+attachments_added.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 75
+/svn/!svn/ver/3452/trunk/app/views/mailer/attachments_added.text.html.rhtml
+END
+news_added.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/3452/trunk/app/views/mailer/news_added.text.html.rhtml
+END
+document_added.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/877/trunk/app/views/mailer/document_added.text.plain.rhtml
+END
+document_added.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/3452/trunk/app/views/mailer/document_added.text.html.rhtml
+END
+issue_add.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/2493/trunk/app/views/mailer/issue_add.text.plain.rhtml
+END
+account_information.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 77
+/svn/!svn/ver/877/trunk/app/views/mailer/account_information.text.plain.rhtml
+END
+message_posted.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/932/trunk/app/views/mailer/message_posted.text.plain.rhtml
+END
+account_information.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 77
+/svn/!svn/ver/3452/trunk/app/views/mailer/account_information.text.html.rhtml
+END
+wiki_content_updated.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_updated.text.plain.rhtml
+END
+lost_password.text.plain.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/1683/trunk/app/views/mailer/lost_password.text.plain.rhtml
+END
+wiki_content_updated.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 78
+/svn/!svn/ver/4296/trunk/app/views/mailer/wiki_content_updated.text.html.rhtml
+END
+lost_password.text.html.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/3452/trunk/app/views/mailer/lost_password.text.html.rhtml
+END
--- a/app/views/mailer/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/mailer/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/mailer
 http://redmine.rubyforge.org/svn
 
 
 
-2010-10-27T16:27:06.240747Z
-4296
-edavis10
+2011-02-20T14:27:34.168395Z
+4892
+jplang
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-19T13:04:49.420968Z
+2011-03-03T11:05:10.000000Z
 1729c597befa0c9411266eb9d1c5b577
 2010-10-27T16:27:06.240747Z
 4296
@@ -66,7 +66,7 @@
 
 
 
-2010-09-23T14:37:44.599741Z
+2011-03-03T11:05:10.000000Z
 e54fccdf5cf9e146cddf2adc5797d76f
 2009-02-20T17:04:47.905923Z
 2484
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:44.607738Z
+2011-03-03T11:05:10.000000Z
 55d268cfc5ec4c2375739d401a00e9ca
 2007-11-04T10:43:39.403792Z
 877
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:44.603754Z
+2011-03-03T11:05:10.000000Z
 157b6123ac6990f3cb83d1a24c441599
 2007-11-18T17:46:55.863051Z
 915
@@ -168,7 +168,7 @@
 
 
 
-2010-09-23T14:37:44.603754Z
+2011-03-03T11:05:10.000000Z
 99836d2f584d6975add91d6f4885dfa3
 2010-02-18T19:13:38.135448Z
 3452
@@ -202,7 +202,7 @@
 
 
 
-2010-09-23T14:37:44.603754Z
+2011-03-03T11:05:10.000000Z
 0fcec4c9195f18d0d58724feb863a27e
 2007-11-04T10:43:39.403792Z
 877
@@ -236,7 +236,7 @@
 
 
 
-2010-09-23T14:37:44.603754Z
+2011-03-03T11:05:10.000000Z
 501bcdc81562733bce55a29655f6fd89
 2009-02-21T11:04:50.579477Z
 2493
@@ -270,7 +270,7 @@
 
 
 
-2010-09-23T14:37:44.603754Z
+2011-03-03T11:05:10.000000Z
 746db1ca981aa5fc37569de58a3be57b
 2010-02-18T19:13:38.135448Z
 3452
@@ -304,7 +304,7 @@
 
 
 
-2010-09-23T14:37:44.603754Z
+2011-03-03T11:05:10.000000Z
 55b994ef0e81fdc6d78f280c8716f230
 2010-02-18T19:13:38.135448Z
 3452
@@ -338,7 +338,7 @@
 
 
 
-2010-09-23T14:37:44.603754Z
+2011-03-03T11:05:10.000000Z
 76b612bb95df0f232af66dcfa75908a9
 2010-02-18T19:13:38.135448Z
 3452
@@ -372,7 +372,7 @@
 
 
 
-2010-09-23T14:37:44.607738Z
+2011-03-03T11:05:10.000000Z
 6a0fb1622f40125ab40706fa05705436
 2009-02-21T11:04:50.579477Z
 2493
@@ -406,7 +406,7 @@
 
 
 
-2010-09-23T14:37:44.607738Z
+2011-03-03T11:05:10.000000Z
 6efcff34ccd9ec0ebd5c501a38bd9e61
 2009-07-05T14:14:44.411724Z
 2814
@@ -440,7 +440,7 @@
 
 
 
-2010-11-19T13:04:49.420968Z
+2011-03-03T11:05:10.000000Z
 37e05984b98664e4b97c26b51196f9ab
 2010-10-27T16:27:06.240747Z
 4296
@@ -474,7 +474,7 @@
 
 
 
-2010-09-23T14:37:44.607738Z
+2011-03-03T11:05:10.000000Z
 62a282059a34f2aaa4d56b609e94e27c
 2007-11-04T10:43:39.403792Z
 877
@@ -508,7 +508,7 @@
 
 
 
-2010-09-23T14:37:44.607738Z
+2011-03-03T11:05:10.000000Z
 b95faada3d8a7eac9ddd90de85d377eb
 2007-11-04T10:43:39.403792Z
 877
@@ -542,7 +542,7 @@
 
 
 
-2010-09-23T14:37:44.599741Z
+2011-03-03T11:05:10.000000Z
 b6dee3a7f5ce5253d3d66ea2d0aed032
 2009-02-20T17:04:47.905923Z
 2484
@@ -576,7 +576,7 @@
 
 
 
-2010-09-23T14:37:44.607738Z
+2011-03-03T11:05:10.000000Z
 382940abff8d469305e2b82eaac09875
 2007-11-04T10:43:39.403792Z
 877
@@ -610,8 +610,76 @@
 
 
 
-2010-09-23T14:37:44.599741Z
-1f73b58bdc0fd4474073437ce2e219bd
+2011-03-03T11:40:18.000000Z
+76a51edc640a60b59fca8e679d0161b6
+2011-02-20T14:27:34.168395Z
+4892
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+498
+
+_issue_text_html.rhtml
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+68467469e0b5a8d3dc67dba7ba7e42b0
+2011-02-20T14:27:34.168395Z
+4892
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+635
+
+news_added.text.plain.rhtml
+file
+
+
+
+
+2011-03-03T11:05:10.000000Z
+0cbce1fe1b288482af3095ce9bc555ed
 2007-11-04T10:43:39.403792Z
 877
 jplang
@@ -636,41 +704,7 @@
 
 
 
-492
-
-_issue_text_html.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.599741Z
-871cf6abc13d895f9de91ef4ac36c2bd
-2010-02-18T19:13:38.135448Z
-3452
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-629
+87
 
 attachments_added.text.html.rhtml
 file
@@ -678,7 +712,7 @@
 
 
 
-2010-09-23T14:37:44.603754Z
+2011-03-03T11:05:10.000000Z
 db9ef17343824d59b7a19db7036ee2f1
 2010-02-18T19:13:38.135448Z
 3452
@@ -706,47 +740,13 @@
 
 144
 
-news_added.text.plain.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.607738Z
-0cbce1fe1b288482af3095ce9bc555ed
-2007-11-04T10:43:39.403792Z
-877
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-87
-
 news_added.text.html.rhtml
 file
 
 
 
 
-2010-09-23T14:37:44.607738Z
+2011-03-03T11:05:10.000000Z
 7dffb9cfc22aef3b03d0d771179f26d6
 2010-02-18T19:13:38.135448Z
 3452
@@ -780,7 +780,7 @@
 
 
 
-2010-09-23T14:37:44.603754Z
+2011-03-03T11:05:10.000000Z
 d4eae87a9e17f49caeb6913659b9c42d
 2007-11-04T10:43:39.403792Z
 877
@@ -808,13 +808,47 @@
 
 107
 
+document_added.text.html.rhtml
+file
+
+
+
+
+2011-03-03T11:05:10.000000Z
+06d5fbff057e28328f2be88419207f80
+2010-02-18T19:13:38.135448Z
+3452
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+163
+
 issue_add.text.plain.rhtml
 file
 
 
 
 
-2010-09-23T14:37:44.603754Z
+2011-03-03T11:05:10.000000Z
 52a0f774acd5b7aeeb3768de943af901
 2009-02-21T11:04:50.579477Z
 2493
@@ -842,47 +876,13 @@
 
 224
 
-document_added.text.html.rhtml
-file
-
-
-
-
-2010-09-23T14:37:44.603754Z
-06d5fbff057e28328f2be88419207f80
-2010-02-18T19:13:38.135448Z
-3452
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-163
-
 account_information.text.plain.rhtml
 file
 
 
 
 
-2010-09-23T14:37:44.603754Z
+2011-03-03T11:05:10.000000Z
 2b46c7d28f33cec521374ccae2fd8451
 2007-11-04T10:43:39.403792Z
 877
@@ -910,13 +910,47 @@
 
 295
 
+message_posted.text.plain.rhtml
+file
+
+
+
+
+2011-03-03T11:05:10.000000Z
+9b7ab36ebc57f0c02756d2b076e67b19
+2007-11-26T18:47:49.588558Z
+932
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+68
+
 account_information.text.html.rhtml
 file
 
 
 
 
-2010-09-23T14:37:44.603754Z
+2011-03-03T11:05:10.000000Z
 e7e91d7f18dd1547cfebafdf4822a18f
 2010-02-18T19:13:38.135448Z
 3452
@@ -944,17 +978,17 @@
 
 368
 
-message_posted.text.plain.rhtml
+wiki_content_updated.text.plain.rhtml
 file
 
 
 
 
-2010-09-23T14:37:44.603754Z
-9b7ab36ebc57f0c02756d2b076e67b19
-2007-11-26T18:47:49.588558Z
-932
-jplang
+2011-03-03T11:05:10.000000Z
+0cb005c22ad144fdbe29238b0080f28b
+2010-10-27T16:27:06.240747Z
+4296
+edavis10
 has-props
 
 
@@ -976,7 +1010,7 @@
 
 
 
-68
+288
 
 lost_password.text.plain.rhtml
 file
@@ -984,7 +1018,7 @@
 
 
 
-2010-09-23T14:37:44.603754Z
+2011-03-03T11:05:10.000000Z
 44018a44ceaecb5c9be3fed66e759064
 2008-07-21T19:13:46.546624Z
 1683
@@ -1012,47 +1046,13 @@
 
 97
 
-wiki_content_updated.text.plain.rhtml
-file
-
-
-
-
-2010-11-19T13:04:49.420968Z
-0cb005c22ad144fdbe29238b0080f28b
-2010-10-27T16:27:06.240747Z
-4296
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-288
-
 lost_password.text.html.rhtml
 file
 
 
 
 
-2010-09-23T14:37:44.603754Z
+2011-03-03T11:05:10.000000Z
 a53d9ea13c19cbce1edc375a01b5753d
 2010-02-18T19:13:38.135448Z
 3452
@@ -1086,7 +1086,7 @@
 
 
 
-2010-11-19T13:04:49.420968Z
+2011-03-03T11:05:10.000000Z
 f35cf0d09dd393a255db2d428a3d30f0
 2010-10-27T16:27:06.240747Z
 4296
--- a/app/views/mailer/.svn/text-base/_issue_text_html.rhtml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/mailer/.svn/text-base/_issue_text_html.rhtml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -7,7 +7,7 @@
 <li><%=l(:field_assigned_to)%>: <%=h issue.assigned_to %></li>
 <li><%=l(:field_category)%>: <%=h issue.category %></li>
 <li><%=l(:field_fixed_version)%>: <%=h issue.fixed_version %></li>
-<% issue.custom_values.each do |c| %>
+<% issue.custom_field_values.each do |c| %>
   <li><%=h c.custom_field.name %>: <%=h show_value(c) %></li>
 <% end %>
 </ul>
--- a/app/views/mailer/.svn/text-base/_issue_text_plain.rhtml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/mailer/.svn/text-base/_issue_text_plain.rhtml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -7,7 +7,7 @@
 <%=l(:field_assigned_to)%>: <%= issue.assigned_to %>
 <%=l(:field_category)%>: <%= issue.category %>
 <%=l(:field_fixed_version)%>: <%= issue.fixed_version %>
-<% issue.custom_values.each do |c| %><%= c.custom_field.name %>: <%= show_value(c) %>
+<% issue.custom_field_values.each do |c| %><%= c.custom_field.name %>: <%= show_value(c) %>
 <% end %>
 
 <%= issue.description %>
--- a/app/views/mailer/_issue_text_html.rhtml	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/mailer/_issue_text_html.rhtml	Thu Mar 03 12:02:03 2011 +0000
@@ -7,7 +7,7 @@
 <li><%=l(:field_assigned_to)%>: <%=h issue.assigned_to %></li>
 <li><%=l(:field_category)%>: <%=h issue.category %></li>
 <li><%=l(:field_fixed_version)%>: <%=h issue.fixed_version %></li>
-<% issue.custom_values.each do |c| %>
+<% issue.custom_field_values.each do |c| %>
   <li><%=h c.custom_field.name %>: <%=h show_value(c) %></li>
 <% end %>
 </ul>
--- a/app/views/mailer/_issue_text_plain.rhtml	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/mailer/_issue_text_plain.rhtml	Thu Mar 03 12:02:03 2011 +0000
@@ -7,7 +7,7 @@
 <%=l(:field_assigned_to)%>: <%= issue.assigned_to %>
 <%=l(:field_category)%>: <%= issue.category %>
 <%=l(:field_fixed_version)%>: <%= issue.fixed_version %>
-<% issue.custom_values.each do |c| %><%= c.custom_field.name %>: <%= show_value(c) %>
+<% issue.custom_field_values.each do |c| %><%= c.custom_field.name %>: <%= show_value(c) %>
 <% end %>
 
 <%= issue.description %>
--- a/app/views/members/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/members/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/members
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/members
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 9e105ea0b16e73250d47d57f07d71cff
 2009-09-12T08:36:46.650954Z
 2869
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/messages/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,29 @@
+K 25
+svn:wc:ra_dav:version-url
+V 43
+/svn/!svn/ver/4889/trunk/app/views/messages
+END
+show.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/3877/trunk/app/views/messages/show.rhtml
+END
+_form.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/!svn/ver/3339/trunk/app/views/messages/_form.rhtml
+END
+edit.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/4889/trunk/app/views/messages/edit.rhtml
+END
+new.rhtml
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/1205/trunk/app/views/messages/new.rhtml
+END
--- a/app/views/messages/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/messages/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/messages
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/messages
 http://redmine.rubyforge.org/svn
 
 
 
-2010-07-25T10:02:12.905073Z
-3877
+2011-02-20T13:11:10.508449Z
+4889
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 c68f1ef8a922f2a408e0349d80db4376
 2010-07-25T10:02:12.905073Z
 3877
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 4fecf6ec48e549e01ada68dc8d623f38
 2010-01-25T17:26:02.255593Z
 3339
@@ -100,10 +100,10 @@
 
 
 
-2010-08-12T15:03:25.000000Z
-72a4fb6eecd42aceb751370901633f24
-2008-03-07T17:49:44.664945Z
-1205
+2011-03-03T11:40:18.000000Z
+65fbdcd20ac7f10349863c836306f7d3
+2011-02-20T13:11:10.508449Z
+4889
 jplang
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-883
+965
 
 new.rhtml
 file
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 3512563f842c2e951d7738870f2d4065
 2008-03-07T17:49:44.664945Z
 1205
--- a/app/views/messages/.svn/text-base/edit.rhtml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/messages/.svn/text-base/edit.rhtml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -12,3 +12,7 @@
                      }, :accesskey => accesskey(:preview) %>
 <% end %>
 <div id="preview" class="wiki"></div>
+
+<% content_for :header_tags do %>
+    <%= stylesheet_link_tag 'scm' %>
+<% end %>
--- a/app/views/messages/edit.rhtml	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/messages/edit.rhtml	Thu Mar 03 12:02:03 2011 +0000
@@ -12,3 +12,7 @@
                      }, :accesskey => accesskey(:preview) %>
 <% end %>
 <div id="preview" class="wiki"></div>
+
+<% content_for :header_tags do %>
+    <%= stylesheet_link_tag 'scm' %>
+<% end %>
--- a/app/views/my/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/my/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4707
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/my
 http://redmine.rubyforge.org/svn
 
 
 
-2010-11-07T12:36:19.797484Z
-4380
+2011-01-15T14:04:11.836008Z
+4722
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-19T13:04:47.012855Z
+2011-03-03T11:05:10.000000Z
 746c4ac2d5bc111d91747aa0b0c54a5a
 2010-09-28T22:13:06.534232Z
 4223
@@ -66,7 +66,7 @@
 
 
 
-2010-09-23T14:37:44.623783Z
+2011-03-03T11:05:10.000000Z
 afa83dffe27e19383284d8177f1f4687
 2010-03-04T19:02:57.949679Z
 3542
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:44.623783Z
+2011-03-03T11:05:10.000000Z
 a43c901172c8b1750d24612b24f2db22
 2009-04-21T13:43:57.529967Z
 2678
@@ -137,7 +137,7 @@
 
 
 
-2010-09-23T14:37:44.619750Z
+2011-03-03T11:05:10.000000Z
 91a0469f13d98fd2504ca036e16660f1
 2010-06-19T16:50:13.340830Z
 3775
@@ -171,7 +171,7 @@
 
 
 
-2010-09-23T14:37:44.619750Z
+2011-03-03T11:05:10.000000Z
 efb09bc859f5527d219f0dd3d5c12fe8
 2009-02-26T16:15:07.718565Z
 2528
@@ -205,10 +205,10 @@
 
 
 
-2010-11-19T13:04:47.012855Z
-afbc3db612a251e1fcb34498f27c50b8
-2010-11-07T12:36:19.797484Z
-4380
+2011-03-03T11:05:10.000000Z
+852c99d50bf883063cd77b7042c145d4
+2011-01-15T14:04:11.836008Z
+4722
 jplang
 has-props
 
@@ -231,5 +231,5 @@
 
 
 
-4274
+4275
 
--- a/app/views/my/blocks/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/my/blocks/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/my/blocks
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/my/blocks
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 0b880299704151a6acd66b5632f60426
 2010-03-10T05:10:43.201527Z
 3557
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 6aa71a8cc8a018c4c564915c10355709
 2007-04-20T09:53:44.242780Z
 449
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 55339408a7e093de86505f92845ed977
 2009-03-17T17:34:49.297132Z
 2598
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 bf22b792b1b79c60dc866718c074f370
 2009-05-30T23:30:36.923541Z
 2777
@@ -168,7 +168,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:10.000000Z
 2ba11e15a7f15f88fe061979d921b59d
 2010-10-15T23:37:01.382819Z
 4259
@@ -202,7 +202,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 a21d8649f0daec69caabb118e9b6375c
 2008-08-26T11:08:45.487893Z
 1766
@@ -236,7 +236,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 3894ab9b2f76b3622a362843be2162be
 2010-01-30T11:23:17.508662Z
 3351
--- a/app/views/news/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/news/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/news
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-19T13:04:49.428894Z
+2011-03-03T11:05:10.000000Z
 2501c1cef884fd4a56abb3a4e736825f
 2010-09-27T16:51:12.033537Z
 4214
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:09:24.000000Z
+2011-03-03T11:05:10.000000Z
 194919e4bc598629f690752af5340b5b
 2010-12-12T17:00:52.100205Z
 4505
@@ -100,7 +100,7 @@
 
 
 
-2011-01-13T14:09:24.000000Z
+2011-03-03T11:05:10.000000Z
 969b4f69a93036097550cd14be8023bc
 2010-11-20T09:38:54.291843Z
 4412
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:44.627781Z
+2011-03-03T11:05:10.000000Z
 e06c154a981d18d975bcba8eb682df30
 2007-09-22T17:52:43.686392Z
 750
@@ -168,7 +168,7 @@
 
 
 
-2010-11-19T13:04:49.432892Z
+2011-03-03T11:05:10.000000Z
 dd2c968c6b42916bff9b9e5de055e007
 2010-09-27T16:51:12.033537Z
 4214
@@ -202,7 +202,7 @@
 
 
 
-2010-11-19T13:04:49.432892Z
+2011-03-03T11:05:10.000000Z
 764ec3719917039d0cac3d375ec819c4
 2010-10-22T14:42:38.351679Z
 4267
@@ -236,7 +236,7 @@
 
 
 
-2010-11-19T13:04:49.432892Z
+2011-03-03T11:05:10.000000Z
 1e7f24dd1dc6a117b245a76174e4c8ae
 2010-09-27T16:51:12.033537Z
 4214
--- a/app/views/previews/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/previews/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/previews
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/previews
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-10T14:59:24.000000Z
+2011-03-03T11:05:10.000000Z
 359c6608ef716c8b3b62fd96c241a680
 2010-08-18T15:01:35.032314Z
 3946
--- a/app/views/projects/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/projects/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/projects
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:44.643780Z
+2011-03-03T11:05:11.000000Z
 26653788620aef89a25b8ad819144e03
 2010-03-21T11:17:29.163519Z
 3608
@@ -69,7 +69,7 @@
 
 
 
-2011-01-13T14:09:29.000000Z
+2011-03-03T11:05:11.000000Z
 89a2baf21090ed983ffe265fa0929b29
 2011-01-06T21:02:19.982329Z
 4648
@@ -103,7 +103,7 @@
 
 
 
-2011-01-13T14:09:29.000000Z
+2011-03-03T11:05:11.000000Z
 4eef8200b378cb9b074da5abac7c5dfa
 2010-12-23T13:34:44.668484Z
 4572
@@ -137,7 +137,7 @@
 
 
 
-2010-09-23T14:37:44.643780Z
+2011-03-03T11:05:11.000000Z
 66d45b68c4615d2b502b2c6d06cf0951
 2009-09-12T09:13:13.676884Z
 2871
@@ -171,7 +171,7 @@
 
 
 
-2010-11-19T13:04:49.468916Z
+2011-03-03T11:05:11.000000Z
 bbcdfa64f2a80d809b80b00c26fd0c8c
 2010-11-07T14:15:01.891476Z
 4382
@@ -205,7 +205,7 @@
 
 
 
-2011-01-13T14:09:29.000000Z
+2011-03-03T11:05:11.000000Z
 b0519f745853f4f4e673c2e30389dc40
 2011-01-06T21:02:19.982329Z
 4648
@@ -239,7 +239,7 @@
 
 
 
-2010-09-24T12:48:28.959844Z
+2011-03-03T11:05:11.000000Z
 e3a6cb86da5f31cae6c8fc0a4e6bad35
 2010-09-09T18:57:21.507694Z
 4071
@@ -273,7 +273,7 @@
 
 
 
-2010-09-23T14:37:44.643780Z
+2011-03-03T11:05:11.000000Z
 0f2ffbd9b87d4ecc80f5c8bcac0cc9e9
 2009-10-29T18:44:16.555741Z
 2990
@@ -307,7 +307,7 @@
 
 
 
-2010-09-23T14:37:44.639741Z
+2011-03-03T11:05:11.000000Z
 f880a7facfac62099e5b3fc4ebe862b3
 2010-08-19T22:24:37.242219Z
 4009
@@ -341,7 +341,7 @@
 
 
 
-2010-09-24T12:48:28.959844Z
+2011-03-03T11:05:11.000000Z
 cb60b85b211b8c78058e4ccc5cdefc82
 2010-09-07T15:00:27.481481Z
 4069
@@ -375,7 +375,7 @@
 
 
 
-2011-01-13T14:09:29.000000Z
+2011-03-03T11:05:11.000000Z
 c49d7ceec0060eb7437c7e3f2b7629ed
 2010-12-11T10:19:11.273304Z
 4486
@@ -409,7 +409,7 @@
 
 
 
-2010-09-24T12:48:28.959844Z
+2011-03-03T11:05:11.000000Z
 308fa6064dd3e4d6d85be448402ba7b2
 2010-09-09T18:57:21.507694Z
 4071
--- a/app/views/projects/settings/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/projects/settings/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/projects/settings
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:44.647782Z
+2011-03-03T11:05:11.000000Z
 3f93ad7df3a43b70f004499bacc76cdf
 2010-05-09T11:19:15.980195Z
 3734
@@ -66,7 +66,7 @@
 
 
 
-2010-09-23T14:37:44.651752Z
+2011-03-03T11:05:11.000000Z
 1fd25ea9af565c8a79ac61c918cbd3fc
 2010-01-21T18:21:56.082191Z
 3336
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:44.651752Z
+2011-03-03T11:05:11.000000Z
 1ee550d6ee54d0c528eee8bb142c496d
 2008-02-12T22:43:37.870107Z
 1143
@@ -134,7 +134,7 @@
 
 
 
-2010-09-24T12:48:28.400004Z
+2011-03-03T11:05:11.000000Z
 14f07f16cc36c896e6dc4d975c7ef807
 2010-09-10T16:00:49.687515Z
 4075
@@ -168,7 +168,7 @@
 
 
 
-2011-01-13T14:09:24.000000Z
+2011-03-03T11:05:11.000000Z
 6dc73d6291a5471699054e6fbd33da8e
 2011-01-06T20:57:17.003359Z
 4647
@@ -202,7 +202,7 @@
 
 
 
-2010-11-19T13:04:49.460909Z
+2011-03-03T11:05:11.000000Z
 4f26d985da6ada4c0d724095490050c5
 2010-10-29T22:40:02.439890Z
 4307
@@ -236,7 +236,7 @@
 
 
 
-2010-09-23T14:37:44.647782Z
+2011-03-03T11:05:11.000000Z
 1d2eb75d2aa1ff66975f701d6b45c059
 2010-05-09T11:19:15.980195Z
 3734
@@ -270,7 +270,7 @@
 
 
 
-2011-01-19T15:03:32.000000Z
+2011-03-03T11:05:11.000000Z
 6e7a70ea4a2a2fe46b75b968d19bb68e
 2011-01-15T13:20:18.866830Z
 4719
--- a/app/views/queries/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/queries/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/queries
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/queries
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 409f5db0d48427b0a9077eb0804d13f9
 2009-11-28T11:59:45.246623Z
 3106
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 9d6312b02ab4243f7f899de6e37e260b
 2009-11-28T11:34:12.256986Z
 3105
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 b2d901380f08af968240e5dc82b90fc4
 2007-10-01T11:39:34.113865Z
 784
@@ -134,7 +134,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:11.000000Z
 e57491c4634e00f0ef53c44959c58d46
 2010-11-07T15:38:51.908839Z
 4387
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 214378e8574ddebfc274513b423f51a2
 2007-11-05T18:38:42.932265Z
 887
@@ -202,7 +202,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 d42e88aaf70a65db3b609d51857fb711
 2009-09-20T14:06:57.257282Z
 2895
--- a/app/views/reports/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/reports/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/reports
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/reports
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 d150c943c49d910431268e3b5b148f5d
 2010-06-20T03:37:42.430179Z
 3797
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 faf9d3d189ffa44154f1272c333808b5
 2010-01-07T21:12:16.849243Z
 3283
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 b0028f798f34512aa7c5f8c014ad73f7
 2010-01-07T21:12:16.849243Z
 3283
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 58b8758e6fc3da959cb412ae64e9237f
 2007-03-12T17:59:02.654744Z
 333
--- a/app/views/repositories/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/repositories/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 47
-/svn/!svn/ver/4698/trunk/app/views/repositories
+/svn/!svn/ver/4921/trunk/app/views/repositories
 END
 stats.rhtml
 K 25
@@ -31,7 +31,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 71
-/svn/!svn/ver/4613/trunk/app/views/repositories/_dir_list_content.rhtml
+/svn/!svn/ver/4921/trunk/app/views/repositories/_dir_list_content.rhtml
 END
 diff.rhtml
 K 25
@@ -91,5 +91,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 66
-/svn/!svn/ver/3613/trunk/app/views/repositories/_breadcrumbs.rhtml
+/svn/!svn/ver/4733/trunk/app/views/repositories/_breadcrumbs.rhtml
 END
--- a/app/views/repositories/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/repositories/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/repositories
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-11T16:04:07.541291Z
-4698
+2011-02-22T08:16:05.081549Z
+4921
 tmaruyama
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:44.671737Z
+2011-03-03T11:05:11.000000Z
 bafc924316c90c31dc1cd9a6daf124ef
 2009-09-20T14:06:57.257282Z
 2895
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:09:24.000000Z
+2011-03-03T11:05:11.000000Z
 8599ffd3e73ccf24e2c81c6e0a20c906
 2011-01-02T09:45:05.291687Z
 4613
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:44.671737Z
+2011-03-03T11:05:11.000000Z
 59dbb643c447518053d9cdb1a86cb5ef
 2009-11-24T17:55:45.336708Z
 3086
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:44.671737Z
+2011-03-03T11:05:11.000000Z
 012e1437dd062433556a6281439b3900
 2009-08-15T22:41:40.505056Z
 2840
@@ -168,10 +168,10 @@
 
 
 
-2011-01-13T14:09:24.000000Z
-e22fd8ddf680ee0773ea1da9b5ed9518
-2011-01-02T09:45:05.291687Z
-4613
+2011-03-03T11:40:18.000000Z
+9e9a1bb7f64971403644f55f38f9ccce
+2011-02-22T08:16:05.081549Z
+4921
 tmaruyama
 has-props
 
@@ -194,7 +194,7 @@
 
 
 
-1715
+1839
 
 diff.rhtml
 file
@@ -202,7 +202,7 @@
 
 
 
-2011-01-13T14:09:24.000000Z
+2011-03-03T11:05:11.000000Z
 76c0335206cfde112a6416937072848b
 2011-01-11T16:04:07.541291Z
 4698
@@ -236,7 +236,7 @@
 
 
 
-2010-09-23T14:37:44.671737Z
+2011-03-03T11:05:11.000000Z
 cde7a86a5ec0cf9915b0540c9acbb820
 2009-08-15T22:41:40.505056Z
 2840
@@ -270,7 +270,7 @@
 
 
 
-2010-09-23T14:37:44.667779Z
+2011-03-03T11:05:11.000000Z
 8c004b6e433ac1a6ca64c97a35512f28
 2008-01-02T22:41:53.166620Z
 1032
@@ -304,7 +304,7 @@
 
 
 
-2011-01-13T14:09:24.000000Z
+2011-03-03T11:05:11.000000Z
 d3aaac2a6c4b7c77b844324970afff64
 2011-01-02T09:45:05.291687Z
 4613
@@ -338,7 +338,7 @@
 
 
 
-2010-09-23T14:37:44.671737Z
+2011-03-03T11:05:11.000000Z
 5608dc13675382cd62688058ca0b77d1
 2009-09-01T12:13:17.386587Z
 2849
@@ -372,7 +372,7 @@
 
 
 
-2011-01-13T14:09:24.000000Z
+2011-03-03T11:05:11.000000Z
 61a2e63b2e36b7d622d95745cc864583
 2011-01-02T09:45:05.291687Z
 4613
@@ -406,7 +406,7 @@
 
 
 
-2010-09-23T14:37:44.671737Z
+2011-03-03T11:05:11.000000Z
 f2efac3274e0c46cf32037372907a644
 2009-08-15T22:41:40.505056Z
 2840
@@ -440,7 +440,7 @@
 
 
 
-2010-09-23T14:37:44.671737Z
+2011-03-03T11:05:11.000000Z
 2db96b0dcaab42c8e67b7fc590618fd3
 2008-12-15T18:02:25.843227Z
 2137
@@ -474,7 +474,7 @@
 
 
 
-2010-09-23T14:37:44.667779Z
+2011-03-03T11:05:11.000000Z
 a86ac8a045315f57fa32acb29c08f19f
 2009-09-01T12:13:17.386587Z
 2849
@@ -508,11 +508,11 @@
 
 
 
-2010-09-23T14:37:44.667779Z
-17818458dc60da031d02ae162930c320
-2010-03-27T12:46:45.030950Z
-3613
-jplang
+2011-03-03T11:05:11.000000Z
+a8822300e64f74b50bbb1e90d1a61dda
+2011-01-21T13:22:08.161817Z
+4733
+tmaruyama
 has-props
 
 
@@ -534,5 +534,5 @@
 
 
 
-666
+687
 
--- a/app/views/repositories/.svn/text-base/_breadcrumbs.rhtml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/repositories/.svn/text-base/_breadcrumbs.rhtml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -16,6 +16,6 @@
     / <%= link_to h(filename), :action => 'changes', :id => @project, :path => to_path_param("#{link_path}/#{filename}"), :rev => @rev %>
 <% end %>
 
-<%= "@ #{h revision}" if revision %>
+<%= "@ #{h format_revision(@changeset)}" if @changeset %>
 
 <% html_title(with_leading_slash(path)) -%>
--- a/app/views/repositories/.svn/text-base/_dir_list_content.rhtml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/repositories/.svn/text-base/_dir_list_content.rhtml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,25 +1,27 @@
 <% @entries.each do |entry| %>
 <% tr_id = Digest::MD5.hexdigest(entry.path)
    depth = params[:depth].to_i %>
+<%  ent_path = replace_invalid_utf8(entry.path)   %>
+<%  ent_name = replace_invalid_utf8(entry.name)   %>
 <tr id="<%= tr_id %>" class="<%= h params[:parent_id] %> entry <%= entry.kind %>">
 <td style="padding-left: <%=18 * depth%>px;" class="filename">
 <% if entry.is_dir? %>
-<span class="expander" onclick="<%=  remote_function :url => {:action => 'show', :id => @project, :path => to_path_param(entry.path), :rev => @rev, :depth => (depth + 1), :parent_id => tr_id},
-									:method => :get,
+<span class="expander" onclick="<%=  remote_function :url => {:action => 'show', :id => @project, :path => to_path_param(ent_path), :rev => @rev, :depth => (depth + 1), :parent_id => tr_id},
+                  :method => :get,
                   :update => { :success => tr_id },
                   :position => :after,
                   :success => "scmEntryLoaded('#{tr_id}')",
                   :condition => "scmEntryClick('#{tr_id}')"%>">&nbsp</span>
 <% end %>
-<%=  link_to h(entry.name),
-          {:action => (entry.is_dir? ? 'show' : 'changes'), :id => @project, :path => to_path_param(entry.path), :rev => @rev},
-          :class => (entry.is_dir? ? 'icon icon-folder' : "icon icon-file #{Redmine::MimeType.css_class_of(entry.name)}")%>
+<%=  link_to h(ent_name),
+          {:action => (entry.is_dir? ? 'show' : 'changes'), :id => @project, :path => to_path_param(ent_path), :rev => @rev},
+          :class => (entry.is_dir? ? 'icon icon-folder' : "icon icon-file #{Redmine::MimeType.css_class_of(ent_name)}")%>
 </td>
 <td class="size"><%= (entry.size ? number_to_human_size(entry.size) : "?") unless entry.is_dir? %></td>
-<% changeset = @project.repository.changesets.find_by_revision(entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %>
+<% changeset = @project.repository.find_changeset_by_name(entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %>
 <td class="revision"><%= link_to_revision(changeset, @project) if changeset %></td>
 <td class="age"><%= distance_of_time_in_words(entry.lastrev.time, Time.now) if entry.lastrev && entry.lastrev.time %></td>
-<td class="author"><%= changeset.nil? ? h(entry.lastrev.author.to_s.split('<').first) : changeset.author if entry.lastrev %></td>
+<td class="author"><%= changeset.nil? ? h(replace_invalid_utf8(entry.lastrev.author.to_s.split('<').first)) : changeset.author if entry.lastrev %></td>
 <td class="comments"><%=h truncate(changeset.comments, :length => 50) unless changeset.nil? %></td>
 </tr>
 <% end %>
--- a/app/views/repositories/_breadcrumbs.rhtml	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/repositories/_breadcrumbs.rhtml	Thu Mar 03 12:02:03 2011 +0000
@@ -16,6 +16,6 @@
     / <%= link_to h(filename), :action => 'changes', :id => @project, :path => to_path_param("#{link_path}/#{filename}"), :rev => @rev %>
 <% end %>
 
-<%= "@ #{h revision}" if revision %>
+<%= "@ #{h format_revision(@changeset)}" if @changeset %>
 
 <% html_title(with_leading_slash(path)) -%>
--- a/app/views/repositories/_dir_list_content.rhtml	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/repositories/_dir_list_content.rhtml	Thu Mar 03 12:02:03 2011 +0000
@@ -1,25 +1,27 @@
 <% @entries.each do |entry| %>
 <% tr_id = Digest::MD5.hexdigest(entry.path)
    depth = params[:depth].to_i %>
+<%  ent_path = replace_invalid_utf8(entry.path)   %>
+<%  ent_name = replace_invalid_utf8(entry.name)   %>
 <tr id="<%= tr_id %>" class="<%= h params[:parent_id] %> entry <%= entry.kind %>">
 <td style="padding-left: <%=18 * depth%>px;" class="filename">
 <% if entry.is_dir? %>
-<span class="expander" onclick="<%=  remote_function :url => {:action => 'show', :id => @project, :path => to_path_param(entry.path), :rev => @rev, :depth => (depth + 1), :parent_id => tr_id},
-									:method => :get,
+<span class="expander" onclick="<%=  remote_function :url => {:action => 'show', :id => @project, :path => to_path_param(ent_path), :rev => @rev, :depth => (depth + 1), :parent_id => tr_id},
+                  :method => :get,
                   :update => { :success => tr_id },
                   :position => :after,
                   :success => "scmEntryLoaded('#{tr_id}')",
                   :condition => "scmEntryClick('#{tr_id}')"%>">&nbsp</span>
 <% end %>
-<%=  link_to h(entry.name),
-          {:action => (entry.is_dir? ? 'show' : 'changes'), :id => @project, :path => to_path_param(entry.path), :rev => @rev},
-          :class => (entry.is_dir? ? 'icon icon-folder' : "icon icon-file #{Redmine::MimeType.css_class_of(entry.name)}")%>
+<%=  link_to h(ent_name),
+          {:action => (entry.is_dir? ? 'show' : 'changes'), :id => @project, :path => to_path_param(ent_path), :rev => @rev},
+          :class => (entry.is_dir? ? 'icon icon-folder' : "icon icon-file #{Redmine::MimeType.css_class_of(ent_name)}")%>
 </td>
 <td class="size"><%= (entry.size ? number_to_human_size(entry.size) : "?") unless entry.is_dir? %></td>
-<% changeset = @project.repository.changesets.find_by_revision(entry.lastrev.identifier.to_s) if entry.lastrev && entry.lastrev.identifier %>
+<% changeset = @project.repository.find_changeset_by_name(entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %>
 <td class="revision"><%= link_to_revision(changeset, @project) if changeset %></td>
 <td class="age"><%= distance_of_time_in_words(entry.lastrev.time, Time.now) if entry.lastrev && entry.lastrev.time %></td>
-<td class="author"><%= changeset.nil? ? h(entry.lastrev.author.to_s.split('<').first) : changeset.author if entry.lastrev %></td>
+<td class="author"><%= changeset.nil? ? h(replace_invalid_utf8(entry.lastrev.author.to_s.split('<').first)) : changeset.author if entry.lastrev %></td>
 <td class="comments"><%=h truncate(changeset.comments, :length => 50) unless changeset.nil? %></td>
 </tr>
 <% end %>
--- a/app/views/roles/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/roles/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/roles
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/roles
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 cbcd3851055c3f5a5aa20d005b086872
 2009-07-05T12:22:02.133266Z
 2810
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 82f5657ab6c01b56b039af0cf2312ade
 2010-02-15T16:41:16.346582Z
 3435
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 652c40985320a23285c8e27439418f22
 2008-10-24T15:24:35.832581Z
 1943
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 4bcaa15de1de193dd1f98128b71a420b
 2009-10-25T13:28:36.522470Z
 2979
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 0ff8206c0e77e6356f9d16ccaeff13e2
 2009-07-05T12:22:02.133266Z
 2810
--- a/app/views/search/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/search/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/search
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/search
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 0235b1dd9d5f01dbaaab2b59dc006f2e
 2009-09-20T14:06:57.257282Z
 2895
--- a/app/views/settings/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/settings/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 43
-/svn/!svn/ver/4730/trunk/app/views/settings
+/svn/!svn/ver/4983/trunk/app/views/settings
 END
 _issues.rhtml
 K 25
@@ -37,7 +37,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 58
-/svn/!svn/ver/3198/trunk/app/views/settings/_display.rhtml
+/svn/!svn/ver/4811/trunk/app/views/settings/_display.rhtml
 END
 edit.rhtml
 K 25
@@ -49,7 +49,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 63
-/svn/!svn/ver/4470/trunk/app/views/settings/_repositories.rhtml
+/svn/!svn/ver/4983/trunk/app/views/settings/_repositories.rhtml
 END
 _notifications.rhtml
 K 25
--- a/app/views/settings/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/settings/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/settings
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-16T15:36:42.998302Z
-4730
-jplang
+2011-03-01T10:27:51.597350Z
+4983
+tmaruyama
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:10.000000Z
 dad877e4db2f583979314edcb017bb1b
 2010-12-15T21:18:06.237327Z
 4513
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:10.000000Z
 7307d5f65399ab2f28eac1162a330678
 2010-11-25T20:27:44.648840Z
 4426
@@ -100,7 +100,7 @@
 
 
 
-2010-11-19T13:04:48.200851Z
+2011-03-03T11:05:10.000000Z
 8005b162966a27cd4e7c30022320b47e
 2010-10-29T22:28:24.886659Z
 4306
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:44.683778Z
+2011-03-03T11:05:10.000000Z
 1da887b84f272fe4cde6fafaf198529a
 2009-12-23T18:35:19.208194Z
 3226
@@ -168,7 +168,7 @@
 
 
 
-2010-09-23T14:37:44.687777Z
+2011-03-03T11:05:10.000000Z
 1836fa87f24f7f62eafaed8d1886ca67
 2007-10-13T14:11:06.987513Z
 837
@@ -202,11 +202,11 @@
 
 
 
-2010-09-23T14:37:44.683778Z
-af00d651b626c36ca365bd748f55ec40
-2009-12-19T20:07:09.039389Z
-3198
-jplang
+2011-03-03T11:40:18.000000Z
+55169c45bb26caf3ff0c92c5b07d7bbe
+2011-02-12T08:16:37.660908Z
+4811
+jbbarth
 has-props
 
 
@@ -228,7 +228,7 @@
 
 
 
-1041
+1061
 
 edit.rhtml
 file
@@ -236,7 +236,7 @@
 
 
 
-2010-09-23T14:37:44.687777Z
+2011-03-03T11:05:10.000000Z
 a629426fc7edef8be6c4545bce9a5abd
 2009-09-12T09:13:13.676884Z
 2871
@@ -270,11 +270,11 @@
 
 
 
-2011-01-13T14:09:10.000000Z
-da15c28695cd56ff6539df1d45159797
-2010-12-05T11:45:09.061840Z
-4470
-jplang
+2011-03-03T11:40:18.000000Z
+7bc500aa382125fa379e7539d4566431
+2011-03-01T10:27:51.597350Z
+4983
+tmaruyama
 has-props
 
 
@@ -296,7 +296,7 @@
 
 
 
-2303
+2231
 
 _notifications.rhtml
 file
@@ -304,7 +304,7 @@
 
 
 
-2011-01-19T15:03:32.000000Z
+2011-03-03T11:05:10.000000Z
 9f784c1426ed466df89a56d5ae835efe
 2011-01-16T15:36:42.998302Z
 4730
@@ -338,7 +338,7 @@
 
 
 
-2010-09-23T14:37:44.687777Z
+2011-03-03T11:05:10.000000Z
 de489dd7dc60d569a855c1f33d941552
 2009-12-19T20:07:09.039389Z
 3198
--- a/app/views/settings/.svn/text-base/_display.rhtml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/settings/.svn/text-base/_display.rhtml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -15,7 +15,7 @@
 
 <p><%= setting_check_box :gravatar_enabled %></p>
 
-<p><%= setting_select :gravatar_default, [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid']], :blank => :label_none %></p>
+<p><%= setting_select :gravatar_default, [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid'], ["Retro", "retro"]], :blank => :label_none %></p>
 </div>
 
 <%= submit_tag l(:button_save) %>
--- a/app/views/settings/.svn/text-base/_repositories.rhtml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/settings/.svn/text-base/_repositories.rhtml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -18,8 +18,6 @@
 <p><%= setting_text_field :repositories_encodings, :size => 60 %><br />
 <em><%= l(:text_comma_separated) %></em></p>
 
-<p><%= setting_select :commit_logs_encoding, Setting::ENCODINGS %></p>
-
 <p><%= setting_text_field :repository_log_display_limit, :size => 6 %></p>
 </div>
 
--- a/app/views/settings/_display.rhtml	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/settings/_display.rhtml	Thu Mar 03 12:02:03 2011 +0000
@@ -15,7 +15,7 @@
 
 <p><%= setting_check_box :gravatar_enabled %></p>
 
-<p><%= setting_select :gravatar_default, [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid']], :blank => :label_none %></p>
+<p><%= setting_select :gravatar_default, [["Wavatars", 'wavatar'], ["Identicons", 'identicon'], ["Monster ids", 'monsterid'], ["Retro", "retro"]], :blank => :label_none %></p>
 </div>
 
 <%= submit_tag l(:button_save) %>
--- a/app/views/settings/_repositories.rhtml	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/settings/_repositories.rhtml	Thu Mar 03 12:02:03 2011 +0000
@@ -18,8 +18,6 @@
 <p><%= setting_text_field :repositories_encodings, :size => 60 %><br />
 <em><%= l(:text_comma_separated) %></em></p>
 
-<p><%= setting_select :commit_logs_encoding, Setting::ENCODINGS %></p>
-
 <p><%= setting_text_field :repository_log_display_limit, :size => 6 %></p>
 </div>
 
--- a/app/views/time_entry_reports/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/time_entry_reports/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/time_entry_reports
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/time_entry_reports
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:10.000000Z
 d896f5cf56b2a3cd64887f239e584fdc
 2010-10-07T15:51:09.349542Z
 4239
@@ -66,7 +66,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:10.000000Z
 5fa73daf0a67b2a39fd10320bcd7ab45
 2010-10-05T16:07:17.015270Z
 4232
--- a/app/views/timelog/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/timelog/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/timelog
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-19T13:04:48.784870Z
+2011-03-03T11:05:10.000000Z
 128d8975cacb0db79fc14a461544db09
 2010-10-12T15:55:21.984670Z
 4250
@@ -66,7 +66,7 @@
 
 
 
-2010-11-19T13:04:48.784870Z
+2011-03-03T11:05:10.000000Z
 404d6b75c96def01a9a6bf86a6f58697
 2010-10-07T15:51:09.349542Z
 4239
@@ -100,7 +100,7 @@
 
 
 
-2011-01-13T14:09:16.000000Z
+2011-03-03T11:05:10.000000Z
 9faa66f4b89685010b3683f26c387512
 2010-12-04T17:43:39.823144Z
 4466
@@ -134,7 +134,7 @@
 
 
 
-2010-11-19T13:04:48.784870Z
+2011-03-03T11:05:10.000000Z
 3bb82a2517a120b7a44add17f3369082
 2010-10-11T15:31:42.953914Z
 4248
@@ -168,7 +168,7 @@
 
 
 
-2010-11-19T13:04:48.784870Z
+2011-03-03T11:05:10.000000Z
 43628f95cde9503c20744c3b9fe9dfcd
 2010-10-06T18:23:45.014848Z
 4235
@@ -202,7 +202,7 @@
 
 
 
-2011-01-13T14:09:16.000000Z
+2011-03-03T11:05:10.000000Z
 5838cace900e781466a5826ba75b9f44
 2010-12-04T17:43:39.823144Z
 4466
--- a/app/views/trackers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/trackers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/trackers
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/trackers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 952031a6216d1b67897c30936b8c656c
 2010-02-15T16:41:27.289923Z
 3437
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 0b8a4f0aead4d21c20c9cc8dd29141e5
 2009-12-12T15:23:22.060140Z
 3162
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 ac4b0e11130741048a5f7c7405bff3de
 2009-12-09T11:03:55.646494Z
 3146
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 cf313c286d40c5c44da29ad261b01421
 2009-12-09T11:03:55.646494Z
 3146
--- a/app/views/users/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/users/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 40
-/svn/!svn/ver/4729/trunk/app/views/users
+/svn/!svn/ver/4900/trunk/app/views/users
 END
 _general.rhtml
 K 25
@@ -51,18 +51,18 @@
 V 52
 /svn/!svn/ver/4493/trunk/app/views/users/_form.rhtml
 END
+_preferences.html.erb
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/4900/trunk/app/views/users/_preferences.html.erb
+END
 edit.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 51
 /svn/!svn/ver/4729/trunk/app/views/users/edit.rhtml
 END
-_preferences.html.erb
-K 25
-svn:wc:ra_dav:version-url
-V 62
-/svn/!svn/ver/4223/trunk/app/views/users/_preferences.html.erb
-END
 index.rhtml
 K 25
 svn:wc:ra_dav:version-url
--- a/app/views/users/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/users/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/users
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-16T15:23:11.666065Z
-4729
+2011-02-21T09:53:29.844413Z
+4900
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-19T13:04:49.388892Z
+2011-03-03T11:05:10.000000Z
 27e27971f72ee72e276157b29606a4f8
 2010-10-11T20:34:33.692909Z
 4249
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:09:24.000000Z
+2011-03-03T11:05:10.000000Z
 82d8afa73a30d32a1df6dbf0a6ec9ccc
 2010-12-12T21:21:57.860671Z
 4508
@@ -100,7 +100,7 @@
 
 
 
-2010-11-19T13:04:49.388892Z
+2011-03-03T11:05:10.000000Z
 f19cc195f524459954b4b4be5bfdcff5
 2010-09-30T18:22:46.611444Z
 4230
@@ -134,7 +134,7 @@
 
 
 
-2010-11-19T13:04:49.388892Z
+2011-03-03T11:05:10.000000Z
 488647d93840c1ffa5834cc45817c1c3
 2010-09-29T16:00:45.891709Z
 4229
@@ -168,7 +168,7 @@
 
 
 
-2011-01-13T14:09:24.000000Z
+2011-03-03T11:05:10.000000Z
 e6086313266e733c482de5431e85f7a1
 2010-12-12T14:25:23.262992Z
 4497
@@ -202,7 +202,7 @@
 
 
 
-2011-01-13T14:09:24.000000Z
+2011-03-03T11:05:10.000000Z
 2232eeac9e0dea5001f5c7dbd9156a79
 2010-12-11T13:13:49.013705Z
 4489
@@ -236,7 +236,7 @@
 
 
 
-2010-11-19T13:04:49.388892Z
+2011-03-03T11:05:10.000000Z
 1914aa4c363a1dab0cdba1e49ccc13ff
 2010-11-07T14:15:01.891476Z
 4382
@@ -270,7 +270,7 @@
 
 
 
-2011-01-13T14:09:24.000000Z
+2011-03-03T11:05:10.000000Z
 35c46993d584ac75dd129b95ac411a10
 2010-12-12T13:39:55.171678Z
 4493
@@ -298,13 +298,47 @@
 
 1644
 
+_preferences.html.erb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+819ceb2599cdb65121387da777ec7454
+2011-02-21T09:53:29.844413Z
+4900
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+502
+
 edit.rhtml
 file
 
 
 
 
-2011-01-19T15:03:32.000000Z
+2011-03-03T11:05:10.000000Z
 334693af38532eb4e5c8801223e2c718
 2011-01-16T15:23:11.666065Z
 4729
@@ -332,47 +366,13 @@
 
 523
 
-_preferences.html.erb
-file
-
-
-
-
-2010-11-19T13:04:49.392852Z
-ebc1d625f2d6809ea491e7303f758e7a
-2010-09-28T22:13:06.534232Z
-4223
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-441
-
 index.rhtml
 file
 
 
 
 
-2011-01-19T15:03:32.000000Z
+2011-03-03T11:05:10.000000Z
 82f2de0e0ade1e3dc2c39d3415d5580c
 2011-01-16T15:23:11.666065Z
 4729
@@ -406,7 +406,7 @@
 
 
 
-2011-01-13T14:09:24.000000Z
+2011-03-03T11:05:10.000000Z
 5af24df58230f005be3a6814c6f53e33
 2010-12-11T10:19:11.273304Z
 4486
--- a/app/views/users/.svn/text-base/_preferences.html.erb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/users/.svn/text-base/_preferences.html.erb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -2,5 +2,6 @@
 <p><%= pref_fields.check_box :hide_mail %></p>
 <p><%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p>
 <p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p>
+<p><%= pref_fields.check_box :warn_on_leaving_unsaved %></p>
 <% end %>
 
--- a/app/views/users/_preferences.html.erb	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/users/_preferences.html.erb	Thu Mar 03 12:02:03 2011 +0000
@@ -2,5 +2,6 @@
 <p><%= pref_fields.check_box :hide_mail %></p>
 <p><%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p>
 <p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p>
+<p><%= pref_fields.check_box :warn_on_leaving_unsaved %></p>
 <% end %>
 
--- a/app/views/versions/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/versions/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/versions
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/versions
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-10-01T15:15:02.000000Z
+2011-03-03T11:05:10.000000Z
 a50c2acc01c8d25be8e2c8cd082a2272
 2010-09-11T14:00:23.147923Z
 4082
@@ -66,7 +66,7 @@
 
 
 
-2010-10-01T15:15:02.000000Z
+2011-03-03T11:05:10.000000Z
 d53190d87d1c24abce0fc949f816a706
 2010-09-17T15:55:08.377083Z
 4097
@@ -100,7 +100,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:10.000000Z
 ae897448ea943e1856633a3683c17a79
 2010-10-29T22:40:02.439890Z
 4307
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 acf01b501fb1e345fd7abf572233ead9
 2009-12-06T10:28:20.099964Z
 3123
@@ -168,7 +168,7 @@
 
 
 
-2010-10-01T15:15:02.000000Z
+2011-03-03T11:05:10.000000Z
 b5364f2d6f4cb92d1f747cd3dda5098f
 2010-09-17T16:11:43.740142Z
 4098
@@ -202,7 +202,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 6e68f24a6d6571388df3018bc915d37a
 2009-11-15T15:22:55.021661Z
 3064
@@ -236,7 +236,7 @@
 
 
 
-2010-10-01T15:15:02.000000Z
+2011-03-03T11:05:10.000000Z
 85ddc3502659176221220bebef002d6c
 2010-09-17T15:55:08.377083Z
 4097
--- a/app/views/watchers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/watchers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/watchers
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/watchers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 7ece4fb161c765ac7e63c30883733d99
 2010-03-13T17:45:41.194736Z
 3579
--- a/app/views/welcome/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/welcome/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/welcome
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/welcome
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T12:46:09.000000Z
+2011-03-03T11:05:10.000000Z
 df32441c6802182ffb9a205c97ec8f3b
 2010-08-27T14:05:54.014502Z
 4047
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:10.000000Z
 dbe04ed0b787a5470a99a1f286c0685e
 2009-01-27T17:27:50.299725Z
 2319
--- a/app/views/wiki/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/wiki/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 39
-/svn/!svn/ver/4651/trunk/app/views/wiki
+/svn/!svn/ver/4953/trunk/app/views/wiki
 END
 export_multiple.rhtml
 K 25
@@ -31,7 +31,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 53
-/svn/!svn/ver/4651/trunk/app/views/wiki/history.rhtml
+/svn/!svn/ver/4740/trunk/app/views/wiki/history.rhtml
 END
 edit.rhtml
 K 25
@@ -55,7 +55,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 50
-/svn/!svn/ver/4551/trunk/app/views/wiki/diff.rhtml
+/svn/!svn/ver/4953/trunk/app/views/wiki/diff.rhtml
 END
 _content.rhtml
 K 25
@@ -69,15 +69,15 @@
 V 54
 /svn/!svn/ver/4296/trunk/app/views/wiki/annotate.rhtml
 END
+date_index.html.erb
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/!svn/ver/4303/trunk/app/views/wiki/date_index.html.erb
+END
 destroy.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 53
 /svn/!svn/ver/4296/trunk/app/views/wiki/destroy.rhtml
 END
-date_index.html.erb
-K 25
-svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4303/trunk/app/views/wiki/date_index.html.erb
-END
--- a/app/views/wiki/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/wiki/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/wiki
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-06T21:24:32.739169Z
-4651
+2011-02-27T12:50:47.369941Z
+4953
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:44.719778Z
+2011-03-03T11:05:11.000000Z
 071f00658656d063a029ff9efcfda553
 2009-11-11T11:10:03.406528Z
 3026
@@ -66,7 +66,7 @@
 
 
 
-2010-11-19T13:04:50.809800Z
+2011-03-03T11:05:11.000000Z
 d47125b655bae6af3af29514ca23ec15
 2010-10-25T16:16:46.309025Z
 4290
@@ -100,7 +100,7 @@
 
 
 
-2010-11-19T13:04:50.809800Z
+2011-03-03T11:05:11.000000Z
 1ebc19864533a067dc46a3bc6f3e9b22
 2010-10-28T21:25:38.778234Z
 4303
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:44.719778Z
+2011-03-03T11:05:11.000000Z
 2ec7fba790578844437bd62bf95a9856
 2009-11-11T11:10:03.406528Z
 3026
@@ -168,10 +168,10 @@
 
 
 
-2011-01-13T14:09:29.000000Z
-a4820ed36a470c301cd1f3c5d1d32993
-2011-01-06T21:24:32.739169Z
-4651
+2011-03-03T11:05:11.000000Z
+032cfe657db049a60473a31d2d0391a2
+2011-01-22T13:21:24.424880Z
+4740
 jplang
 has-props
 
@@ -194,7 +194,7 @@
 
 
 
-1656
+1594
 
 edit.rhtml
 file
@@ -202,7 +202,7 @@
 
 
 
-2010-11-19T13:04:50.812967Z
+2011-03-03T11:05:11.000000Z
 cc9828c34998619dbd4b4925bf511be8
 2010-10-28T21:25:38.778234Z
 4303
@@ -236,7 +236,7 @@
 
 
 
-2010-11-19T13:04:50.812967Z
+2011-03-03T11:05:11.000000Z
 b45d32467f7beb06dbe055ecf7fdb247
 2010-11-06T14:30:32.528294Z
 4375
@@ -270,7 +270,7 @@
 
 
 
-2010-11-19T13:04:50.812967Z
+2011-03-03T11:05:11.000000Z
 619db9d2a58a28c4b5c4baeaee88cc41
 2010-10-27T16:27:06.240747Z
 4296
@@ -304,10 +304,10 @@
 
 
 
-2011-01-13T14:09:29.000000Z
-da40592a7819a8786e7e436b2ecff8b1
-2010-12-20T22:33:44.015948Z
-4551
+2011-03-03T11:40:18.000000Z
+954230b09809d40bbd6f6514fb1fcc59
+2011-02-27T12:50:47.369941Z
+4953
 jplang
 has-props
 
@@ -330,7 +330,7 @@
 
 
 
-879
+931
 
 _content.rhtml
 file
@@ -338,7 +338,7 @@
 
 
 
-2010-09-23T14:37:44.719778Z
+2011-03-03T11:05:11.000000Z
 8705c97ebf1405603afbbd8614ee9d2b
 2007-11-12T14:36:33.182682Z
 897
@@ -372,7 +372,7 @@
 
 
 
-2010-11-19T13:04:50.812967Z
+2011-03-03T11:05:11.000000Z
 36a354ea1a705ec4843972e520ce2bd6
 2010-10-27T16:27:06.240747Z
 4296
@@ -400,13 +400,47 @@
 
 1212
 
+date_index.html.erb
+file
+
+
+
+
+2011-03-03T11:05:11.000000Z
+5edb3698546c4aad9913945d39005221
+2010-10-28T21:25:38.778234Z
+4303
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1117
+
 destroy.rhtml
 file
 
 
 
 
-2010-11-19T13:04:50.812967Z
+2011-03-03T11:05:11.000000Z
 5f032c821889bfc8bf9e6eeca1023f58
 2010-10-27T16:27:06.240747Z
 4296
@@ -434,37 +468,3 @@
 
 908
 
-date_index.html.erb
-file
-
-
-
-
-2010-11-19T13:04:50.812967Z
-5edb3698546c4aad9913945d39005221
-2010-10-28T21:25:38.778234Z
-4303
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1117
-
--- a/app/views/wiki/.svn/text-base/diff.rhtml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/wiki/.svn/text-base/diff.rhtml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -12,6 +12,6 @@
 <em>(<%= @diff.content_to.author ? @diff.content_to.author.name : "anonyme" %>, <%= format_time(@diff.content_to.updated_on) %>)</em>
 </p>
 
-<hr />
-
-<%= html_diff(@diff) %>
+<div class="text-diff">
+<%= simple_format_without_paragraph @diff.to_html %>
+</div>
--- a/app/views/wiki/.svn/text-base/history.rhtml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/wiki/.svn/text-base/history.rhtml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -3,7 +3,6 @@
 <h3><%= l(:label_history) %></h3>
 
 <% form_tag({:action => "diff"}, :method => :get) do %>
-  <%= hidden_field_tag('project_id', h(@project.to_param)) %>
 <table class="list wiki-page-versions">
 <thead><tr>
     <th>#</th>
--- a/app/views/wiki/diff.rhtml	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/wiki/diff.rhtml	Thu Mar 03 12:02:03 2011 +0000
@@ -12,6 +12,6 @@
 <em>(<%= @diff.content_to.author ? @diff.content_to.author.name : "anonyme" %>, <%= format_time(@diff.content_to.updated_on) %>)</em>
 </p>
 
-<hr />
-
-<%= html_diff(@diff) %>
+<div class="text-diff">
+<%= simple_format_without_paragraph @diff.to_html %>
+</div>
--- a/app/views/wiki/history.rhtml	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/wiki/history.rhtml	Thu Mar 03 12:02:03 2011 +0000
@@ -3,7 +3,6 @@
 <h3><%= l(:label_history) %></h3>
 
 <% form_tag({:action => "diff"}, :method => :get) do %>
-  <%= hidden_field_tag('project_id', h(@project.to_param)) %>
 <table class="list wiki-page-versions">
 <thead><tr>
     <th>#</th>
--- a/app/views/wikis/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/wikis/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/app/views/wikis
+4993
+http://redmine.rubyforge.org/svn/trunk/app/views/wikis
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 6edeee3130b12027d4d8dbfeca809abb
 2007-09-14T11:34:08.234701Z
 725
--- a/app/views/workflows/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/workflows/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/4428/trunk/app/views/workflows
+/svn/!svn/ver/4895/trunk/app/views/workflows
 END
 copy.rhtml
 K 25
@@ -19,11 +19,17 @@
 K 25
 svn:wc:ra_dav:version-url
 V 55
-/svn/!svn/ver/3694/trunk/app/views/workflows/edit.rhtml
+/svn/!svn/ver/4895/trunk/app/views/workflows/edit.rhtml
 END
 index.rhtml
 K 25
 svn:wc:ra_dav:version-url
 V 56
-/svn/!svn/ver/4428/trunk/app/views/workflows/index.rhtml
+/svn/!svn/ver/4890/trunk/app/views/workflows/index.rhtml
 END
+_form.html.erb
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/!svn/ver/4895/trunk/app/views/workflows/_form.html.erb
+END
--- a/app/views/workflows/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/workflows/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/app/views/workflows
 http://redmine.rubyforge.org/svn
 
 
 
-2010-11-27T09:54:16.602477Z
-4428
+2011-02-20T15:38:07.840581Z
+4895
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:44.727733Z
+2011-03-03T11:05:10.000000Z
 d7c2b6481788394f541fe6af5dadd598
 2009-12-12T10:06:07.860865Z
 3154
@@ -66,7 +66,7 @@
 
 
 
-2010-09-23T14:37:44.727733Z
+2011-03-03T11:05:10.000000Z
 2457a85600aa051fcf9edf06010e6fcc
 2009-12-12T10:06:07.860865Z
 3154
@@ -100,10 +100,10 @@
 
 
 
-2010-09-23T14:37:44.727733Z
-ee551cfe66cd8df0fbd5bc7bac081200
-2010-04-27T17:54:27.767853Z
-3694
+2011-03-03T11:40:18.000000Z
+f52bc187d855a23aea0bc36061a8d179
+2011-02-20T15:38:07.840581Z
+4895
 jplang
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-2474
+2211
 
 index.rhtml
 file
@@ -134,10 +134,10 @@
 
 
 
-2011-01-13T14:09:10.000000Z
-40709e258d1a829cf73046d8e1b5d7f3
-2010-11-27T09:54:16.602477Z
-4428
+2011-03-03T11:40:18.000000Z
+0943677a780ac0d9c0ba1a7000148f13
+2011-02-20T13:13:10.623157Z
+4890
 jplang
 has-props
 
@@ -162,3 +162,37 @@
 
 851
 
+_form.html.erb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+a2442c53d709a008d9026746d5f3cfd3
+2011-02-20T15:38:07.840581Z
+4895
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1673
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/workflows/.svn/prop-base/_form.html.erb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/workflows/.svn/text-base/_form.html.erb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,40 @@
+<table class="list transitions-<%= name %>">
+<thead>
+	<tr>
+		<th align="left">
+			<%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('table.transitions-#{name} input')",
+			                                              			:title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %>
+      <%=l(:label_current_status)%>
+    </th>
+		<th align="center" colspan="<%= @statuses.length %>"><%=l(:label_new_statuses_allowed)%></th>
+	</tr>
+	<tr>
+		<td></td>
+		<% for new_status in @statuses %>
+		<td width="<%= 75 / @statuses.size %>%" align="center">
+			<%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('table.transitions-#{name} input.new-status-#{new_status.id}')",
+	                                              			:title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %>
+			<%=h new_status.name %>
+		</td>
+		<% end %>
+	</tr>
+</thead>
+<tbody>
+	<% for old_status in @statuses %>
+	<tr class="<%= cycle("odd", "even") %>">
+		<td>
+			<%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('table.transitions-#{name} input.old-status-#{old_status.id}')",
+			                                              			:title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %>
+			
+			<%=h old_status.name %>
+		</td>
+		<% for new_status in @statuses -%>
+		<td align="center">
+			<%= check_box_tag "issue_status[#{ old_status.id }][#{new_status.id}][]", name, workflows.detect {|w| w.old_status_id == old_status.id && w.new_status_id == new_status.id},
+						:class => "old-status-#{old_status.id} new-status-#{new_status.id}" %>			
+		</td>
+		<% end -%>
+	</tr>
+	<% end %>
+</tbody>
+</table>
\ No newline at end of file
--- a/app/views/workflows/.svn/text-base/edit.rhtml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/workflows/.svn/text-base/edit.rhtml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -20,54 +20,31 @@
 </p>
 <% end %>
 
-
 <% if @tracker && @role && @statuses.any? %>
-<% form_tag({}, :id => 'workflow_form' ) do %>
-<%= hidden_field_tag 'tracker_id', @tracker.id %>
-<%= hidden_field_tag 'role_id', @role.id %>
-<div class="autoscroll">
-<table class="list">
-<thead>
-	<tr>
-		<th align="left"><%=l(:label_current_status)%></th>
-		<th align="center" colspan="<%= @statuses.length %>"><%=l(:label_new_statuses_allowed)%></th>
-	</tr>
-	<tr>
-		<td></td>
-		<% for new_status in @statuses %>
-		<td width="<%= 75 / @statuses.size %>%" align="center">
-			<%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('input.new-status-#{new_status.id}')",
-	                                              			:title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %>
-			<%= new_status.name %>
-		</td>
-		<% end %>
-	</tr>
-</thead>
-<tbody>
-	<% for old_status in @statuses %>
-	<tr class="<%= cycle("odd", "even") %>">
-		<td>
-			<%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('input.old-status-#{old_status.id}')",
-			                                              			:title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %>
-			
-			<%= old_status.name %>
-		</td>
-		<% new_status_ids_allowed = old_status.find_new_statuses_allowed_to([@role], @tracker).collect(&:id) -%>
-		<% for new_status in @statuses -%>
-		<td align="center">
-			<%= check_box_tag "issue_status[#{ old_status.id }][]", new_status.id, new_status_ids_allowed.include?(new_status.id),
-						:class => "old-status-#{old_status.id} new-status-#{new_status.id}" %>			
-		</td>
-		<% end -%>
-	</tr>
-	<% end %>
-</tbody>
-</table>
-</div>
-<p><%= check_all_links 'workflow_form' %></p>
-
-<%= submit_tag l(:button_save) %>
-<% end %>
+  <% form_tag({}, :id => 'workflow_form' ) do %>
+    <%= hidden_field_tag 'tracker_id', @tracker.id %>
+    <%= hidden_field_tag 'role_id', @role.id %>
+    <div class="autoscroll">
+      <%= render :partial => 'form', :locals => {:name => 'always', :workflows => @workflows['always']} %>
+      
+      <fieldset class="collapsible" style="padding: 0; margin-top: 0.5em;">
+        <legend onclick="toggleFieldset(this);">Autorisations supplémentaires lorsque l'utilisateur a créé la demande</legend>
+        <div id="author_workflows" style="margin: 0.5em 0 0.5em 0;">
+          <%= render :partial => 'form', :locals => {:name => 'author', :workflows => @workflows['author']} %>
+        </div>
+      </fieldset>
+      <%= javascript_tag "hideFieldset($('author_workflows'))" unless @workflows['author'].present? %>
+      
+      <fieldset class="collapsible" style="padding: 0;">
+        <legend onclick="toggleFieldset(this);">Autorisations supplémentaires lorsque la demande est assignée à l'utilisateur</legend>
+        <div id="assignee_workflows" style="margin: 0.5em 0 0.5em 0;">
+      <%= render :partial => 'form', :locals => {:name => 'assignee', :workflows => @workflows['assignee']} %>
+        </div>
+      </fieldset>
+      <%= javascript_tag "hideFieldset($('assignee_workflows'))" unless @workflows['assignee'].present? %>
+    </div>
+    <%= submit_tag l(:button_save) %>
+  <% end %>
 <% end %>
 
 <% html_title(l(:label_workflow)) -%>
--- a/app/views/workflows/.svn/text-base/index.rhtml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/workflows/.svn/text-base/index.rhtml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -24,7 +24,7 @@
   <td><%= h tracker %></td>
   <% roles.each do |role, count| -%>
     <td align="center">
-      <%= link_to((count > 1 ? count : image_tag('false.png')), {:action => 'edit', :role_id => role, :tracker_id => tracker}, :title => l(:button_edit)) %>
+      <%= link_to((count > 0 ? count : image_tag('false.png')), {:action => 'edit', :role_id => role, :tracker_id => tracker}, :title => l(:button_edit)) %>
     </td>
   <% end -%>
 </tr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/views/workflows/_form.html.erb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,40 @@
+<table class="list transitions-<%= name %>">
+<thead>
+	<tr>
+		<th align="left">
+			<%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('table.transitions-#{name} input')",
+			                                              			:title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %>
+      <%=l(:label_current_status)%>
+    </th>
+		<th align="center" colspan="<%= @statuses.length %>"><%=l(:label_new_statuses_allowed)%></th>
+	</tr>
+	<tr>
+		<td></td>
+		<% for new_status in @statuses %>
+		<td width="<%= 75 / @statuses.size %>%" align="center">
+			<%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('table.transitions-#{name} input.new-status-#{new_status.id}')",
+	                                              			:title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %>
+			<%=h new_status.name %>
+		</td>
+		<% end %>
+	</tr>
+</thead>
+<tbody>
+	<% for old_status in @statuses %>
+	<tr class="<%= cycle("odd", "even") %>">
+		<td>
+			<%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('table.transitions-#{name} input.old-status-#{old_status.id}')",
+			                                              			:title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %>
+			
+			<%=h old_status.name %>
+		</td>
+		<% for new_status in @statuses -%>
+		<td align="center">
+			<%= check_box_tag "issue_status[#{ old_status.id }][#{new_status.id}][]", name, workflows.detect {|w| w.old_status_id == old_status.id && w.new_status_id == new_status.id},
+						:class => "old-status-#{old_status.id} new-status-#{new_status.id}" %>			
+		</td>
+		<% end -%>
+	</tr>
+	<% end %>
+</tbody>
+</table>
\ No newline at end of file
--- a/app/views/workflows/edit.rhtml	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/workflows/edit.rhtml	Thu Mar 03 12:02:03 2011 +0000
@@ -20,54 +20,31 @@
 </p>
 <% end %>
 
-
 <% if @tracker && @role && @statuses.any? %>
-<% form_tag({}, :id => 'workflow_form' ) do %>
-<%= hidden_field_tag 'tracker_id', @tracker.id %>
-<%= hidden_field_tag 'role_id', @role.id %>
-<div class="autoscroll">
-<table class="list">
-<thead>
-	<tr>
-		<th align="left"><%=l(:label_current_status)%></th>
-		<th align="center" colspan="<%= @statuses.length %>"><%=l(:label_new_statuses_allowed)%></th>
-	</tr>
-	<tr>
-		<td></td>
-		<% for new_status in @statuses %>
-		<td width="<%= 75 / @statuses.size %>%" align="center">
-			<%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('input.new-status-#{new_status.id}')",
-	                                              			:title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %>
-			<%= new_status.name %>
-		</td>
-		<% end %>
-	</tr>
-</thead>
-<tbody>
-	<% for old_status in @statuses %>
-	<tr class="<%= cycle("odd", "even") %>">
-		<td>
-			<%= link_to_function(image_tag('toggle_check.png'), "toggleCheckboxesBySelector('input.old-status-#{old_status.id}')",
-			                                              			:title => "#{l(:button_check_all)}/#{l(:button_uncheck_all)}") %>
-			
-			<%= old_status.name %>
-		</td>
-		<% new_status_ids_allowed = old_status.find_new_statuses_allowed_to([@role], @tracker).collect(&:id) -%>
-		<% for new_status in @statuses -%>
-		<td align="center">
-			<%= check_box_tag "issue_status[#{ old_status.id }][]", new_status.id, new_status_ids_allowed.include?(new_status.id),
-						:class => "old-status-#{old_status.id} new-status-#{new_status.id}" %>			
-		</td>
-		<% end -%>
-	</tr>
-	<% end %>
-</tbody>
-</table>
-</div>
-<p><%= check_all_links 'workflow_form' %></p>
-
-<%= submit_tag l(:button_save) %>
-<% end %>
+  <% form_tag({}, :id => 'workflow_form' ) do %>
+    <%= hidden_field_tag 'tracker_id', @tracker.id %>
+    <%= hidden_field_tag 'role_id', @role.id %>
+    <div class="autoscroll">
+      <%= render :partial => 'form', :locals => {:name => 'always', :workflows => @workflows['always']} %>
+      
+      <fieldset class="collapsible" style="padding: 0; margin-top: 0.5em;">
+        <legend onclick="toggleFieldset(this);">Autorisations supplémentaires lorsque l'utilisateur a créé la demande</legend>
+        <div id="author_workflows" style="margin: 0.5em 0 0.5em 0;">
+          <%= render :partial => 'form', :locals => {:name => 'author', :workflows => @workflows['author']} %>
+        </div>
+      </fieldset>
+      <%= javascript_tag "hideFieldset($('author_workflows'))" unless @workflows['author'].present? %>
+      
+      <fieldset class="collapsible" style="padding: 0;">
+        <legend onclick="toggleFieldset(this);">Autorisations supplémentaires lorsque la demande est assignée à l'utilisateur</legend>
+        <div id="assignee_workflows" style="margin: 0.5em 0 0.5em 0;">
+      <%= render :partial => 'form', :locals => {:name => 'assignee', :workflows => @workflows['assignee']} %>
+        </div>
+      </fieldset>
+      <%= javascript_tag "hideFieldset($('assignee_workflows'))" unless @workflows['assignee'].present? %>
+    </div>
+    <%= submit_tag l(:button_save) %>
+  <% end %>
 <% end %>
 
 <% html_title(l(:label_workflow)) -%>
--- a/app/views/workflows/index.rhtml	Thu Jan 20 09:59:02 2011 +0000
+++ b/app/views/workflows/index.rhtml	Thu Mar 03 12:02:03 2011 +0000
@@ -24,7 +24,7 @@
   <td><%= h tracker %></td>
   <% roles.each do |role, count| -%>
     <td align="center">
-      <%= link_to((count > 1 ? count : image_tag('false.png')), {:action => 'edit', :role_id => role, :tracker_id => tracker}, :title => l(:button_edit)) %>
+      <%= link_to((count > 0 ? count : image_tag('false.png')), {:action => 'edit', :role_id => role, :tracker_id => tracker}, :title => l(:button_edit)) %>
     </td>
   <% end -%>
 </tr>
--- a/config/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 31
-/svn/!svn/ver/4729/trunk/config
+/svn/!svn/ver/4955/trunk/config
 END
 settings.yml
 K 25
@@ -9,11 +9,11 @@
 V 44
 /svn/!svn/ver/4513/trunk/config/settings.yml
 END
-email.yml.example
+configuration.yml.example
 K 25
 svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/3448/trunk/config/email.yml.example
+V 57
+/svn/!svn/ver/4950/trunk/config/configuration.yml.example
 END
 routes.rb
 K 25
@@ -31,7 +31,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/3372/trunk/config/environment.rb
+/svn/!svn/ver/4904/trunk/config/environment.rb
 END
 additional_environment.rb.example
 K 25
@@ -43,5 +43,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 52
-/svn/!svn/ver/3564/trunk/config/database.yml.example
+/svn/!svn/ver/4753/trunk/config/database.yml.example
 END
--- a/config/.svn/dir-prop-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/.svn/dir-prop-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,8 @@
 K 10
 svn:ignore
-V 23
+V 41
 database.yml
 email.yml
+configuration.yml
 
 END
--- a/config/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/config
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-16T15:23:11.666065Z
-4729
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:09:38.000000Z
+2011-03-03T11:05:14.000000Z
 0f6fe2db3317d8b40af42a6d534da87e
 2010-12-15T21:18:06.237327Z
 4513
@@ -60,17 +60,17 @@
 
 4246
 
-email.yml.example
+configuration.yml.example
 file
 
 
 
 
-2010-09-23T14:37:44.731779Z
-a1c44811380e661aff4e67b6b366f2db
-2010-02-18T05:20:52.515080Z
-3448
-edavis10
+2011-03-03T11:40:18.000000Z
+69243d1b5b9b111da631c7034d51ba71
+2011-02-26T13:09:25.657748Z
+4950
+jplang
 has-props
 
 
@@ -92,7 +92,7 @@
 
 
 
-2120
+4886
 
 locales
 dir
@@ -103,7 +103,7 @@
 
 
 
-2011-01-19T15:03:32.000000Z
+2011-03-03T11:05:14.000000Z
 b03599e0dc8d0a6b03c3173864eb57bd
 2011-01-16T15:23:11.666065Z
 4729
@@ -137,7 +137,7 @@
 
 
 
-2011-01-13T14:09:38.000000Z
+2011-03-03T11:05:14.000000Z
 2969e2a7b5ab1b2a014b5f0c94bac872
 2010-12-17T08:34:29.830642Z
 4516
@@ -174,10 +174,10 @@
 
 
 
-2010-09-23T14:37:44.731779Z
-197d8958c94ce40f08a4b8f1d2c49f6e
-2010-02-06T10:40:21.867545Z
-3372
+2011-03-03T11:40:18.000000Z
+cc9c7d7f9a4bd800d2c4a8737147e4c3
+2011-02-21T11:02:18.659691Z
+4904
 jplang
 has-props
 
@@ -200,7 +200,7 @@
 
 
 
-2494
+2553
 
 environments
 dir
@@ -211,7 +211,7 @@
 
 
 
-2010-09-23T14:37:44.731779Z
+2011-03-03T11:05:14.000000Z
 6b63489cdd262e653712af1aa96cd390
 2009-11-08T02:16:42.659918Z
 3018
@@ -245,10 +245,10 @@
 
 
 
-2010-09-23T14:37:44.731779Z
-b315245d4b4a47a512931d087b03435f
-2010-03-12T13:48:14.426661Z
-3564
+2011-03-03T11:05:14.000000Z
+f33e1e1bf73ba5d10ef3a6f170da3088
+2011-01-23T10:25:48.265995Z
+4753
 jplang
 has-props
 
@@ -271,5 +271,5 @@
 
 
 
-750
+755
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.svn/prop-base/configuration.yml.example.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- a/config/.svn/prop-base/email.yml.example.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/.svn/text-base/configuration.yml.example.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,147 @@
+# = Redmine configuration file
+#
+# Each environment has it's own configuration options.  If you are only
+# running in production, only the production block needs to be configured.
+# Environment specific configuration options override the default ones.
+#
+# Note that this file needs to be a valid YAML file.
+#
+# == Outgoing email settings (email_delivery setting)
+#
+# === Common configurations
+#
+# ==== Sendmail command
+#
+# production:
+#   email_delivery:
+#     delivery_method: :sendmail
+#
+# ==== Simple SMTP server at localhost
+#
+# production:
+#   email_delivery:
+#     delivery_method: :smtp
+#     smtp_settings:
+#       address: "localhost"
+#       port: 25
+#
+# ==== SMTP server at example.com using LOGIN authentication and checking HELO for foo.com
+#
+# production:
+#   email_delivery:
+#     delivery_method: :smtp
+#     smtp_settings:
+#       address: "example.com"
+#       port: 25
+#       authentication: :login
+#       domain: 'foo.com'
+#       user_name: 'myaccount'
+#       password: 'password'
+#
+# ==== SMTP server at example.com using PLAIN authentication
+#
+# production:
+#   email_delivery:
+#     delivery_method: :smtp
+#     smtp_settings:
+#       address: "example.com"
+#       port: 25
+#       authentication: :plain
+#       domain: 'example.com'
+#       user_name: 'myaccount'
+#       password: 'password'
+#
+# ==== SMTP server at using TLS (GMail)
+#
+# This requires some additional configuration.  See the article at:
+# http://redmineblog.com/articles/setup-redmine-to-send-email-using-gmail/
+#
+# production:
+#   email_delivery:
+#     delivery_method: :smtp
+#     smtp_settings:
+#       tls: true
+#       address: "smtp.gmail.com"
+#       port: 587
+#       domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
+#       authentication: :plain
+#       user_name: "your_email@gmail.com"
+#       password: "your_password"
+#
+#
+# === More configuration options
+#
+# See the "Configuration options" at the following website for a list of the
+# full options allowed:
+#
+# http://wiki.rubyonrails.org/rails/pages/HowToSendEmailsWithActionMailer
+
+
+# default configuration options for all environments
+default:
+  # Outgoing emails configuration (see examples above)
+  email_delivery:
+    delivery_method: :smtp
+    smtp_settings:
+      address: smtp.example.net
+      port: 25
+      domain: example.net
+      authentication: :login
+      user_name: "redmine@example.net"
+      password: "redmine"
+  
+  # Absolute path to the directory where attachments are stored.
+  # The default is the 'files' directory in your Redmine instance.
+  # Your Redmine instance needs to have write permission on this
+  # directory.
+  # Examples:
+  # attachments_storage_path: /var/redmine/files
+  # attachments_storage_path: D:/redmine/files
+  attachments_storage_path:
+  
+  # Configuration of the autologin cookie.
+  # autologin_cookie_name: the name of the cookie (default: autologin)
+  # autologin_cookie_path: the cookie path (default: /)
+  # autologin_cookie_secure: true sets the cookie secure flag (default: false)
+  autologin_cookie_name:
+  autologin_cookie_path:
+  autologin_cookie_secure:
+  
+  # Configuration of SCM executable command.
+  # Absolute path (e.g. /usr/local/bin/hg) or command name (e.g. hg.exe, bzr.exe)
+  # On Windows, *.cmd, *.bat (e.g. hg.cmd, bzr.bat) does not work.
+  # Examples:
+  # scm_subversion_command: svn                                       # (default: svn)
+  # scm_mercurial_command:  C:\Program Files\TortoiseHg\hg.exe        # (default: hg)
+  # scm_git_command:        /usr/local/bin/git                        # (default: git)
+  # scm_cvs_command:        cvs                                       # (default: cvs)
+  # scm_bazaar_command:     bzr.exe                                   # (default: bzr)
+  # scm_darcs_command:      darcs-1.0.9-i386-linux                    # (default: darcs)
+  scm_subversion_command:
+  scm_mercurial_command:
+  scm_git_command:
+  scm_cvs_command:
+  scm_bazaar_command:
+  scm_darcs_command:
+  
+  # Key used to encrypt sensitive data in the database (SCM and LDAP passwords).
+  # If you don't want to enable data encryption, just leave it blank.
+  # WARNING: losing/changing this key will make encrypted data unreadable.
+  #
+  # If you want to encrypt existing passwords in your database:
+  # * set the cipher key here in your configuration file
+  # * encrypt data using 'rake db:encrypt RAILS_ENV=production'
+  #
+  # If you have encrypted data and want to change this key, you have to:
+  # * decrypt data using 'rake db:decrypt RAILS_ENV=production' first
+  # * change the cipher key here in your configuration file
+  # * encrypt data using 'rake db:encrypt RAILS_ENV=production'
+  database_cipher_key: 
+  
+# specific configuration options for production environment
+# that overrides the default ones
+production:
+
+# specific configuration options for development environment
+# that overrides the default ones
+development:
--- a/config/.svn/text-base/database.yml.example.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/.svn/text-base/database.yml.example.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -36,4 +36,4 @@
 
 test_sqlite3:
   adapter: sqlite3
-  database: db/test.db
+  database: db/test.sqlite3
--- a/config/.svn/text-base/email.yml.example.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-# = Outgoing email settings
-#
-# Each environment has it's own configuration options.  If you are only
-# running in production, only the production block needs to be configured.
-#
-# == Common configurations
-#
-# === Sendmail command
-#
-# production:
-#   delivery_method: :sendmail
-#
-# === Simple SMTP server at localhost
-#
-# production:
-#   delivery_method: :smtp
-#   smtp_settings:
-#     address: "localhost"
-#     port: 25
-#
-# === SMTP server at example.com using LOGIN authentication and checking HELO for foo.com
-#
-# production:
-#   delivery_method: :smtp
-#   smtp_settings:
-#     address: "example.com"
-#     port: 25
-#     authentication: :login
-#     domain: 'foo.com'
-#     user_name: 'myaccount'
-#     password: 'password'
-#
-# === SMTP server at example.com using PLAIN authentication
-#
-# production:
-#   delivery_method: :smtp
-#   smtp_settings:
-#     address: "example.com"
-#     port: 25
-#     authentication: :plain
-#     domain: 'example.com'
-#     user_name: 'myaccount'
-#     password: 'password'
-#
-# === SMTP server at using TLS (GMail)
-#
-# This requires some additional configuration.  See the article at:
-# http://redmineblog.com/articles/setup-redmine-to-send-email-using-gmail/
-#
-# production:
-#   delivery_method: :smtp
-#   smtp_settings:
-#     tls: true
-#     address: "smtp.gmail.com"
-#     port: 587
-#     domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
-#     authentication: :plain
-#     user_name: "your_email@gmail.com"
-#     password: "your_password"
-#
-#
-# == More configuration options
-#
-# See the "Configuration options" at the following website for a list of the
-# full options allowed:
-#
-# http://wiki.rubyonrails.org/rails/pages/HowToSendEmailsWithActionMailer
-
-production:
-  delivery_method: :smtp
-  smtp_settings:
-    address: smtp.example.net
-    port: 25
-    domain: example.net
-    authentication: :login
-    user_name: "redmine@example.net"
-    password: "redmine"
-  
-development:
-  delivery_method: :smtp
-  smtp_settings:
-    address: 127.0.0.1
-    port: 25
-    domain: example.net
-    authentication: :login
-    user_name: "redmine@example.net"
-    password: "redmine"
--- a/config/.svn/text-base/environment.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/.svn/text-base/environment.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -5,7 +5,7 @@
 # ENV['RAILS_ENV'] ||= 'production'
 
 # Specifies gem version of Rails to use when vendor/rails is not present
-RAILS_GEM_VERSION = '2.3.5' unless defined? RAILS_GEM_VERSION
+RAILS_GEM_VERSION = '2.3.11' unless defined? RAILS_GEM_VERSION
 
 # Bootstrap the Rails environment, frameworks, and default configuration
 require File.join(File.dirname(__FILE__), 'boot')
@@ -24,7 +24,7 @@
   # config.frameworks -= [ :action_web_service, :action_mailer ]
 
   # Add additional load paths for sweepers
-  config.load_paths += %W( #{RAILS_ROOT}/app/sweepers )
+  config.autoload_paths += %W( #{RAILS_ROOT}/app/sweepers )
 
   # Force all environments to use the same logger level 
   # (by default production uses :info, the others :debug)
@@ -46,11 +46,12 @@
   # config.active_record.schema_format = :ruby
   
   # Deliveries are disabled by default. Do NOT modify this section.
-  # Define your email configuration in email.yml instead.
+  # Define your email configuration in configuration.yml instead.
   # It will automatically turn deliveries on
   config.action_mailer.perform_deliveries = false
 
   config.gem 'rubytree', :lib => 'tree'
+  config.gem 'coderay', :version => '~>0.9.7'
   
   # Load any local configuration that is kept out of source control
   # (e.g. gems, patches).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/configuration.yml.example	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,147 @@
+# = Redmine configuration file
+#
+# Each environment has it's own configuration options.  If you are only
+# running in production, only the production block needs to be configured.
+# Environment specific configuration options override the default ones.
+#
+# Note that this file needs to be a valid YAML file.
+#
+# == Outgoing email settings (email_delivery setting)
+#
+# === Common configurations
+#
+# ==== Sendmail command
+#
+# production:
+#   email_delivery:
+#     delivery_method: :sendmail
+#
+# ==== Simple SMTP server at localhost
+#
+# production:
+#   email_delivery:
+#     delivery_method: :smtp
+#     smtp_settings:
+#       address: "localhost"
+#       port: 25
+#
+# ==== SMTP server at example.com using LOGIN authentication and checking HELO for foo.com
+#
+# production:
+#   email_delivery:
+#     delivery_method: :smtp
+#     smtp_settings:
+#       address: "example.com"
+#       port: 25
+#       authentication: :login
+#       domain: 'foo.com'
+#       user_name: 'myaccount'
+#       password: 'password'
+#
+# ==== SMTP server at example.com using PLAIN authentication
+#
+# production:
+#   email_delivery:
+#     delivery_method: :smtp
+#     smtp_settings:
+#       address: "example.com"
+#       port: 25
+#       authentication: :plain
+#       domain: 'example.com'
+#       user_name: 'myaccount'
+#       password: 'password'
+#
+# ==== SMTP server at using TLS (GMail)
+#
+# This requires some additional configuration.  See the article at:
+# http://redmineblog.com/articles/setup-redmine-to-send-email-using-gmail/
+#
+# production:
+#   email_delivery:
+#     delivery_method: :smtp
+#     smtp_settings:
+#       tls: true
+#       address: "smtp.gmail.com"
+#       port: 587
+#       domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
+#       authentication: :plain
+#       user_name: "your_email@gmail.com"
+#       password: "your_password"
+#
+#
+# === More configuration options
+#
+# See the "Configuration options" at the following website for a list of the
+# full options allowed:
+#
+# http://wiki.rubyonrails.org/rails/pages/HowToSendEmailsWithActionMailer
+
+
+# default configuration options for all environments
+default:
+  # Outgoing emails configuration (see examples above)
+  email_delivery:
+    delivery_method: :smtp
+    smtp_settings:
+      address: smtp.example.net
+      port: 25
+      domain: example.net
+      authentication: :login
+      user_name: "redmine@example.net"
+      password: "redmine"
+  
+  # Absolute path to the directory where attachments are stored.
+  # The default is the 'files' directory in your Redmine instance.
+  # Your Redmine instance needs to have write permission on this
+  # directory.
+  # Examples:
+  # attachments_storage_path: /var/redmine/files
+  # attachments_storage_path: D:/redmine/files
+  attachments_storage_path:
+  
+  # Configuration of the autologin cookie.
+  # autologin_cookie_name: the name of the cookie (default: autologin)
+  # autologin_cookie_path: the cookie path (default: /)
+  # autologin_cookie_secure: true sets the cookie secure flag (default: false)
+  autologin_cookie_name:
+  autologin_cookie_path:
+  autologin_cookie_secure:
+  
+  # Configuration of SCM executable command.
+  # Absolute path (e.g. /usr/local/bin/hg) or command name (e.g. hg.exe, bzr.exe)
+  # On Windows, *.cmd, *.bat (e.g. hg.cmd, bzr.bat) does not work.
+  # Examples:
+  # scm_subversion_command: svn                                       # (default: svn)
+  # scm_mercurial_command:  C:\Program Files\TortoiseHg\hg.exe        # (default: hg)
+  # scm_git_command:        /usr/local/bin/git                        # (default: git)
+  # scm_cvs_command:        cvs                                       # (default: cvs)
+  # scm_bazaar_command:     bzr.exe                                   # (default: bzr)
+  # scm_darcs_command:      darcs-1.0.9-i386-linux                    # (default: darcs)
+  scm_subversion_command:
+  scm_mercurial_command:
+  scm_git_command:
+  scm_cvs_command:
+  scm_bazaar_command:
+  scm_darcs_command:
+  
+  # Key used to encrypt sensitive data in the database (SCM and LDAP passwords).
+  # If you don't want to enable data encryption, just leave it blank.
+  # WARNING: losing/changing this key will make encrypted data unreadable.
+  #
+  # If you want to encrypt existing passwords in your database:
+  # * set the cipher key here in your configuration file
+  # * encrypt data using 'rake db:encrypt RAILS_ENV=production'
+  #
+  # If you have encrypted data and want to change this key, you have to:
+  # * decrypt data using 'rake db:decrypt RAILS_ENV=production' first
+  # * change the cipher key here in your configuration file
+  # * encrypt data using 'rake db:encrypt RAILS_ENV=production'
+  database_cipher_key: 
+  
+# specific configuration options for production environment
+# that overrides the default ones
+production:
+
+# specific configuration options for development environment
+# that overrides the default ones
+development:
--- a/config/database.yml.example	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/database.yml.example	Thu Mar 03 12:02:03 2011 +0000
@@ -36,4 +36,4 @@
 
 test_sqlite3:
   adapter: sqlite3
-  database: db/test.db
+  database: db/test.sqlite3
--- a/config/email.yml.example	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-# = Outgoing email settings
-#
-# Each environment has it's own configuration options.  If you are only
-# running in production, only the production block needs to be configured.
-#
-# == Common configurations
-#
-# === Sendmail command
-#
-# production:
-#   delivery_method: :sendmail
-#
-# === Simple SMTP server at localhost
-#
-# production:
-#   delivery_method: :smtp
-#   smtp_settings:
-#     address: "localhost"
-#     port: 25
-#
-# === SMTP server at example.com using LOGIN authentication and checking HELO for foo.com
-#
-# production:
-#   delivery_method: :smtp
-#   smtp_settings:
-#     address: "example.com"
-#     port: 25
-#     authentication: :login
-#     domain: 'foo.com'
-#     user_name: 'myaccount'
-#     password: 'password'
-#
-# === SMTP server at example.com using PLAIN authentication
-#
-# production:
-#   delivery_method: :smtp
-#   smtp_settings:
-#     address: "example.com"
-#     port: 25
-#     authentication: :plain
-#     domain: 'example.com'
-#     user_name: 'myaccount'
-#     password: 'password'
-#
-# === SMTP server at using TLS (GMail)
-#
-# This requires some additional configuration.  See the article at:
-# http://redmineblog.com/articles/setup-redmine-to-send-email-using-gmail/
-#
-# production:
-#   delivery_method: :smtp
-#   smtp_settings:
-#     tls: true
-#     address: "smtp.gmail.com"
-#     port: 587
-#     domain: "smtp.gmail.com" # 'your.domain.com' for GoogleApps
-#     authentication: :plain
-#     user_name: "your_email@gmail.com"
-#     password: "your_password"
-#
-#
-# == More configuration options
-#
-# See the "Configuration options" at the following website for a list of the
-# full options allowed:
-#
-# http://wiki.rubyonrails.org/rails/pages/HowToSendEmailsWithActionMailer
-
-production:
-  delivery_method: :smtp
-  smtp_settings:
-    address: smtp.example.net
-    port: 25
-    domain: example.net
-    authentication: :login
-    user_name: "redmine@example.net"
-    password: "redmine"
-  
-development:
-  delivery_method: :smtp
-  smtp_settings:
-    address: 127.0.0.1
-    port: 25
-    domain: example.net
-    authentication: :login
-    user_name: "redmine@example.net"
-    password: "redmine"
--- a/config/environment.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/environment.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -5,7 +5,7 @@
 # ENV['RAILS_ENV'] ||= 'production'
 
 # Specifies gem version of Rails to use when vendor/rails is not present
-RAILS_GEM_VERSION = '2.3.5' unless defined? RAILS_GEM_VERSION
+RAILS_GEM_VERSION = '2.3.11' unless defined? RAILS_GEM_VERSION
 
 # Bootstrap the Rails environment, frameworks, and default configuration
 require File.join(File.dirname(__FILE__), 'boot')
@@ -24,7 +24,7 @@
   # config.frameworks -= [ :action_web_service, :action_mailer ]
 
   # Add additional load paths for sweepers
-  config.load_paths += %W( #{RAILS_ROOT}/app/sweepers )
+  config.autoload_paths += %W( #{RAILS_ROOT}/app/sweepers )
 
   # Force all environments to use the same logger level 
   # (by default production uses :info, the others :debug)
@@ -46,11 +46,12 @@
   # config.active_record.schema_format = :ruby
   
   # Deliveries are disabled by default. Do NOT modify this section.
-  # Define your email configuration in email.yml instead.
+  # Define your email configuration in configuration.yml instead.
   # It will automatically turn deliveries on
   config.action_mailer.perform_deliveries = false
 
   config.gem 'rubytree', :lib => 'tree'
+  config.gem 'coderay', :version => '~>0.9.7'
   
   # Load any local configuration that is kept out of source control
   # (e.g. gems, patches).
--- a/config/environments/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/environments/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/config/environments
+4993
+http://redmine.rubyforge.org/svn/trunk/config/environments
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:14.000000Z
 08b25fdea5e3e041116340c3c3090b18
 2010-11-14T15:14:19.280754Z
 4405
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 02eadf22aa59353271c702e4865138b1
 2007-12-10T17:58:07.273873Z
 975
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 213279c73e8c922d0a9d43f3c1cc6943
 2010-02-08T18:53:07.634937Z
 3397
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 d08152d4dda4608f254785b23840140a
 2007-09-27T22:30:57.196220Z
 772
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 213279c73e8c922d0a9d43f3c1cc6943
 2010-02-08T18:53:07.634937Z
 3397
@@ -202,7 +202,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:14.000000Z
 17a6fbb168f3951191541f0f5a554454
 2010-09-26T16:54:38.112012Z
 4182
--- a/config/initializers/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/initializers/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/4679/trunk/config/initializers
+/svn/!svn/ver/4904/trunk/config/initializers
 END
 inflections.rb
 K 25
@@ -19,7 +19,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 58
-/svn/!svn/ver/4516/trunk/config/initializers/10-patches.rb
+/svn/!svn/ver/4904/trunk/config/initializers/10-patches.rb
 END
 backtrace_silencers.rb
 K 25
@@ -27,12 +27,6 @@
 V 67
 /svn/!svn/ver/2895/trunk/config/initializers/backtrace_silencers.rb
 END
-40-email.rb
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/1625/trunk/config/initializers/40-email.rb
-END
 20-mime_types.rb
 K 25
 svn:wc:ra_dav:version-url
--- a/config/initializers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/initializers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/config/initializers
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-10T18:25:12.105765Z
-4679
+2011-02-21T11:02:18.659691Z
+4904
 jplang
 has-props
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:44.743734Z
+2011-03-03T11:05:14.000000Z
 acc71445fc1c65ebe6fdeba695fea714
 2009-09-20T14:06:57.257282Z
 2895
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:09:38.000000Z
+2011-03-03T11:05:14.000000Z
 45627c8ad9bafcee93e6ce01b92b57d1
 2011-01-10T18:25:12.105765Z
 4679
@@ -100,10 +100,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-e83154f604f9f3b0307e1b435f9cc95c
-2010-12-17T08:34:29.830642Z
-4516
+2011-03-03T11:40:18.000000Z
+17f5c9eadec957cb8fb2b6d1f07b61ae
+2011-02-21T11:02:18.659691Z
+4904
 jplang
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-3149
+2907
 
 backtrace_silencers.rb
 file
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:44.743734Z
+2011-03-03T11:05:14.000000Z
 ca8db2f40b067cb8615263fa5a238517
 2009-09-20T14:06:57.257282Z
 2895
@@ -162,47 +162,13 @@
 
 404
 
-40-email.rb
-file
-
-
-
-
-2010-09-23T14:37:44.743734Z
-386c37f359a87852920a3c3f3e4bbc84
-2008-07-04T18:55:45.736676Z
-1625
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-534
-
 20-mime_types.rb
 file
 
 
 
 
-2010-09-23T14:37:44.743734Z
+2011-03-03T11:05:14.000000Z
 0005ed7b233f71646e0f75b9994cf219
 2008-09-10T18:26:13.133776Z
 1797
@@ -236,7 +202,7 @@
 
 
 
-2010-09-23T14:37:44.743734Z
+2011-03-03T11:05:14.000000Z
 a7948d8e86bcd799c74945fe91b4a8b1
 2009-09-20T14:06:57.257282Z
 2895
--- a/config/initializers/.svn/prop-base/40-email.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/config/initializers/.svn/text-base/10-patches.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/initializers/.svn/text-base/10-patches.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -79,16 +79,12 @@
 
 ActionMailer::Base.send :include, AsynchronousMailer
 
-# TODO: Hack to support i18n 4.x on Rails 2.3.5.  Remove post 2.3.6.
-# See http://www.redmine.org/issues/6428 and http://www.redmine.org/issues/5608
-module I18n
-  module Backend
-    module Base
-      def warn_syntax_deprecation!(*args)
-        return if @skip_syntax_deprecation
-        warn "The {{key}} interpolation syntax in I18n messages is deprecated and will be removed in Redmine 1.2. Please use %{key} instead, see http://www.redmine.org/issues/7013 for more information."
-        @skip_syntax_deprecation = true
-      end
+# TMail::Unquoter.convert_to_with_fallback_on_iso_8859_1 introduced in TMail 1.2.7
+# triggers a test failure in test_add_issue_with_japanese_keywords(MailHandlerTest)
+module TMail
+  class Unquoter
+    class << self
+      alias_method :convert_to, :convert_to_without_fallback_on_iso_8859_1
     end
   end
 end
--- a/config/initializers/.svn/text-base/40-email.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-# Loads action_mailer settings from email.yml
-# and turns deliveries on if configuration file is found
-
-filename = File.join(File.dirname(__FILE__), '..', 'email.yml')
-if File.file?(filename)
-  mailconfig = YAML::load_file(filename)
-
-  if mailconfig.is_a?(Hash) && mailconfig.has_key?(Rails.env)
-    # Enable deliveries
-    ActionMailer::Base.perform_deliveries = true
-    
-    mailconfig[Rails.env].each do |k, v|
-      v.symbolize_keys! if v.respond_to?(:symbolize_keys!)
-      ActionMailer::Base.send("#{k}=", v)
-    end
-  end
-end
--- a/config/initializers/10-patches.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/initializers/10-patches.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -79,16 +79,12 @@
 
 ActionMailer::Base.send :include, AsynchronousMailer
 
-# TODO: Hack to support i18n 4.x on Rails 2.3.5.  Remove post 2.3.6.
-# See http://www.redmine.org/issues/6428 and http://www.redmine.org/issues/5608
-module I18n
-  module Backend
-    module Base
-      def warn_syntax_deprecation!(*args)
-        return if @skip_syntax_deprecation
-        warn "The {{key}} interpolation syntax in I18n messages is deprecated and will be removed in Redmine 1.2. Please use %{key} instead, see http://www.redmine.org/issues/7013 for more information."
-        @skip_syntax_deprecation = true
-      end
+# TMail::Unquoter.convert_to_with_fallback_on_iso_8859_1 introduced in TMail 1.2.7
+# triggers a test failure in test_add_issue_with_japanese_keywords(MailHandlerTest)
+module TMail
+  class Unquoter
+    class << self
+      alias_method :convert_to, :convert_to_without_fallback_on_iso_8859_1
     end
   end
 end
--- a/config/initializers/40-email.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-# Loads action_mailer settings from email.yml
-# and turns deliveries on if configuration file is found
-
-filename = File.join(File.dirname(__FILE__), '..', 'email.yml')
-if File.file?(filename)
-  mailconfig = YAML::load_file(filename)
-
-  if mailconfig.is_a?(Hash) && mailconfig.has_key?(Rails.env)
-    # Enable deliveries
-    ActionMailer::Base.perform_deliveries = true
-    
-    mailconfig[Rails.env].each do |k, v|
-      v.symbolize_keys! if v.respond_to?(:symbolize_keys!)
-      ActionMailer::Base.send("#{k}=", v)
-    end
-  end
-end
--- a/config/locales/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,263 +1,269 @@
 K 25
 svn:wc:ra_dav:version-url
 V 39
-/svn/!svn/ver/4724/trunk/config/locales
+/svn/!svn/ver/4955/trunk/config/locales
 END
 lt.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/lt.yml
+/svn/!svn/ver/4955/trunk/config/locales/lt.yml
 END
 sr-YU.yml
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/4554/trunk/config/locales/sr-YU.yml
+/svn/!svn/ver/4955/trunk/config/locales/sr-YU.yml
 END
 ro.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/ro.yml
+/svn/!svn/ver/4955/trunk/config/locales/ro.yml
 END
 lv.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/lv.yml
+/svn/!svn/ver/4955/trunk/config/locales/lv.yml
 END
 zh.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/zh.yml
+/svn/!svn/ver/4955/trunk/config/locales/zh.yml
 END
 pt.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/pt.yml
+/svn/!svn/ver/4955/trunk/config/locales/pt.yml
 END
 ca.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/ca.yml
+/svn/!svn/ver/4955/trunk/config/locales/ca.yml
 END
 pt-BR.yml
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/4554/trunk/config/locales/pt-BR.yml
+/svn/!svn/ver/4955/trunk/config/locales/pt-BR.yml
 END
 tr.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/tr.yml
+/svn/!svn/ver/4955/trunk/config/locales/tr.yml
 END
 ru.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/ru.yml
+/svn/!svn/ver/4955/trunk/config/locales/ru.yml
 END
 en-GB.yml
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/4519/trunk/config/locales/en-GB.yml
+/svn/!svn/ver/4955/trunk/config/locales/en-GB.yml
 END
 id.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/id.yml
+/svn/!svn/ver/4955/trunk/config/locales/id.yml
 END
 el.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/el.yml
+/svn/!svn/ver/4955/trunk/config/locales/el.yml
 END
 en.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4519/trunk/config/locales/en.yml
+/svn/!svn/ver/4954/trunk/config/locales/en.yml
 END
 gl.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/gl.yml
+/svn/!svn/ver/4955/trunk/config/locales/gl.yml
 END
 cs.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/cs.yml
+/svn/!svn/ver/4955/trunk/config/locales/cs.yml
 END
 mk.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/mk.yml
+/svn/!svn/ver/4955/trunk/config/locales/mk.yml
 END
 es.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/es.yml
+/svn/!svn/ver/4955/trunk/config/locales/es.yml
 END
 ko.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/ko.yml
+/svn/!svn/ver/4955/trunk/config/locales/ko.yml
 END
 eu.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/eu.yml
+/svn/!svn/ver/4955/trunk/config/locales/eu.yml
 END
 zh-TW.yml
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/4593/trunk/config/locales/zh-TW.yml
+/svn/!svn/ver/4955/trunk/config/locales/zh-TW.yml
 END
 mn.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/mn.yml
+/svn/!svn/ver/4955/trunk/config/locales/mn.yml
 END
 it.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4657/trunk/config/locales/it.yml
+/svn/!svn/ver/4955/trunk/config/locales/it.yml
 END
 sk.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/sk.yml
+/svn/!svn/ver/4955/trunk/config/locales/sk.yml
 END
 sl.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/sl.yml
+/svn/!svn/ver/4955/trunk/config/locales/sl.yml
 END
 uk.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/uk.yml
+/svn/!svn/ver/4955/trunk/config/locales/uk.yml
 END
 da.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/da.yml
+/svn/!svn/ver/4955/trunk/config/locales/da.yml
 END
 sr.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/sr.yml
+/svn/!svn/ver/4955/trunk/config/locales/sr.yml
+END
+fa.yml
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/4955/trunk/config/locales/fa.yml
+END
+sv.yml
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/4955/trunk/config/locales/sv.yml
 END
 bg.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4656/trunk/config/locales/bg.yml
+/svn/!svn/ver/4955/trunk/config/locales/bg.yml
 END
 de.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4592/trunk/config/locales/de.yml
-END
-sv.yml
-K 25
-svn:wc:ra_dav:version-url
-V 46
-/svn/!svn/ver/4518/trunk/config/locales/sv.yml
+/svn/!svn/ver/4955/trunk/config/locales/de.yml
 END
 ja.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4594/trunk/config/locales/ja.yml
+/svn/!svn/ver/4955/trunk/config/locales/ja.yml
 END
 he.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/he.yml
+/svn/!svn/ver/4955/trunk/config/locales/he.yml
 END
 fi.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/fi.yml
+/svn/!svn/ver/4955/trunk/config/locales/fi.yml
 END
 bs.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/bs.yml
+/svn/!svn/ver/4955/trunk/config/locales/bs.yml
 END
 fr.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4724/trunk/config/locales/fr.yml
+/svn/!svn/ver/4954/trunk/config/locales/fr.yml
 END
 nl.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4701/trunk/config/locales/nl.yml
+/svn/!svn/ver/4955/trunk/config/locales/nl.yml
 END
 hr.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/hr.yml
+/svn/!svn/ver/4955/trunk/config/locales/hr.yml
 END
 pl.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4595/trunk/config/locales/pl.yml
+/svn/!svn/ver/4955/trunk/config/locales/pl.yml
 END
 th.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/th.yml
+/svn/!svn/ver/4955/trunk/config/locales/th.yml
 END
 no.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/no.yml
+/svn/!svn/ver/4955/trunk/config/locales/no.yml
 END
 hu.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/hu.yml
+/svn/!svn/ver/4955/trunk/config/locales/hu.yml
 END
 vi.yml
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4554/trunk/config/locales/vi.yml
+/svn/!svn/ver/4955/trunk/config/locales/vi.yml
 END
--- a/config/locales/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/config/locales
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-15T14:25:11.532146Z
-4724
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-04a33a87317c990f209c9e0b23a94dfb
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+3542e97eeeee34df7a3d6d64a4ce0407
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-43738
+44029
 
 sr-YU.yml
 file
@@ -66,10 +66,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-c066a5e1a32e5c7141a461819119ca09
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+b05d928becf91c52a78271c93715bb1b
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 
 
@@ -92,7 +92,7 @@
 
 
 
-42004
+42299
 
 ro.yml
 file
@@ -100,10 +100,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-4127de9dda4a292a21188ddb864bdb22
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+dd9fb4aae0fa69165e4f4e1100c3fa26
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-40126
+40417
 
 lv.yml
 file
@@ -134,10 +134,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-0b93573ed1b6c4d16c566facc9c51ea3
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+12f9b4e9c849923a86334f56fbb65f1a
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 
 
@@ -160,7 +160,7 @@
 
 
 
-42010
+42305
 
 zh.yml
 file
@@ -168,10 +168,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-dabc9f1dd8c6fe2a6af4e19d03e9ed65
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+dde46f425abed5caa3d8d3afe9049fb7
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -194,7 +194,7 @@
 
 
 
-38012
+38303
 
 pt.yml
 file
@@ -202,10 +202,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-4c86c4b56c721fac90f5939dd7f5a4ad
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+017dbb90319bfa26bab5a45296b337b3
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -228,7 +228,7 @@
 
 
 
-41486
+41777
 
 ca.yml
 file
@@ -236,10 +236,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-ee91e7c266c44fdcaee547bf143ba5fe
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+55d3137cb8850d53bce7337a8a0cf720
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -262,7 +262,7 @@
 
 
 
-41935
+42226
 
 pt-BR.yml
 file
@@ -270,10 +270,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-390265b3732a994f563d7137967e2278
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+0714d61f3439e9e8058f26487eae91b2
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -296,7 +296,7 @@
 
 
 
-41370
+41661
 
 tr.yml
 file
@@ -304,10 +304,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-f36ff0ac378a574be6bb66ea4340bdfa
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+5bc442cb54c4373e1aeea7dd56e30bd0
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -330,7 +330,7 @@
 
 
 
-40004
+40295
 
 ru.yml
 file
@@ -338,10 +338,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-b19c21ea18bf2e9d14353dde9f48301b
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+6a3741281160ebb7f27f6d2bb03499c8
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -364,7 +364,7 @@
 
 
 
-61833
+62124
 
 en-GB.yml
 file
@@ -372,10 +372,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-1c06a4a68ae568c890ae0c1b76477f22
-2010-12-17T09:14:54.583423Z
-4519
+2011-03-03T11:40:18.000000Z
+831604fd1ce5d6f72e64688ce6f62581
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 
 
@@ -398,7 +398,7 @@
 
 
 
-39390
+39685
 
 id.yml
 file
@@ -406,10 +406,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-cee65e2ec68fbd913b617131805cb378
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+eb45d7f2bc3d3e7fd8ab01db1a3041a4
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -432,7 +432,7 @@
 
 
 
-39746
+40037
 
 el.yml
 file
@@ -440,10 +440,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-762ca0186f8e7567f3038b8ea6f5bb5c
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+98b4f21cce1a0242221eecb23f5fc727
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -466,7 +466,7 @@
 
 
 
-54854
+55145
 
 en.yml
 file
@@ -474,10 +474,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-9bf57c4bbbe21feffb9b80b1dd359dc0
-2010-12-17T09:14:54.583423Z
-4519
+2011-03-03T11:40:18.000000Z
+4265d626f893cc08f2142d0a254e2ac7
+2011-02-27T13:34:41.060565Z
+4954
 jplang
 has-props
 
@@ -500,7 +500,7 @@
 
 
 
-38492
+38787
 
 gl.yml
 file
@@ -508,10 +508,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-b3d6b890444008ad69a9b22d6ebbd8ae
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+03aa773b8d01d5bc421b8896fc9c861b
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -534,7 +534,7 @@
 
 
 
-40604
+40895
 
 cs.yml
 file
@@ -542,10 +542,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-b5d7dae55451b82b6050007739026770
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+85ac61a4067ad6dda83d43acbf874cf6
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -568,7 +568,7 @@
 
 
 
-41330
+41752
 
 mk.yml
 file
@@ -576,10 +576,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-8a4d25a273edbf55ec8118387a78e386
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+626a66d6d98190418f4a4fd43077734f
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 
 
@@ -602,7 +602,7 @@
 
 
 
-49123
+49418
 
 es.yml
 file
@@ -610,10 +610,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-2a2cc7f9b081a6c28f36452f0df75c3c
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+6ef7d2fb0af3cce0f6afbdea3ff9ab17
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -636,7 +636,75 @@
 
 
 
-43379
+43670
+
+ko.yml
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+1ff250f0b17ecb9465add49dfcf9bb91
+2011-02-27T13:43:18.863191Z
+4955
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+44501
+
+eu.yml
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+b3ba93d14600b4b992e65fbd243759ae
+2011-02-27T13:43:18.863191Z
+4955
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+42568
 
 zh-TW.yml
 file
@@ -644,10 +712,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-a40f011945cb425a77762a94d6fa4387
-2010-12-30T15:43:02.374736Z
-4593
+2011-03-03T11:40:18.000000Z
+f4c6a612b84e5087ed4d023414dab628
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -670,75 +738,7 @@
 
 
 
-42317
-
-eu.yml
-file
-
-
-
-
-2011-01-13T14:09:38.000000Z
-0272605dbb554b76e81e7d80f1ce376e
-2010-12-22T20:40:56.075532Z
-4554
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-42073
-
-ko.yml
-file
-
-
-
-
-2011-01-13T14:09:38.000000Z
-3e5ad3b8bb49d5d19bbcd4c06d3f6a91
-2010-12-22T20:40:56.075532Z
-4554
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-44210
+42608
 
 mn.yml
 file
@@ -746,10 +746,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-29ec44faa431f0307ebd9701359928ae
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+b9e2987cb3cbaab826c7388d09b74f75
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 
 
@@ -772,7 +772,7 @@
 
 
 
-53787
+54082
 
 it.yml
 file
@@ -780,10 +780,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-a0ea06ad26b6d7dfe722fa0560a8894d
-2011-01-08T10:03:34.099825Z
-4657
+2011-03-03T11:40:18.000000Z
+f80f107e4d9318b8a8cea65b2e13d579
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -806,7 +806,7 @@
 
 
 
-41145
+41436
 
 sk.yml
 file
@@ -814,10 +814,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-0730abc697f821268506266b6c751713
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+e7901c1e26424f863f96dd86164419c2
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -840,7 +840,7 @@
 
 
 
-41396
+41687
 
 sl.yml
 file
@@ -848,10 +848,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-b089982aac098938ed2da68ca38cff41
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+808c04baadb112b6be492be9dc78ef89
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -874,7 +874,7 @@
 
 
 
-39572
+39863
 
 uk.yml
 file
@@ -882,10 +882,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-aeb872b59227da163151d3e953557196
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+430d26c543f2d9d31ffe77c9ef3eb4f8
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -908,7 +908,41 @@
 
 
 
-47150
+47441
+
+da.yml
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+a7ae693463d0d34fb5fd212ccbda0aff
+2011-02-27T13:43:18.863191Z
+4955
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+39983
 
 sr.yml
 file
@@ -916,10 +950,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-313da32a9af9ee91d2fa5d51d27bdc70
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+adf2619297b8e142957c327c6a76c786
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -942,18 +976,18 @@
 
 
 
-54264
+54555
 
-da.yml
+fa.yml
 file
 
 
 
 
-2011-01-13T14:09:38.000000Z
-ca814f3069c69727b7a7c8e701386321
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+6f585dcad4e6b03d987ea0f5e7d7e91f
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -976,7 +1010,75 @@
 
 
 
-39692
+51085
+
+bg.yml
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+e0df426fe104bb05be553a362f46610b
+2011-02-27T13:43:18.863191Z
+4955
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+54718
+
+de.yml
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+80e835963312388a9077a8f27452d429
+2011-02-27T13:43:18.863191Z
+4955
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+42574
 
 sv.yml
 file
@@ -984,10 +1086,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-3cd749fe11dfb32ca3a7f95ee9f27cb4
-2010-12-17T08:50:13.997413Z
-4518
+2011-03-03T11:40:18.000000Z
+59f72f202281205f1ed729183db2a402
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -1010,75 +1112,7 @@
 
 
 
-41841
-
-de.yml
-file
-
-
-
-
-2011-01-13T14:09:38.000000Z
-09443567159c66c54aaa5b19b3ab6e6a
-2010-12-30T15:38:41.284110Z
-4592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-42283
-
-bg.yml
-file
-
-
-
-
-2011-01-13T14:09:38.000000Z
-3a0f9832952705d7f032bfe03f53b98a
-2011-01-08T10:01:09.575922Z
-4656
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-54054
+42180
 
 ja.yml
 file
@@ -1086,10 +1120,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-a5ff4810afb580a1bb2735638fde6bdf
-2010-12-30T15:44:02.412420Z
-4594
+2011-03-03T11:40:18.000000Z
+03fac78c16fdf9c77069f24fec7b2796
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -1112,7 +1146,7 @@
 
 
 
-45900
+46191
 
 he.yml
 file
@@ -1120,10 +1154,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-ece84cb2ec7974a6de73e50e301822c8
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+03045c9539de31b255a14c9207fb8eaa
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -1146,7 +1180,7 @@
 
 
 
-45142
+45433
 
 fi.yml
 file
@@ -1154,10 +1188,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-ec72709b8e1f3730f778ecf48f8a477f
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+18dd7ae78913bad4b75e0d5f16068290
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -1180,7 +1214,7 @@
 
 
 
-40650
+40941
 
 bs.yml
 file
@@ -1188,10 +1222,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-868e34aff97e83b737f1583b26949127
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+0fdc9e453941e547e3b40fee917fcf02
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -1214,7 +1248,7 @@
 
 
 
-40587
+40878
 
 fr.yml
 file
@@ -1222,10 +1256,10 @@
 
 
 
-2011-01-19T15:03:32.000000Z
-87a842c407ed2a726eeb7c23b10cadb9
-2011-01-15T14:25:11.532146Z
-4724
+2011-03-03T11:40:18.000000Z
+95995431647aa0e13c850df4250a57d0
+2011-02-27T13:34:41.060565Z
+4954
 jplang
 has-props
 
@@ -1248,7 +1282,7 @@
 
 
 
-42743
+43081
 
 nl.yml
 file
@@ -1256,10 +1290,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-795dcdb14c3b4755c54be2b52b7b0df3
-2011-01-11T20:35:50.950842Z
-4701
+2011-03-03T11:40:18.000000Z
+06358d3f035a3fcc20cde865e7295023
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -1282,7 +1316,7 @@
 
 
 
-40142
+40433
 
 hr.yml
 file
@@ -1290,10 +1324,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-43b90dedeffa52a46acb911eaad02d3f
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+3fbb52f4fa0ba97dfd179ad0c8e020c3
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -1316,7 +1350,7 @@
 
 
 
-40250
+40541
 
 pl.yml
 file
@@ -1324,10 +1358,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-f44541d5733c0a3b474b64151f751080
-2010-12-30T15:49:08.314847Z
-4595
+2011-03-03T11:40:18.000000Z
+afca79760eefe54e70833751f3d9b0bb
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -1350,7 +1384,7 @@
 
 
 
-42545
+42836
 
 th.yml
 file
@@ -1358,10 +1392,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-52810a3efa019c1099e06641996a89b5
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+e9737687144c1c4fd63eacb68f2682f1
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -1384,7 +1418,7 @@
 
 
 
-53010
+53301
 
 no.yml
 file
@@ -1392,10 +1426,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-7b92f62c72c56981439726858c94d19e
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+8fff009aa1fe3602b8b4dff6210f8497
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -1418,7 +1452,7 @@
 
 
 
-38453
+38744
 
 hu.yml
 file
@@ -1426,10 +1460,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-992bb63025a60c01ea886ef5278e6f17
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+5c2041121ebd0cd3bcf252d54e21786b
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -1452,7 +1486,7 @@
 
 
 
-42977
+43268
 
 vi.yml
 file
@@ -1460,10 +1494,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-8ec5b444728e6a8f70e5de5b5d43784a
-2010-12-22T20:40:56.075532Z
-4554
+2011-03-03T11:40:18.000000Z
+37a28f575513649d20833ce31e5fce23
+2011-02-27T13:43:18.863191Z
+4955
 jplang
 has-props
 
@@ -1486,5 +1520,5 @@
 
 
 
-43545
+43836
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/locales/.svn/prop-base/fa.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- a/config/locales/.svn/text-base/bg.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/bg.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,11 +1,12 @@
 bg:
+  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
   direction: ltr
   date:
     formats:
       # Use the strftime parameters for formats.
       # When no format has been given, it uses default.
       # You can provide other formats here if you like!
-      default: "%Y-%m-%d"
+      default: "%d-%m-%Y"
       short: "%b %d"
       long: "%B %d, %Y"
       
@@ -65,12 +66,13 @@
         other: "почти %{count} години"
 
   number:
+    # Default format for numbers
     format:
       separator: "."
       delimiter: ""
       precision: 3
-    human: 
-      format: 
+    human:
+      format:
         precision: 1
         delimiter: ""
       storage_units: 
@@ -83,7 +85,8 @@
           mb: "MB"
           gb: "GB"
           tb: "TB"
-      
+
+
 # Used in array.to_sentence.
   support:
     array:
@@ -94,8 +97,8 @@
     errors:
       template:
         header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
+          one:    "1 грешка попречи този %{model} да бъде запиÑан"
+          other:  "%{count} грешки попречиха този %{model} да бъде запиÑан"
       messages:
         inclusion: "не ÑъщеÑтвува в ÑпиÑъка"
         exclusion: "е запазено"
@@ -120,6 +123,7 @@
         greater_than_start_date: "трÑбва да е Ñлед началната дата"
         not_same_project: "не е от ÑÑŠÑ‰Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚"
         circular_dependency: "Тази Ñ€ÐµÐ»Ð°Ñ†Ð¸Ñ Ñ‰Ðµ доведе до безкрайна завиÑимоÑÑ‚"
+        cant_link_an_issue_with_a_descendant: "Една задача не може да бъде Ñвързвана към ÑÐ²Ð¾Ñ Ð¿Ð¾Ð´Ð·Ð°Ð´Ð°Ñ‡Ð°"
 
   actionview_instancetag_blank_option: Изберете
   
@@ -150,24 +154,61 @@
   notice_file_not_found: ÐеÑъщеÑтвуваща или премеÑтена Ñтраница.
   notice_locking_conflict: Друг потребител Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ñ‚ÐµÐ·Ð¸ данни в момента.
   notice_not_authorized: ÐÑмате право на доÑтъп до тази Ñтраница.
+  notice_not_authorized_archived_project: Проектът, който Ñе опитвате да видите е архивиран.
   notice_email_sent: "Изпратен e-mail на %{value}"
   notice_email_error: "Грешка при изпращане на e-mail (%{value})"
   notice_feeds_access_key_reseted: Ð’Ð°ÑˆÐ¸Ñ ÐºÐ»ÑŽÑ‡ за RSS доÑтъп беше променен.
+  notice_api_access_key_reseted: ВашиÑÑ‚ API ключ за доÑтъп беше изчиÑтен.
+  notice_failed_to_save_issues: "ÐеуÑпешен Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° %{count} задачи от %{total} избрани: %{ids}."
+  notice_failed_to_save_members: "ÐевъзможноÑÑ‚ за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° член(ове): %{errors}."
+  notice_no_issue_selected: "ÐÑма избрани задачи."
+  notice_account_pending: "Профилът Ви е Ñъздаден и очаква одобрение от админиÑтратор."
+  notice_default_data_loaded: Примерната Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ðµ заредена уÑпешно.
+  notice_unable_delete_version: ÐевъзможноÑÑ‚ за изтриване на верÑиÑ
+  notice_unable_delete_time_entry: ÐевъзможноÑÑ‚ за изтриване на Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° time log.
+  notice_issue_done_ratios_updated: Обновен процент на завършените задачи.
+  notice_gantt_chart_truncated: МрежовиÑÑ‚ график е Ñъкратен, понеже броÑÑ‚ на обектите, които могат да бъдат показани е твърде голÑм (%{max})
   
+  error_can_t_load_default_data: "Грешка при зареждане на примерната информациÑ: %{value}"
   error_scm_not_found: ÐеÑъщеÑтвуващ обект в хранилището.
   error_scm_command_failed: "Грешка при опит за ÐºÐ¾Ð¼ÑƒÐ½Ð¸ÐºÐ°Ñ†Ð¸Ñ Ñ Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰Ðµ: %{value}"
+  error_scm_annotate: "Обектът не ÑъщеÑтвува или не може да бъде анотиран."
+  error_issue_not_found_in_project: 'Задачата не е намерена или не принадлежи на този проект'
+  error_no_tracker_in_project: ÐÑма аÑоциирани тракери Ñ Ñ‚Ð¾Ð·Ð¸ проект. Проверете наÑтройките на проекта.
+  error_no_default_issue_status: ÐÑма уÑтановено подразбиращо Ñе ÑÑŠÑтоÑние за задачите. ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐµÑ‚Ðµ вашата ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ (Вижте "ÐдминиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ -> СъÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи").
+  error_can_not_delete_custom_field: ÐевъзможноÑÑ‚ за изтриване на потребителÑко поле
+  error_can_not_delete_tracker: Този тракер Ñъдържа задачи и не може да бъде изтрит.
+  error_can_not_remove_role: Тази Ñ€Ð¾Ð»Ñ Ñе използва и не може да бъде изтрита.
+  error_can_not_reopen_issue_on_closed_version: Задача, аÑоциирана ÑÑŠÑ Ð·Ð°Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð° верÑÐ¸Ñ Ð½Ðµ може да бъде отворена отново
+  error_can_not_archive_project: Този проект не може да бъде архивиран
+  error_issue_done_ratios_not_updated: Процентът на завършените задачи не е обновен.
+  error_workflow_copy_source: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ source тракер или ролÑ
+  error_workflow_copy_target: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ тракер(и) и Ñ€Ð¾Ð»Ñ (роли).
+  error_unable_delete_issue_status: ÐевъзможноÑÑ‚ за изтриване на ÑÑŠÑтоÑние на задача
+  error_unable_to_connect: ÐевъзможноÑÑ‚ за Ñвързване Ñ (%{value})
+  warning_attachments_not_saved: "%{count} файла не бÑха запиÑани."
   
   mail_subject_lost_password: "Вашата парола (%{value})"
   mail_body_lost_password: 'За да Ñмените паролата Ñи, използвайте ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð»Ð¸Ð½Ðº:'
   mail_subject_register: "ÐÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ñ Ð½Ð° профил (%{value})"
   mail_body_register: 'За да активирате профила Ñи използвайте ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð»Ð¸Ð½Ðº:'
+  mail_body_account_information_external: "Можете да използвате Ð²Ð°ÑˆÐ¸Ñ %{value} профил за вход."
+  mail_body_account_information: ИнформациÑта за профила ви
+  mail_subject_account_activation_request: "ЗаÑвка за активиране на профил в %{value}"
+  mail_body_account_activation_request: "Има новорегиÑтриран потребител (%{value}), очакващ вашето одобрение:"
+  mail_subject_reminder: "%{count} задачи Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок Ñ Ñледващите %{days} дни"
+  mail_body_reminder: "%{count} задачи, назначени на Ð²Ð°Ñ Ñа Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок в Ñледващите %{days} дни:"
+  mail_subject_wiki_content_added: "Wiki Ñтраницата '%{id}' беше добавена"
+  mail_body_wiki_content_added: Wiki Ñтраницата '%{id}' беше добавена от %{author}.
+  mail_subject_wiki_content_updated: "Wiki Ñтраницата '%{id}' не беше обновена"
+  mail_body_wiki_content_updated: Wiki Ñтраницата '%{id}' беше обновена от %{author}.
   
   gui_validation_error: 1 грешка
   gui_validation_error_plural: "%{count} грешки"
   
   field_name: Име
   field_description: ОпиÑание
-  field_summary: Групиран изглед
+  field_summary: ÐнотациÑ
   field_is_required: Задължително
   field_firstname: Име
   field_lastname: ФамилиÑ
@@ -200,6 +241,7 @@
   field_priority: Приоритет
   field_fixed_version: Планувана верÑиÑ
   field_user: Потребител
+  field_principal: Principal
   field_role: РолÑ
   field_homepage: Ðачална Ñтраница
   field_is_public: Публичен
@@ -225,6 +267,7 @@
   field_attr_lastname: Ðтрибут Ð¤Ð°Ð¼Ð¸Ð»Ð¸Ñ (Lastname)
   field_attr_mail: Ðтрибут Email
   field_onthefly: Динамично Ñъздаване на потребител
+  field_start_date: Ðачална дата
   field_done_ratio: % ПрогреÑ
   field_auth_source: Ðачин на оторизациÑ
   field_hide_mail: Скрий e-mail адреÑа ми
@@ -242,7 +285,25 @@
   field_assignable: Възможно е възлагане на задачи за тази ролÑ
   field_redirect_existing_links: ПренаÑочване на ÑъщеÑтвуващи линкове
   field_estimated_hours: ИзчиÑлено време
+  field_column_names: Колони
+  field_time_entries: Log time
+  field_time_zone: ЧаÑова зона
+  field_searchable: С възможноÑÑ‚ за търÑене
   field_default_value: СтойноÑÑ‚ по подразбиране
+  field_comments_sorting: Сортиране на коментарите
+  field_parent_title: РодителÑка Ñтраница
+  field_editable: Editable
+  field_watcher: Ðаблюдател
+  field_identity_url: OpenID URL
+  field_content: Съдържание
+  field_group_by: Групиране на резултатите по
+  field_sharing: Sharing
+  field_parent_issue: РодителÑка задача
+  field_member_of_group: Член на група
+  field_assigned_to_role: Assignee's role
+  field_text: ТекÑтово поле
+  field_visible: Видим
+  field_warn_on_leaving_unsaved: Предупреди ме, когато напуÑкам Ñтраница Ñ Ð½ÐµÐ·Ð°Ð¿Ð¸Ñано Ñъдържание
   
   setting_app_title: Заглавие
   setting_app_subtitle: ОпиÑание
@@ -253,26 +314,132 @@
   setting_attachment_max_size: МакÑимална големина на прикачен файл
   setting_issues_export_limit: МакÑимален брой задачи за екÑпорт
   setting_mail_from: E-mail Ð°Ð´Ñ€ÐµÑ Ð·Ð° емиÑии
+  setting_bcc_recipients: Получатели на Ñкрито копие (bcc)
+  setting_plain_text_mail: Ñамо чиÑÑ‚ текÑÑ‚ (без HTML)
   setting_host_name: ХоÑÑ‚
   setting_text_formatting: Форматиране на текÑта
   setting_wiki_compression: Wiki компреÑиране на иÑториÑта
   setting_feeds_limit: МакÑимален брой за емиÑии
+  setting_default_projects_public: Ðовите проекти Ñа публични по подразбиране
   setting_autofetch_changesets: Ðвтоматично обработване на ревизиите
   setting_sys_api_enabled: Разрешаване на WS за управление
   setting_commit_ref_keywords: ОтбелÑзващи ключови думи
   setting_commit_fix_keywords: Приключващи ключови думи
   setting_autologin: Ðвтоматичен вход
   setting_date_format: Формат на датата
+  setting_time_format: Формат на чаÑа
   setting_cross_project_issue_relations: Релации на задачи между проекти
+  setting_issue_list_default_columns: Показвани колони по подразбиране
+  setting_repositories_encodings: Кодови таблици
+  setting_commit_logs_encoding: Кодова таблица на ÑъобщениÑта при поверÑване
+  setting_emails_header: Emails header
+  setting_emails_footer: ПодтекÑÑ‚ за e-mail
+  setting_protocol: Протокол
+  setting_per_page_options: Опции за Ñтраниране
+  setting_user_format: ПотребителÑки формат
+  setting_activity_days_default: Брой дни показвани на таб ДейноÑÑ‚
+  setting_display_subprojects_issues: Показване на подпроектите в проектите по подразбиране
+  setting_enabled_scm: Разрешена SCM
+  setting_mail_handler_body_delimiters: ОтрÑзване на e-mail-ите Ñлед един от тези редове
+  setting_mail_handler_api_enabled: Разрешаване на WS за входÑщи e-mail-и
+  setting_mail_handler_api_key: API ключ
+  setting_sequential_project_identifiers: Генериране на поÑледователни проектни идентификатори
+  setting_gravatar_enabled: Използване на портребителÑки икони от Gravatar
+  setting_gravatar_default: Подразбиращо Ñе изображение от Gravatar
+  setting_diff_max_lines_displayed: МакÑимален брой показани diff редове
+  setting_file_max_size_displayed: МакÑимален размер на текÑтовите файлове, показвани inline
+  setting_repository_log_display_limit: МакÑимален брой на показванете ревизии в лог файла
+  setting_openid: Рарешаване на OpenID вход и региÑтрациÑ
+  setting_password_min_length: Минимална дължина на парола
+  setting_new_project_user_role_id: РолÑ, давана на потребител, Ñъздаващ проекти, който не е админиÑтратор
+  setting_default_projects_modules: Ðктивирани модули по подразбиране за нов проект
+  setting_issue_done_ratio: ИзчиÑление на процента на готови задачи Ñ
+  setting_issue_done_ratio_issue_field: Използване на поле '% ПрогреÑ'
+  setting_issue_done_ratio_issue_status: Използване на ÑÑŠÑтоÑнието на задачите
+  setting_start_of_week: Първи ден на Ñедмицата
+  setting_rest_api_enabled: Разрешаване на REST web ÑървиÑ
+  setting_cache_formatted_text: Cache formatted text
+  setting_default_notification_option: Подразбиращ Ñе начин за извеÑÑ‚Ñване
+  setting_commit_logtime_enabled: Разрешаване на отчитането на работното време
+  setting_commit_logtime_activity_id: ДейноÑÑ‚ при отчитане на работното време
+  setting_gantt_items_limit: МакÑимален брой обекти, които да Ñе показват в мрежов график
   
+  permission_add_project: Създаване на проект
+  permission_add_subprojects: Създаване на подпроекти
+  permission_edit_project: Редактиране на проект
+  permission_select_project_modules: Избор на проектни модули
+  permission_manage_members: Управление на членовете (на екип)
+  permission_manage_project_activities: Управление на дейноÑтите на проекта
+  permission_manage_versions: Управление на верÑиите
+  permission_manage_categories: Управление на категориите
+  permission_view_issues: Разглеждане на задачите
+  permission_add_issues: ДобавÑне на задачи
+  permission_edit_issues: Редактиране на задачи
+  permission_manage_issue_relations: Управление на връзките между задачите
+  permission_add_issue_notes: Добаване на бележки
+  permission_edit_issue_notes: Редактиране на бележки
+  permission_edit_own_issue_notes: Редактиране на ÑобÑтвени бележки
+  permission_move_issues: ПремеÑтване на задачи
+  permission_delete_issues: Изтриване на задачи
+  permission_manage_public_queries: Управление на публичните заÑвки
+  permission_save_queries: Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ‚Ð²Ð°Ð½Ð¸Ñ (queries)
+  permission_view_gantt: Разглеждане на мрежов график
+  permission_view_calendar: Разглеждане на календари
+  permission_view_issue_watchers: Разглеждане на ÑпиÑък Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÐµÐ»Ð¸
+  permission_add_issue_watchers: ДобавÑне на наблюдатели
+  permission_delete_issue_watchers: Изтриване на наблюдатели
+  permission_log_time: Log spent time
+  permission_view_time_entries: Разглеждане на изразходваното време
+  permission_edit_time_entries: Редактиране на time logs
+  permission_edit_own_time_entries: Редактиране на ÑобÑтвените time logs
+  permission_manage_news: Управление на новини
+  permission_comment_news: Коментиране на новини
+  permission_manage_documents: Управление на документи
+  permission_view_documents: Разглеждане на документи
+  permission_manage_files: Управление на файлове
+  permission_view_files: Разглеждане на файлове
+  permission_manage_wiki: Управление на wiki
+  permission_rename_wiki_pages: Преименуване на wiki Ñтраници
+  permission_delete_wiki_pages: Изтриване на wiki Ñтраници
+  permission_view_wiki_pages: Разглеждане на wiki
+  permission_view_wiki_edits: Разглеждане на wiki иÑториÑ
+  permission_edit_wiki_pages: Редактиране на wiki Ñтраници
+  permission_delete_wiki_pages_attachments: Изтриване на прикачени файлове към wiki Ñтраници
+  permission_protect_wiki_pages: Заключване на wiki Ñтраници
+  permission_manage_repository: Управление на хранилища
+  permission_browse_repository: Разглеждане на хранилища
+  permission_view_changesets: Разглеждане на changesets
+  permission_commit_access: ПоверÑване
+  permission_manage_boards: Управление на boards
+  permission_view_messages: Разглеждане на ÑъобщениÑ
+  permission_add_messages: Публикуване на ÑъобщениÑ
+  permission_edit_messages: Редактиране на ÑъобщениÑ
+  permission_edit_own_messages: Редактиране на ÑобÑтвени ÑъобщениÑ
+  permission_delete_messages: Изтриване на ÑъобщениÑ
+  permission_delete_own_messages: Изтриване на ÑобÑтвени ÑъобщениÑ
+  permission_export_wiki_pages: ЕкÑпорт на wiki Ñтраници
+  permission_manage_subtasks: Управление на подзадачите
+
+  project_module_issue_tracking: Тракинг
+  project_module_time_tracking: ОтделÑне на време
+  project_module_news: Ðовини
+  project_module_documents: Документи
+  project_module_files: Файлове
+  project_module_wiki: Wiki
+  project_module_repository: Хранилище
+  project_module_boards: Форуми
+  project_module_calendar: Календар
+  project_module_gantt: Мрежов график
+
   label_user: Потребител
   label_user_plural: Потребители
   label_user_new: Ðов потребител
+  label_user_anonymous: Ðнонимен
   label_project: Проект
   label_project_new: Ðов проект
   label_project_plural: Проекти
   label_x_projects:
-    zero:  0 проекти
+    zero:  0 проекта
     one:   1 проект
     other: "%{count} проекта"
   label_project_all: Ð’Ñички проекти
@@ -281,9 +448,13 @@
   label_issue_new: Ðова задача
   label_issue_plural: Задачи
   label_issue_view_all: Ð’Ñички задачи
+  label_issues_by: "Задачи по %{value}"
+  label_issue_added: Добавена задача
+  label_issue_updated: Обновена задача
   label_document: Документ
   label_document_new: Ðов документ
   label_document_plural: Документи
+  label_document_added: Добавен документ
   label_role: РолÑ
   label_role_plural: Роли
   label_role_new: Ðова ролÑ
@@ -310,11 +481,13 @@
   label_information_plural: ИнформациÑ
   label_please_login: Вход
   label_register: РегиÑтрациÑ
+  label_login_with_open_id_option: или вход чрез OpenID
   label_password_lost: Забравена парола
   label_home: Ðачало
   label_my_page: Лична Ñтраница
   label_my_account: Профил
   label_my_projects: Проекти, в които учаÑтвам
+  label_my_page_block: Блокове в личната Ñтраница
   label_administration: ÐдминиÑтрациÑ
   label_login: Вход
   label_logout: Изход
@@ -324,6 +497,8 @@
   label_last_login: ПоÑледно Ñвързване
   label_registered_on: РегиÑтрациÑ
   label_activity: ДейноÑÑ‚
+  label_overall_activity: ЦÑлоÑтна дейноÑÑ‚
+  label_user_activity: "ÐктивноÑÑ‚ на %{value}"
   label_new: Ðов
   label_logged_as: Здравейте,
   label_environment: Среда
@@ -332,10 +507,13 @@
   label_auth_source_new: Ðов начин на оторизациÑ
   label_auth_source_plural: Ðачини на оторизациÑ
   label_subproject_plural: Подпроекти
+  label_subproject_new: Ðов подпроект
+  label_and_its_subprojects: "%{value} и неговите подпроекти"
   label_min_max_length: Минимална - макÑимална дължина
   label_list: СпиÑък
   label_date: Дата
   label_integer: ЦелочиÑлен
+  label_float: Дробно
   label_boolean: ЧекбокÑ
   label_string: ТекÑÑ‚
   label_text: Дълъг текÑÑ‚
@@ -350,6 +528,7 @@
   label_attachment_new: Ðов файл
   label_attachment_delete: Изтриване
   label_attachment_plural: Файлове
+  label_file_added: Добавен файл
   label_report: Справка
   label_report_plural: Справки
   label_news: Ðовини
@@ -357,11 +536,13 @@
   label_news_plural: Ðовини
   label_news_latest: ПоÑледни новини
   label_news_view_all: Виж вÑички
+  label_news_added: Добавена новина
   label_settings: ÐаÑтройки
   label_overview: Общ изглед
   label_version: ВерÑиÑ
   label_version_new: Ðова верÑиÑ
   label_version_plural: ВерÑии
+  label_close_versions: ЗатварÑне на завършените верÑии
   label_confirmation: Одобрение
   label_export_to: ЕкÑпорт към
   label_read: Read...
@@ -388,6 +569,7 @@
   label_new_statuses_allowed: Позволени ÑÑŠÑтоÑниÑ
   label_all: вÑички
   label_none: никакви
+  label_nobody: никой
   label_next: Следващ
   label_previous: Предишен
   label_used_by: Използва Ñе от
@@ -413,15 +595,26 @@
   label_query: ПотребителÑка Ñправка
   label_query_plural: ПотребителÑки Ñправки
   label_query_new: Ðова заÑвка
+  label_my_queries: Моите заÑвки
   label_filter_add: Добави филтър
   label_filter_plural: Филтри
   label_equals: е
   label_not_equals: не е
   label_in_less_than: Ñлед по-малко от
   label_in_more_than: Ñлед повече от
+  label_greater_or_equal: ">="
+  label_less_or_equal: <=
   label_in: в Ñледващите
   label_today: днеÑ
+  label_all_time: вÑички
+  label_yesterday: вчера
   label_this_week: тази Ñедмица
+  label_last_week: поÑледната Ñедмица
+  label_last_n_days: "поÑледните %{count} дни"
+  label_this_month: Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ð¼ÐµÑец
+  label_last_month: поÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð¼ÐµÑец
+  label_this_year: текущата година
+  label_date_range: Период
   label_less_than_ago: преди по-малко от
   label_more_than_ago: преди повече от
   label_ago: преди
@@ -429,17 +622,25 @@
   label_not_contains: не Ñъдържа
   label_day_plural: дни
   label_repository: Хранилище
+  label_repository_plural: Хранилища
   label_browse: Разглеждане
   label_modification: "%{count} промÑна"
   label_modification_plural: "%{count} промени"
+  label_branch: работен вариант
+  label_tag: ВерÑиÑ
   label_revision: РевизиÑ
   label_revision_plural: Ревизии
+  label_revision_id: Ð ÐµÐ²Ð¸Ð·Ð¸Ñ %{value}
+  label_associated_revisions: ÐÑоциирани ревизии
   label_added: добавено
   label_modified: променено
+  label_copied: копирано
+  label_renamed: преименувано
   label_deleted: изтрито
   label_latest_revision: ПоÑледна ревизиÑ
   label_latest_revision_plural: ПоÑледни ревизии
   label_view_revisions: Виж ревизиите
+  label_view_all_revisions: Разглеждане на вÑички ревизии
   label_max_size: МакÑимална големина
   label_sort_highest: ПремеÑти най-горе
   label_sort_higher: ПремеÑти по-горе
@@ -465,6 +666,7 @@
   label_changes_details: Подробни промени
   label_issue_tracking: Тракинг
   label_spent_time: Отделено време
+  label_overall_spent_time: Общо употребено време
   label_f_hour: "%{value} чаÑ"
   label_f_hour_plural: "%{value} чаÑа"
   label_time_tracking: ОтделÑне на време
@@ -486,6 +688,7 @@
   label_relation_delete: Изтриване на релациÑ
   label_relates_to: Ñвързана ÑÑŠÑ
   label_duplicates: дублира
+  label_duplicated_by: дублирана от
   label_blocks: блокира
   label_blocked_by: блокирана от
   label_precedes: предшеÑтва
@@ -501,10 +704,13 @@
   label_board: Форум
   label_board_new: Ðов форум
   label_board_plural: Форуми
+  label_board_locked: Заключена
+  label_board_sticky: Sticky
   label_topic_plural: Теми
   label_message_plural: СъобщениÑ
   label_message_last: ПоÑледно Ñъобщение
   label_message_new: Ðова тема
+  label_message_posted: Добавено Ñъобщение
   label_reply_plural: Отговори
   label_send_information: Изпращане на информациÑта до потребителÑ
   label_year: Година
@@ -515,12 +721,81 @@
   label_language_based: Ð’ завиÑимоÑÑ‚ от езика
   label_sort_by: "Сортиране по %{value}"
   label_send_test_email: Изпращане на теÑтов e-mail
+  label_feeds_access_key: RSS access ключ
+  label_missing_feeds_access_key: ЛипÑващ RSS ключ за доÑтъп
   label_feeds_access_key_created_on: "%{value} от Ñъздаването на RSS ключа"
   label_module_plural: Модули
   label_added_time_by: "Публикувана от %{author} преди %{age}"
+  label_updated_time_by: "Обновена от %{author} преди %{age}"
   label_updated_time: "Обновена преди %{value}"
   label_jump_to_a_project: Проект...
-  
+  label_file_plural: Файлове
+  label_changeset_plural: Ревизии
+  label_default_columns: По подразбиране
+  label_no_change_option: (Без промÑна)
+  label_bulk_edit_selected_issues: Редактиране на задачи
+  label_theme: Тема
+  label_default: По подразбиране
+  label_search_titles_only: Само в заглавиÑта
+  label_user_mail_option_all: "За вÑÑко Ñъбитие в проектите, в които учаÑтвам"
+  label_user_mail_option_selected: "За вÑички ÑÑŠÐ±Ð¸Ñ‚Ð¸Ñ Ñамо в избраните проекти..."
+  label_user_mail_option_none: "Само за наблюдавани или в които учаÑтвам (автор или назначени на мен)"
+  label_user_mail_option_only_my_events: Само за неща, в които Ñъм включен/а
+  label_user_mail_option_only_assigned: Само за неща, назначени на мен
+  label_user_mail_option_only_owner: Само за неща, на които аз Ñъм ÑобÑтвеник
+  label_user_mail_no_self_notified: "Ðе иÑкам извеÑÑ‚Ð¸Ñ Ð·Ð° извършени от мен промени"
+  label_registration_activation_by_email: активиране на профила по email
+  label_registration_manual_activation: ръчно активиране
+  label_registration_automatic_activation: автоматично активиране
+  label_display_per_page: "Ðа Ñтраница по: %{value}"
+  label_age: ВъзраÑÑ‚
+  label_change_properties: ПромÑна на наÑтройки
+  label_general: ОÑновни
+  label_more: Още
+  label_scm: SCM (СиÑтема за контрол на верÑиите)
+  label_plugins: Плъгини
+  label_ldap_authentication: LDAP оторизациÑ
+  label_downloads_abbr: D/L
+  label_optional_description: Ðезадължително опиÑание
+  label_add_another_file: ДобавÑне на друг файл
+  label_preferences: ПредпочитаниÑ
+  label_chronological_order: Хронологичен ред
+  label_reverse_chronological_order: Обратен хронологичен ред
+  label_planning: Планиране
+  label_incoming_emails: ВходÑщи e-mail-и
+  label_generate_key: Генериране на ключ
+  label_issue_watchers: Ðаблюдатели
+  label_example: Пример
+  label_display: Display
+  label_sort: Сортиране
+  label_ascending: ÐараÑтващ
+  label_descending: ÐамалÑващ
+  label_date_from_to: От %{start} до %{end}
+  label_wiki_content_added: Wiki Ñтраница беше добавена
+  label_wiki_content_updated: Wiki Ñтраница беше обновена
+  label_group: Група
+  label_group_plural: Групи
+  label_group_new: Ðова група
+  label_time_entry_plural: Използвано време
+  label_version_sharing_none: Ðе Ñподелен
+  label_version_sharing_descendants: С подпроекти
+  label_version_sharing_hierarchy: С проектна йерархиÑ
+  label_version_sharing_tree: С дърво на проектите
+  label_version_sharing_system: С вÑички проекти
+  label_update_issue_done_ratios: ОбновÑване на процента на завършените задачи
+  label_copy_source: Източник
+  label_copy_target: Цел
+  label_copy_same_as_target: Също като целта
+  label_display_used_statuses_only: Показване Ñамо на ÑÑŠÑтоÑниÑта, използвани от този тракер
+  label_api_access_key: API ключ за доÑтъп
+  label_missing_api_access_key: ЛипÑващ API ключ
+  label_api_access_key_created_on: API ключ за доÑтъп е Ñъздаден преди %{value}
+  label_profile: Профил
+  label_subtask_plural: Подзадачи
+  label_project_copy_notifications: Изпращане на Send e-mail извеÑÑ‚Ð¸Ñ Ð¿Ð¾ време на копирането на проекта
+  label_principal_search: "ТърÑене на потребител или група:"
+  label_user_search: "ТърÑене на потребител:"
+
   button_login: Вход
   button_submit: Прикачване
   button_save: ЗапиÑ
@@ -528,8 +803,10 @@
   button_uncheck_all: ИзчиÑтване на вÑички
   button_delete: Изтриване
   button_create: Създаване
+  button_create_and_continue: Създаване и продължаване
   button_test: ТеÑÑ‚
   button_edit: РедакциÑ
+  button_edit_associated_wikipage: "Редактиране на аÑоциираната Wiki Ñтраница: %{page_title}"
   button_add: ДобавÑне
   button_change: ПромÑна
   button_apply: Приложи
@@ -540,6 +817,7 @@
   button_list: СпиÑък
   button_view: Преглед
   button_move: ПремеÑтване
+  button_move_and_follow: ПремеÑтване и продължаване
   button_back: Ðазад
   button_cancel: Отказ
   button_activate: ÐктивациÑ
@@ -553,26 +831,49 @@
   button_unarchive: Разархивиране
   button_reset: Генериране наново
   button_rename: Преименуване
+  button_change_password: ПромÑна на парола
+  button_copy: Копиране
+  button_copy_and_follow: Копиране и продължаване
+  button_annotate: ÐнотациÑ
+  button_update: ОбновÑване
+  button_configure: Конфигуриране
+  button_quote: Цитат
+  button_duplicate: Дублиране
+  button_show: Показване
   
   status_active: активен
   status_registered: региÑтриран
   status_locked: заключен
   
+  version_status_open: отворена
+  version_status_locked: заключена
+  version_status_closed: затворена
+
+  field_active: Ðктивен
+
   text_select_mail_notifications: Изберете ÑÑŠÐ±Ð¸Ñ‚Ð¸Ñ Ð·Ð° изпращане на e-mail.
   text_regexp_info: пр. ^[A-Z0-9]+$
   text_min_max_length_info: 0 - без ограничениÑ
   text_project_destroy_confirmation: Сигурни ли Ñте, че иÑкате да изтриете проекта и данните в него?
+  text_subprojects_destroy_warning: "Ðеговите подпроекти: %{value} Ñъщо ще бъдат изтрити."
   text_workflow_edit: Изберете Ñ€Ð¾Ð»Ñ Ð¸ тракер за да редактирате Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑ
   text_are_you_sure: Сигурни ли Ñте?
-  text_tip_task_begin_day: задача започваща този ден
-  text_tip_task_end_day: задача завършваща този ден
-  text_tip_task_begin_end_day: задача започваща и завършваща този ден
+  text_are_you_sure_with_children: Изтриване на задачата и нейните подзадачи?
+  text_journal_changed: "%{label} променен от %{old} на %{new}"
+  text_journal_set_to: "%{label} уÑтановен на %{value}"
+  text_journal_deleted: "%{label} изтрит (%{old})"
+  text_journal_added: "Добавено %{label} %{value}"
+  text_tip_issue_begin_day: задача, започваща този ден
+  text_tip_issue_end_day: задача, завършваща този ден
+  text_tip_issue_begin_end_day: задача, започваща и завършваща този ден
   text_project_identifier_info: 'Позволени Ñа малки букви (a-z), цифри и тирета.<br />Ðевъзможна промÑна Ñлед запиÑ.'
   text_caracters_maximum: "До %{count} Ñимвола."
+  text_caracters_minimum: "Минимум %{count} Ñимвола."
   text_length_between: "От %{min} до %{max} Ñимвола."
   text_tracker_no_workflow: ÐÑма дефиниран работен Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð° този тракер
   text_unallowed_characters: Ðепозволени Ñимволи
   text_comma_separated: Позволено е изброÑване (Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¸Ñ‚ÐµÐ» запетаÑ).
+  text_line_separated: Позволени Ñа много ÑтойноÑти (по едно на ред).
   text_issues_ref_in_commit_messages: ОтбелÑзване и приключване на задачи от ревизии
   text_issue_added: "Публикувана е нова задача Ñ Ð½Ð¾Ð¼ÐµÑ€ %{id} (от %{author})."
   text_issue_updated: "Задача %{id} е обновена (от %{author})."
@@ -580,7 +881,37 @@
   text_issue_category_destroy_question: "Има задачи (%{count}) обвързани Ñ Ñ‚Ð°Ð·Ð¸ категориÑ. Какво ще изберете?"
   text_issue_category_destroy_assignments: Премахване на връзките Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñта
   text_issue_category_reassign_to: Преобвързване Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ
-  
+  text_user_mail_option: "За неизбраните проекти, ще получавате извеÑÑ‚Ð¸Ñ Ñамо за наблюдавани дейноÑти или в които учаÑтвате (Ñ‚.е. автор или назначени на мен)."
+  text_no_configuration_data: "Ð’Ñе още не Ñа конфигурирани Роли, тракери, ÑÑŠÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи и работен процеÑ.\nСтрого Ñе препоръчва зареждането на примерната информациÑ. Веднъж заредена ще имате възможноÑÑ‚ да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ."
+  text_load_default_configuration: Зареждане на примерна информациÑ
+  text_status_changed_by_changeset: "Приложено Ñ Ñ€ÐµÐ²Ð¸Ð·Ð¸Ñ %{value}."
+  text_time_logged_by_changeset: Приложено в Ñ€ÐµÐ²Ð¸Ð·Ð¸Ñ %{value}.
+  text_issues_destroy_confirmation: 'Сигурни ли Ñте, че иÑкате да изтриете избраните задачи?'
+  text_select_project_modules: 'Изберете активните модули за този проект:'
+  text_default_administrator_account_changed: Сменен Ñ„Ð°Ð±Ñ€Ð¸Ñ‡Ð½Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑтраторÑки профил
+  text_file_repository_writable: ВъзможноÑÑ‚ за пиÑане в хранилището Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ðµ
+  text_plugin_assets_writable: Папката на приÑтавките е разрешена за запиÑ
+  text_rmagick_available: Ðаличен RMagick (по избор)
+  text_destroy_time_entries_question: "%{hours} чаÑа Ñа отделени на задачите, които иÑкате да изтриете. Какво избирате?"
+  text_destroy_time_entries: Изтриване на отделеното време
+  text_assign_time_entries_to_project: ПрехвърлÑне на отделеното време към проект
+  text_reassign_time_entries: 'ПрехвърлÑне на отделеното време към задача:'
+  text_user_wrote: "%{value} напиÑа:"
+  text_enumeration_destroy_question: "%{count} обекта Ñа Ñвързани Ñ Ñ‚Ð°Ð·Ð¸ ÑтойноÑÑ‚."
+  text_enumeration_category_reassign_to: 'ПреÑвържете ги към тази ÑтойноÑÑ‚:'
+  text_email_delivery_not_configured: "Изпращането на e-mail-и не е конфигурирано и извеÑтиÑта не Ñа разрешени.\nКонфигурирайте Ð²Ð°ÑˆÐ¸Ñ SMTP Ñървър в config/configuration.yml и реÑтартирайте Redmine, за да ги разрешите."
+  text_repository_usernames_mapping: "Изберете или променете потребителите в Redmine, ÑъответÑтващи на потребителите в дневника на хранилището (repository).\nПотребителите Ñ ÐµÐ´Ð½Ð°ÐºÐ²Ð¸ имена в Redmine и хранилищата Ñе ÑъвмеÑÑ‚Ñват автоматично."
+  text_diff_truncated: '... Този diff не е пълен, понеже е Ð½Ð°Ð´Ñ…Ð²ÑŠÑ€Ð»Ñ Ð¼Ð°ÐºÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€, който може да бъде показан.'
+  text_custom_field_possible_values_info: 'Една ÑтойноÑÑ‚ на ред'
+  text_wiki_page_destroy_question: Тази Ñтраница има %{descendants} Ñтраници деца и descendant(s). Какво желаете да правите?
+  text_wiki_page_nullify_children: Запазване на тези Ñтраници като коренни Ñтраници
+  text_wiki_page_destroy_children: Изтриване на Ñтраниците деца и вÑички техни descendants
+  text_wiki_page_reassign_children: Преназначаване на Ñтраниците деца на тази родителÑка Ñтраница
+  text_own_membership_delete_confirmation: "Вие Ñте на път да премахнете нÑкои или вÑички ваши Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ е възможно Ñлед това да не можете да редактирате този проект.\nСигурен ли Ñте, че иÑкате да продължите?"
+  text_zoom_in: Увеличаване
+  text_zoom_out: ÐамалÑване
+  text_warn_on_leaving_unsaved: Страницата Ñъдържа незапиÑано Ñъдържание, което може да бъде загубено, ако Ñ Ð½Ð°Ð¿ÑƒÑнете.
+
   default_role_manager: Мениджър
   default_role_developer: Разработчик
   default_role_reporter: Публикуващ
@@ -602,333 +933,10 @@
   default_priority_immediate: Веднага
   default_activity_design: Дизайн
   default_activity_development: Разработка
-  
+
   enumeration_issue_priorities: Приоритети на задачи
   enumeration_doc_categories: Категории документи
   enumeration_activities: ДейноÑти (time tracking)
-  label_file_plural: Файлове
-  label_changeset_plural: Ревизии
-  field_column_names: Колони
-  label_default_columns: По подразбиране
-  setting_issue_list_default_columns: Показвани колони по подразбиране
-  setting_repositories_encodings: Кодови таблици
-  notice_no_issue_selected: "ÐÑма избрани задачи."
-  label_bulk_edit_selected_issues: Редактиране на задачи
-  label_no_change_option: (Без промÑна)
-  notice_failed_to_save_issues: "ÐеуÑпешен Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° %{count} задачи от %{total} избрани: %{ids}."
-  label_theme: Тема
-  label_default: По подразбиране
-  label_search_titles_only: Само в заглавиÑта
-  label_nobody: никой
-  button_change_password: ПромÑна на парола
-  text_user_mail_option: "За неизбраните проекти, ще получавате извеÑÑ‚Ð¸Ñ Ñамо за наблюдавани дейноÑти или в които учаÑтвате (Ñ‚.е. автор или назначени на мен)."
-  label_user_mail_option_selected: "За вÑички ÑÑŠÐ±Ð¸Ñ‚Ð¸Ñ Ñамо в избраните проекти..."
-  label_user_mail_option_all: "За вÑÑко Ñъбитие в проектите, в които учаÑтвам"
-  label_user_mail_option_none: "Само за наблюдавани или в които учаÑтвам (автор или назначени на мен)"
-  setting_emails_footer: ПодтекÑÑ‚ за e-mail
-  label_float: Дробно
-  button_copy: Копиране
-  mail_body_account_information_external: "Можете да използвате Ð²Ð°ÑˆÐ¸Ñ %{value} профил за вход."
-  mail_body_account_information: ИнформациÑта за профила ви
-  setting_protocol: Протокол
-  label_user_mail_no_self_notified: "Ðе иÑкам извеÑÑ‚Ð¸Ñ Ð·Ð° извършени от мен промени"
-  setting_time_format: Формат на чаÑа
-  label_registration_activation_by_email: активиране на профила по email
-  mail_subject_account_activation_request: "ЗаÑвка за активиране на профил в %{value}"
-  mail_body_account_activation_request: "Има новорегиÑтриран потребител (%{value}), очакващ вашето одобрение:"
-  label_registration_automatic_activation: автоматично активиране
-  label_registration_manual_activation: ръчно активиране
-  notice_account_pending: "Профилът Ви е Ñъздаден и очаква одобрение от админиÑтратор."
-  field_time_zone: ЧаÑова зона
-  text_caracters_minimum: "Минимум %{count} Ñимвола."
-  setting_bcc_recipients: Получатели на Ñкрито копие (bcc)
-  button_annotate: ÐнотациÑ
-  label_issues_by: "Задачи по %{value}"
-  field_searchable: С възможноÑÑ‚ за търÑене
-  label_display_per_page: "Ðа Ñтраница по: %{value}"
-  setting_per_page_options: Опции за Ñтраниране
-  label_age: ВъзраÑÑ‚
-  notice_default_data_loaded: Примерната информациÑта е уÑпешно заредена.
-  text_load_default_configuration: Зареждане на примерна информациÑ
-  text_no_configuration_data: "Ð’Ñе още не Ñа конфигурирани Роли, тракери, ÑÑŠÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи и работен процеÑ.\nСтрого Ñе препоръчва зареждането на примерната информациÑ. Веднъж заредена ще имате възможноÑÑ‚ да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ."
-  error_can_t_load_default_data: "Грешка при зареждане на примерната информациÑ: %{value}"
-  button_update: ОбновÑване
-  label_change_properties: ПромÑна на наÑтройки
-  label_general: ОÑновни
-  label_repository_plural: Хранилища
-  label_associated_revisions: ÐÑоциирани ревизии
-  setting_user_format: ПотребителÑки формат
-  text_status_changed_by_changeset: "Приложено Ñ Ñ€ÐµÐ²Ð¸Ð·Ð¸Ñ %{value}."
-  label_more: Още
-  text_issues_destroy_confirmation: 'Сигурни ли Ñте, че иÑкате да изтриете избраните задачи?'
-  label_scm: SCM (СиÑтема за контрол на кода)
-  text_select_project_modules: 'Изберете активните модули за този проект:'
-  label_issue_added: Добавена задача
-  label_issue_updated: Обновена задача
-  label_document_added: Добавен документ
-  label_message_posted: Добавено Ñъобщение
-  label_file_added: Добавен файл
-  label_news_added: Добавена новина
-  project_module_boards: Форуми
-  project_module_issue_tracking: Тракинг
-  project_module_wiki: Wiki
-  project_module_files: Файлове
-  project_module_documents: Документи
-  project_module_repository: Хранилище
-  project_module_news: Ðовини
-  project_module_time_tracking: ОтделÑне на време
-  text_file_repository_writable: ВъзможноÑÑ‚ за пиÑане в хранилището Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ðµ
-  text_default_administrator_account_changed: Сменен Ñ„Ð°Ð±Ñ€Ð¸Ñ‡Ð½Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑтраторÑки профил
-  text_rmagick_available: Ðаличен RMagick (по избор)
-  button_configure: Конфигуриране
-  label_plugins: Плъгини
-  label_ldap_authentication: LDAP оторизациÑ
-  label_downloads_abbr: D/L
-  label_this_month: Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ð¼ÐµÑец
-  label_last_n_days: "поÑледните %{count} дни"
-  label_all_time: вÑички
-  label_this_year: текущата година
-  label_date_range: Период
-  label_last_week: поÑледната Ñедмица
-  label_yesterday: вчера
-  label_last_month: поÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð¼ÐµÑец
-  label_add_another_file: ДобавÑне на друг файл
-  label_optional_description: Ðезадължително опиÑание
-  text_destroy_time_entries_question: "%{hours} чаÑа Ñа отделени на задачите, които иÑкате да изтриете. Какво избирате?"
-  error_issue_not_found_in_project: 'Задачата не е намерена или не принадлежи на този проект'
-  text_assign_time_entries_to_project: ПрехвърлÑне на отделеното време към проект
-  text_destroy_time_entries: Изтриване на отделеното време
-  text_reassign_time_entries: 'ПрехвърлÑне на отделеното време към задача:'
-  setting_activity_days_default: Брой дни показвани на таб ДейноÑÑ‚
-  label_chronological_order: Хронологичен ред
-  field_comments_sorting: Сортиране на коментарите
-  label_reverse_chronological_order: Обратен хронологичен ред
-  label_preferences: ПредпочитаниÑ
-  setting_display_subprojects_issues: Показване на подпроектите в проектите по подразбиране
-  label_overall_activity: ЦÑлоÑтна дейноÑÑ‚
-  setting_default_projects_public: Ðовите проекти Ñа публични по подразбиране
-  error_scm_annotate: "Обектът не ÑъщеÑтвува или не може да бъде анотиран."
-  label_planning: Планиране
-  text_subprojects_destroy_warning: "Ðеговите подпроекти: %{value} Ñъщо ще бъдат изтрити."
-  label_and_its_subprojects: "%{value} и неговите подпроекти"
-  mail_body_reminder: "%{count} задачи, назначени на Ð²Ð°Ñ Ñа Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок в Ñледващите %{days} дни:"
-  mail_subject_reminder: "%{count} задачи Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок Ñ Ñледващите %{days} дни"
-  text_user_wrote: "%{value} напиÑа:"
-  label_duplicated_by: дублирана от
-  setting_enabled_scm: Разрешена SCM
-  text_enumeration_category_reassign_to: 'ПреÑвържете ги към тази ÑтойноÑÑ‚:'
-  text_enumeration_destroy_question: "%{count} обекта Ñа Ñвързани Ñ Ñ‚Ð°Ð·Ð¸ ÑтойноÑÑ‚."
-  label_incoming_emails: ВходÑщи e-mail-и
-  label_generate_key: Генериране на ключ
-  setting_mail_handler_api_enabled: Разрешаване на WS за входÑщи e-mail-и
-  setting_mail_handler_api_key: API ключ
-  text_email_delivery_not_configured: "Изпращането на e-mail-и не е конфигурирано и извеÑтиÑта не Ñа разрешени.\nКонфигурирайте Ð²Ð°ÑˆÐ¸Ñ SMTP Ñървър в config/email.yml и реÑтартирайте Redmine, за да ги разрешите."
-  field_parent_title: РодителÑка Ñтраница
-  label_issue_watchers: Ðаблюдатели
-  setting_commit_logs_encoding: Кодова таблица на ÑъобщениÑта при поверÑване
-  button_quote: Цитат
-  setting_sequential_project_identifiers: Генериране на поÑледователни проектни идентификатори
-  notice_unable_delete_version: ÐевъзможноÑÑ‚ за изтриване на верÑиÑ
-  label_renamed: преименувано
-  label_copied: копирано
-  setting_plain_text_mail: Ñамо чиÑÑ‚ текÑÑ‚ (без HTML)
-  permission_view_files: Разглеждане на файлове
-  permission_edit_issues: Редактиране на задачи
-  permission_edit_own_time_entries: Редактиране на ÑобÑтвените time logs
-  permission_manage_public_queries: Управление на публичните заÑвки
-  permission_add_issues: ДобавÑне на задачи
-  permission_log_time: Log spent time
-  permission_view_changesets: Разглеждане на changesets
-  permission_view_time_entries: Разглеждане на изразходваното време
-  permission_manage_versions: Управление на верÑиите
-  permission_manage_wiki: Управление на wiki
-  permission_manage_categories: Управление на категориите задачи
-  permission_protect_wiki_pages: Заключване на wiki Ñтраници
-  permission_comment_news: Коментиране на новини
-  permission_delete_messages: Изтриване на ÑъобщениÑ
-  permission_select_project_modules: Избор на проектни модули
-  permission_manage_documents: Управление на документи
-  permission_edit_wiki_pages: Редактиране на wiki Ñтраници
-  permission_add_issue_watchers: ДобавÑне на наблюдатели
-  permission_view_gantt: Разглеждане на мрежов график
-  permission_move_issues: ПремеÑтване на задачи
-  permission_manage_issue_relations: Управление на връзките между задачите
-  permission_delete_wiki_pages: Изтриване на wiki Ñтраници
-  permission_manage_boards: Управление на boards
-  permission_delete_wiki_pages_attachments: Изтриване на прикачени файлове
-  permission_view_wiki_edits: Разглеждане на wiki иÑториÑ
-  permission_add_messages: Публикуване на ÑъобщениÑ
-  permission_view_messages: Разглеждане на ÑъобщениÑ
-  permission_manage_files: Управление на файлове
-  permission_edit_issue_notes: Редактиране на бележки
-  permission_manage_news: Управление на новини
-  permission_view_calendar: Разглеждане на календари
-  permission_manage_members: Управление на членовете (на екип)
-  permission_edit_messages: Редактиране на ÑъобщениÑ
-  permission_delete_issues: Изтриване на задачи
-  permission_view_issue_watchers: Разглеждане на ÑпиÑък Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÐµÐ»Ð¸
-  permission_manage_repository: Управление на хранилища
-  permission_commit_access: ПоверÑване
-  permission_browse_repository: Разглеждане на хранилища
-  permission_view_documents: Разглеждане на документи
-  permission_edit_project: Редактиране на проект
-  permission_add_issue_notes: Добаване на бележки
-  permission_save_queries: Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ‚Ð²Ð°Ð½Ð¸Ñ (queries)
-  permission_view_wiki_pages: Разглеждане на wiki
-  permission_rename_wiki_pages: Преименуване на wiki Ñтраници
-  permission_edit_time_entries: Редактиране на time logs
-  permission_edit_own_issue_notes: Редактиране на ÑобÑтвени бележки
-  setting_gravatar_enabled: Използване на портребителÑки икони от Gravatar
-  label_example: Пример
-  text_repository_usernames_mapping: "Select ou update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
-  permission_edit_own_messages: Редактиране на ÑобÑтвени ÑъобщениÑ
-  permission_delete_own_messages: Изтриване на ÑобÑтвени ÑъобщениÑ
-  label_user_activity: "ÐктивноÑÑ‚ на %{value}"
-  label_updated_time_by: "Обновена от %{author} преди %{age}"
-  text_diff_truncated: '... Този diff не е пълен, понеже е Ð½Ð°Ð´Ñ…Ð²ÑŠÑ€Ð»Ñ Ð¼Ð°ÐºÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€, който може да бъде показан.'
-  setting_diff_max_lines_displayed: МакÑимален брой показани diff редове
-  text_plugin_assets_writable: Папката на приÑтавките е разрешена за запиÑ
-  warning_attachments_not_saved: "%{count} файла не бÑха запиÑани."
-  button_create_and_continue: Създаване и продължаване
-  text_custom_field_possible_values_info: 'Една ÑтойноÑÑ‚ на ред'
-  label_display: Display
-  field_editable: Editable
-  setting_repository_log_display_limit: МакÑимален брой на показванете ревизии в лог файла
-  setting_file_max_size_displayed: МакÑимален размер на текÑтовите файлове, показвани inline
-  field_watcher: Ðаблюдател
-  setting_openid: Рарешаване на OpenID вход и региÑтрациÑ
-  field_identity_url: OpenID URL
-  label_login_with_open_id_option: или вход чрез OpenID
-  field_content: Съдържание
-  label_descending: ÐамалÑващ
-  label_sort: Сортиране
-  label_ascending: ÐараÑтващ
-  label_date_from_to: От %{start} до %{end}
-  label_greater_or_equal: ">="
-  label_less_or_equal: <=
-  text_wiki_page_destroy_question: Тази Ñтраница има %{descendants} Ñтраници деца и descendant(s). Какво желаете да правите?
-  text_wiki_page_reassign_children: Преназначаване на Ñтраниците деца на тази родителÑка Ñтраница
-  text_wiki_page_nullify_children: Запазване на тези Ñтраници като коренни Ñтраници
-  text_wiki_page_destroy_children: Изтриване на Ñтраниците деца и вÑички техни descendants
-  setting_password_min_length: Минимална дължина на парола
-  field_group_by: Групиране на резултатите по
-  mail_subject_wiki_content_updated: "Wiki Ñтраницата '%{id}' не беше обновена"
-  label_wiki_content_added: Wiki Ñтраница беше добавена
-  mail_subject_wiki_content_added: "Wiki Ñтраницата '%{id}' беше добавена"
-  mail_body_wiki_content_added: Wiki Ñтраницата '%{id}' беше добавена от %{author}.
-  label_wiki_content_updated: Wiki Ñтраница беше обновена
-  mail_body_wiki_content_updated: Wiki Ñтраницата '%{id}' беше обновена от %{author}.
-  permission_add_project: Създаване на проект
-  setting_new_project_user_role_id: РолÑ, давана на потребител, Ñъздаващ проекти, който не е админиÑтратор
-  label_view_all_revisions: Разглеждане на вÑички ревизии
-  label_tag: ВерÑиÑ
-  label_branch: работен вариант
-  error_no_tracker_in_project: ÐÑма аÑоциирани тракери Ñ Ñ‚Ð¾Ð·Ð¸ проект. Проверете наÑтройките на проекта.
-  error_no_default_issue_status: ÐÑма уÑтановено подразбиращо Ñе ÑÑŠÑтоÑние за задачите. ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐµÑ‚Ðµ вашата ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ (Вижте "ÐдминиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ -> СъÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи").
-  text_journal_changed: "%{label} променен от %{old} на %{new}"
-  text_journal_set_to: "%{label} уÑтановен на %{value}"
-  text_journal_deleted: "%{label} изтрит (%{old})"
-  label_group_plural: Групи
-  label_group: Група
-  label_group_new: Ðова група
-  label_time_entry_plural: Използвано време
-  text_journal_added: "Добавено %{label} %{value}"
-  field_active: Ðктивен
   enumeration_system_activity: СиÑтемна активноÑÑ‚
-  permission_delete_issue_watchers: Изтриване на наблюдатели
-  version_status_closed: затворена
-  version_status_locked: заключена
-  version_status_open: отворена
-  error_can_not_reopen_issue_on_closed_version: Задача, аÑоциирана ÑÑŠÑ Ð·Ð°Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð° верÑÐ¸Ñ Ð½Ðµ може да бъде отворена отново
-  label_user_anonymous: Ðнонимен
-  button_move_and_follow: ПремеÑтване и продължаване
-  setting_default_projects_modules: Ðктивирани модули по подразбиране за нов проект
-  setting_gravatar_default: Подразбиращо Ñе изображение от Gravatar
-  field_sharing: Sharing
-  label_version_sharing_hierarchy: С проектна йерархиÑ
-  label_version_sharing_system: С вÑички проекти
-  label_version_sharing_descendants: С подпроекти
-  label_version_sharing_tree: С дърво на проектите
-  label_version_sharing_none: Ðе Ñподелен
-  error_can_not_archive_project: Този проект не може да бъде архивиран
-  button_duplicate: Дублиране
-  button_copy_and_follow: Копиране и продължаване
-  label_copy_source: Източник
-  setting_issue_done_ratio: ИзчиÑление на процента на готови задачи Ñ
-  setting_issue_done_ratio_issue_status: Използване на ÑÑŠÑтоÑнието на задачите
-  error_issue_done_ratios_not_updated: Процентът на завършените задачи не е обновен.
-  error_workflow_copy_target: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ тракер(и) и Ñ€Ð¾Ð»Ñ (роли).
-  setting_issue_done_ratio_issue_field: Използване на поле '% ПрогреÑ'
-  label_copy_same_as_target: Също като целта
-  label_copy_target: Цел
-  notice_issue_done_ratios_updated: Обновен процент на завършените задачи.
-  error_workflow_copy_source: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ source тракер или ролÑ
-  label_update_issue_done_ratios: ОбновÑване на процента на завършените задачи
-  setting_start_of_week: Първи ден на Ñедмицата
-  permission_view_issues: Разглеждане на задачите
-  label_display_used_statuses_only: Показване Ñамо на ÑÑŠÑтоÑниÑта, използвани от този тракер
-  label_revision_id: Ð ÐµÐ²Ð¸Ð·Ð¸Ñ %{value}
-  label_api_access_key: API ключ за доÑтъп
-  label_api_access_key_created_on: API ключ за доÑтъп е Ñъздаден преди %{value}
-  label_feeds_access_key: RSS access ключ
-  notice_api_access_key_reseted: ВашиÑÑ‚ API ключ за доÑтъп беше изчиÑтен.
-  setting_rest_api_enabled: Разрешаване на REST web ÑървиÑ
-  label_missing_api_access_key: ЛипÑващ API ключ
-  label_missing_feeds_access_key: ЛипÑващ RSS ключ за доÑтъп
-  button_show: Показване
-  text_line_separated: Позволени Ñа много ÑтойноÑти (по едно на ред).
-  setting_mail_handler_body_delimiters: ОтрÑзване на e-mail-ите Ñлед един от тези редове
-  permission_add_subprojects: Създаване на подпроекти
-  label_subproject_new: Ðов подпроект
-  text_own_membership_delete_confirmation: |-
-    Вие Ñте на път да премахнете нÑкои или вÑички ваши Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ е възможно Ñлед това на да не можете да редатирате този проект.
-    Сигурен ли Ñте, че иÑкате да продължите?
-  label_close_versions: ЗатварÑне на завършените верÑии
-  label_board_sticky: Sticky
-  label_board_locked: Заключена
-  permission_export_wiki_pages: ЕкÑпорт на wiki Ñтраници
-  setting_cache_formatted_text: Cache formatted text
-  permission_manage_project_activities: Управление на дейноÑтите на проекта
-  error_unable_delete_issue_status: ÐевъзможноÑÑ‚ за изтриване на ÑÑŠÑтоÑние на задача
-  label_profile: Профил
-  permission_manage_subtasks: Управление на подзадачите
-  field_parent_issue: РодителÑка задача
-  label_subtask_plural: Подзадачи
-  label_project_copy_notifications: Изпращане на Send e-mail извеÑÑ‚Ð¸Ñ Ð¿Ð¾ време на копирането на проекта
-  error_can_not_delete_custom_field: ÐевъзможноÑÑ‚ за изтриване на потребителÑко поле
-  error_unable_to_connect: ÐевъзможноÑÑ‚ за Ñвързване Ñ (%{value})
-  error_can_not_remove_role: Тази Ñ€Ð¾Ð»Ñ Ñе използва и не може да бъде изтрита.
-  error_can_not_delete_tracker: Този тракер Ñъдържа задачи и не може да бъде изтрит.
-  field_principal: Principal
-  label_my_page_block: Блокове в личната Ñтраница
-  notice_failed_to_save_members: "ÐевъзможноÑÑ‚ за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° член(ове): %{errors}."
-  text_zoom_out: ÐамалÑване
-  text_zoom_in: Увеличаване
-  notice_unable_delete_time_entry: ÐевъзможноÑÑ‚ за изтриване на Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° time log.
-  label_overall_spent_time: Общо употребено време
-  field_time_entries: Log time
-  notice_not_authorized_archived_project: Проектът, който Ñе опитвате да видите е архивиран.
-  text_tip_issue_end_day: задача, завършваща този ден
-  field_text: ТекÑтово поле
-  label_user_mail_option_only_owner: Само за неща, на които аз Ñъм ÑобÑтвеник
-  field_member_of_group: Член на група
-  project_module_gantt: Мрежов график
-  text_are_you_sure_with_children: Изтриване на задачата и нейните подзадачи?
-  text_tip_issue_begin_end_day: задача, започваща и завършваща този ден
-  setting_default_notification_option: Подразбиращ Ñе начин за извеÑÑ‚Ñване
-  project_module_calendar: Календар
-  label_user_mail_option_only_my_events: Само за неща, в които Ñъм включен/а
-  text_tip_issue_begin_day: задача, започваща този ден
-  label_user_mail_option_only_assigned: Само за неща, назначени на мен
-  button_edit_associated_wikipage: "Редактиране на аÑоциираната Wiki Ñтраница: %{page_title}"
-  field_assigned_to_role: Assignee's role
-  field_start_date: Ðачална дата
-  label_principal_search: "ТърÑене на потребител или група:"
-  label_user_search: "ТърÑене на потребител:"
-  field_visible: Видим
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: ДейноÑÑ‚ при отчитане на работното време
-  text_time_logged_by_changeset: Приложено в Ñ€ÐµÐ²Ð¸Ð·Ð¸Ñ %{value}.
-  setting_commit_logtime_enabled: Разрешаване на отчитането на работното време
-  notice_gantt_chart_truncated: МрежовиÑÑ‚ график е Ñъкратен, понеже броÑÑ‚ на обектите, които могат да бъдат показани е твърде голÑм (%{max})
-  setting_gantt_items_limit: МакÑимален брой обекти, които да Ñе показват в мрежов график
+
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/bs.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/bs.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -787,7 +787,7 @@
   text_user_wrote: "%{value} je napisao/la:"
   text_enumeration_destroy_question: "Za %{count} objekata je dodjeljenja ova vrijednost."
   text_enumeration_category_reassign_to: 'Ponovo im dodjeli ovu vrijednost:'
-  text_email_delivery_not_configured: "Email dostava nije konfiguraisana, notifikacija je onemogućena.\nKonfiguriši SMTP server u config/email.yml i restartuj aplikaciju nakon toga."
+  text_email_delivery_not_configured: "Email dostava nije konfiguraisana, notifikacija je onemogućena.\nKonfiguriši SMTP server u config/configuration.yml i restartuj aplikaciju nakon toga."
   text_repository_usernames_mapping: "Odaberi ili ispravi redmine korisnika mapiranog za svako korisniÄko ima naÄ‘eno u logu repozitorija.\nKorisnici sa istim imenom u redmineu i u repozitoruju se automatski mapiraju."
   text_diff_truncated: '... Ovaj prikaz razlike je odsjeÄen poÅ¡to premaÅ¡uje maksimalnu veliÄinu za prikaz'
   text_custom_field_possible_values_info: 'Jedna linija za svaku vrijednost'
@@ -950,3 +950,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/ca.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/ca.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -880,7 +880,7 @@
   text_user_wrote: "%{value} va escriure:"
   text_enumeration_destroy_question: "%{count} objectes estan assignats a aquest valor."
   text_enumeration_category_reassign_to: "Torna a assignar-los a aquest valor:"
-  text_email_delivery_not_configured: "El lliurament per correu electrònic no està configurat i les notificacions estan inhabilitades.\nConfigureu el servidor SMTP a config/email.yml i reinicieu l'aplicació per habilitar-lo."
+  text_email_delivery_not_configured: "El lliurament per correu electrònic no està configurat i les notificacions estan inhabilitades.\nConfigureu el servidor SMTP a config/configuration.yml i reinicieu l'aplicació per habilitar-lo."
   text_repository_usernames_mapping: "Seleccioneu l'assignació entre els usuaris del Redmine i cada nom d'usuari trobat al dipòsit.\nEls usuaris amb el mateix nom d'usuari o correu del Redmine i del dipòsit s'assignaran automàticament."
   text_diff_truncated: "... Aquestes diferències s'han trucat perquè excedeixen la mida màxima que es pot mostrar."
   text_custom_field_possible_values_info: "Una línia per a cada valor"
@@ -939,3 +939,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/cs.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/cs.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,4 +1,9 @@
+# Update to 1.1 by Michal Gebauer <mishak@mishak.net>
+# Updated by Josef Liška <jl@chl.cz>
+# CZ translation by Maxim Krušina | Massimo Filippi, s.r.o. | maxim@mxm.cz
+# Based on original CZ translation by Jan KadleÄek
 cs:
+  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
   direction: ltr
   date:
     formats:
@@ -26,7 +31,7 @@
       long: "%B %d, %Y %H:%M"
     am: "dop."
     pm: "odp."
-    
+      
   datetime:
     distance_in_words:
       half_a_minute: "půl minuty"
@@ -65,24 +70,26 @@
         other: "téměř %{count} roky"
 
   number:
+    # Výchozí formát pro Äísla
     format:
-      separator: "."
+      separator: "." 
       delimiter: ""
       precision: 3
-    human: 
-      format: 
+    human:
+      format:
+        delimiter: ""
         precision: 1
-        delimiter: ""
-      storage_units: 
+      storage_units:
         format: "%n %u"
-        units: 
-          kb: KB
-          tb: TB
-          gb: GB
-          byte: 
-            one: Byte
-            other: Bytes
-          mb: MB
+        units:
+          byte:
+            one: "Bajt"
+            other: "Bajtů"
+          kb: "kB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
         
 # Used in array.to_sentence.
   support:
@@ -94,8 +101,8 @@
     errors:
       template:
         header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
+          one:    "1 chyba zabránila uložení %{model}"
+          other:  "%{count} chyb zabránilo uložení %{model}"
       messages:
         inclusion: "není zahrnuto v seznamu"
         exclusion: "je rezervováno"
@@ -122,10 +129,6 @@
         circular_dependency: "Tento vztah by vytvořil cyklickou závislost"
         cant_link_an_issue_with_a_descendant: "Úkol nemůže být spojen s jedním z jeho dílÄích úkolů"
 
-  # Updated by Josef Liška <jl@chl.cz>
-  # CZ translation by Maxim Krušina | Massimo Filippi, s.r.o. | maxim@mxm.cz
-  # Based on original CZ translation by Jan KadleÄek
-  
   actionview_instancetag_blank_option: Prosím vyberte
   
   general_text_No: 'Ne'
@@ -154,20 +157,40 @@
   notice_successful_connection: Úspěšné připojení.
   notice_file_not_found: Stránka na kterou se snažíte zobrazit neexistuje nebo byla smazána.
   notice_locking_conflict: Údaje byly změněny jiným uživatelem.
-  notice_scm_error: Záznam a/nebo revize neexistuje v repozitáři.
   notice_not_authorized: Nemáte dostateÄná práva pro zobrazení této stránky.
+  notice_not_authorized_archived_project: Projekt ke kterému se snažíte přistupovat byl archivován.
   notice_email_sent: "Na adresu %{value} byl odeslán email"
   notice_email_error: "Při odesílání emailu nastala chyba (%{value})"
   notice_feeds_access_key_reseted: Váš klÃ­Ä pro přístup k RSS byl resetován.
+  notice_api_access_key_reseted: Váš API přístupový klÃ­Ä byl resetován.
   notice_failed_to_save_issues: "Chyba při uložení %{count} úkolu(ů) z %{total} vybraných: %{ids}."
+  notice_failed_to_save_members: "NepodaÅ™ilo se uložit Älena(y): %{errors}."
   notice_no_issue_selected: "Nebyl zvolen žádný úkol. Prosím, zvolte úkoly, které chcete editovat"
   notice_account_pending: "Váš úÄet byl vytvoÅ™en, nyní Äeká na schválení administrátorem."
   notice_default_data_loaded: Výchozí konfigurace úspěšně nahrána.
+  notice_unable_delete_version: Nemohu odstanit verzi
+  notice_unable_delete_time_entry: Nelze smazat Äas ze záznamu.
+  notice_issue_done_ratios_updated: Koeficienty dokonÄení úkolu byly aktualizovány.
+  notice_gantt_chart_truncated: Graf byl oříznut, poÄet položek pÅ™esáhl limit pro zobrazení (%{max})
   
   error_can_t_load_default_data: "Výchozí konfigurace nebyla nahrána: %{value}"
   error_scm_not_found: "Položka a/nebo revize neexistují v repozitáři."
   error_scm_command_failed: "Při pokusu o přístup k repozitáři došlo k chybě: %{value}"
+  error_scm_annotate: "Položka neexistuje nebo nemůže být komentována."
   error_issue_not_found_in_project: 'Úkol nebyl nalezen nebo nepatří k tomuto projektu'
+  error_no_tracker_in_project: Žádná fronta nebyla přiřazena tomuto projektu. Prosím zkontroluje nastavení projektu.
+  error_no_default_issue_status: Není nastaven výchozí stav úkolu. Prosím zkontrolujte nastavení ("Administrace -> Stavy úkolů").
+  error_can_not_delete_custom_field: Nelze smazat volitelné pole
+  error_can_not_delete_tracker: Tato fronta obsahuje úkoly a nemůže být smazán.
+  error_can_not_remove_role: Tato role je právě používaná a nelze ji smazat.
+  error_can_not_reopen_issue_on_closed_version: Úkol přiřazený k uzavřené verzi nemůže být znovu otevřen
+  error_can_not_archive_project: Tento projekt nemůže být archivován
+  error_issue_done_ratios_not_updated: Koeficient dokonÄení úkolu nebyl aktualizován.
+  error_workflow_copy_source: Prosím vyberte zdrojovou frontu nebo roly
+  error_workflow_copy_target: Prosím vyberte cílovou frontu(y) a roly(e)
+  error_unable_delete_issue_status: Nelze smazat stavy úkolů
+  error_unable_to_connect: Nelze se připojit (%{value})
+  warning_attachments_not_saved: "%{count} soubor(ů) nebylo možné uložit."
   
   mail_subject_lost_password: "Vaše heslo (%{value})"
   mail_body_lost_password: 'Pro změnu vašeho hesla klikněte na následující odkaz:'
@@ -177,6 +200,12 @@
   mail_body_account_information: Informace o vaÅ¡em úÄtu
   mail_subject_account_activation_request: "Aktivace %{value} úÄtu"
   mail_body_account_activation_request: "Byl zaregistrován nový uživatel %{value}. Aktivace jeho úÄtu závisí na vaÅ¡em potvrzení."
+  mail_subject_reminder: "%{count} úkol(ů) má termín během několik dní (%{days})"
+  mail_body_reminder: "%{count} úkol(ů), které máte přiřazeny má termín během několik dní (%{days}):"
+  mail_subject_wiki_content_added: "'%{id}' Wiki stránka byla přidána"
+  mail_body_wiki_content_added: "'%{id}' Wiki stránka byla přidána od %{author}."
+  mail_subject_wiki_content_updated: "'%{id}' Wiki stránka byla aktualizována"
+  mail_body_wiki_content_updated: "'%{id}' Wiki stránka byla aktualizována od %{author}."
   
   gui_validation_error: 1 chyba
   gui_validation_error_plural: "%{count} chyb(y)"
@@ -216,6 +245,7 @@
   field_priority: Priorita
   field_fixed_version: Cílová verze
   field_user: Uživatel
+  field_principal: Hlavní
   field_role: Role
   field_homepage: Domovská stránka
   field_is_public: Veřejný
@@ -260,10 +290,23 @@
   field_redirect_existing_links: Přesměrovat stvávající odkazy
   field_estimated_hours: Odhadovaná doba
   field_column_names: Sloupce
+  field_time_entries: Zaznamenaný Äas
   field_time_zone: Časové pásmo
   field_searchable: Umožnit vyhledávání
   field_default_value: Výchozí hodnota
   field_comments_sorting: Zobrazit komentáře
+  field_parent_title: RodiÄovská stránka
+  field_editable: Editovatelný
+  field_watcher: Sleduje
+  field_identity_url: OpenID URL
+  field_content: Obsah
+  field_group_by: Seskupovat výsledky podle
+  field_sharing: Sdílení
+  field_parent_issue: RodiÄovský úkol
+  field_member_of_group: Skupina přiřaditele
+  field_assigned_to_role: Role přiřaditele
+  field_text: Textové pole
+  field_visible: Viditelný
   
   setting_app_title: Název aplikace
   setting_app_subtitle: Podtitulek aplikace
@@ -275,6 +318,7 @@
   setting_issues_export_limit: Limit pro export úkolů
   setting_mail_from: Odesílat emaily z adresy
   setting_bcc_recipients: Příjemci skryté kopie (bcc)
+  setting_plain_text_mail: pouze prostý text (ne HTML)
   setting_host_name: Jméno serveru
   setting_text_formatting: Formátování textu
   setting_wiki_compression: Komprese historie Wiki
@@ -290,12 +334,94 @@
   setting_cross_project_issue_relations: Povolit vazby úkolů napÅ™Ã­Ä projekty
   setting_issue_list_default_columns: Výchozí sloupce zobrazené v seznamu úkolů
   setting_repositories_encodings: Kódování 
+  setting_commit_logs_encoding: Kódování zpráv při commitu
+  setting_emails_header: HlaviÄka emailů
   setting_emails_footer: PatiÄka emailů
   setting_protocol: Protokol
   setting_per_page_options: Povolené poÄty řádků na stránce
   setting_user_format: Formát zobrazení uživatele
   setting_activity_days_default: Dny zobrazené v Äinnosti projektu
   setting_display_subprojects_issues: Automaticky zobrazit úkoly podprojektu v hlavním projektu
+  setting_enabled_scm: Povolené SCM
+  setting_mail_handler_body_delimiters: Zkrátit e-maily po jednom z těchto řádků
+  setting_mail_handler_api_enabled: Povolit WS pro příchozí e-maily
+  setting_mail_handler_api_key: API klíÄ
+  setting_sequential_project_identifiers: Generovat sekvenÄní identifikátory projektů
+  setting_gravatar_enabled: Použít uživatelské ikony Gravatar
+  setting_gravatar_default: Výchozí Gravatar
+  setting_diff_max_lines_displayed: Maximální poÄet zobrazenách řádků rozdílů
+  setting_file_max_size_displayed: Maximální velikost textových souborů zobrazených přímo na stránce
+  setting_repository_log_display_limit: Maximální poÄet revizí zobrazených v logu souboru
+  setting_openid: Umožnit přihlašování a registrace s OpenID
+  setting_password_min_length: Minimální délka hesla
+  setting_new_project_user_role_id: Role přiřazená uživateli bez práv administrátora, který projekt vytvořil
+  setting_default_projects_modules: Výchozí zapnutné moduly pro nový projekt
+  setting_issue_done_ratio: SpoÄítat koeficient dokonÄení úkolu s
+  setting_issue_done_ratio_issue_field: Použít pole úkolu
+  setting_issue_done_ratio_issue_status: Použít stav úkolu
+  setting_start_of_week: ZaÄínat kalendáře
+  setting_rest_api_enabled: Zapnout službu REST
+  setting_cache_formatted_text: Ukládat formátovaný text do vyrovnávací paměti
+  setting_default_notification_option: Výchozí nastavení oznámení
+  setting_commit_logtime_enabled: Povolit zapisování Äasu
+  setting_commit_logtime_activity_id: Aktivita pro zapsaný Äas
+  setting_gantt_items_limit: Maximální poÄet položek zobrazený na ganttovÄ› grafu
+  
+  permission_add_project: Vytvořit projekt
+  permission_add_subprojects: Vytvořit podprojekty
+  permission_edit_project: Úprava projektů
+  permission_select_project_modules: Výběr modulů projektu
+  permission_manage_members: Spravování Älenství
+  permission_manage_project_activities: Spravovat aktivity projektu
+  permission_manage_versions: Spravování verzí
+  permission_manage_categories: Spravování kategorií úkolů
+  permission_view_issues: Zobrazit úkoly
+  permission_add_issues: Přidávání úkolů
+  permission_edit_issues: Upravování úkolů
+  permission_manage_issue_relations: Spravování vztahů mezi úkoly
+  permission_add_issue_notes: Přidávání poznámek
+  permission_edit_issue_notes: Upravování poznámek
+  permission_edit_own_issue_notes: Upravování vlastních poznámek
+  permission_move_issues: Přesouvání úkolů
+  permission_delete_issues: Mazání úkolů
+  permission_manage_public_queries: Správa veřejných dotazů
+  permission_save_queries: Ukládání dotazů
+  permission_view_gantt: Zobrazené Ganttova diagramu
+  permission_view_calendar: Prohlížení kalendáře
+  permission_view_issue_watchers: Zobrazení seznamu sledujícíh uživatelů
+  permission_add_issue_watchers: Přidání sledujících uživatelů
+  permission_delete_issue_watchers: Smazat přihlížející
+  permission_log_time: Zaznamenávání stráveného Äasu
+  permission_view_time_entries: Zobrazení stráveného Äasu
+  permission_edit_time_entries: Upravování záznamů o stráveném Äasu
+  permission_edit_own_time_entries: Upravování vlastních zázamů o stráveném Äase
+  permission_manage_news: Spravování novinek
+  permission_comment_news: Komentování novinek
+  permission_manage_documents: Správa dokumentů
+  permission_view_documents: Prohlížení dokumentů
+  permission_manage_files: Spravování souborů
+  permission_view_files: Prohlížení souborů
+  permission_manage_wiki: Spravování Wiki
+  permission_rename_wiki_pages: Přejmenovávání Wiki stránek
+  permission_delete_wiki_pages: Mazání stránek na Wiki
+  permission_view_wiki_pages: Prohlížení Wiki
+  permission_view_wiki_edits: Prohlížení historie Wiki
+  permission_edit_wiki_pages: Upravování stránek Wiki
+  permission_delete_wiki_pages_attachments: Mazání příloh
+  permission_protect_wiki_pages: ZabezpeÄení Wiki stránek
+  permission_manage_repository: Spravování repozitáře
+  permission_browse_repository: Procházení repozitáře
+  permission_view_changesets: Zobrazování sady změn
+  permission_commit_access: Commit přístup
+  permission_manage_boards: Správa diskusních fór
+  permission_view_messages: Prohlížení zpráv
+  permission_add_messages: Posílání zpráv
+  permission_edit_messages: Upravování zpráv
+  permission_edit_own_messages: Upravit vlastní zprávy
+  permission_delete_messages: Mazání zpráv
+  permission_delete_own_messages: Smazat vlastní zprávy
+  permission_export_wiki_pages: Exportovat Wiki stránky
+  permission_manage_subtasks: Spravovat podúkoly
   
   project_module_issue_tracking: Sledování úkolů
   project_module_time_tracking: Sledování Äasu
@@ -305,10 +431,13 @@
   project_module_wiki: Wiki
   project_module_repository: Repozitář
   project_module_boards: Diskuse
+  project_module_calendar: Kalendář
+  project_module_gantt: Gantt
   
   label_user: Uživatel
   label_user_plural: Uživatelé
   label_user_new: Nový uživatel
+  label_user_anonymous: Anonymní
   label_project: Projekt
   label_project_new: Nový projekt
   label_project_plural: Projekty
@@ -355,11 +484,13 @@
   label_information_plural: Informace
   label_please_login: Prosím přihlašte se
   label_register: Registrovat
+  label_login_with_open_id_option: nebo se přihlašte s OpenID
   label_password_lost: Zapomenuté heslo
   label_home: Úvodní
   label_my_page: Moje stránka
   label_my_account: Můj úÄet
   label_my_projects: Moje projekty
+  label_my_page_block: Bloky na mé stránce
   label_administration: Administrace
   label_login: Přihlášení
   label_logout: Odhlášení
@@ -370,6 +501,7 @@
   label_registered_on: Registrován
   label_activity: Aktivita
   label_overall_activity: Celková aktivita
+  label_user_activity: "Aktivita uživatele: %{value}"
   label_new: Nový
   label_logged_as: Přihlášen jako
   label_environment: Prostředí
@@ -378,6 +510,8 @@
   label_auth_source_new: Nový mód autentifikace
   label_auth_source_plural: Módy autentifikace
   label_subproject_plural: Podprojekty
+  label_subproject_new: Nový podprojekt
+  label_and_its_subprojects: "%{value} a jeho  podprojekty"
   label_min_max_length: Min - Max délka
   label_list: Seznam
   label_date: Datum
@@ -411,6 +545,7 @@
   label_version: Verze
   label_version_new: Nová verze
   label_version_plural: Verze
+  label_close_versions: Zavřít dokonÄené verze
   label_confirmation: Potvrzení
   label_export_to: 'Také k dispozici:'
   label_read: NaÄítá se...
@@ -469,6 +604,8 @@
   label_not_equals: není
   label_in_less_than: je měší než
   label_in_more_than: je větší než
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
   label_in: v
   label_today: dnes
   label_all_time: vše
@@ -491,15 +628,21 @@
   label_browse: Procházet
   label_modification: "%{count} změna"
   label_modification_plural: "%{count} změn"
+  label_branch: Větev
+  label_tag: Tag
   label_revision: Revize
   label_revision_plural: Revizí
+  label_revision_id: "Revize %{value}"
   label_associated_revisions: Související verze
   label_added: přidáno
   label_modified: změněno
+  label_copied: zkopírováno
+  label_renamed: přejmenováno
   label_deleted: odstraněno
   label_latest_revision: Poslední revize
   label_latest_revision_plural: Poslední revize
   label_view_revisions: Zobrazit revize
+  label_view_all_revisions: Zobrazit všechny revize
   label_max_size: Maximální velikost
   label_sort_highest: PÅ™esunout na zaÄátek
   label_sort_higher: Přesunout nahoru
@@ -525,6 +668,7 @@
   label_changes_details: Detail všech změn
   label_issue_tracking: Sledování úkolů
   label_spent_time: Strávený Äas
+  label_overall_spent_time: Celkem strávený Äas
   label_f_hour: "%{value} hodina"
   label_f_hour_plural: "%{value} hodin"
   label_time_tracking: Sledování Äasu
@@ -545,8 +689,9 @@
   label_relation_new: Nová souvislost
   label_relation_delete: Odstranit souvislost
   label_relates_to: související s
-  label_duplicates: duplicity
-  label_blocks: bloků
+  label_duplicates: duplikuje
+  label_duplicated_by: zduplikován
+  label_blocks: blokuje
   label_blocked_by: zablokován
   label_precedes: předchází
   label_follows: následuje
@@ -561,6 +706,8 @@
   label_board: Fórum
   label_board_new: Nové fórum
   label_board_plural: Fóra
+  label_board_locked: UzamÄeno
+  label_board_sticky: Nálepka
   label_topic_plural: Témata
   label_message_plural: Zprávy
   label_message_last: Poslední zpráva
@@ -576,9 +723,12 @@
   label_language_based: Podle výchozího jazyku
   label_sort_by: "Seřadit podle %{value}"
   label_send_test_email: Poslat testovací email
+  label_feeds_access_key: Přístupový klÃ­Ä pro RSS
+  label_missing_feeds_access_key: Postrádá přístupový klÃ­Ä pro RSS
   label_feeds_access_key_created_on: "Přístupový klÃ­Ä pro RSS byl vytvoÅ™en pÅ™ed %{value}"
   label_module_plural: Moduly
   label_added_time_by: "Přidáno uživatelem %{author} před %{age}"
+  label_updated_time_by: "Aktualizováno uživatelem %{author} před %{age}"
   label_updated_time: "Aktualizováno před %{value}"
   label_jump_to_a_project: Vyberte projekt...
   label_file_plural: Soubory
@@ -591,6 +741,10 @@
   label_search_titles_only: Vyhledávat pouze v názvech
   label_user_mail_option_all: "Pro všechny události všech mých projektů"
   label_user_mail_option_selected: "Pro všechny události vybraných projektů..."
+  label_user_mail_option_none: "Žádné události"
+  label_user_mail_option_only_my_events: "Jen pro věci co sleduji nebo jsem v nich zapojen"
+  label_user_mail_option_only_assigned: "Jen pro všeci kterým sem přiřazen"
+  label_user_mail_option_only_owner: "Jen pro věci které vlastním"
   label_user_mail_no_self_notified: "Nezasílat informace o mnou vytvořených změnách"
   label_registration_activation_by_email: aktivace úÄtu emailem
   label_registration_manual_activation: manuální aktivace úÄtu
@@ -609,6 +763,40 @@
   label_preferences: Nastavení
   label_chronological_order: V chronologickém pořadí
   label_reverse_chronological_order: V obrácaném chronologickém pořadí
+  label_planning: Plánování
+  label_incoming_emails: Příchozí e-maily
+  label_generate_key: Generovat klíÄ
+  label_issue_watchers: Sledování
+  label_example: Příklad
+  label_display: Zobrazit
+  label_sort: Řazení
+  label_ascending: VzestupnÄ›
+  label_descending: SestupnÄ›
+  label_date_from_to: Od %{start} do %{end}
+  label_wiki_content_added: Wiki stránka přidána
+  label_wiki_content_updated: Wiki stránka aktualizována
+  label_group: Skupina
+  label_group_plural: Skupiny
+  label_group_new: Nová skupina
+  label_time_entry_plural: Strávený Äas
+  label_version_sharing_none: Nesdíleno
+  label_version_sharing_descendants: S podprojekty
+  label_version_sharing_hierarchy: S hierarchií projektu
+  label_version_sharing_tree: Se stromem projektu
+  label_version_sharing_system: Se všemi projekty
+  label_update_issue_done_ratios: Aktualizovat koeficienty dokonÄení úkolů
+  label_copy_source: Zdroj
+  label_copy_target: Cíl
+  label_copy_same_as_target: Stejný jako cíl
+  label_display_used_statuses_only: Zobrazit pouze stavy které jsou použité touto frontou
+  label_api_access_key: API přístupový klíÄ
+  label_missing_api_access_key: ChybÄ›jící přístupový klÃ­Ä API
+  label_api_access_key_created_on: API přístupový klÃ­Ä vytvoÅ™en %{value} 
+  label_profile: Profil
+  label_subtask_plural: Podúkol
+  label_project_copy_notifications: Odeslat email oznámení v průběhu kopie projektu
+  label_principal_search: "Hledat uživatele nebo skupinu:"
+  label_user_search: "Hledat uživatele:"
   
   button_login: Přihlásit
   button_submit: Potvrdit
@@ -617,8 +805,10 @@
   button_uncheck_all: Odšrtnout vše
   button_delete: Odstranit
   button_create: Vytvořit
-  button_test: Test
+  button_create_and_continue: VytvoÅ™it a pokraÄovat
+  button_test: Testovat
   button_edit: Upravit
+  button_edit_associated_wikipage: "Upravit přiřazenou Wiki stránku: %{page_title}"
   button_add: Přidat
   button_change: Změnit
   button_apply: Použít
@@ -629,6 +819,7 @@
   button_list: Vypsat
   button_view: Zobrazit
   button_move: Přesunout
+  button_move_and_follow: Přesunout a následovat
   button_back: Zpět
   button_cancel: Storno
   button_activate: Aktivovat
@@ -640,24 +831,40 @@
   button_reply: Odpovědět
   button_archive: Archivovat
   button_unarchive: Odarchivovat
-  button_reset: Reset
+  button_reset: Resetovat
   button_rename: Přejmenovat
   button_change_password: Změnit heslo
   button_copy: Kopírovat
+  button_copy_and_follow: Kopírovat a následovat
   button_annotate: Komentovat
   button_update: Aktualizovat
   button_configure: Konfigurovat
+  button_quote: Citovat
+  button_duplicate: Duplikát
+  button_show: Zobrazit
   
   status_active: aktivní
   status_registered: registrovaný
   status_locked: uzamÄený
   
+  version_status_open: otevřený
+  version_status_locked: uzamÄený
+  version_status_closed: zavřený
+  
+  field_active: Aktivní
+  
   text_select_mail_notifications: Vyberte akci při které bude zasláno upozornění emailem.
   text_regexp_info: napÅ™. ^[A-Z0-9]+$
   text_min_max_length_info: 0 znamená bez limitu
   text_project_destroy_confirmation: Jste si jisti, že chcete odstranit tento projekt a všechna související data ?
+  text_subprojects_destroy_warning: "Jeho podprojek(y): %{value} budou také smazány."
   text_workflow_edit: Vyberte roli a frontu k editaci průběhu práce
   text_are_you_sure: Jste si jisti?
+  text_are_you_sure_with_children: Smazat úkol vÄetnÄ› vÅ¡ech podúkolů?
+  text_journal_changed: "%{label} změněn z %{old} na %{new}"
+  text_journal_set_to: "%{label} nastaven na %{value}"
+  text_journal_deleted: "%{label} smazán (%{old})"
+  text_journal_added: "%{label} %{value} přidán"
   text_tip_issue_begin_day: úkol zaÄíná v tento den
   text_tip_issue_end_day: úkol konÄí v tento den
   text_tip_issue_begin_end_day: úkol zaÄíná a konÄí v tento den
@@ -668,6 +875,7 @@
   text_tracker_no_workflow: Pro tuto frontu není definován žádný průběh práce
   text_unallowed_characters: Nepovolené znaky
   text_comma_separated: Povoleno více hodnot (oddÄ›lÄ›né Äárkou).
+  text_line_separated: Více hodnot povoleno (jeden řádek pro každou hodnotu).
   text_issues_ref_in_commit_messages: Odkazování a opravování úkolů ve zprávách commitů
   text_issue_added: "Úkol %{id} byl vytvořen uživatelem %{author}."
   text_issue_updated: "Úkol %{id} byl aktualizován uživatelem %{author}."
@@ -679,15 +887,31 @@
   text_no_configuration_data: "Role, fronty, stavy úkolů ani průbÄ›h práce nebyly zatím nakonfigurovány.\nVelice doporuÄujeme nahrát výchozí konfiguraci. Po té si můžete vÅ¡e upravit"
   text_load_default_configuration: Nahrát výchozí konfiguraci
   text_status_changed_by_changeset: "Použito v changesetu %{value}."
+  text_time_logged_by_changeset: Aplikováno v changesetu %{value}.
   text_issues_destroy_confirmation: 'Opravdu si přejete odstranit všechny zvolené úkoly?'
   text_select_project_modules: 'Aktivní moduly v tomto projektu:'
   text_default_administrator_account_changed: Výchozí nastavení administrátorského úÄtu zmÄ›nÄ›no
   text_file_repository_writable: Povolen zápis do adresáře ukládání souborů
+  text_plugin_assets_writable: Možnost zápisu do adresáře plugin assets
   text_rmagick_available: RMagick k dispozici (volitelné)
   text_destroy_time_entries_question: "U úkolů, které chcete odstranit je evidováno %{hours} práce. Co chete udělat?"
   text_destroy_time_entries: Odstranit evidované hodiny.
   text_assign_time_entries_to_project: Přiřadit evidované hodiny projektu
   text_reassign_time_entries: 'Přeřadit evidované hodiny k tomuto úkolu:'
+  text_user_wrote: "%{value} napsal:"
+  text_enumeration_destroy_question: "Několik (%{count}) objektů je přiřazeno k této hodnotě."
+  text_enumeration_category_reassign_to: 'Přeřadit je do této:'
+  text_email_delivery_not_configured: "DoruÄování e-mailů není nastaveno a odesílání notifikací je zakázáno.\nNastavte Váš SMTP server v souboru config/email.yml a restartujte aplikaci."
+  text_repository_usernames_mapping: "Vybrat nebo upravit mapování mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným Redmine uživatelským jménem a uživatelským jménem v repozitáři jsou mapovaní automaticky."
+  text_diff_truncated: '... Rozdílový soubor je zkrácen, protože jeho délka přesahuje max. limit.'
+  text_custom_field_possible_values_info: 'Každá hodnota na novém řádku'
+  text_wiki_page_destroy_question: Tato stránka má %{descendants} podstránek a potomků. Co chcete udělat?
+  text_wiki_page_nullify_children: Ponechat podstránky jako kořenové stránky
+  text_wiki_page_destroy_children: Smazat podstránky a všechny jejich potomky
+  text_wiki_page_reassign_children: PÅ™iÅ™adit podstránky k tomuto rodiÄi
+  text_own_membership_delete_confirmation: "Chystáte se odebrat si nÄ›která nebo vÅ¡echny svá oprávnÄ›ní a potom již nemusíte být schopni upravit tento projekt.\nOpravdu chcete pokraÄovat?"
+  text_zoom_in: Přiblížit
+  text_zoom_out: Oddálit
   
   default_role_manager: Manažer
   default_role_developer: Vývojář
@@ -714,225 +938,9 @@
   enumeration_issue_priorities: Priority úkolů
   enumeration_doc_categories: Kategorie dokumentů
   enumeration_activities: Aktivity (sledování Äasu)
-  error_scm_annotate: "Položka neexistuje nebo nemůže být komentována."
-  label_planning: Plánování
-  text_subprojects_destroy_warning: "Jeho podprojek(y): %{value} budou také smazány."
-  label_and_its_subprojects: "%{value} a jeho  podprojekty"
-  mail_body_reminder: "%{count} úkol(ů), které máte přiřazeny má termín během několik dní (%{days}):"
-  mail_subject_reminder: "%{count} úkol(ů) má termín během několik dní (%{days})"
-  text_user_wrote: "%{value} napsal:"
-  label_duplicated_by: duplikováno od
-  setting_enabled_scm: Povolené SCM
-  text_enumeration_category_reassign_to: 'Přeřadit je do této:'
-  text_enumeration_destroy_question: "Několik (%{count}) objektů je přiřazeno k této hodnotě."
-  label_incoming_emails: Příchozí e-maily
-  label_generate_key: Generovat klíÄ
-  setting_mail_handler_api_enabled: Povolit WS pro příchozí e-maily
-  setting_mail_handler_api_key: API klíÄ
-  text_email_delivery_not_configured: "DoruÄování e-mailů není nastaveno a odesílání notifikací je zakázáno.\nNastavte Váš SMTP server v souboru config/email.yml a restartujte aplikaci."
-  field_parent_title: RodiÄovská stránka
-  label_issue_watchers: Sledování
-  setting_commit_logs_encoding: Kódování zpráv při commitu
-  button_quote: Citovat
-  setting_sequential_project_identifiers: Generovat sekvenÄní identifikátory projektů
-  notice_unable_delete_version: Nemohu odstanit verzi
-  label_renamed: přejmenováno
-  label_copied: zkopírováno
-  setting_plain_text_mail: pouze prostý text (ne HTML)
-  permission_view_files: Prohlížení souborů
-  permission_edit_issues: Upravování úkolů
-  permission_edit_own_time_entries: Upravování vlastních zázamů o stráveném Äase
-  permission_manage_public_queries: Správa veřejných dotazů
-  permission_add_issues: Přidávání úkolů
-  permission_log_time: Zaznamenávání stráveného Äasu
-  permission_view_changesets: Zobrazování sady změn
-  permission_view_time_entries: Zobrazení stráveného Äasu
-  permission_manage_versions: Spravování verzí
-  permission_manage_wiki: Spravování Wiki
-  permission_manage_categories: Spravování kategorií úkolů
-  permission_protect_wiki_pages: ZabezpeÄení Wiki stránek
-  permission_comment_news: Komentování novinek
-  permission_delete_messages: Mazání zpráv
-  permission_select_project_modules: Výběr modulů projektu
-  permission_manage_documents: Správa dokumentů
-  permission_edit_wiki_pages: Upravování stránek Wiki
-  permission_add_issue_watchers: Přidání sledujících uživatelů
-  permission_view_gantt: Zobrazené Ganttova diagramu
-  permission_move_issues: Přesouvání úkolů
-  permission_manage_issue_relations: Spravování vztahů mezi úkoly
-  permission_delete_wiki_pages: Mazání stránek na Wiki
-  permission_manage_boards: Správa diskusních fór
-  permission_delete_wiki_pages_attachments: Mazání příloh
-  permission_view_wiki_edits: Prohlížení historie Wiki
-  permission_add_messages: Posílání zpráv
-  permission_view_messages: Prohlížení zpráv
-  permission_manage_files: Spravování souborů
-  permission_edit_issue_notes: Upravování poznámek
-  permission_manage_news: Spravování novinek
-  permission_view_calendar: Prohlížení kalendáře
-  permission_manage_members: Spravování Älenství
-  permission_edit_messages: Upravování zpráv
-  permission_delete_issues: Mazání úkolů
-  permission_view_issue_watchers: Zobrazení seznamu sledujícíh uživatelů
-  permission_manage_repository: Spravování repozitáře
-  permission_commit_access: Commit přístup
-  permission_browse_repository: Procházení repozitáře
-  permission_view_documents: Prohlížení dokumentů
-  permission_edit_project: Úprava projektů
-  permission_add_issue_notes: Přidávání poznámek
-  permission_save_queries: Ukládání dotazů
-  permission_view_wiki_pages: Prohlížení Wiki
-  permission_rename_wiki_pages: Přejmenovávání Wiki stránek
-  permission_edit_time_entries: Upravování záznamů o stráveném Äasu
-  permission_edit_own_issue_notes: Upravování vlastních poznámek
-  setting_gravatar_enabled: Použít uživatelské ikony Gravatar
-  label_example: Příklad
-  text_repository_usernames_mapping: "Vybrat nebo upravit mapování mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným Redmine uživatelským jménem a uživatelským jménem v repozitáři jsou mapovaní automaticky."
-  permission_edit_own_messages: Upravit vlastní zprávy
-  permission_delete_own_messages: Smazat vlastní zprávy
-  label_user_activity: "Aktivita uživatele: %{value}"
-  label_updated_time_by: "Akutualizováno: %{author} před: %{age}"
-  text_diff_truncated: '... Rozdílový soubor je zkrácen, protože jeho délka přesahuje max. limit.'
-  setting_diff_max_lines_displayed: Maximální poÄet zobrazenách řádků rozdílů
-  text_plugin_assets_writable: Možnost zápisu do adresáře plugin assets
-  warning_attachments_not_saved: "%{count} soubor(ů) nebylo možné uložit."
-  button_create_and_continue: VytvoÅ™it a pokraÄovat
-  text_custom_field_possible_values_info: 'Každá hodnota na novém řádku'
-  label_display: Zobrazit
-  field_editable: Editovatelný
-  setting_repository_log_display_limit: Maximální poÄet revizí zobrazených v logu souboru
-  setting_file_max_size_displayed: Maximální velikost textových souborů zobrazených přímo na stránce
-  field_watcher: Sleduje
-  setting_openid: Umožnit přihlašování a registrace s OpenID
-  field_identity_url: OpenID URL
-  label_login_with_open_id_option: nebo se přihlašte s OpenID
-  field_content: Obsah
-  label_descending: SestupnÄ›
-  label_sort: Řazení
-  label_ascending: VzestupnÄ›
-  label_date_from_to: Od %{start} do %{end}
-  label_greater_or_equal: ">="
-  label_less_or_equal: <=
-  text_wiki_page_destroy_question: Tato stránka má %{descendants} podstránek a potomků. Co chcete udělat?
-  text_wiki_page_reassign_children: PÅ™iÅ™adit podstránky k tomuto rodiÄi
-  text_wiki_page_nullify_children: Ponechat podstránky jako kořenové stránky
-  text_wiki_page_destroy_children: Smazat podstránky a všechny jejich potomky
-  setting_password_min_length: Minimální délka hesla
-  field_group_by: Seskupovat výsledky podle
-  mail_subject_wiki_content_updated: "'%{id}' Wiki stránka byla aktualizována"
-  label_wiki_content_added: Wiki stránka přidána
-  mail_subject_wiki_content_added: "'%{id}' Wiki stránka byla přidána"
-  mail_body_wiki_content_added: "'%{id}' Wiki stránka byla přidána od %{author}."
-  label_wiki_content_updated: Wiki stránka aktualizována
-  mail_body_wiki_content_updated: "'%{id}' Wiki stránka byla aktualizována od %{author}."
-  permission_add_project: Vytvořit projekt
-  setting_new_project_user_role_id: Role přiřazená uživateli bez práv administrátora, který projekt vytvořil
-  label_view_all_revisions: Zobrazit všechny revize
-  label_tag: Tag
-  label_branch: Branch
-  error_no_tracker_in_project: Žádná fronta nebyla přiřazena tomuto projektu. Prosím zkontroluje nastavení projektu.
-  error_no_default_issue_status: Není nastaven výchozí stav úkolu. Prosím zkontrolujte nastavení ("Administrace -> Stavy úkolů").
-  text_journal_changed: "%{label} změněn z %{old} na %{new}"
-  text_journal_set_to: "%{label} nastaven na %{value}"
-  text_journal_deleted: "%{label} smazán (%{old})"
-  label_group_plural: Skupiny
-  label_group: Skupina
-  label_group_new: Nová skupina
-  label_time_entry_plural: Strávený Äas
-  text_journal_added: "%{label} %{value} přidán"
-  field_active: Aktivní
   enumeration_system_activity: Systémová aktivita
-  permission_delete_issue_watchers: Smazat přihlížející
-  version_status_closed: zavřený
-  version_status_locked: uzamÄený
-  version_status_open: otevřený
-  error_can_not_reopen_issue_on_closed_version: Úkol přiřazený k uzavřené verzi nemůže být znovu otevřen
-  label_user_anonymous: Anonymní
-  button_move_and_follow: Přesunout a následovat
-  setting_default_projects_modules: Výchozí zapnutné moduly pro nový projekt
-  setting_gravatar_default: Výchozí Gravatar
-  field_sharing: Sdílení
-  label_version_sharing_hierarchy: S hierarchií projektu
-  label_version_sharing_system: Se všemi projekty
-  label_version_sharing_descendants: S podprojekty
-  label_version_sharing_tree: Se stromem projektu
-  label_version_sharing_none: Nesdíleno
-  error_can_not_archive_project: Tento projekt nemůže být archivován
-  button_duplicate: Duplikát
-  button_copy_and_follow: Kopírovat a následovat
-  label_copy_source: Zdroj
-  setting_issue_done_ratio: SpoÄítat koeficient dokonÄení úkolu s
-  setting_issue_done_ratio_issue_status: Použít stav úkolu
-  error_issue_done_ratios_not_updated: Koeficient dokonÄení úkolu nebyl aktualizován.
-  error_workflow_copy_target: Prosím vyberte cílovou frontu(y) a roly(e)
-  setting_issue_done_ratio_issue_field: Použít pole úkolu
-  label_copy_same_as_target: Stejný jako cíl
-  label_copy_target: Cíl
-  notice_issue_done_ratios_updated: Koeficienty dokonÄení úkolu byly aktualizovány.
-  error_workflow_copy_source: Prosím vyberte zdrojovou frontu nebo roly
-  label_update_issue_done_ratios: Aktualizovat koeficienty dokonÄení úkolů
-  setting_start_of_week: ZaÄínat kalendáře
-  permission_view_issues: Zobrazit úkoly
-  label_display_used_statuses_only: Zobrazit pouze stavy které jsou použité touto frontou
-  label_revision_id: Revize %{value}
-  label_api_access_key: API přístupový klíÄ
-  label_api_access_key_created_on: API přístupový klÃ­Ä vytvoÅ™en %{value} 
-  label_feeds_access_key: RSS přístupový klíÄ
-  notice_api_access_key_reseted: Váš API přístupový klÃ­Ä byl resetován.
-  setting_rest_api_enabled: Zapnout službu REST
-  label_missing_api_access_key: ChybÄ›jící přístupový klÃ­Ä API
-  label_missing_feeds_access_key: ChybÄ›jící přístupový klÃ­Ä RSS
-  button_show: Zobrazit
-  text_line_separated: Více hodnot povoleno (jeden řádek pro každou hodnotu).
-  setting_mail_handler_body_delimiters: Zkrátit e-maily po jednom z těchto řádků
-  permission_add_subprojects: Vytvořit podprojekty
-  label_subproject_new: Nový podprojekt
-  text_own_membership_delete_confirmation: |-
-    Chystáte se odebrat si některá nebo všechny svá oprávnění a potom již nemusíte být schopni upravit tento projekt.
-    Opravdu chcete pokraÄovat?
-  label_close_versions: Zavřít dokonÄené verze
-  label_board_sticky: Nálepka
-  label_board_locked: UzamÄeno
-  permission_export_wiki_pages: Exportovat Wiki stránky
-  setting_cache_formatted_text: Ukládat formátovaný text do vyrovnávací paměti
-  permission_manage_project_activities: Spravovat aktivity projektu
-  error_unable_delete_issue_status: Nelze smazat stavy úkolů
-  label_profile: Profil
-  permission_manage_subtasks: Spravovat podúkoly
-  field_parent_issue: RodiÄovský úkol
-  label_subtask_plural: Podúkol
-  label_project_copy_notifications: Odeslat email oznámení v průběhu kopie projektu
-  error_can_not_delete_custom_field: Nelze smazat volitelné pole
-  error_unable_to_connect: Nelze se připojit (%{value})
-  error_can_not_remove_role: Tato role je právě používaná a nelze ji smazat.
-  error_can_not_delete_tracker: Tato fronta obsahuje úkoly a nemůže být smazán.
-  field_principal: Hlavní
-  label_my_page_block: Bloky na mé stránce
-  notice_failed_to_save_members: "NepodaÅ™ilo se uložit Älena(y): %{errors}."
-  text_zoom_out: Oddálit
-  text_zoom_in: Přiblížit
-  notice_unable_delete_time_entry: Nelze smazat Äas ze záznamu.
-  label_overall_spent_time: CelkovÄ› strávený Äas
-  field_time_entries: Zaznamenaný Äas
-  project_module_gantt: Gantt
-  project_module_calendar: Kalendář
-  button_edit_associated_wikipage: "Upravit přiřazenou Wiki stránku: %{page_title}"
-  text_are_you_sure_with_children: Smazat úkol vÄetnÄ› vÅ¡ech podúkolů?
-  field_text: Textové pole
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/da.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/da.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -753,7 +753,7 @@
   setting_sequential_project_identifiers: Generér sekventielle projekt-identifikatorer
   setting_plain_text_mail: Emails som almindelig tekst (ingen HTML)
   field_parent_title: Siden over
-  text_email_delivery_not_configured: "Email-afsendelse er ikke indstillet og notifikationer er defor slået fra.\nKonfigurér din SMTP server i config/email.yml og genstart applikationen for at aktivere email-afsendelse."
+  text_email_delivery_not_configured: "Email-afsendelse er ikke indstillet og notifikationer er defor slået fra.\nKonfigurér din SMTP server i config/configuration.yml og genstart applikationen for at aktivere email-afsendelse."
   permission_protect_wiki_pages: Beskyt wiki sider
   permission_manage_documents: Administrér dokumenter
   permission_add_issue_watchers: Tilføj overvågere
@@ -952,3 +952,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/de.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/de.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -898,7 +898,7 @@
   text_user_wrote: "%{value} schrieb:"
   text_enumeration_destroy_question: "%{count} Objekt(e) sind diesem Wert zugeordnet."
   text_enumeration_category_reassign_to: 'Die Objekte stattdessen diesem Wert zuordnen:'
-  text_email_delivery_not_configured: "Der SMTP-Server ist nicht konfiguriert und Mailbenachrichtigungen sind ausgeschaltet.\nNehmen Sie die Einstellungen für Ihren SMTP-Server in config/email.yml vor und starten Sie die Applikation neu."
+  text_email_delivery_not_configured: "Der SMTP-Server ist nicht konfiguriert und Mailbenachrichtigungen sind ausgeschaltet.\nNehmen Sie die Einstellungen für Ihren SMTP-Server in config/configuration.yml vor und starten Sie die Applikation neu."
   text_repository_usernames_mapping: "Bitte legen Sie die Zuordnung der Redmine-Benutzer zu den Benutzernamen der Commit-Log-Meldungen des Projektarchivs fest.\nBenutzer mit identischen Redmine- und Projektarchiv-Benutzernamen oder -E-Mail-Adressen werden automatisch zugeordnet."
   text_diff_truncated: '... Dieser Diff wurde abgeschnitten, weil er die maximale Anzahl anzuzeigender Zeilen überschreitet.'
   text_custom_field_possible_values_info: 'Eine Zeile pro Wert'
@@ -953,3 +953,7 @@
   setting_commit_logtime_enabled: Aktiviere Zeitlogging
   notice_gantt_chart_truncated: Die Grafik ist unvollständig, da das Maximum der anzeigbaren Aufgaben überschritten wurde (%{max})
   setting_gantt_items_limit: Maximale Anzahl von Aufgaben die im Gantt-Chart angezeigt werden.
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/el.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/el.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -798,7 +798,7 @@
   text_user_wrote: "%{value} έγÏαψε:"
   text_enumeration_destroy_question: "%{count} αντικείμενα έχουν τεθεί σε αυτή την τιμή."
   text_enumeration_category_reassign_to: 'ΕπανεκχώÏηση τους στην παÏοÏσα αξία:'
-  text_email_delivery_not_configured: "Δεν έχουν γίνει Ïυθμίσεις παÏάδοσης email, και οι ειδοποιήσεις είναι απενεÏγοποιημένες.\nΔηλώστε τον εξυπηÏετητή SMTP στο config/email.yml και κάντε επανακκίνηση την εφαÏμογή για να τις Ïυθμίσεις."
+  text_email_delivery_not_configured: "Δεν έχουν γίνει Ïυθμίσεις παÏάδοσης email, και οι ειδοποιήσεις είναι απενεÏγοποιημένες.\nΔηλώστε τον εξυπηÏετητή SMTP στο config/configuration.yml και κάντε επανακκίνηση την εφαÏμογή για να τις Ïυθμίσεις."
   text_repository_usernames_mapping: "Επιλέξτε ή ενημεÏώστε τον χÏήστη Redmine που αντιστοιχεί σε κάθε όνομα χÏήστη  στο ιστοÏικό του αποθετηÏίου.\nΧÏήστες με το ίδιο όνομα χÏήστη ή email στο Redmine και στο αποθετηÏίο αντιστοιχίζονται αυτόματα."
   text_diff_truncated: '... Αυτό το diff εχεί κοπεί επειδή υπεÏβαίνει το μέγιστο μέγεθος που μποÏεί να Ï€Ïοβληθεί.'
   text_custom_field_possible_values_info: 'Μία γÏαμμή για κάθε τιμή'
@@ -936,3 +936,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/en-GB.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/en-GB.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -864,7 +864,7 @@
   text_user_wrote: "%{value} wrote:"
   text_enumeration_destroy_question: "%{count} objects are assigned to this value."
   text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
   text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
   text_custom_field_possible_values_info: 'One line for each value'
@@ -940,3 +940,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/en.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/en.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -303,6 +303,7 @@
   field_assigned_to_role: "Assignee's role"
   field_text: Text field
   field_visible: Visible
+  field_warn_on_leaving_unsaved: "Warn me when leaving a page with unsaved text"
   
   setting_app_title: Application title
   setting_app_subtitle: Application subtitle
@@ -594,6 +595,7 @@
   label_query: Custom query
   label_query_plural: Custom queries
   label_query_new: New query
+  label_my_queries: My custom queries
   label_filter_add: Add filter
   label_filter_plural: Filters
   label_equals: is
@@ -858,6 +860,7 @@
   text_are_you_sure: Are you sure ?
   text_are_you_sure_with_children: "Delete issue and all child issues?"
   text_journal_changed: "%{label} changed from %{old} to %{new}"
+  text_journal_changed_no_detail: "%{label} updated"
   text_journal_set_to: "%{label} set to %{value}"
   text_journal_deleted: "%{label} deleted (%{old})"
   text_journal_added: "%{label} %{value} added"
@@ -897,7 +900,7 @@
   text_user_wrote: "%{value} wrote:"
   text_enumeration_destroy_question: "%{count} objects are assigned to this value."
   text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
   text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
   text_custom_field_possible_values_info: 'One line for each value'
@@ -908,6 +911,7 @@
   text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
   text_zoom_in: Zoom in
   text_zoom_out: Zoom out
+  text_warn_on_leaving_unsaved: "The current page contains unsaved text that will be lost if you leave this page."
   
   default_role_manager: Manager
   default_role_developer: Developer
--- a/config/locales/.svn/text-base/es.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/es.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -795,7 +795,7 @@
   text_destroy_time_entries: Borrar las horas
   text_destroy_time_entries_question: Existen %{hours} horas asignadas a la petición que quiere borrar. ¿Qué quiere hacer?
   text_diff_truncated: '... Diferencia truncada por exceder el máximo tamaño visualizable.'
-  text_email_delivery_not_configured: "Las notificaciones están desactivadas porque el servidor de correo no está configurado.\nConfigure el servidor de SMTP en config/email.yml y reinicie la aplicación para activar los cambios."
+  text_email_delivery_not_configured: "Las notificaciones están desactivadas porque el servidor de correo no está configurado.\nConfigure el servidor de SMTP en config/configuration.yml y reinicie la aplicación para activar los cambios."
   text_enumeration_category_reassign_to: 'Reasignar al siguiente valor:'
   text_enumeration_destroy_question: "%{count} objetos con este valor asignado."
   text_file_repository_writable: Se puede escribir en el repositorio
@@ -973,3 +973,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/eu.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/eu.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -99,8 +99,8 @@
     errors:
       template:
         header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
+          one:    "Errore batek %{model} hau godetzea galarazi du."
+          other:  "%{count} errorek %{model} hau gordetzea galarazi dute."
       messages:
         inclusion: "ez dago zerrendan"
         exclusion: "erreserbatuta dago"
@@ -125,7 +125,7 @@
         greater_than_start_date: "hasiera data baino handiagoa izan behar du"
         not_same_project: "ez dago proiektu berdinean"
         circular_dependency: "Erlazio honek mendekotasun zirkular bat sortuko luke"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "Zeregin bat ezin da bere azpiataza batekin estekatu."
 
   actionview_instancetag_blank_option: Hautatu mesedez
   
@@ -277,7 +277,7 @@
   field_issue_to: Erlazionatutako zereginak
   field_delay: Atzerapena
   field_assignable: Arazoak rol honetara esleitu daitezke
-  field_redirect_existing_links: Existitzen diren estelak berbideratu
+  field_redirect_existing_links: Existitzen diren estekak berbideratu
   field_estimated_hours: Estimatutako denbora
   field_column_names: Zutabeak
   field_time_zone: Ordu zonaldea
@@ -318,7 +318,7 @@
   setting_cross_project_issue_relations: Zereginak proiektuen artean erlazionatzea baimendu
   setting_issue_list_default_columns: Zereginen zerrendan defektuz ikusten diren zutabeak
   setting_repositories_encodings: Biltegien kodeketak
-  setting_commit_logs_encoding: Commit-en mezuen kodetzea
+  setting_commit_logs_encoding: Commit-en egunkarien kodetzea
   setting_emails_footer: Eposten oina
   setting_protocol: Protokoloa
   setting_per_page_options: Orriko objektuen aukerak
@@ -363,7 +363,7 @@
   permission_delete_issues: Zereginak ezabatu
   permission_manage_public_queries: Galdera publikoak kudeatu
   permission_save_queries: Galderak gorde
-  permission_view_gantt: Gantt diagrama ikusi
+  permission_view_gantt: Gantt grafikoa ikusi
   permission_view_calendar: Egutegia ikusi
   permission_view_issue_watchers: Behatzaileen zerrenda ikusi
   permission_add_issue_watchers: Behatzaileak gehitu
@@ -441,7 +441,7 @@
   label_tracker: Aztarnaria
   label_tracker_plural: Aztarnariak
   label_tracker_new: Aztarnari berria
-  label_workflow: Workflow
+  label_workflow: Lan-fluxua
   label_issue_status: Zeregin egoera
   label_issue_status_plural: Zeregin egoerak
   label_issue_status_new: Egoera berria
@@ -506,7 +506,7 @@
   label_file_added: Fitxategia gehituta
   label_report: Berri ematea
   label_report_plural: Berri emateak
-  label_news: Beria
+  label_news: Berria
   label_news_new: Berria gehitu
   label_news_plural: Berriak
   label_news_latest: Azken berriak
@@ -553,7 +553,7 @@
   label_add_note: Oharra gehitu
   label_per_page: Orriko
   label_calendar: Egutegia
-  label_months_from: months from
+  label_months_from: hilabete noiztik
   label_gantt: Gantt
   label_internal: Barnekoa
   label_last_changes: "azken %{count} aldaketak"
@@ -784,7 +784,7 @@
   button_cancel: Ezeztatu
   button_activate: Gahitu
   button_sort: Ordenatu
-  button_log_time: Denbora apuntatu
+  button_log_time: Denbora erregistratu
   button_rollback: Itzuli bertsio honetara
   button_watch: Behatu
   button_unwatch: Behatzen utzi
@@ -824,9 +824,9 @@
   text_journal_set_to: "%{label}-k %{value} balioa hartu du"
   text_journal_deleted: "%{label} ezabatuta (%{old})"
   text_journal_added: "%{label} %{value} gehituta"
-  text_tip_issue_begin_day: gaur hasten diren atazak
-  text_tip_issue_end_day: gaur bukatzen diren atazak
-  text_tip_issue_begin_end_day: gaur hasi eta bukatzen diren atazak
+  text_tip_issue_begin_day: gaur hasten diren zereginak
+  text_tip_issue_end_day: gaur bukatzen diren zereginak
+  text_tip_issue_begin_end_day: gaur hasi eta bukatzen diren zereginak
   text_project_identifier_info: 'Letra xeheak (a-z), zenbakiak eta marrak erabil daitezke bakarrik.<br />Gorde eta gero identifikadorea ezin da aldatu.'
   text_caracters_maximum: "%{count} karaktere gehienez."
   text_caracters_minimum: "Gutxienez %{count} karaktereetako luzerakoa izan behar du."
@@ -859,7 +859,7 @@
   text_user_wrote: "%{value}-(e)k idatzi zuen:"
   text_enumeration_destroy_question: "%{count} objetu balio honetara esleituta daude."
   text_enumeration_category_reassign_to: 'Beste balio honetara esleitu:'
-  text_email_delivery_not_configured: "Eposta bidalketa ez dago konfiguratuta eta jakinarazpenak ezgaituta daude.\nKonfiguratu zure SMTP zerbitzaria config/email.yml-n eta aplikazioa berrabiarazi hauek gaitzeko."
+  text_email_delivery_not_configured: "Eposta bidalketa ez dago konfiguratuta eta jakinarazpenak ezgaituta daude.\nKonfiguratu zure SMTP zerbitzaria config/configuration.yml-n eta aplikazioa berrabiarazi hauek gaitzeko."
   text_repository_usernames_mapping: "Hautatu edo eguneratu Redmineko erabiltzailea biltegiko egunkarietan topatzen diren erabiltzaile izenekin erlazionatzeko.\nRedmine-n eta biltegian erabiltzaile izen edo eposta berdina duten erabiltzaileak automatikoki erlazionatzen dira."
   text_diff_truncated: '... Diff hau moztua izan da erakus daitekeen tamaina maximoa gainditu duelako.'
   text_custom_field_possible_values_info: 'Lerro bat balio bakoitzeko'
@@ -895,7 +895,7 @@
   enumeration_doc_categories: Dokumentu kategoriak
   enumeration_activities: Jarduerak (denbora kontrola))
   enumeration_system_activity: Sistemako Jarduera
-  label_board_sticky: Itxaskorra
+  label_board_sticky: Itsaskorra
   label_board_locked: Blokeatuta
   permission_export_wiki_pages: Wiki orriak esportatu
   setting_cache_formatted_text: Formatudun testua katxeatu
@@ -903,40 +903,44 @@
   error_unable_delete_issue_status: Ezine da zereginaren egoera ezabatu
   label_profile: Profila
   permission_manage_subtasks: Azpiatazak kudeatu
-  field_parent_issue: Guraso ataza
+  field_parent_issue: Zeregin gurasoa
   label_subtask_plural: Azpiatazak
   label_project_copy_notifications: Proiektua kopiatzen den bitartean eposta jakinarazpenak bidali
-  error_can_not_delete_custom_field: Ezin da eremu pertsonallizatua ezabatu
+  error_can_not_delete_custom_field: Ezin da eremu pertsonalizatua ezabatu
   error_unable_to_connect: Ezin da konektatu (%{value})
   error_can_not_remove_role: Rol hau erabiltzen hari da eta ezin da ezabatu.
   error_can_not_delete_tracker: Aztarnari honek zereginak ditu eta ezin da ezabatu.
-  field_principal: Principal
-  label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
-  field_time_entries: Log time
+  field_principal: Ekintzaile
+  label_my_page_block: "Nire orriko blokea"
+  notice_failed_to_save_members: "Kidea(k) gordetzean errorea: %{errors}."
+  text_zoom_out: Zooma txikiagotu
+  text_zoom_in: Zooma handiagotu
+  notice_unable_delete_time_entry: "Ezin da hautatutako denbora erregistroa ezabatu."
+  label_overall_spent_time: Igarotako denbora guztira
+  field_time_entries: "Denbora erregistratu"
   project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  project_module_calendar: Egutegia
+  button_edit_associated_wikipage: "Esleitutako wiki orria editatu: %{page_title}"
+  text_are_you_sure_with_children: "Zeregina eta azpi zeregin guztiak ezabatu?"
+  field_text: Testu eremua
+  label_user_mail_option_only_owner: "Jabea naizen gauzetarako barrarik"
+  setting_default_notification_option: "Lehenetsitako ohartarazpen aukera"
+  label_user_mail_option_only_my_events: "Behatzen ditudan edo partaide naizen gauzetarako bakarrik"
+  label_user_mail_option_only_assigned: "Niri esleitutako gauzentzat bakarrik"
+  label_user_mail_option_none: "Gertakaririk ez"
+  field_member_of_group: "Esleituta duenaren taldea"
+  field_assigned_to_role: "Esleituta duenaren rola"
+  notice_not_authorized_archived_project: "Atzitu nahi duzun proiektua artxibatua izan da."
+  label_principal_search: "Bilatu erabiltzaile edo taldea:"
+  label_user_search: "Erabiltzailea bilatu:"
+  field_visible: Ikusgai
+  setting_emails_header: "Eposten goiburua"
+  setting_commit_logtime_activity_id: "Erregistratutako denboraren jarduera"
+  text_time_logged_by_changeset: "%{value} aldaketan egindakoa."
+  setting_commit_logtime_enabled: "Erregistrutako denbora gaitu"
+  notice_gantt_chart_truncated: Grafikoa moztu da bistara daitekeen elementuen kopuru maximoa gainditu delako (%{max})
+  setting_gantt_items_limit: "Gantt grafikoan bistara daitekeen elementu kopuru maximoa"
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/locales/.svn/text-base/fa.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,945 @@
+fa:
+  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
+  direction: rtl
+  date:
+    formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
+      default: "%Y/%m/%d"
+      short: "%b %d"
+      long: "%B %d, %Y"
+      
+    day_names: [یک‌شنبه, دوشنبه, سه‌شنبه, چهارشنبه, پنج‌شنبه, آدینه, شنبه]
+    abbr_day_names: [یک, دو, سه, چهار, پنج, آدینه, شنبه]
+      
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
+    month_names: [~, ژانویه, Ùوریه, مارس, آوریل, مه, ژوئن, ژوئیه, اوت, سپتامبر, اکتبر, نوامبر, دسامبر]
+    abbr_month_names: [~, ژان, Ùور, مار, آور, مه, ژوئن, ژوئیه, اوت, سپت, اکت, نوا, دسا]
+    # Used in date_select and datime_select.
+    order: [ :year, :month, :day ]
+
+  time:
+    formats:
+      default: "%Y/%m/%d %p %I:%M"
+      time: "%p %I:%M"
+      short: "%d %b %H:%M"
+      long: "%B %d, %Y %H:%M"
+    am: "ق.ظ"
+    pm: "ب.ظ"
+      
+  datetime:
+    distance_in_words:
+      half_a_minute: "نیم دقیقه"
+      less_than_x_seconds:
+        one:   "کمتر از 1 ثانیه"
+        other: "کمتر از %{count} ثانیه"
+      x_seconds:
+        one:   "1 ثانیه"
+        other: "%{count} ثانیه"
+      less_than_x_minutes:
+        one:   "کمتر از 1 دقیقه"
+        other: "کمتر از %{count} دقیقه"
+      x_minutes:
+        one:   "1 دقیقه"
+        other: "%{count} دقیقه"
+      about_x_hours:
+        one:   "نزدیک 1 ساعت"
+        other: "نزدیک %{count} ساعت"
+      x_days:
+        one:   "1 روز"
+        other: "%{count} روز"
+      about_x_months:
+        one:   "نزدیک 1 ماه"
+        other: "نزدیک %{count} ماه"
+      x_months:
+        one:   "1 ماه"
+        other: "%{count} ماه"
+      about_x_years:
+        one:   "نزدیک 1 سال"
+        other: "نزدیک %{count} سال"
+      over_x_years:
+        one:   "بیش از 1 سال"
+        other: "بیش از %{count} سال"
+      almost_x_years:
+        one:   "نزدیک 1 سال"
+        other: "نزدیک %{count} سال"
+
+  number:
+    # Default format for numbers
+    format:
+      separator: "Ù«" 
+      delimiter: ""
+      precision: 3
+    human:
+      format:
+        delimiter: ""
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "بایت"
+            other: "بایت"
+          kb: "کیلوبایت"
+          mb: "مگابایت"
+          gb: "گیگابایت"
+          tb: "ترابایت"
+
+        
+# Used in array.to_sentence.
+  support:
+    array:
+      sentence_connector: "Ùˆ"
+      skip_last_comma: false
+      
+  activerecord:
+    errors:
+      template:
+        header:
+          one:    "1 ایراد از ذخیره سازی این %{model} جلوگیری کرد"
+          other:  "%{count} ایراد از ذخیره سازی این %{model} جلوگیری کرد"
+      messages:
+        inclusion: "در Ùهرست نیامده است"
+        exclusion: "رزرو شده است"
+        invalid: "نادرست است"
+        confirmation: "با بررسی سازگاری ندارد"
+        accepted: "باید Ù¾Ø°ÛŒØ±ÙØªÙ‡ شود"
+        empty: "نمی‌تواند تهی باشد"
+        blank: "نمی‌تواند تهی باشد"
+        too_long: "خیلی بلند است (بیشترین اندازه %{count} نویسه است)"
+        too_short: "خیلی کوتاه است (کمترین اندازه %{count} نویسه است)"
+        wrong_length: "اندازه نادرست است (باید %{count} نویسه باشد)"
+        taken: "پیش از این Ú¯Ø±ÙØªÙ‡ شده است"
+        not_a_number: "شماره درستی نیست"
+        not_a_date: "تاریخ درستی نیست"
+        greater_than: "باید بزرگتر از %{count} باشد"
+        greater_than_or_equal_to: "باید بزرگتر از یا برابر با %{count} باشد"
+        equal_to: "باید برابر با %{count} باشد"
+        less_than: "باید کمتر از %{count} باشد"
+        less_than_or_equal_to: "باید کمتر از یا برابر با %{count} باشد"
+        odd: "باید ÙØ±Ø¯ باشد"
+        even: "باید زوج باشد"
+        greater_than_start_date: "باید از تاریخ آغاز بزرگتر باشد"
+        not_same_project: "به همان پروژه وابسته نیست"
+        circular_dependency: "این وابستگی یک وابستگی دایره وار خواهد ساخت"
+        cant_link_an_issue_with_a_descendant: "یک پیامد نمی‌تواند به یکی از زیر کارهایش پیوند بخورد"
+
+  actionview_instancetag_blank_option: گزینش کنید
+  
+  general_text_No: 'خیر'
+  general_text_Yes: 'آری'
+  general_text_no: 'خیر'
+  general_text_yes: 'آری'
+  general_lang_name: 'Persian (پارسی)'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '6'
+  
+  notice_account_updated: حساب شما بروز شد.
+  notice_account_invalid_creditentials: نام کاربری یا گذرواژه نادرست است
+  notice_account_password_updated: گذرواژه بروز شد
+  notice_account_wrong_password: گذرواژه نادرست است
+  notice_account_register_done: حساب ساخته شد. برای ÙØ¹Ø§Ù„ نمودن آن، روی پیوندی Ú©Ù‡ به شما ایمیل شده کلیک کنید.
+  notice_account_unknown_email: کاربر شناخته نشد.
+  notice_can_t_change_password:  این حساب یک روش شناسایی بیرونی را به کار Ú¯Ø±ÙØªÙ‡ است. گذرواژه را نمی‌توان جایگزین کرد.
+  notice_account_lost_email_sent: یک ایمیل با راهنمایی درباره گزینش گذرواژه تازه برای شما ÙØ±Ø³ØªØ§Ø¯Ù‡ شد.
+  notice_account_activated: حساب شما ÙØ¹Ø§Ù„ شده است. اکنون می‌توانید وارد شوید.
+  notice_successful_create: با موÙقیت ساخته شد.
+  notice_successful_update: با موÙقیت بروز شد.
+  notice_successful_delete: با موÙقیت برداشته شد.
+  notice_successful_connection: با موÙقیت متصل شد.
+  notice_file_not_found: برگه درخواستی شما در دسترس نیست یا پاک شده است.
+  notice_locking_conflict: داده‌ها را کاربر دیگری بروز کرده است.
+  notice_not_authorized: شما به این برگه دسترسی ندارید.
+  notice_not_authorized_archived_project: پروژه درخواستی شما بایگانی شده است.
+  notice_email_sent: "یک ایمیل به %{value} ÙØ±Ø³ØªØ§Ø¯Ù‡ شد."
+  notice_email_error: "یک ایراد در ÙØ±Ø³ØªØ§Ø¯Ù† ایمیل پیش آمد (%{value})."
+  notice_feeds_access_key_reseted: کلید دسترسی RSS شما بازنشانی شد.
+  notice_api_access_key_reseted: کلید دسترسی API شما بازنشانی شد.
+  notice_failed_to_save_issues: "ذخیره سازی %{count} پیامد از %{total} پیامد گزینش شده شکست خورد: %{ids}."
+  notice_failed_to_save_members: "ذخیره سازی اعضا شکست خورد: %{errors}."
+  notice_no_issue_selected: "هیچ پیامدی برگزیده نشده است! پیامدهایی که می‌خواهید ویرایش کنید را برگزینید."
+  notice_account_pending: "حساب شما ساخته شد و اکنون چشم به راه روادید سرپرست است."
+  notice_default_data_loaded: پیکربندی پیش‌گزیده با موÙقیت بار شد.
+  notice_unable_delete_version: نگارش را نمی‌توان پاک کرد.
+  notice_unable_delete_time_entry: زمان گزارش شده را نمی‌توان پاک کرد.
+  notice_issue_done_ratios_updated: اندازه انجام شده پیامد بروز شد.
+  notice_gantt_chart_truncated: "نمودار بریده شد چون از بیشترین شماری که می‌توان نشان داد بزگتر است (%{max})."
+  
+  error_can_t_load_default_data: "پیکربندی پیش‌گزیده نمی‌تواند بار شود: %{value}"
+  error_scm_not_found: "بخش یا نگارش در انباره پیدا نشد."
+  error_scm_command_failed: "ایرادی در دسترسی به انباره پیش آمد: %{value}"
+  error_scm_annotate: "بخش پیدا نشد یا نمی‌توان برای آن یادداشت نوشت."
+  error_issue_not_found_in_project: 'پیامد پیدا نشد یا به این پروژه وابسته نیست.'
+  error_no_tracker_in_project: 'هیچ پیگردی به این پروژه پیوسته نشده است. پیکربندی پروژه را بررسی کنید.'
+  error_no_default_issue_status: 'هیچ وضعیت پیامد پیش‌گزیده‌ای مشخص نشده است. پیکربندی را بررسی کنید (به «پیکربندی -> وضعیت‌های پیامد» بروید).'
+  error_can_not_delete_custom_field: Ùیلد Ø³ÙØ§Ø±Ø´ÛŒ را نمی‌توان پاک کرد.
+  error_can_not_delete_tracker: "این پیگرد دارای پیامد است و نمی‌توان آن را پاک کرد."
+  error_can_not_remove_role: "این نقش به کار Ú¯Ø±ÙØªÙ‡ شده است Ùˆ نمی‌توان آن را پاک کرد."
+  error_can_not_reopen_issue_on_closed_version: 'یک پیامد که به یک نگارش بسته شده وابسته است را نمی‌توان باز کرد.'
+  error_can_not_archive_project: این پروژه را نمی‌توان بایگانی کرد.
+  error_issue_done_ratios_not_updated: "اندازه انجام شده پیامد بروز نشد."
+  error_workflow_copy_source: 'یک پیگرد یا نقش منبع را برگزینید.'
+  error_workflow_copy_target: 'پیگردها یا نقش‌های مقصد را برگزینید.'
+  error_unable_delete_issue_status: 'وضعیت پیامد را نمی‌توان پاک کرد.'
+  error_unable_to_connect: "نمی‌توان متصل شد (%{value})"
+  warning_attachments_not_saved: "%{count} پرونده ذخیره نشد."
+  
+  mail_subject_lost_password: "گذرواژه حساب %{value} شما"
+  mail_body_lost_password: 'برای جایگزینی گذرواژه خود، بر روی پیوند زیر کلیک کنید:'
+  mail_subject_register: "ÙØ¹Ø§Ù„سازی حساب %{value} شما"
+  mail_body_register: 'برای ÙØ¹Ø§Ù„سازی حساب خود، بر روی پیوند زیر کلیک کنید:'
+  mail_body_account_information_external: "شما می‌توانید حساب %{value} خود را برای ورود به کار برید."
+  mail_body_account_information: داده‌های حساب شما
+  mail_subject_account_activation_request: "درخواست ÙØ¹Ø§Ù„سازی حساب %{value}"
+  mail_body_account_activation_request: "یک کاربر تازه (%{value}) نامنویسی کرده است. این حساب چشم به راه روادید شماست:"
+  mail_subject_reminder: "زمان رسیدگی به %{count} پیامد در %{days} روز آینده سر می‌رسد"
+  mail_body_reminder: "زمان رسیدگی به %{count} پیامد که به شما واگذار شده است، در %{days} روز آینده سر می‌رسد:"
+  mail_subject_wiki_content_added: "برگه ویکی «%{id}» Ø§ÙØ²ÙˆØ¯Ù‡ شد"
+  mail_body_wiki_content_added: "برگه ویکی «%{id}» به دست %{author} Ø§ÙØ²ÙˆØ¯Ù‡ شد."
+  mail_subject_wiki_content_updated: "برگه ویکی «%{id}» بروز شد"
+  mail_body_wiki_content_updated: "برگه ویکی «%{id}» به دست %{author} بروز شد."
+  
+  gui_validation_error: 1 ایراد
+  gui_validation_error_plural: "%{count} ایراد"
+  
+  field_name: نام
+  field_description: توضیح
+  field_summary: خلاصه
+  field_is_required: الزامی
+  field_firstname: نام کوچک
+  field_lastname: نام خانوادگی
+  field_mail: ایمیل
+  field_filename: پرونده
+  field_filesize: اندازه
+  field_downloads: Ø¯Ø±ÛŒØ§ÙØªâ€ŒÙ‡Ø§
+  field_author: نویسنده
+  field_created_on: ساخته شده در
+  field_updated_on: بروز شده در
+  field_field_format: قالب
+  field_is_for_all: برای همه پروژه‌ها
+  field_possible_values: مقادیر ممکن
+  field_regexp: عبارت منظم
+  field_min_length: کمترین اندازه
+  field_max_length: بیشترین اندازه
+  field_value: مقدار
+  field_category: دسته
+  field_title: عنوان
+  field_project: پروژه
+  field_issue: پیامد
+  field_status: وضعیت
+  field_notes: یادداشت‌ها
+  field_is_closed: پیامد بسته شده
+  field_is_default: مقدار پیش‌گزیده
+  field_tracker: پیگرد
+  field_subject: موضوع
+  field_due_date: زمان سررسید
+  field_assigned_to: واگذار شده به
+  field_priority: برتری
+  field_fixed_version: نگارش هدÙ
+  field_user: کاربر
+  field_principal: دستور دهنده
+  field_role: نقش
+  field_homepage: برگه خانه
+  field_is_public: همگانی
+  field_parent: پروژه پدر
+  field_is_in_roadmap: این پیامدها در نقشه راه نشان داده شوند
+  field_login: ورود
+  field_mail_notification: آگاه سازی‌های ایمیلی
+  field_admin: سرپرست
+  field_last_login_on: آخرین ورود
+  field_language: زبان
+  field_effective_date: تاریخ
+  field_password: گذرواژه
+  field_new_password: گذرواژه تازه
+  field_password_confirmation: بررسی گذرواژه
+  field_version: نگارش
+  field_type: گونه
+  field_host: میزبان
+  field_port: درگاه
+  field_account: حساب
+  field_base_dn: DN پایه
+  field_attr_login: نشانه ورود
+  field_attr_firstname: نشانه نام کوچک
+  field_attr_lastname: نشانه نام خانوادگی
+  field_attr_mail: نشانه ایمیل
+  field_onthefly: ساخت کاربر بیدرنگ
+  field_start_date: تاریخ آغاز
+  field_done_ratio: ٪ انجام شده
+  field_auth_source: روش شناسایی
+  field_hide_mail: ایمیل من پنهان شود
+  field_comments: دیدگاه
+  field_url: نشانی
+  field_start_page: برگه آغاز
+  field_subproject: زیر پروژه
+  field_hours: ساعت‌
+  field_activity: ÙØ¹Ø§Ù„یت
+  field_spent_on: در تاریخ
+  field_identifier: شناسه
+  field_is_filter: پالایش پذیر
+  field_issue_to: پیامد وابسته
+  field_delay: دیرکرد
+  field_assignable: پیامدها می‌توانند به این نقش واگذار شوند
+  field_redirect_existing_links: پیوندهای پیشین  به پیوند تازه راهنمایی شوند
+  field_estimated_hours: زمان برآورد شده
+  field_column_names: ستون‌ها
+  field_time_entries: زمان نوشتن
+  field_time_zone: پهنه زمانی
+  field_searchable: جستجو پذیر
+  field_default_value: مقدار پیش‌گزیده
+  field_comments_sorting: نمایش دیدگاه‌ها
+  field_parent_title: برگه پدر
+  field_editable: ویرایش پذیر
+  field_watcher: دیده‌بان
+  field_identity_url: نشانی OpenID
+  field_content: محتوا
+  field_group_by: دسته بندی با
+  field_sharing: اشتراک گذاری
+  field_parent_issue: کار پدر
+  field_member_of_group: "دسته واگذار شونده"
+  field_assigned_to_role: "نقش واگذار شونده"
+  field_text: Ùیلد متنی
+  field_visible: آشکار
+  
+  setting_app_title: نام برنامه
+  setting_app_subtitle: زیرنام برنامه
+  setting_welcome_text: نوشتار خوش‌آمد گویی
+  setting_default_language: زبان پیش‌گزیده
+  setting_login_required: الزامی بودن ورود
+  setting_self_registration: خود نام نویسی
+  setting_attachment_max_size: بیشترین اندازه پیوست
+  setting_issues_export_limit: کرانه صدور پییامدها
+  setting_mail_from: نشانی ÙØ±Ø³ØªÙ†Ø¯Ù‡ ایمیل
+  setting_bcc_recipients: گیرندگان ایمیل دیده نشوند (bcc)
+  setting_plain_text_mail: ایمیل نوشته ساده (بدون HTML)
+  setting_host_name: نام میزبان و نشانی
+  setting_text_formatting: قالب بندی نوشته
+  setting_wiki_compression: ÙØ´Ø±Ø¯Ù‡â€ŒØ³Ø§Ø²ÛŒ پیشینه ویکی
+  setting_feeds_limit: کرانه محتوای خوراک
+  setting_default_projects_public: حالت پیش‌گزیده پروژه‌های تازه، همگانی است
+  setting_autofetch_changesets: Ø¯Ø±ÛŒØ§ÙØª خودکار تغییرات
+  setting_sys_api_enabled: ÙØ¹Ø§Ù„ سازی وب سرویس برای سرپرستی انباره
+  setting_commit_ref_keywords: کلیدواژه‌های نشانه
+  setting_commit_fix_keywords: کلیدواژه‌های انجام
+  setting_autologin: ورود خودکار
+  setting_date_format: قالب تاریخ
+  setting_time_format: قالب زمان
+  setting_cross_project_issue_relations: توانایی وابستگی میان پروژه‌ای پیامدها
+  setting_issue_list_default_columns: ستون‌های پیش‌گزیده نمایش داده شده در Ùهرست پیامدها
+  setting_repositories_encodings: کدگذاری انباره‌ها
+  setting_commit_logs_encoding: کدگذاری پیام‌های انباره
+  setting_emails_header: سرنویس ایمیل‌ها
+  setting_emails_footer: پانویس ایمیل‌ها
+  setting_protocol: پیوندنامه
+  setting_per_page_options: گزینه‌های اندازه داده‌های هر برگ
+  setting_user_format: قالب نمایشی کاربران
+  setting_activity_days_default: روزهای نمایش داده شده در ÙØ¹Ø§Ù„یت پروژه
+  setting_display_subprojects_issues: پیش‌گزیده نمایش پیامدهای زیرپروژه در پروژه پدر
+  setting_enabled_scm: ÙØ¹Ø§Ù„سازی SCM
+  setting_mail_handler_body_delimiters: "بریدن ایمیل‌ها پس از یکی از این ردیÙ‌ها"
+  setting_mail_handler_api_enabled: ÙØ¹Ø§Ù„سازی وب سرویس برای ایمیل‌های آمده
+  setting_mail_handler_api_key: کلید API
+  setting_sequential_project_identifiers: ساخت پشت سر هم شناسه پروژه
+  setting_gravatar_enabled: کاربرد Gravatar برای عکس کاربر
+  setting_gravatar_default: عکس Gravatar پیش‌گزیده
+  setting_diff_max_lines_displayed: بیشترین اندازه ردیÙ‌های ØªÙØ§ÙˆØª نشان داده شده
+  setting_file_max_size_displayed: بیشترین اندازه پرونده‌های نمایش داده شده درون خطی
+  setting_repository_log_display_limit: بیشترین شمار نگارش‌های نمایش داده شده در گزارش پرونده
+  setting_openid: پذیرش ورود و نام نویسی با OpenID
+  setting_password_min_length: کمترین اندازه گذرواژه
+  setting_new_project_user_role_id: نقش داده شده به کاربری که سرپرست نیست و پروژه می‌سازد
+  setting_default_projects_modules: پیمانه‌های پیش‌گزیده ÙØ¹Ø§Ù„ برای پروژه‌های تازه
+  setting_issue_done_ratio: برآورد اندازه انجام شده پیامد با
+  setting_issue_done_ratio_issue_field: کاربرد Ùیلد پیامد
+  setting_issue_done_ratio_issue_status: کاربرد وضعیت پیامد
+  setting_start_of_week: آغاز گاهشمار از
+  setting_rest_api_enabled: ÙØ¹Ø§Ù„سازی وب سرویس‌های REST
+  setting_cache_formatted_text: نهان سازی نوشته‌های قالب بندی شده
+  setting_default_notification_option: آگاه سازی پیش‌گزیده
+  setting_commit_logtime_enabled: ÙØ¹Ø§Ù„سازی زمان گذاشته شده
+  setting_commit_logtime_activity_id: ÙØ¹Ø§Ù„یت زمان گذاشته شده
+  setting_gantt_items_limit: بیشترین شمار بخش‌های نمایش داده شده در نمودار گانت
+  
+  permission_add_project: ساخت پروژه
+  permission_add_subprojects: ساخت زیرپروژه
+  permission_edit_project: ویرایش پروژه
+  permission_select_project_modules: گزینش پیمانه‌های پروژه
+  permission_manage_members: سرپرستی اعضا
+  permission_manage_project_activities: سرپرستی ÙØ¹Ø§Ù„یت‌های پروژه
+  permission_manage_versions: سرپرستی نگارش‌ها
+  permission_manage_categories: سرپرستی دسته‌های پیامد
+  permission_view_issues: دیدن پیامدها
+  permission_add_issues: Ø§ÙØ²ÙˆØ¯Ù† پیامدها
+  permission_edit_issues: ویرایش پیامدها
+  permission_manage_issue_relations: سرپرستی وابستگی پیامدها
+  permission_add_issue_notes: Ø§ÙØ²ÙˆØ¯Ù† یادداشت‌ها
+  permission_edit_issue_notes: ویرایش یادداشت‌ها
+  permission_edit_own_issue_notes: ویرایش یادداشت خود
+  permission_move_issues: جابجایی پیامدها
+  permission_delete_issues: پاک کردن پیامدها
+  permission_manage_public_queries: سرپرستی پرس‌وجوهای همگانی
+  permission_save_queries: ذخیره سازی پرس‌وجوها
+  permission_view_gantt: دیدن نمودار گانت
+  permission_view_calendar: دیدن گاهشمار
+  permission_view_issue_watchers: دیدن Ùهرست دیده‌بان‌ها
+  permission_add_issue_watchers: Ø§ÙØ²ÙˆØ¯Ù† دیده‌بان‌ها
+  permission_delete_issue_watchers: پاک کردن دیده‌بان‌ها
+  permission_log_time: نوشتن زمان گذاشته شده
+  permission_view_time_entries: دیدن زمان گذاشته شده
+  permission_edit_time_entries: ویرایش زمان گذاشته شده
+  permission_edit_own_time_entries: ویرایش زمان گذاشته شده خود
+  permission_manage_news: سرپرستی رویدادها
+  permission_comment_news: گذاشتن دیدگاه روی رویدادها
+  permission_manage_documents: سرپرستی نوشتارها
+  permission_view_documents: دیدن نوشتارها
+  permission_manage_files: سرپرستی پرونده‌ها
+  permission_view_files: دیدن پرونده‌ها
+  permission_manage_wiki: سرپرستی ویکی
+  permission_rename_wiki_pages: نامگذاری برگه ویکی
+  permission_delete_wiki_pages: پاک کردن برگه ویکی
+  permission_view_wiki_pages: دیدن ویکی
+  permission_view_wiki_edits: دیدن پیشینه ویکی
+  permission_edit_wiki_pages: ویرایش برگه‌های ویکی
+  permission_delete_wiki_pages_attachments: پاک کردن پیوست‌های برگه ویکی
+  permission_protect_wiki_pages: نگه‌داری برگه‌های ویکی
+  permission_manage_repository: سرپرستی انباره
+  permission_browse_repository: چریدن در انباره
+  permission_view_changesets: دیدن تغییرات
+  permission_commit_access: دسترسی تغییر انباره
+  permission_manage_boards: سرپرستی انجمن‌ها
+  permission_view_messages: دیدن پیام‌ها
+  permission_add_messages: ÙØ±Ø³ØªØ§Ø¯Ù† پیام‌ها
+  permission_edit_messages: ویرایش پیام‌ها
+  permission_edit_own_messages: ویرایش پیام خود
+  permission_delete_messages: پاک کردن پیام‌ها
+  permission_delete_own_messages: پاک کردن پیام خود
+  permission_export_wiki_pages: صدور برگه‌های ویکی
+  permission_manage_subtasks: سرپرستی زیرکارها
+  
+  project_module_issue_tracking: پیگیری پیامدها
+  project_module_time_tracking: پیگیری زمان
+  project_module_news: رویدادها
+  project_module_documents: نوشتارها
+  project_module_files: پرونده‌ها
+  project_module_wiki: ویکی
+  project_module_repository: انباره
+  project_module_boards: انجمن‌ها
+  project_module_calendar: گاهشمار
+  project_module_gantt: گانت
+  
+  label_user: کاربر
+  label_user_plural: کاربر
+  label_user_new: کاربر تازه
+  label_user_anonymous: ناشناس
+  label_project: پروژه
+  label_project_new: پروژه تازه
+  label_project_plural: پروژه
+  label_x_projects:
+    zero:  بدون پروژه
+    one:   "1 پروژه"
+    other: "%{count} پروژه"
+  label_project_all: همه پروژه‌ها
+  label_project_latest: آخرین پروژه‌ها
+  label_issue: پیامد
+  label_issue_new: پیامد تازه
+  label_issue_plural: پیامد
+  label_issue_view_all: دیدن همه پیامدها
+  label_issues_by: "پیامدهای دست%{value}"
+  label_issue_added: پیامد Ø§ÙØ²ÙˆØ¯Ù‡ شد
+  label_issue_updated: پیامد بروز شد
+  label_document: نوشتار
+  label_document_new: نوشتار تازه
+  label_document_plural: نوشتار
+  label_document_added: نوشتار Ø§ÙØ²ÙˆØ¯Ù‡ شد
+  label_role: نقش
+  label_role_plural: نقش
+  label_role_new: نقش تازه
+  label_role_and_permissions: نقش‌ها و پروانه‌ها
+  label_member: عضو
+  label_member_new: عضو تازه
+  label_member_plural: عضو
+  label_tracker: پیگرد
+  label_tracker_plural: پیگرد
+  label_tracker_new: پیگرد تازه
+  label_workflow: گردش کار
+  label_issue_status: وضعیت پیامد
+  label_issue_status_plural: وضعیت پیامد
+  label_issue_status_new: وضعیت تازه
+  label_issue_category: دسته پیامد
+  label_issue_category_plural: دسته پیامد
+  label_issue_category_new: دسته تازه
+  label_custom_field: Ùیلد Ø³ÙØ§Ø±Ø´ÛŒ
+  label_custom_field_plural: Ùیلد Ø³ÙØ§Ø±Ø´ÛŒ
+  label_custom_field_new: Ùیلد Ø³ÙØ§Ø±Ø´ÛŒ تازه
+  label_enumerations: برشمردنی‌ها
+  label_enumeration_new: مقدار تازه
+  label_information: داده
+  label_information_plural: داده
+  label_please_login: وارد شوید
+  label_register: نام نویسی کنید
+  label_login_with_open_id_option: یا با OpenID وارد شوید
+  label_password_lost: Ø¨Ø§Ø²ÛŒØ§ÙØª گذرواژه
+  label_home: سرآغاز
+  label_my_page: برگه من
+  label_my_account: حساب من
+  label_my_projects: پروژه‌های من
+  label_my_page_block: بخش برگه من
+  label_administration: سرپرستی
+  label_login: ورود
+  label_logout: خروج
+  label_help: راهنما
+  label_reported_issues: پیامدهای گزارش شده
+  label_assigned_to_me_issues: پیامدهای واگذار شده به من
+  label_last_login: آخرین ورود
+  label_registered_on: نام نویسی شده در
+  label_activity: ÙØ¹Ø§Ù„یت
+  label_overall_activity: ÙØ¹Ø§Ù„یت روی هم Ø±ÙØªÙ‡
+  label_user_activity: "ÙØ¹Ø§Ù„یت %{value}"
+  label_new: تازه
+  label_logged_as: "نام کاربری:"
+  label_environment: محیط
+  label_authentication: شناسایی
+  label_auth_source: روش شناسایی
+  label_auth_source_new: روش شناسایی تازه
+  label_auth_source_plural: روش شناسایی
+  label_subproject_plural: زیرپروژه
+  label_subproject_new: زیرپروژه تازه
+  label_and_its_subprojects: "%{value} و زیرپروژه‌هایش"
+  label_min_max_length: کمترین و بیشترین اندازه
+  label_list: Ùهرست
+  label_date: تاریخ
+  label_integer: شماره درست
+  label_float: شماره شناور
+  label_boolean: درست/نادرست
+  label_string: نوشته
+  label_text: نوشته بلند
+  label_attribute: نشانه
+  label_attribute_plural: نشانه
+  label_download: "%{count} بار Ø¯Ø±ÛŒØ§ÙØª شده"
+  label_download_plural: "%{count} بار Ø¯Ø±ÛŒØ§ÙØª شده"
+  label_no_data: هیچ داده‌ای برای نمایش نیست
+  label_change_status: جایگزینی وضعیت
+  label_history: پیشینه
+  label_attachment: پرونده
+  label_attachment_new: پرونده تازه
+  label_attachment_delete: پاک کردن پرونده
+  label_attachment_plural: پرونده
+  label_file_added: پرونده Ø§ÙØ²ÙˆØ¯Ù‡ شد
+  label_report: گزارش
+  label_report_plural: گزارش
+  label_news: رویداد
+  label_news_new: Ø§ÙØ²ÙˆØ¯Ù† رویداد
+  label_news_plural: رویداد
+  label_news_latest: آخرین رویدادها
+  label_news_view_all: دیدن همه رویدادها
+  label_news_added: رویداد Ø§ÙØ²ÙˆØ¯Ù‡ شد
+  label_settings: پیکربندی
+  label_overview: دورنما
+  label_version: نگارش
+  label_version_new: نگارش تازه
+  label_version_plural: نگارش
+  label_close_versions: بستن نگارش‌های انجام شده
+  label_confirmation: بررسی
+  label_export_to: 'قالب‌های دیگر:'
+  label_read: خواندن...
+  label_public_projects: پروژه‌های همگانی
+  label_open_issues: باز
+  label_open_issues_plural: باز
+  label_closed_issues: بسته
+  label_closed_issues_plural: بسته
+  label_x_open_issues_abbr_on_total:
+    zero:  0 باز از %{total}
+    one:   1 باز از %{total}
+    other: "%{count} باز از %{total}"
+  label_x_open_issues_abbr:
+    zero:  0 باز
+    one:   1 باز
+    other: "%{count} باز"
+  label_x_closed_issues_abbr:
+    zero:  0 بسته
+    one:   1 بسته
+    other: "%{count} بسته"
+  label_total: جمله
+  label_permissions: پروانه‌ها
+  label_current_status: وضعیت کنونی
+  label_new_statuses_allowed: وضعیت‌های Ù¾Ø°ÛŒØ±ÙØªÙ†ÛŒ تازه
+  label_all: همه
+  label_none: هیچ
+  label_nobody: هیچکس
+  label_next: پسین
+  label_previous: پیشین
+  label_used_by: به کار Ø±ÙØªÙ‡ در
+  label_details: ریزه‌کاری
+  label_add_note: Ø§ÙØ²ÙˆØ¯Ù† یادداشت
+  label_per_page: ردیÙ‌ها در هر برگه
+  label_calendar: گاهشمار
+  label_months_from: از ماه
+  label_gantt: گانت
+  label_internal: درونی
+  label_last_changes: "%{count} تغییر آخر"
+  label_change_view_all: دیدن همه تغییرات
+  label_personalize_page: Ø³ÙØ§Ø±Ø´ÛŒ نمودن این برگه
+  label_comment: دیدگاه
+  label_comment_plural: دیدگاه
+  label_x_comments:
+    zero: بدون دیدگاه
+    one: 1 دیدگاه
+    other: "%{count} دیدگاه"
+  label_comment_add: Ø§ÙØ²ÙˆØ¯Ù† دیدگاه
+  label_comment_added: دیدگاه Ø§ÙØ²ÙˆØ¯Ù‡ شد
+  label_comment_delete: پاک کردن دیدگاه‌ها
+  label_query: پرس‌وجوی Ø³ÙØ§Ø±Ø´ÛŒ
+  label_query_plural: پرس‌وجوی Ø³ÙØ§Ø±Ø´ÛŒ
+  label_query_new: پرس‌وجوی تازه
+  label_filter_add: Ø§ÙØ²ÙˆØ¯Ù† پالایه
+  label_filter_plural: پالایه
+  label_equals: برابر است با
+  label_not_equals: برابر نیست با
+  label_in_less_than: کمتر است از
+  label_in_more_than: بیشتر است از
+  label_greater_or_equal: بیشتر یا برابر است با
+  label_less_or_equal: کمتر یا برابر است با
+  label_in: در
+  label_today: امروز
+  label_all_time: همیشه
+  label_yesterday: دیروز
+  label_this_week: این Ù‡ÙØªÙ‡
+  label_last_week: Ù‡ÙØªÙ‡ پیشین
+  label_last_n_days: "%{count} روز گذشته"
+  label_this_month: این ماه
+  label_last_month: ماه پیشین
+  label_this_year: امسال
+  label_date_range: بازه تاریخ
+  label_less_than_ago: کمتر از چند روز پیشین
+  label_more_than_ago: بیشتر از چند روز پیشین
+  label_ago: روز پیشین
+  label_contains: دارد
+  label_not_contains: ندارد
+  label_day_plural: روز
+  label_repository: انباره
+  label_repository_plural: انباره
+  label_browse: چریدن
+  label_modification: "%{count} جایگذاری"
+  label_modification_plural: "%{count} جایگذاری"
+  label_branch: شاخه
+  label_tag: برچسب
+  label_revision: بازبینی
+  label_revision_plural: بازبینی
+  label_revision_id: "بازبینی %{value}"
+  label_associated_revisions: بازبینی‌های وابسته
+  label_added: Ø§ÙØ²ÙˆØ¯Ù‡ شده
+  label_modified: پیراسته شده
+  label_copied: رونویسی شده
+  label_renamed: نامگذاری شده
+  label_deleted: پاکسازی شده
+  label_latest_revision: آخرین بازبینی
+  label_latest_revision_plural: آخرین بازبینی
+  label_view_revisions: دیدن بازبینی‌ها
+  label_view_all_revisions: دیدن همه بازبینی‌ها
+  label_max_size: بیشترین اندازه
+  label_sort_highest: بردن به آغاز
+  label_sort_higher: بردن به بالا
+  label_sort_lower: بردن به پایین
+  label_sort_lowest: بردن به پایان
+  label_roadmap: نقشه راه
+  label_roadmap_due_in: "سررسید در %{value}"
+  label_roadmap_overdue: "%{value} دیرکرد"
+  label_roadmap_no_issues: هیچ پیامدی برای این نگارش نیست
+  label_search: جستجو
+  label_result_plural: دست‌آورد
+  label_all_words: همه واژه‌ها
+  label_wiki: ویکی
+  label_wiki_edit: ویرایش ویکی
+  label_wiki_edit_plural: ویرایش ویکی
+  label_wiki_page: برگه ویکی
+  label_wiki_page_plural: برگه ویکی
+  label_index_by_title: شاخص بر اساس نام
+  label_index_by_date: شاخص بر اساس تاریخ
+  label_current_version: نگارش کنونی
+  label_preview: پیش‌نمایش
+  label_feed_plural: خوراک
+  label_changes_details: ریز همه جایگذاری‌ها
+  label_issue_tracking: پیگیری پیامد
+  label_spent_time: زمان گذاشته شده
+  label_overall_spent_time: زمان گذاشته شده روی هم
+  label_f_hour: "%{value} ساعت"
+  label_f_hour_plural: "%{value} ساعت"
+  label_time_tracking: پیگیری زمان
+  label_change_plural: جایگذاری
+  label_statistics: سرشماری
+  label_commits_per_month: تغییر در هر ماه
+  label_commits_per_author: تغییر هر نویسنده
+  label_view_diff: دیدن ØªÙØ§ÙˆØªâ€ŒÙ‡Ø§
+  label_diff_inline: همراستا
+  label_diff_side_by_side: کنار به کنار
+  label_options: گزینه‌ها
+  label_copy_workflow_from: رونویسی گردش کار از روی
+  label_permissions_report: گزارش پروانه‌ها
+  label_watched_issues: پیامدهای دیده‌بانی شده
+  label_related_issues: پیامدهای وابسته
+  label_applied_status: وضعیت به کار Ø±ÙØªÙ‡
+  label_loading: بار گذاری...
+  label_relation_new: وابستگی تازه
+  label_relation_delete: پاک کردن وابستگی
+  label_relates_to: وابسته به
+  label_duplicates: نگارش دیگری از
+  label_duplicated_by: نگارشی دیگر در
+  label_blocks: بازداشت‌ها
+  label_blocked_by: بازداشت به دست
+  label_precedes: جلوتر است از
+  label_follows: پستر است از
+  label_end_to_start: پایان به آغاز
+  label_end_to_end: پایان به پایان
+  label_start_to_start: آغاز به آغاز
+  label_start_to_end: آغاز به پایان
+  label_stay_logged_in: وارد شده بمانید
+  label_disabled: ØºÛŒØ±ÙØ¹Ø§Ù„
+  label_show_completed_versions: نمایش نگارش‌های انجام شده
+  label_me: من
+  label_board: انجمن
+  label_board_new: انجمن تازه
+  label_board_plural: انجمن
+  label_board_locked: Ù‚ÙÙ„ شده
+  label_board_sticky: چسبناک
+  label_topic_plural: Ø³Ø±ÙØµÙ„
+  label_message_plural: پیام
+  label_message_last: آخرین پیام
+  label_message_new: پیام تازه
+  label_message_posted: پیام Ø§ÙØ²ÙˆØ¯Ù‡ شد
+  label_reply_plural: پاسخ
+  label_send_information: ÙØ±Ø³ØªØ§Ø¯Ù† داده‌های حساب به کاربر
+  label_year: سال
+  label_month: ماه
+  label_week: Ù‡ÙØªÙ‡
+  label_date_from: از
+  label_date_to: تا
+  label_language_based: بر اساس زبان کاربر
+  label_sort_by: "جور کرد با %{value}"
+  label_send_test_email: ÙØ±Ø³ØªØ§Ø¯Ù† ایمیل آزمایشی
+  label_feeds_access_key: کلید دسترسی RSS
+  label_missing_feeds_access_key: کلید دسترسی RSS در دسترس نیست
+  label_feeds_access_key_created_on: "کلید دسترسی RSS %{value} پیش ساخته شده است"
+  label_module_plural: پیمانه
+  label_added_time_by: "Ø§ÙØ²ÙˆØ¯Ù‡ شده به دست %{author} در %{age} پیش"
+  label_updated_time_by: "بروز شده به دست %{author} در %{age} پیش"
+  label_updated_time: "بروز شده در %{value} پیش"
+  label_jump_to_a_project: پرش به یک پروژه...
+  label_file_plural: پرونده
+  label_changeset_plural: تغییر
+  label_default_columns: ستون‌های پیش‌گزیده
+  label_no_change_option: (بدون تغییر)
+  label_bulk_edit_selected_issues: ویرایش دسته‌ای پیامدهای گزینش شده
+  label_theme: پوسته
+  label_default: پیش‌گزیده
+  label_search_titles_only: تنها نام‌ها جستجو شود
+  label_user_mail_option_all: "برای هر رویداد در همه پروژه‌ها"
+  label_user_mail_option_selected: "برای هر رویداد تنها در پروژه‌های گزینش شده..."
+  label_user_mail_option_none: "هیچ رویدادی"
+  label_user_mail_option_only_my_events: "تنها برای چیزهایی که دیده‌بان هستم یا در آن‌ها درگیر هستم"
+  label_user_mail_option_only_assigned: "تنها برای چیزهایی که به من واگذار شده"
+  label_user_mail_option_only_owner: "تنها برای چیزهایی که من دارنده آن‌ها هستم"
+  label_user_mail_no_self_notified: "نمی‌خواهم از تغییراتی که خودم می‌دهم آگاه شوم"
+  label_registration_activation_by_email: ÙØ¹Ø§Ù„سازی حساب با ایمیل
+  label_registration_manual_activation: ÙØ¹Ø§Ù„سازی حساب دستی
+  label_registration_automatic_activation: ÙØ¹Ø§Ù„سازی حساب خودکار
+  label_display_per_page: "ردیÙ‌ها در هر برگه: %{value}"
+  label_age: سن
+  label_change_properties: ویرایش ویژگی‌ها
+  label_general: همگانی
+  label_more: بیشتر
+  label_scm: SCM
+  label_plugins: Ø§ÙØ²ÙˆÙ†Ù‡â€ŒÙ‡Ø§
+  label_ldap_authentication: شناساییLDAP
+  label_downloads_abbr: Ø¯Ø±ÛŒØ§ÙØª
+  label_optional_description: توضیح اختیاری
+  label_add_another_file: Ø§ÙØ²ÙˆØ¯Ù† پرونده دیگر
+  label_preferences: پسندها
+  label_chronological_order: به ترتیب تاریخ
+  label_reverse_chronological_order: برعکس ترتیب تاریخ
+  label_planning: برنامه ریزی
+  label_incoming_emails: ایمیل‌های آمده
+  label_generate_key: ساخت کلید
+  label_issue_watchers: دیده‌بان‌ها
+  label_example: نمونه
+  label_display: نمایش
+  label_sort: جور کرد
+  label_ascending: Ø§ÙØ²Ø§ÛŒØ´ÛŒ
+  label_descending: کاهشی
+  label_date_from_to: از %{start} تا %{end}
+  label_wiki_content_added: برگه ویکی Ø§ÙØ²ÙˆØ¯Ù‡ شد
+  label_wiki_content_updated: برگه ویکی بروز شد
+  label_group: دسته
+  label_group_plural: دسته
+  label_group_new: دسته تازه
+  label_time_entry_plural: زمان گذاشته شده
+  label_version_sharing_none: بدون اشتراک
+  label_version_sharing_descendants: با زیر پروژه‌ها
+  label_version_sharing_hierarchy: با رشته پروژه‌ها
+  label_version_sharing_tree: با درخت پروژه
+  label_version_sharing_system: با همه پروژه‌ها
+  label_update_issue_done_ratios: بروز رسانی اندازه انجام شده پیامد
+  label_copy_source: منبع
+  label_copy_target: مقصد
+  label_copy_same_as_target: مانند مقصد
+  label_display_used_statuses_only: تنها وضعیت‌هایی نشان داده شوند Ú©Ù‡ در این پیگرد به کار Ø±ÙØªÙ‡â€ŒØ§Ù†Ø¯
+  label_api_access_key: کلید دسترسی API
+  label_missing_api_access_key: کلید دسترسی API در دسترس نیست
+  label_api_access_key_created_on: "کلید دسترسی API %{value} پیش ساخته شده است"
+  label_profile: نمایه
+  label_subtask_plural: زیرکار
+  label_project_copy_notifications: در هنگام رونویسی پروژه ایمیل‌های آگاه‌سازی را Ø¨ÙØ±Ø³Øª
+  label_principal_search: "جستجو برای کاربر یا دسته:"
+  label_user_search: "جستجو برای کاربر:"
+  
+  button_login: ورود
+  button_submit: واگذاری
+  button_save: نگهداری
+  button_check_all: گزینش همه
+  button_uncheck_all: گزینش هیچ
+  button_delete: پاک
+  button_create: ساخت
+  button_create_and_continue: ساخت و ادامه
+  button_test: آزمایش
+  button_edit: ویرایش
+  button_edit_associated_wikipage: "ویرایش برگه ویکی وابسته: %{page_title}"
+  button_add: Ø§ÙØ²ÙˆØ¯Ù†
+  button_change: ویرایش
+  button_apply: انجام
+  button_clear: پاک
+  button_lock: گذاشتن Ù‚ÙÙ„
+  button_unlock: برداشتن Ù‚ÙÙ„
+  button_download: Ø¯Ø±ÛŒØ§ÙØª
+  button_list: Ùهرست
+  button_view: دیدن
+  button_move: جابجایی
+  button_move_and_follow: جابجایی و ادامه
+  button_back: برگشت
+  button_cancel: بازگشت
+  button_activate: ÙØ¹Ø§Ù„سازی
+  button_sort: جور کرد
+  button_log_time: زمان‌نویسی
+  button_rollback: برگرد به این نگارش
+  button_watch: دیده‌بانی
+  button_unwatch: نا‌دیده‌بانی
+  button_reply: پاسخ
+  button_archive: بایگانی
+  button_unarchive: برگشت از بایگانی
+  button_reset: بازنشانی
+  button_rename: نامگذاری
+  button_change_password: جایگزینی گذرواژه
+  button_copy: رونوشت
+  button_copy_and_follow: رونوشت و ادامه
+  button_annotate: یادداشت
+  button_update: بروز رسانی
+  button_configure: پیکربندی
+  button_quote: نقل قول
+  button_duplicate: نگارش دیگر
+  button_show: نمایش
+  
+  status_active: ÙØ¹Ø§Ù„
+  status_registered: نام‌نویسی شده
+  status_locked: Ù‚ÙÙ„
+  
+  version_status_open: باز
+  version_status_locked: Ù‚ÙÙ„
+  version_status_closed: بسته
+
+  field_active: ÙØ¹Ø§Ù„
+  
+  text_select_mail_notifications: ÙØ±Ù…ان‌هایی Ú©Ù‡ برای آن‌ها باید ایمیل ÙØ±Ø³ØªØ§Ø¯Ù‡ شود را برگزینید.
+  text_regexp_info: برای نمونه ^[A-Z0-9]+$
+  text_min_max_length_info: 0 یعنی بدون کران
+  text_project_destroy_confirmation: آیا براستی می‌خواهید این پروژه و همه داده‌های آن را پاک کنید؟
+  text_subprojects_destroy_warning: "زیرپروژه‌های آن: %{value} هم پاک خواهند شد."
+  text_workflow_edit: یک نقش و یک پیگرد را برای ویرایش گردش کار برگزینید
+  text_are_you_sure: آیا این کار انجام شود؟
+  text_are_you_sure_with_children: "آیا پیامد و همه زیرپیامدهای آن پاک شوند؟"
+  text_journal_changed: "«%{label}» از «%{old}» به «%{new}» جایگزین شد"
+  text_journal_set_to: "«%{label}» به «%{value}» نشانده شد"
+  text_journal_deleted: "«%{label}» پاک شد (%{old})"
+  text_journal_added: "«%{label}»، «%{value}» را Ø§ÙØ²ÙˆØ¯"
+  text_tip_task_begin_day: روز آغاز پیامد
+  text_tip_task_end_day: روز پایان پیامد
+  text_tip_task_begin_end_day: روز آغاز و پایان پیامد
+  text_project_identifier_info: 'تنها نویسه‌های Ú©ÙˆÚ†Ú© (a-z)ØŒ شماره‌ها Ùˆ خط تیره Ù¾Ø°ÛŒØ±ÙØªÙ†ÛŒ است.<br />پس از ذخیره سازی، شناسه نمی‌تواند جایگزین شود.'
+  text_caracters_maximum: "بیشترین اندازه %{count} است."
+  text_caracters_minimum: "کمترین اندازه %{count} است."
+  text_length_between: "باید میان %{min} و %{max} نویسه باشد."
+  text_tracker_no_workflow: هیچ گردش کاری برای این پیگرد مشخص نشده است
+  text_unallowed_characters: نویسه‌های ناپسند
+  text_comma_separated: چند مقدار Ù¾Ø°ÛŒØ±ÙØªÙ†ÛŒ است (با «,» از هم جدا شوند).
+  text_line_separated: چند مقدار Ù¾Ø°ÛŒØ±ÙØªÙ†ÛŒ است (هر مقدار در یک خط).
+  text_issues_ref_in_commit_messages: نشانه روی و بستن پیامدها در پیام‌های انباره
+  text_issue_added: "پیامد %{id} به دست %{author} گزارش شد."
+  text_issue_updated: "پیامد %{id} به دست %{author} بروز شد."
+  text_wiki_destroy_confirmation: آیا براستی می‌خواهید این ویکی و همه محتوای آن را پاک کنید؟
+  text_issue_category_destroy_question: "برخی پیامدها (%{count}) به این دسته واگذار شده‌اند. می‌خواهید چه کنید؟"
+  text_issue_category_destroy_assignments: پاک کردن واگذاری به دسته
+  text_issue_category_reassign_to: واگذاری دوباره پیامدها به این دسته
+  text_user_mail_option: "برای پروژه‌های گزینش نشده، تنها ایمیل‌هایی درباره چیزهایی Ú©Ù‡ دیده‌بان یا درگیر آن‌ها هستید Ø¯Ø±ÛŒØ§ÙØª خواهید کرد (مانند پیامدهایی Ú©Ù‡ نویسنده آن‌ها هستید یا به شما واگذار شده‌اند)."
+  text_no_configuration_data: "نقش‌ها، پیگردها، وضعیت‌های پیامد و گردش کار هنوز پیکربندی نشده‌اند. \nبه سختی پیشنهاد می‌شود که پیکربندی پیش‌گزیده را بار کنید. سپس می‌توانید آن را ویرایش کنید."
+  text_load_default_configuration: بارگذاری پیکربندی پیش‌گزیده
+  text_status_changed_by_changeset: "در تغییر %{value} بروز شده است."
+  text_time_logged_by_changeset: "در تغییر %{value} نوشته شده است."
+  text_issues_destroy_confirmation: 'آیا براستی می‌خواهید پیامدهای گزینش شده را پاک کنید؟'
+  text_select_project_modules: 'پیمانه‌هایی Ú©Ù‡ باید برای این پروژه ÙØ¹Ø§Ù„ شوند را برگزینید:'
+  text_default_administrator_account_changed: حساب سرپرستی پیش‌گزیده جایگزین شد
+  text_file_repository_writable: پوشه پیوست‌ها نوشتنی است
+  text_plugin_assets_writable: پوشه دارایی‌های Ø§ÙØ²ÙˆÙ†Ù‡â€ŒÙ‡Ø§ نوشتنی است
+  text_rmagick_available: RMagick در دسترس است (اختیاری)
+  text_destroy_time_entries_question: "%{hours} ساعت روی پیامدهایی که می‌خواهید پاک کنید کار گزارش شده است. می‌خواهید چه کنید؟"
+  text_destroy_time_entries: ساعت‌های گزارش شده پاک شوند
+  text_assign_time_entries_to_project: ساعت‌های گزارش شده به پروژه واگذار شوند
+  text_reassign_time_entries: 'ساعت‌های گزارش شده به این پیامد واگذار شوند:'
+  text_user_wrote: "%{value} نوشت:"
+  text_enumeration_destroy_question: "%{count} داده به این برشمردنی وابسته شده‌اند."
+  text_enumeration_category_reassign_to: 'به این برشمردنی وابسته شوند:'
+  text_email_delivery_not_configured: "Ø¯Ø±ÛŒØ§ÙØª ایمیل پیکربندی نشده است Ùˆ آگاه‌سازی‌ها غیر ÙØ¹Ø§Ù„ هستند.\nکارگزار SMTP خود را در config/email.yml پیکربندی کنید Ùˆ برنامه را بازنشانی کنید تا ÙØ¹Ø§Ù„ شوند."
+  text_repository_usernames_mapping: "کاربر Redmine که به هر نام کاربری پیام‌های انباره نگاشت می‌شود را برگزینید.\nکاربرانی که نام کاربری یا ایمیل همسان دارند، خود به خود نگاشت می‌شوند."
+  text_diff_truncated: '... این ØªÙØ§ÙˆØª بریده شده چون بیشتر از بیشترین اندازه نمایش دادنی است.'
+  text_custom_field_possible_values_info: 'یک خط برای هر مقدار'
+  text_wiki_page_destroy_question: "این برگه %{descendants} زیربرگه دارد.می‌خواهید چه کنید؟"
+  text_wiki_page_nullify_children: "زیربرگه‌ها برگه ریشه شوند"
+  text_wiki_page_destroy_children: "زیربرگه‌ها و زیربرگه‌های آن‌ها پاک شوند"
+  text_wiki_page_reassign_children: "زیربرگه‌ها به زیر این برگه پدر بروند"
+  text_own_membership_delete_confirmation: "شما دارید برخی یا همه پروانه‌های خود را برمی‌دارید و شاید پس از این دیگر نتوانید این پروژه را ویرایش کنید.\nآیا می‌خواهید این کار را بکنید؟"
+  text_zoom_in: درشتنمایی
+  text_zoom_out: ریزنمایی
+  
+  default_role_manager: سرپرست
+  default_role_developer: برنامه‌نویس
+  default_role_reporter: گزارش‌دهنده
+  default_tracker_bug: ایراد
+  default_tracker_feature: ویژگی
+  default_tracker_support: پشتیبانی
+  default_issue_status_new: تازه
+  default_issue_status_in_progress: در گردش
+  default_issue_status_resolved: درست شده
+  default_issue_status_feedback: بازخورد
+  default_issue_status_closed: بسته
+  default_issue_status_rejected: برگشت خورده
+  default_doc_category_user: نوشتار کاربر
+  default_doc_category_tech: نوشتار ÙÙ†ÛŒ
+  default_priority_low: پایین
+  default_priority_normal: میانه
+  default_priority_high: بالا
+  default_priority_urgent: زود
+  default_priority_immediate: بیدرنگ
+  default_activity_design: طراحی
+  default_activity_development: ساخت
+  
+  enumeration_issue_priorities: برتری‌های پیامد
+  enumeration_doc_categories: دسته‌های نوشتار
+  enumeration_activities: ÙØ¹Ø§Ù„یت‌ها (پیگیری زمان)
+  enumeration_system_activity: ÙØ¹Ø§Ù„یت سامانه
+
+  text_tip_issue_begin_day: issue beginning this day
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_tip_issue_begin_end_day: issue beginning and ending this day
+  text_tip_issue_end_day: issue ending this day
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/fi.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/fi.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -750,7 +750,7 @@
   label_generate_key: Luo avain
   setting_mail_handler_api_enabled: Ota käyttöön WS saapuville sähköposteille
   setting_mail_handler_api_key: API avain
-  text_email_delivery_not_configured: "Sähköpostin jakelu ei ole määritelty ja sähköpostimuistutukset eivät ole käytössä.\nKonfiguroi sähköpostipalvelinasetukset (SMTP) config/email.yml tiedostosta ja uudelleenkäynnistä sovellus jotta asetukset astuvat voimaan."
+  text_email_delivery_not_configured: "Sähköpostin jakelu ei ole määritelty ja sähköpostimuistutukset eivät ole käytössä.\nKonfiguroi sähköpostipalvelinasetukset (SMTP) config/configuration.yml tiedostosta ja uudelleenkäynnistä sovellus jotta asetukset astuvat voimaan."
   field_parent_title: Aloitussivu
   label_issue_watchers: Tapahtuman seuraajat
   button_quote: Vastaa
@@ -957,3 +957,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/fr.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/fr.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -166,10 +166,10 @@
   notice_successful_create: Création effectuée avec succès.
   notice_successful_update: Mise à jour effectuée avec succès.
   notice_successful_delete: Suppression effectuée avec succès.
-  notice_successful_connection: Connection réussie.
+  notice_successful_connection: Connexion réussie.
   notice_file_not_found: "La page à laquelle vous souhaitez accéder n'existe pas ou a été supprimée."
   notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible.
-  notice_not_authorized: "Vous n'êtes pas autorisés à accéder à cette page."
+  notice_not_authorized: "Vous n'êtes pas autorisé à accéder à cette page."
   notice_not_authorized_archived_project: Le projet auquel vous tentez d'accéder a été archivé.
   notice_email_sent: "Un email a été envoyé à %{value}"
   notice_email_error: "Erreur lors de l'envoi de l'email (%{value})"
@@ -307,6 +307,7 @@
   field_active: Actif
   field_parent_issue: Tâche parente
   field_visible: Visible
+  field_warn_on_leaving_unsaved: "M'avertir lorsque je quitte une page contenant du texte non sauvegardé"
   
   setting_app_title: Titre de l'application
   setting_app_subtitle: Sous-titre de l'application
@@ -323,11 +324,11 @@
   setting_text_formatting: Formatage du texte
   setting_wiki_compression: Compression historique wiki
   setting_feeds_limit: Limite du contenu des flux RSS
-  setting_default_projects_public: Définir les nouveaux projects comme publics par défaut
+  setting_default_projects_public: Définir les nouveaux projets comme publics par défaut
   setting_autofetch_changesets: Récupération auto. des commits
   setting_sys_api_enabled: Activer les WS pour la gestion des dépôts
-  setting_commit_ref_keywords: Mot-clés de référencement
-  setting_commit_fix_keywords: Mot-clés de résolution
+  setting_commit_ref_keywords: Mots-clés de référencement
+  setting_commit_fix_keywords: Mots-clés de résolution
   setting_autologin: Autologin
   setting_date_format: Format de date
   setting_time_format: Format d'heure
@@ -349,7 +350,7 @@
   setting_gravatar_enabled: Afficher les Gravatar des utilisateurs
   setting_diff_max_lines_displayed: Nombre maximum de lignes de diff affichées
   setting_file_max_size_displayed: Taille maximum des fichiers texte affichés en ligne
-  setting_repository_log_display_limit: "Nombre maximum de revisions affichées sur l'historique d'un fichier"
+  setting_repository_log_display_limit: "Nombre maximum de révisions affichées sur l'historique d'un fichier"
   setting_openid: "Autoriser l'authentification et l'enregistrement OpenID"
   setting_password_min_length: Longueur minimum des mots de passe
   setting_new_project_user_role_id: Rôle donné à un utilisateur non-administrateur qui crée un projet
@@ -369,7 +370,7 @@
   permission_add_subprojects: Créer des sous-projets
   permission_edit_project: Modifier le projet
   permission_select_project_modules: Choisir les modules
-  permission_manage_members: Gérer les members
+  permission_manage_members: Gérer les membres
   permission_manage_versions: Gérer les versions
   permission_manage_categories: Gérer les catégories de demandes
   permission_view_issues: Voir les demandes
@@ -596,6 +597,7 @@
   label_query: Rapport personnalisé
   label_query_plural: Rapports personnalisés
   label_query_new: Nouveau rapport
+  label_my_queries: Mes rapports personnalisés
   label_filter_add: "Ajouter le filtre "
   label_filter_plural: Filtres
   label_equals: égal
@@ -859,7 +861,7 @@
   text_issue_added: "La demande %{id} a été soumise par %{author}."
   text_issue_updated: "La demande %{id} a été mise à jour par %{author}."
   text_wiki_destroy_confirmation: Etes-vous sûr de vouloir supprimer ce wiki et tout son contenu ?
-  text_issue_category_destroy_question: "%{count} demandes sont affectées à cette catégories. Que voulez-vous faire ?"
+  text_issue_category_destroy_question: "%{count} demandes sont affectées à cette catégorie. Que voulez-vous faire ?"
   text_issue_category_destroy_assignments: N'affecter les demandes à aucune autre catégorie
   text_issue_category_reassign_to: Réaffecter les demandes à cette catégorie
   text_user_mail_option: "Pour les projets non sélectionnés, vous recevrez seulement des notifications pour ce que vous surveillez ou à quoi vous participez (exemple: demandes dont vous êtes l'auteur ou la personne assignée)."
@@ -880,7 +882,7 @@
   text_user_wrote: "%{value} a écrit :"
   text_enumeration_destroy_question: "Cette valeur est affectée à %{count} objets."
   text_enumeration_category_reassign_to: 'Réaffecter les objets à cette valeur:'
-  text_email_delivery_not_configured: "L'envoi de mail n'est pas configuré, les notifications sont désactivées.\nConfigurez votre serveur SMTP dans config/email.yml et redémarrez l'application pour les activer."
+  text_email_delivery_not_configured: "L'envoi de mail n'est pas configuré, les notifications sont désactivées.\nConfigurez votre serveur SMTP dans config/configuration.yml et redémarrez l'application pour les activer."
   text_repository_usernames_mapping: "Vous pouvez sélectionner ou modifier l'utilisateur Redmine associé à chaque nom d'utilisateur figurant dans l'historique du dépôt.\nLes utilisateurs avec le même identifiant ou la même adresse mail seront automatiquement associés."
   text_diff_truncated: '... Ce différentiel a été tronqué car il excède la taille maximale pouvant être affichée.'
   text_custom_field_possible_values_info: 'Une ligne par valeur'
@@ -889,6 +891,7 @@
   text_wiki_page_destroy_children: "Supprimer les sous-pages et toutes leurs descedantes"
   text_wiki_page_reassign_children: "Réaffecter les sous-pages à cette page"
   text_own_membership_delete_confirmation: "Vous allez supprimer tout ou partie de vos permissions sur ce projet et ne serez peut-être plus autorisé à modifier ce projet.\nEtes-vous sûr de vouloir continuer ?"
+  text_warn_on_leaving_unsaved: "Cette page contient du texte non sauvegardé qui sera perdu si vous quittez la page."
   
   default_role_manager: "Manager "
   default_role_developer: "Développeur "
@@ -923,6 +926,7 @@
   error_no_tracker_in_project: "Aucun tracker n'est associé à ce projet. Vérifier la configuration du projet."
   error_no_default_issue_status: "Aucun statut de demande n'est défini par défaut. Vérifier votre configuration (Administration -> Statuts de demandes)."
   text_journal_changed: "%{label} changé de %{old} à %{new}"
+  text_journal_changed_no_detail: "%{label} mis à jour"
   text_journal_set_to: "%{label} mis à %{value}"
   text_journal_deleted: "%{label} %{old} supprimé"
   text_journal_added: "%{label} %{value} ajouté"
--- a/config/locales/.svn/text-base/gl.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/gl.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -772,7 +772,7 @@
   text_destroy_time_entries: Borrar as horas
   text_destroy_time_entries_question: Existen %{hours} horas asignadas á petición que quere borrar. ¿Que quere facer ?
   text_diff_truncated: '... Diferencia truncada por exceder o máximo tamaño visualizable.'
-  text_email_delivery_not_configured: "O envío de correos non está configurado, e as notificacións desactiváronse. \n Configure o servidor de SMTP en config/email.yml e reinicie a aplicación para activar os cambios."
+  text_email_delivery_not_configured: "O envío de correos non está configurado, e as notificacións desactiváronse. \n Configure o servidor de SMTP en config/configuration.yml e reinicie a aplicación para activar os cambios."
   text_enumeration_category_reassign_to: 'Reasignar ó seguinte valor:'
   text_enumeration_destroy_question: "%{count} obxectos con este valor asignado."
   text_file_repository_writable: Pódese escribir no repositorio
@@ -948,3 +948,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/he.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/he.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -889,7 +889,7 @@
   text_user_wrote: "%{value} כתב:"
   text_enumeration_destroy_question: "%{count} ××•×‘×™×§×˜×™× ×ž×•×¦×‘×™× ×œ×¢×¨×š ×–×”."
   text_enumeration_category_reassign_to: 'הצב מחדש לערך הזה:'
-  text_email_delivery_not_configured: '×œ× × ×§×‘×¢×” תצורה לשליחת דו×ר, וההתר×ות כבויות.\nקבע ×ת תצורת שרת ×”Ö¾SMTP בקובץ /etc/redmine/&lt;instance&gt;/email.yml והתחל ×ת ×”×פליקציה מחדש ×¢"מ ל×פשר ×ות×.'
+  text_email_delivery_not_configured: '×œ× × ×§×‘×¢×” תצורה לשליחת דו×ר, וההתר×ות כבויות.\nקבע ×ת תצורת שרת ×”Ö¾SMTP בקובץ /etc/redmine/&lt;instance&gt;/configuration.yml והתחל ×ת ×”×פליקציה מחדש ×¢"מ ל×פשר ×ות×.'
   text_repository_usernames_mapping: "בחר ×ו עדכן ×ת משתמש Redmine הממופה לכל ×©× ×ž×©×ª×ž×© ביומן המ×גר.\n×ž×©×ª×ž×©×™× ×‘×¢×œ×™ ×©× ×ו כתובת דו×ר ×–×”×” ב־Redmine ובמ×גר ×ž×ž×•×¤×™× ×‘×ופן ×וטומטי."
   text_diff_truncated: '... ×”×©×™× ×•×™×™× ×¢×•×‘×¨×™× ×ת מספר השורות המירבי לתצוגה, ולכן ×”× ×§×•×¦×¦×•.'
   text_custom_field_possible_values_info: שורה ×חת לכל ערך
@@ -941,3 +941,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/hr.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/hr.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -854,7 +854,7 @@
   text_user_wrote: "%{value} je napisao/la:"
   text_enumeration_destroy_question: "%{count} objekata je pridruženo toj vrijednosti."
   text_enumeration_category_reassign_to: 'Premjesti ih ovoj vrijednosti:'
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
   text_diff_truncated: '... Ovaj diff je odrezan zato Å¡to prelazi maksimalnu veliÄinu koja može biti prikazana.'
   text_custom_field_possible_values_info: 'One line for each value'
@@ -943,3 +943,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/hu.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/hu.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -748,7 +748,7 @@
   label_generate_key: Kulcs generálása
   setting_mail_handler_api_enabled: Web Service engedélyezése a beérkezett levelekhez
   setting_mail_handler_api_key: API kulcs
-  text_email_delivery_not_configured: "Az E-mail küldés nincs konfigurálva, és az értesítések ki vannak kapcsolva.\nÃllítsd be az SMTP szervert a config/email.yml fájlban és indítsd újra az alkalmazást, hogy érvénybe lépjen."
+  text_email_delivery_not_configured: "Az E-mail küldés nincs konfigurálva, és az értesítések ki vannak kapcsolva.\nÃllítsd be az SMTP szervert a config/configuration.yml fájlban és indítsd újra az alkalmazást, hogy érvénybe lépjen."
   field_parent_title: Szülő oldal
   label_issue_watchers: Megfigyelők
   setting_commit_logs_encoding: Commit üzenetek kódlapja
@@ -955,3 +955,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/id.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/id.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -833,7 +833,7 @@
   text_user_wrote: "%{value} menulis:"
   text_enumeration_destroy_question: "%{count} obyek ditugaskan untuk nilai ini."
   text_enumeration_category_reassign_to: 'Tugaskan kembali untuk nilai ini:'
-  text_email_delivery_not_configured: "Pengiriman email belum dikonfigurasi, notifikasi tidak diaktifkan.\nAnda harus mengkonfigur SMTP server anda pada config/email.yml dan restart kembali aplikasi untuk mengaktifkan."
+  text_email_delivery_not_configured: "Pengiriman email belum dikonfigurasi, notifikasi tidak diaktifkan.\nAnda harus mengkonfigur SMTP server anda pada config/configuration.yml dan restart kembali aplikasi untuk mengaktifkan."
   text_repository_usernames_mapping: "Pilih atau perbarui pengguna Redmine yang terpetakan ke setiap nama pengguna yang ditemukan di log repositori.\nPengguna dengan nama pengguna dan repositori atau email yang sama  secara otomasit akan dipetakan."
   text_diff_truncated: '... Perbedaan terpotong karena melebihi batas maksimum yang bisa ditampilkan.'
   text_custom_field_possible_values_info: 'Satu baris untuk setiap nilai'
@@ -944,3 +944,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/it.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/it.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -730,7 +730,7 @@
   label_generate_key: Genera una chiave
   setting_mail_handler_api_enabled: Abilita WS per le email in arrivo
   setting_mail_handler_api_key: Chiave API
-  text_email_delivery_not_configured: "La consegna via email non è configurata e le notifiche sono disabilitate.\nConfigura il tuo server SMTP in config/email.yml e riavvia l'applicazione per abilitarle."
+  text_email_delivery_not_configured: "La consegna via email non è configurata e le notifiche sono disabilitate.\nConfigura il tuo server SMTP in config/configuration.yml e riavvia l'applicazione per abilitarle."
   field_parent_title: Pagina principale
   label_issue_watchers: Osservatori
   setting_commit_logs_encoding: Codifica dei messaggi di commit
@@ -937,3 +937,7 @@
   setting_commit_logtime_enabled: Abilita registrazione del tempo di collegamento
   notice_gantt_chart_truncated: Il grafico è stato troncato perchè eccede il numero di oggetti (%{max}) da visualizzare
   setting_gantt_items_limit: Massimo numero di oggetti da visualizzare sul diagramma di gantt
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/ja.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/ja.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -919,7 +919,7 @@
   text_user_wrote: "%{value} ã¯æ›¸ãã¾ã—ãŸ:"
   text_enumeration_destroy_question: "%{count}個ã®ã‚ªãƒ–ジェクトãŒã“ã®å€¤ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚"
   text_enumeration_category_reassign_to: '次ã®å€¤ã«å‰²ã‚Šå½“ã¦ç›´ã™:'
-  text_email_delivery_not_configured: "メールをé€ä¿¡ã™ã‚‹ãŸã‚ã«å¿…è¦ãªè¨­å®šãŒè¡Œã‚れã¦ã„ãªã„ãŸã‚ã€ãƒ¡ãƒ¼ãƒ«é€šçŸ¥ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。\nconfig/email.ymlã§SMTPサーãƒã®è¨­å®šã‚’行ã„ã€ã‚¢ãƒ—リケーションをå†èµ·å‹•ã—ã¦ãã ã•ã„。"
+  text_email_delivery_not_configured: "メールをé€ä¿¡ã™ã‚‹ãŸã‚ã«å¿…è¦ãªè¨­å®šãŒè¡Œã‚れã¦ã„ãªã„ãŸã‚ã€ãƒ¡ãƒ¼ãƒ«é€šçŸ¥ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。\nconfig/configuration.ymlã§SMTPサーãƒã®è¨­å®šã‚’行ã„ã€ã‚¢ãƒ—リケーションをå†èµ·å‹•ã—ã¦ãã ã•ã„。"
   text_repository_usernames_mapping: "リãƒã‚¸ãƒˆãƒªã®ãƒ­ã‚°ã‹ã‚‰æ¤œå‡ºã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼åã‚’ã©ã®Redmineユーザーã«é–¢é€£ã¥ã‘ã‚‹ã®ã‹é¸æŠžã—ã¦ãã ã•ã„。\nログ上ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¾ãŸã¯ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒRedmineã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ä¸€è‡´ã™ã‚‹å ´åˆã¯è‡ªå‹•çš„ã«é–¢é€£ã¥ã‘られã¾ã™ã€‚"
   text_diff_truncated: '... 差分ã®è¡Œæ•°ãŒè¡¨ç¤ºå¯èƒ½ãªä¸Šé™ã‚’è¶…ãˆã¾ã—ãŸã€‚è¶…éŽåˆ†ã¯è¡¨ç¤ºã—ã¾ã›ã‚“。'
   text_custom_field_possible_values_info: 'é¸æŠžè‚¢ã®å€¤ã¯1行ã«1個ãšã¤è¨˜è¿°ã—ã¦ãã ã•ã„。'
@@ -957,3 +957,7 @@
   enumeration_doc_categories: 文書カテゴリ
   enumeration_activities: 作業分類 (時間トラッキング)
   enumeration_system_activity: システム作業分類
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/ko.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/ko.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -843,7 +843,7 @@
   text_user_wrote: "%{value}ì˜ ë§ê¸€:"
   text_enumeration_category_reassign_to: '새로운 ê°’ì„ ì„¤ì •:'
   text_enumeration_destroy_question: "%{count} ê°œì˜ ì¼ê°ì´ ì´ ê°’ì„ ì‚¬ìš©í•˜ê³  있습니다."
-  text_email_delivery_not_configured: "ì´ë©”ì¼ ì „ë‹¬ì´ ì„¤ì •ë˜ì§€ 않았습니다. 그래서 ì•Œë¦¼ì´ ë¹„í™œì„±í™”ë˜ì—ˆìŠµë‹ˆë‹¤.\n SMTP서버를 config/email.ymlì—서 설정하고 어플리케ì´ì…˜ì„ 다시 시작하십시오. 그러면 ë™ìž‘합니다."
+  text_email_delivery_not_configured: "ì´ë©”ì¼ ì „ë‹¬ì´ ì„¤ì •ë˜ì§€ 않았습니다. 그래서 ì•Œë¦¼ì´ ë¹„í™œì„±í™”ë˜ì—ˆìŠµë‹ˆë‹¤.\n SMTP서버를 config/configuration.ymlì—서 설정하고 어플리케ì´ì…˜ì„ 다시 시작하십시오. 그러면 ë™ìž‘합니다."
   text_repository_usernames_mapping: "저장소 로그ì—서 ë°œê²¬ëœ ê° ì‚¬ìš©ìžì— ë ˆë“œë§ˆì¸ ì‚¬ìš©ìžë¥¼ ì—…ë°ì´íŠ¸í• ë•Œ ì„ íƒí•©ë‹ˆë‹¤.\n레드마ì¸ê³¼ ì €ìž¥ì†Œì˜ ì´ë¦„ì´ë‚˜ ì´ë©”ì¼ì´ ê°™ì€ ì‚¬ìš©ìžê°€ ìžë™ìœ¼ë¡œ ì—°ê²°ë©ë‹ˆë‹¤."
   text_diff_truncated: '... ì´ ì°¨ì´ì ì€ 표시할 수 있는 최대 줄수를 초과해서 ì´ ì°¨ì´ì ì€ 잘렸습니다.'
   text_custom_field_possible_values_info: 'ê° ê°’ 당 한 줄'
@@ -988,3 +988,7 @@
   setting_commit_logtime_enabled: 커밋 시ì ì— 작업 시간 ê¸°ë¡ í™œì„±í™”
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/lt.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/lt.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -885,7 +885,7 @@
   text_user_wrote: "%{value} parašė:"
   text_enumeration_destroy_question: "%{count} objektai priskirti šiai reikšmei."
   text_enumeration_category_reassign_to: 'Priskirti juos šiai reikšmei:'
-  text_email_delivery_not_configured: "El.pašto siuntimas nesukonfigūruotas, ir perspėjimai neaktyvus.\nSukonfigūruokite savo SMTP serverį byloje config/email.yml ir perleiskite programą norėdami pritaikyti pakeitimus."
+  text_email_delivery_not_configured: "El.pašto siuntimas nesukonfigūruotas, ir perspėjimai neaktyvus.\nSukonfigūruokite savo SMTP serverį byloje config/configuration.yml ir perleiskite programą norėdami pritaikyti pakeitimus."
   text_repository_usernames_mapping: "Parinkite  ar atnaujinkite Redmine vartotojo vardą kiekvienam saugyklos vardui, kuris paminėtas saugyklos log'e.\nVartotojai, turintys tą patį Redmine ir saugyklos vardą ar el.paštą automatiškai surišti."
   text_diff_truncated: "... Å is diff'as nukarpytas, nes jis virÅ¡ijo maksimalų rodomÄ… eiluÄių skaiÄių."
   text_custom_field_possible_values_info: 'Po vieną eilutę kiekvienai reikšmei'
@@ -996,3 +996,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/lv.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/lv.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -854,7 +854,7 @@
   text_user_wrote: "%{value} rakstīja:"
   text_enumeration_destroy_question: "%{count} objekti ir piešķirti šai vērtībai."
   text_enumeration_category_reassign_to: 'Piešķirt tos šai vērtībai:'
-  text_email_delivery_not_configured: "E-pastu nosÅ«tīšana nav konfigurÄ“ta, un ziņojumi ir izslÄ“gti.\nKonfigurÄ“jiet savu SMTP serveri datnÄ“ config/email.yml un pÄrstartÄ“jiet lietotni."
+  text_email_delivery_not_configured: "E-pastu nosÅ«tīšana nav konfigurÄ“ta, un ziņojumi ir izslÄ“gti.\nKonfigurÄ“jiet savu SMTP serveri datnÄ“ config/configuration.yml un pÄrstartÄ“jiet lietotni."
   text_repository_usernames_mapping: "IzvÄ“lieties vai atjaunojiet Redmine lietotÄju, saistÄ«tu ar katru lietotÄjvÄrdu, kas atrodams repozitorija žurnÄlÄ.\nLietotÄji ar to paÅ¡u Redmine un repozitorija lietotÄjvÄrdu bÅ«s saistÄ«ti automÄtiski."
   text_diff_truncated: '... Å is diff tika nošķelts, jo tas pÄrsniedz maksimÄlo izmÄ“ru, ko var parÄdÄ«t.'
   text_custom_field_possible_values_info: 'Katra vÄ“rtÄ«bas savÄ rindÄ'
@@ -931,3 +931,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/mk.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/mk.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -877,7 +877,7 @@
   text_user_wrote: "%{value} напиша:"
   text_enumeration_destroy_question: "%{count} objects are assigned to this value."
   text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  text_email_delivery_not_configured: "ДоÑтавата по е-пошта не е конфигурирана, и извеÑтувањата Ñе оневозможени.\nКонфигурирајте го Вашиот  SMTP Ñервер во config/email.yml и реÑтартирајте ја апликацијата."
+  text_email_delivery_not_configured: "ДоÑтавата по е-пошта не е конфигурирана, и извеÑтувањата Ñе оневозможени.\nКонфигурирајте го Вашиот  SMTP Ñервер во config/configuration.yml и реÑтартирајте ја апликацијата."
   text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
   text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
   text_custom_field_possible_values_info: 'One line for each value'
@@ -936,3 +936,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/mn.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/mn.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -859,7 +859,7 @@
   text_user_wrote: "%{value} бичихдÑÑ:"
   text_enumeration_destroy_question: "Ð­Ð½Ñ ÑƒÑ‚Ð³Ð°Ð´ %{count} обьект оноогдÑон байна."
   text_enumeration_category_reassign_to: 'ТÑдгÑÑрийг ÑÐ½Ñ ÑƒÑ‚Ð³Ð°Ð´ дахин оноо:'
-  text_email_delivery_not_configured: "ИмÑйлийн тохиргоог хараахан тохируулаагүй байна, тиймÑÑÑ Ð¸Ð¼Ñйл мÑдÑгдÑл Ñвуулах боломжгүй байна.\nSMTP ÑервÑÑ€ÑÑ config/email.yml файл дотор тохируулаад төÑлийн менежерÑÑ Ð´Ð°Ñ…Ð¸Ð°Ð´ ÑхлүүлÑÑÑ€Ñй."
+  text_email_delivery_not_configured: "ИмÑйлийн тохиргоог хараахан тохируулаагүй байна, тиймÑÑÑ Ð¸Ð¼Ñйл мÑдÑгдÑл Ñвуулах боломжгүй байна.\nSMTP ÑервÑÑ€ÑÑ config/configuration.yml файл дотор тохируулаад төÑлийн менежерÑÑ Ð´Ð°Ñ…Ð¸Ð°Ð´ ÑхлүүлÑÑÑ€Ñй."
   text_repository_usernames_mapping: "Репозиторийн логд байгаа бүх Ñ…ÑÑ€ÑглÑгчийн нÑрүүдÑд харгалзÑан ТөÑлийн Менежер ÑиÑтемд бүртгÑлтÑй Ñ…ÑÑ€ÑглÑгчдийг Сонгох юмуу шинÑÑ‡Ð¸Ð»Ð½Ñ Ò¯Ò¯.\nТөÑлийн менежер болон репозиторид байгаа ижилхÑн нÑÑ€ юмуу имÑйлтÑй Ñ…ÑÑ€ÑглÑгчид харилцан харгалзна."
   text_diff_truncated: '... Файлын Ñлгаврын Ñ…ÑмжÑÑ Ò¯Ð·Ò¯Ò¯Ð»ÑÑ…Ñд дÑндүү урт байгаа ÑƒÑ‡Ñ€Ð°Ð°Ñ Ñ‚Ó©Ð³ÑÐ³Ó©Ð»Ó©Ó©Ñ Ð½ÑŒ хаÑч үзүүлÑв.'
   text_custom_field_possible_values_info: 'One line for each value'
@@ -937,3 +937,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/nl.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/nl.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -742,7 +742,7 @@
   text_destroy_time_entries: Verwijder gerapporteerde uren
   text_destroy_time_entries_question: "%{hours} uren werden gerapporteerd op de issue(s) die u wilde verwijderen. Wat wil u doen?"
   text_diff_truncated: '... Deze diff werd afgekort omdat het de maximale weer te geven karakters overschreed.'
-  text_email_delivery_not_configured: "E-mailbezorging is niet geconfigureerd. Notificaties zijn uitgeschakeld.\nConfigureer uw SMTP server in config/email.yml en herstart de applicatie om dit te activeren."
+  text_email_delivery_not_configured: "E-mailbezorging is niet geconfigureerd. Notificaties zijn uitgeschakeld.\nConfigureer uw SMTP server in config/configuration.yml en herstart de applicatie om dit te activeren."
   text_enumeration_category_reassign_to: 'Wijs de volgende waarde toe:'
   text_enumeration_destroy_question: "%{count} objecten zijn toegewezen aan deze waarde."
   text_file_repository_writable: Bestandsrepository beschrijfbaar
@@ -918,3 +918,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/no.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/no.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -716,7 +716,7 @@
   label_generate_key: Generer en nøkkel
   setting_mail_handler_api_enabled: Skru på WS for innkommende e-post
   setting_mail_handler_api_key: API-nøkkel
-  text_email_delivery_not_configured: "Levering av e-post er ikke satt opp, og varsler er skrudd av.\nStill inn din SMTP-tjener i config/email.yml og start programmet på nytt for å skru det på."
+  text_email_delivery_not_configured: "Levering av e-post er ikke satt opp, og varsler er skrudd av.\nStill inn din SMTP-tjener i config/configuration.yml og start programmet på nytt for å skru det på."
   field_parent_title: Foreldreside
   label_issue_watchers: Overvåkere
   setting_commit_logs_encoding: Tegnkoding for innsendingsmeldinger
@@ -923,3 +923,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/pl.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/pl.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -771,7 +771,7 @@
   text_default_administrator_account_changed: Zmieniono domyślne hasło administratora
   text_destroy_time_entries: Usuń wpisy dziennika
   text_destroy_time_entries_question: Przepracowano %{hours} godzin przy zagadnieniu, które chcesz usunąć. Co chcesz zrobić?
-  text_email_delivery_not_configured: "Dostarczanie poczty elektronicznej nie zostało skonfigurowane, więc powiadamianie jest nieaktywne.\nSkonfiguruj serwer SMTP w config/email.yml  a następnie zrestartuj aplikację i uaktywnij to."
+  text_email_delivery_not_configured: "Dostarczanie poczty elektronicznej nie zostało skonfigurowane, więc powiadamianie jest nieaktywne.\nSkonfiguruj serwer SMTP w config/configuration.yml  a następnie zrestartuj aplikację i uaktywnij to."
   text_enumeration_category_reassign_to: 'Zmień przypisanie na tą wartość:'
   text_enumeration_destroy_question: "%{count} obiektów jest przypisana do tej wartości."
   text_file_repository_writable: Zapisywalne repozytorium plików
@@ -953,3 +953,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/pt-BR.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/pt-BR.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -728,7 +728,7 @@
   text_user_wrote: "%{value} escreveu:"
   text_enumeration_destroy_question: "%{count} objetos estão atribuídos a este valor."
   text_enumeration_category_reassign_to: 'Reatribuí-los ao valor:'
-  text_email_delivery_not_configured: "O envio de e-mail não está configurado, e as notificações estão inativas.\nConfigure seu servidor SMTP no arquivo config/email.yml e reinicie a aplicação para ativá-las."
+  text_email_delivery_not_configured: "O envio de e-mail não está configurado, e as notificações estão inativas.\nConfigure seu servidor SMTP no arquivo config/configuration.yml e reinicie a aplicação para ativá-las."
 
   default_role_manager: Gerente
   default_role_developer: Desenvolvedor
@@ -956,3 +956,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/pt.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/pt.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -715,7 +715,7 @@
   text_user_wrote: "%{value} escreveu:"
   text_enumeration_destroy_question: "%{count} objectos estão atribuídos a este valor."
   text_enumeration_category_reassign_to: 'Re-atribuí-los para este valor:'
-  text_email_delivery_not_configured: "Entrega por e-mail não está configurada, e as notificação estão desactivadas.\nConfigure o seu servidor de SMTP em config/email.yml e reinicie a aplicação para activar estas funcionalidades."
+  text_email_delivery_not_configured: "Entrega por e-mail não está configurada, e as notificação estão desactivadas.\nConfigure o seu servidor de SMTP em config/configuration.yml e reinicie a aplicação para activar estas funcionalidades."
   
   default_role_manager: Gestor
   default_role_developer: Programador
@@ -940,3 +940,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/ro.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/ro.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -774,7 +774,7 @@
   text_user_wrote: "%{value} a scris:"
   text_enumeration_destroy_question: "Această valoare are %{count} obiecte."
   text_enumeration_category_reassign_to: 'Atribuie la această valoare:'
-  text_email_delivery_not_configured: "Trimiterea de emailuri nu este configurată și ca urmare, notificările sunt dezactivate.\nConfigurați serverul SMTP în config/email.yml și reporniți aplicația pentru a le activa."
+  text_email_delivery_not_configured: "Trimiterea de emailuri nu este configurată și ca urmare, notificările sunt dezactivate.\nConfigurați serverul SMTP în config/configuration.yml și reporniți aplicația pentru a le activa."
   text_repository_usernames_mapping: "Selectați sau modificați contul Redmine echivalent contului din istoricul depozitului.\nUtilizatorii cu un cont (sau e-mail) identic în Redmine și depozit sunt echivalate automat." 
   text_diff_truncated: '... Comparația a fost trunchiată pentru ca depășește lungimea maximă de text care poate fi afișat.'
   text_custom_field_possible_values_info: 'O linie pentru fiecare valoare'
@@ -929,3 +929,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/ru.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/ru.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -913,7 +913,7 @@
   text_destroy_time_entries_question: Ð’Ñ‹ ÑобираетеÑÑŒ удалить %{hours} чаÑа(ов), прикрепленных за Ñтой задачей.
   text_destroy_time_entries: Удалить зарегиÑтрированное времÑ
   text_diff_truncated: '... Этот diff ограничен, так как превышает макÑимальный отображаемый размер.'
-  text_email_delivery_not_configured: "Параметры работы Ñ Ð¿Ð¾Ñ‡Ñ‚Ð¾Ð²Ñ‹Ð¼ Ñервером не наÑтроены и Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ email не активна.\nÐаÑтроить параметры Ð´Ð»Ñ Ð’Ð°ÑˆÐµÐ³Ð¾ SMTP-Ñервера Ð’Ñ‹ можете в файле config/email.yml. Ð”Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ перезапуÑтите приложение."
+  text_email_delivery_not_configured: "Параметры работы Ñ Ð¿Ð¾Ñ‡Ñ‚Ð¾Ð²Ñ‹Ð¼ Ñервером не наÑтроены и Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ email не активна.\nÐаÑтроить параметры Ð´Ð»Ñ Ð’Ð°ÑˆÐµÐ³Ð¾ SMTP-Ñервера Ð’Ñ‹ можете в файле config/configuration.yml. Ð”Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ перезапуÑтите приложение."
   text_enumeration_category_reassign_to: 'Ðазначить им Ñледующее значение:'
   text_enumeration_destroy_question: "%{count} объект(а,ов) ÑвÑзаны Ñ Ñтим значением."
   text_file_repository_writable: Хранилище Ñ Ð´Ð¾Ñтупом на запиÑÑŒ
@@ -1049,3 +1049,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/sk.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/sk.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -723,7 +723,7 @@
   label_generate_key: VygenerovaÅ¥ kľúÄ
   setting_mail_handler_api_enabled: Zapnúť Webovú Službu (WS) pre príchodzie emaily
   setting_mail_handler_api_key: API kľúÄ
-  text_email_delivery_not_configured: "DoruÄenie emailov nieje nastavené, notifikácie sú vypnuté.\nNastavte váš SMTP server v config/email.yml a reÅ¡tartnite aplikáciu pre aktiváciu funkcie."
+  text_email_delivery_not_configured: "DoruÄenie emailov nieje nastavené, notifikácie sú vypnuté.\nNastavte váš SMTP server v config/configuration.yml a reÅ¡tartnite aplikáciu pre aktiváciu funkcie."
   field_parent_title: Nadradená stránka
   label_issue_watchers: Pozorovatelia
   setting_commit_logs_encoding: Kódovanie prenášaných správ
@@ -931,3 +931,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/sl.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/sl.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -761,7 +761,7 @@
   text_user_wrote: "%{value} je napisal(a):"
   text_enumeration_destroy_question: "%{count} objektov je doloÄenih tej vrednosti."
   text_enumeration_category_reassign_to: 'Ponastavi jih na to vrednost:'
-  text_email_delivery_not_configured: "E-poÅ¡tna dostava ni nastavljena in oznanila so onemogoÄena.\nNastavite vaÅ¡ SMTP strežnik v config/email.yml in ponovno zaženite aplikacijo da ga omogoÄite.\n"
+  text_email_delivery_not_configured: "E-poÅ¡tna dostava ni nastavljena in oznanila so onemogoÄena.\nNastavite vaÅ¡ SMTP strežnik v config/configuration.yml in ponovno zaženite aplikacijo da ga omogoÄite.\n"
   text_repository_usernames_mapping: "Izberite ali posodobite Redmine uporabnika dodeljenega vsakemu uporabniškemu imenu najdenemu v zapisniku shrambe.\n Uporabniki z enakim Redmine ali shrambinem uporabniškem imenu ali e-poštnem naslovu so samodejno dodeljeni."
   text_diff_truncated: '... Ta sprememba je bila odsekana ker presega najveÄjo velikost ki je lahko prikazana.'
   
@@ -932,3 +932,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/sr-YU.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/sr-YU.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -874,7 +874,7 @@
   text_user_wrote: "%{value} je napisao:"
   text_enumeration_destroy_question: "%{count} objekat(a) je dodeljeno ovoj vrednosti."
   text_enumeration_category_reassign_to: 'Dodeli ih ponovo ovoj vrednosti:'
-  text_email_delivery_not_configured: "Isporuka e-poruka nije konfigurisana i obaveštenja su onemogućena.\nPodesite vaš SMTP server u config/email.yml i pokrenite ponovo aplikaciju za njihovo omogućavanje."
+  text_email_delivery_not_configured: "Isporuka e-poruka nije konfigurisana i obaveštenja su onemogućena.\nPodesite vaš SMTP server u config/configuration.yml i pokrenite ponovo aplikaciju za njihovo omogućavanje."
   text_repository_usernames_mapping: "Odaberite ili ažurirajte Redmine korisnike mapiranjem svakog korisniÄkog imena pronaÄ‘enog u evidenciji spremiÅ¡ta.\nKorisnici sa istim Redmine imenom i imenom spremiÅ¡ta ili e-adresom su automatski mapirani."
   text_diff_truncated: '... Ova razlika je iseÄena jer je dostignuta maksimalna veliÄina prikaza.'
   text_custom_field_possible_values_info: 'Jedan red za svaku vrednost'
@@ -936,3 +936,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/sr.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/sr.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -874,7 +874,7 @@
   text_user_wrote: "%{value} је напиÑао:"
   text_enumeration_destroy_question: "%{count} објекат(а) је додељено овој вредноÑти."
   text_enumeration_category_reassign_to: 'Додели их поново овој вредноÑти:'
-  text_email_delivery_not_configured: "ИÑпорука е-порука није конфигуриÑана и обавештења Ñу онемогућена.\nПодеÑите ваш SMTP Ñервер у config/email.yml и покрените поново апликацију за њихово омогућавање."
+  text_email_delivery_not_configured: "ИÑпорука е-порука није конфигуриÑана и обавештења Ñу онемогућена.\nПодеÑите ваш SMTP Ñервер у config/configuration.yml и покрените поново апликацију за њихово омогућавање."
   text_repository_usernames_mapping: "Одаберите или ажурирајте Redmine кориÑнике мапирањем Ñваког кориÑничког имена пронађеног у евиденцији Ñпремишта.\nКориÑници Ñа иÑтим Redmine именом и именом Ñпремишта или е-адреÑом Ñу аутоматÑки мапирани."
   text_diff_truncated: '... Ова разлика је иÑечена јер је доÑтигнута макÑимална величина приказа.'
   text_custom_field_possible_values_info: 'Један ред за Ñваку вредноÑÑ‚'
@@ -937,3 +937,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/sv.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/sv.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -208,6 +208,7 @@
   notice_unable_delete_version: Denna version var inte möjlig att ta bort.
   notice_unable_delete_time_entry: Tidloggning kunde inte tas bort.
   notice_issue_done_ratios_updated: % klart uppdaterade.
+  notice_gantt_chart_truncated: "Schemat förminskades eftersom det överskrider det maximala antalet aktiviteter som får visas (%{max})"
   
   error_can_t_load_default_data: "Standardkonfiguration gick inte att läsa in: %{value}"
   error_scm_not_found: "Inlägg och/eller revision finns inte i detta versionsarkiv."
@@ -217,7 +218,7 @@
   error_no_tracker_in_project: 'Ingen ärendetyp är associerad med projektet. Vänligen kontrollera projektinställningarna.'
   error_no_default_issue_status: 'Ingen status är definierad som standard för nya ärenden. Vänligen kontrollera din konfiguration (Gå till "Administration -> Ärendestatus").'
   error_can_not_delete_custom_field: Kan inte ta bort användardefinerat fält
-  error_can_not_delete_tracker: Det finns ärenden av denna typ och den är därför inte möjlig att ta bort.
+  error_can_not_delete_tracker: "Det finns ärenden av denna typ och den är därför inte möjlig att ta bort."
   error_can_not_remove_role: "Denna roll används och den är därför inte möjlig att ta bort."
   error_can_not_reopen_issue_on_closed_version: 'Ett ärende tilldelat en stängd version kan inte öppnas på nytt'
   error_can_not_archive_project: Detta projekt kan inte arkiveras
@@ -225,7 +226,7 @@
   error_workflow_copy_source: 'Vänligen välj källans ärendetyp eller roll'
   error_workflow_copy_target: 'Vänligen välj ärendetyp(er) och roll(er) för mål'
   error_unable_delete_issue_status: 'Ärendestatus kunde inte tas bort'
-  error_unable_to_connect: Kan inte ansluta (%{value})
+  error_unable_to_connect: "Kan inte ansluta (%{value})"
   
   warning_attachments_not_saved: "%{count} fil(er) kunde inte sparas."
   
@@ -240,9 +241,9 @@
   mail_subject_reminder: "%{count} ärende(n) har deadline under de kommande %{days} dagarna"
   mail_body_reminder: "%{count} ärende(n) som är tilldelat dig har deadline under de %{days} dagarna:"
   mail_subject_wiki_content_added: "'%{id}' wikisida has lagts till"
-  mail_body_wiki_content_added: The '%{id}' wikisida has lagts till av %{author}.
+  mail_body_wiki_content_added: "The '%{id}' wikisida has lagts till av %{author}."
   mail_subject_wiki_content_updated: "'%{id}' wikisida har uppdaterats"
-  mail_body_wiki_content_updated: The '%{id}' wikisida har uppdaterats av %{author}.
+  mail_body_wiki_content_updated: "The '%{id}' wikisida har uppdaterats av %{author}."
   
   gui_validation_error: 1 fel
   gui_validation_error_plural: "%{count} fel"
@@ -340,8 +341,8 @@
   field_group_by: Gruppera resultat efter
   field_sharing: Delning
   field_parent_issue: Förälderaktivitet
-  field_member_of_group: Tilldelad användares grupp
-  field_assigned_to_role: Tilldelad användares roll
+  field_member_of_group: "Tilldelad användares grupp"
+  field_assigned_to_role: "Tilldelad användares roll"
   field_text: Textfält
   field_visible: Synlig
   
@@ -380,7 +381,7 @@
   setting_activity_days_default: Dagar som visas på projektaktivitet
   setting_display_subprojects_issues: Visa ärenden från underprojekt i huvudprojekt
   setting_enabled_scm: Aktivera SCM
-  setting_mail_handler_body_delimiters: Trunkera mail efter en av följande rader
+  setting_mail_handler_body_delimiters: "Trunkera mail efter en av följande rader"
   setting_mail_handler_api_enabled: Aktivera WS för inkommande mail
   setting_mail_handler_api_key: API-nyckel
   setting_sequential_project_identifiers: Generera projektidentifierare sekventiellt
@@ -400,6 +401,9 @@
   setting_rest_api_enabled: Aktivera REST webbtjänst
   setting_cache_formatted_text: Cacha formaterad text
   setting_default_notification_option: Standard notifieringsalternativ
+  setting_commit_logtime_enabled: Aktivera tidloggning
+  setting_commit_logtime_activity_id: Aktivitet för loggad tid
+  setting_gantt_items_limit: Maximalt antal aktiviteter som visas i gantt-schemat
   
   permission_add_project: Skapa projekt
   permission_add_subprojects: Skapa underprojekt
@@ -581,7 +585,7 @@
   label_version_plural: Versioner
   label_close_versions: Stäng klara versioner
   label_confirmation: Bekräftelse
-  label_export_to: Exportera till
+  label_export_to: 'Finns även som:'
   label_read: Läs...
   label_public_projects: Publika projekt
   label_open_issues: öppen
@@ -666,7 +670,7 @@
   label_tag: Tag
   label_revision: Revision
   label_revision_plural: Revisioner
-  label_revision_id: Revision %{value}
+  label_revision_id: "Revision %{value}"
   label_associated_revisions: Associerade revisioner
   label_added: tillagd
   label_modified: modifierad
@@ -775,10 +779,10 @@
   label_search_titles_only: Sök endast i titlar
   label_user_mail_option_all: "För alla händelser i mina projekt"
   label_user_mail_option_selected: "För alla händelser i markerade projekt..."
-  label_user_mail_option_none: Inga händelser
-  label_user_mail_option_only_my_events: Endast för saker jag bevakar eller är inblandad i
-  label_user_mail_option_only_assigned: Endast för saker jag är tilldelad
-  label_user_mail_option_only_owner: Endast för saker jag äger
+  label_user_mail_option_none: "Inga händelser"
+  label_user_mail_option_only_my_events: "Endast för saker jag bevakar eller är inblandad i"
+  label_user_mail_option_only_assigned: "Endast för saker jag är tilldelad"
+  label_user_mail_option_only_owner: "Endast för saker jag äger"
   label_user_mail_no_self_notified: "Jag vill inte bli underrättad om ändringar som jag har gjort"
   label_registration_activation_by_email: kontoaktivering med mail
   label_registration_manual_activation: manuell kontoaktivering
@@ -825,7 +829,7 @@
   label_display_used_statuses_only: Visa endast status som används av denna ärendetyp
   label_api_access_key: API-nyckel
   label_missing_api_access_key: Saknar en API-nyckel
-  label_api_access_key_created_on: API-nyckel skapad för %{value} sedan
+  label_api_access_key_created_on: "API-nyckel skapad för %{value} sedan"
   label_profile: Profil
   label_subtask_plural: Underaktiviteter
   label_project_copy_notifications: Skicka mailnotifieringar när projektet kopieras
@@ -921,6 +925,7 @@
   text_no_configuration_data: "Roller, ärendetyper, ärendestatus och arbetsflöden har inte konfigurerats ännu.\nDet rekommenderas att läsa in standardkonfigurationen. Du kommer att kunna göra ändringar efter att den blivit inläst."
   text_load_default_configuration: Läs in standardkonfiguration
   text_status_changed_by_changeset: "Tilldelad i changeset %{value}."
+  text_time_logged_by_changeset: "Tilldelad i changeset %{value}."
   text_issues_destroy_confirmation: 'Är du säker på att du vill radera markerade ärende(n) ?'
   text_select_project_modules: 'Välj vilka moduler som ska vara aktiva för projektet:'
   text_default_administrator_account_changed: Standardadministratörens konto ändrat
@@ -934,14 +939,14 @@
   text_user_wrote: "%{value} skrev:"
   text_enumeration_destroy_question: "%{count} objekt är tilldelade till detta värde."
   text_enumeration_category_reassign_to: 'Återtilldela till detta värde:'
-  text_email_delivery_not_configured: "Mailfunktionen har inte konfigurerats, och notifieringar via mail kan därför inte skickas.\nKonfigurera din SMTP-server i config/email.yml och starta om applikationen för att aktivera dem."
+  text_email_delivery_not_configured: "Mailfunktionen har inte konfigurerats, och notifieringar via mail kan därför inte skickas.\nKonfigurera din SMTP-server i config/configuration.yml och starta om applikationen för att aktivera dem."
   text_repository_usernames_mapping: "Välj eller uppdatera den Redmine-användare som är mappad till varje användarnamn i versionarkivloggen.\nAnvändare med samma användarnamn eller mailadress i både Redmine och versionsarkivet mappas automatiskt."
   text_diff_truncated: '... Denna diff har förminskats eftersom den överskrider den maximala storlek som kan visas.'
   text_custom_field_possible_values_info: 'Ett värde per rad'
-  text_wiki_page_destroy_question: Denna sida har %{descendants} underliggande sidor. Vad vill du göra?
-  text_wiki_page_nullify_children: Behåll undersidor som rotsidor
-  text_wiki_page_destroy_children: Ta bort alla underliggande sidor
-  text_wiki_page_reassign_children: Flytta undersidor till denna föräldersida
+  text_wiki_page_destroy_question: "Denna sida har %{descendants} underliggande sidor. Vad vill du göra?"
+  text_wiki_page_nullify_children: "Behåll undersidor som rotsidor"
+  text_wiki_page_destroy_children: "Ta bort alla underliggande sidor"
+  text_wiki_page_reassign_children: "Flytta undersidor till denna föräldersida"
   text_own_membership_delete_confirmation: "Några av, eller alla, dina behörigheter kommer att tas bort och du kanske inte längre kommer kunna göra ändringar i det här projektet.\nVill du verkligen fortsätta?"
   text_zoom_out: Zooma ut
   text_zoom_in: Zooma in
@@ -972,8 +977,7 @@
   enumeration_doc_categories: Dokumentkategorier
   enumeration_activities: Aktiviteter (tidsuppföljning)
   enumeration_system_activity: Systemaktivitet
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/th.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/th.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -726,7 +726,7 @@
   label_generate_key: Generate a key
   setting_mail_handler_api_enabled: Enable WS for incoming emails
   setting_mail_handler_api_key: API key
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   field_parent_title: Parent page
   label_issue_watchers: Watchers
   setting_commit_logs_encoding: Commit messages encoding
@@ -933,3 +933,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/tr.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/tr.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -741,7 +741,7 @@
   label_generate_key: Generate a key
   setting_sequential_project_identifiers: Generate sequential project identifiers
   field_parent_title: Parent page
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   text_enumeration_category_reassign_to: 'Reassign them to this value:'
   label_issue_watchers: Watchers
   mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
@@ -955,3 +955,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/uk.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/uk.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -725,7 +725,7 @@
   label_generate_key: Generate a key
   setting_mail_handler_api_enabled: Enable WS for incoming emails
   setting_mail_handler_api_key: API key
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   field_parent_title: Parent page
   label_issue_watchers: Watchers
   setting_commit_logs_encoding: Commit messages encoding
@@ -932,3 +932,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/vi.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/vi.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -760,7 +760,7 @@
   text_user_wrote: "%{value} wrote:"
   text_enumeration_destroy_question: "%{count} objects are assigned to this value."
   text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   
   default_role_manager: Äiá»u hành
   default_role_developer: Phát triển
@@ -987,3 +987,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/zh-TW.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/zh-TW.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -979,7 +979,7 @@
   text_user_wrote: "%{value} å…ˆå‰æåˆ°:"
   text_enumeration_destroy_question: "ç›®å‰æœ‰ %{count} 個物件使用此列舉值。"
   text_enumeration_category_reassign_to: '釿–°è¨­å®šå…¶åˆ—舉值為:'
-  text_email_delivery_not_configured: "您尚未設定電å­éƒµä»¶å‚³é€æ–¹å¼ï¼Œå› æ­¤æé†’é¸é …已被åœç”¨ã€‚\n請在 config/email.yml 中設定 SMTP ä¹‹å¾Œï¼Œé‡æ–°å•Ÿå‹• Redmine,以啟用電å­éƒµä»¶æé†’é¸é …。"
+  text_email_delivery_not_configured: "您尚未設定電å­éƒµä»¶å‚³é€æ–¹å¼ï¼Œå› æ­¤æé†’é¸é …已被åœç”¨ã€‚\n請在 config/configuration.yml 中設定 SMTP ä¹‹å¾Œï¼Œé‡æ–°å•Ÿå‹• Redmine,以啟用電å­éƒµä»¶æé†’é¸é …。"
   text_repository_usernames_mapping: "鏿“‡æˆ–æ›´æ–° Redmine ä½¿ç”¨è€…èˆ‡ç‰ˆæœ¬åº«ä½¿ç”¨è€…ä¹‹å°æ‡‰é—œä¿‚。\n版本庫中之使用者帳號或電å­éƒµä»¶ä¿¡ç®±ï¼Œèˆ‡ Redmine 設定相åŒè€…ï¼Œå°‡è‡ªå‹•ç”¢ç”Ÿå°æ‡‰é—œä¿‚。"
   text_diff_truncated: '... 這份差異已被截短以符åˆé¡¯ç¤ºè¡Œæ•¸ä¹‹æœ€å¤§å€¼'
   text_custom_field_possible_values_info: '一列輸入一個值'
@@ -1017,3 +1017,7 @@
   enumeration_doc_categories: 文件分類
   enumeration_activities: 活動 (時間追蹤)
   enumeration_system_activity: 系統活動
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/.svn/text-base/zh.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/.svn/text-base/zh.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -869,7 +869,7 @@
   text_user_wrote: "%{value} 写到:"
   text_enumeration_category_reassign_to: '将它们关è”到新的枚举值:'
   text_enumeration_destroy_question: "%{count} 个对象被关è”到了这个枚举值。"
-  text_email_delivery_not_configured: "邮件傿•°å°šæœªé…置,因此邮件通知功能已被ç¦ç”¨ã€‚\n请在config/email.yml中é…置您的SMTPæœåŠ¡å™¨ä¿¡æ¯å¹¶é‡æ–°å¯åŠ¨ä»¥ä½¿å…¶ç”Ÿæ•ˆã€‚"
+  text_email_delivery_not_configured: "邮件傿•°å°šæœªé…置,因此邮件通知功能已被ç¦ç”¨ã€‚\n请在config/configuration.yml中é…置您的SMTPæœåŠ¡å™¨ä¿¡æ¯å¹¶é‡æ–°å¯åŠ¨ä»¥ä½¿å…¶ç”Ÿæ•ˆã€‚"
   text_repository_usernames_mapping: "选择或更新与版本库中的用户å对应的Redmine用户。\n版本库中与Redmine中的åŒå用户将被自动对应。"
   text_diff_truncated: '... å·®åˆ«å†…å®¹è¶…è¿‡äº†å¯æ˜¾ç¤ºçš„æœ€å¤§è¡Œæ•°å¹¶å·²è¢«æˆªæ–­'
   text_custom_field_possible_values_info: 'æ¯é¡¹æ•°å€¼ä¸€è¡Œ'
@@ -950,3 +950,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/bg.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/bg.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -1,11 +1,12 @@
 bg:
+  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
   direction: ltr
   date:
     formats:
       # Use the strftime parameters for formats.
       # When no format has been given, it uses default.
       # You can provide other formats here if you like!
-      default: "%Y-%m-%d"
+      default: "%d-%m-%Y"
       short: "%b %d"
       long: "%B %d, %Y"
       
@@ -65,12 +66,13 @@
         other: "почти %{count} години"
 
   number:
+    # Default format for numbers
     format:
       separator: "."
       delimiter: ""
       precision: 3
-    human: 
-      format: 
+    human:
+      format:
         precision: 1
         delimiter: ""
       storage_units: 
@@ -83,7 +85,8 @@
           mb: "MB"
           gb: "GB"
           tb: "TB"
-      
+
+
 # Used in array.to_sentence.
   support:
     array:
@@ -94,8 +97,8 @@
     errors:
       template:
         header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
+          one:    "1 грешка попречи този %{model} да бъде запиÑан"
+          other:  "%{count} грешки попречиха този %{model} да бъде запиÑан"
       messages:
         inclusion: "не ÑъщеÑтвува в ÑпиÑъка"
         exclusion: "е запазено"
@@ -120,6 +123,7 @@
         greater_than_start_date: "трÑбва да е Ñлед началната дата"
         not_same_project: "не е от ÑÑŠÑ‰Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚"
         circular_dependency: "Тази Ñ€ÐµÐ»Ð°Ñ†Ð¸Ñ Ñ‰Ðµ доведе до безкрайна завиÑимоÑÑ‚"
+        cant_link_an_issue_with_a_descendant: "Една задача не може да бъде Ñвързвана към ÑÐ²Ð¾Ñ Ð¿Ð¾Ð´Ð·Ð°Ð´Ð°Ñ‡Ð°"
 
   actionview_instancetag_blank_option: Изберете
   
@@ -150,24 +154,61 @@
   notice_file_not_found: ÐеÑъщеÑтвуваща или премеÑтена Ñтраница.
   notice_locking_conflict: Друг потребител Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ñ‚ÐµÐ·Ð¸ данни в момента.
   notice_not_authorized: ÐÑмате право на доÑтъп до тази Ñтраница.
+  notice_not_authorized_archived_project: Проектът, който Ñе опитвате да видите е архивиран.
   notice_email_sent: "Изпратен e-mail на %{value}"
   notice_email_error: "Грешка при изпращане на e-mail (%{value})"
   notice_feeds_access_key_reseted: Ð’Ð°ÑˆÐ¸Ñ ÐºÐ»ÑŽÑ‡ за RSS доÑтъп беше променен.
+  notice_api_access_key_reseted: ВашиÑÑ‚ API ключ за доÑтъп беше изчиÑтен.
+  notice_failed_to_save_issues: "ÐеуÑпешен Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° %{count} задачи от %{total} избрани: %{ids}."
+  notice_failed_to_save_members: "ÐевъзможноÑÑ‚ за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° член(ове): %{errors}."
+  notice_no_issue_selected: "ÐÑма избрани задачи."
+  notice_account_pending: "Профилът Ви е Ñъздаден и очаква одобрение от админиÑтратор."
+  notice_default_data_loaded: Примерната Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ðµ заредена уÑпешно.
+  notice_unable_delete_version: ÐевъзможноÑÑ‚ за изтриване на верÑиÑ
+  notice_unable_delete_time_entry: ÐевъзможноÑÑ‚ за изтриване на Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° time log.
+  notice_issue_done_ratios_updated: Обновен процент на завършените задачи.
+  notice_gantt_chart_truncated: МрежовиÑÑ‚ график е Ñъкратен, понеже броÑÑ‚ на обектите, които могат да бъдат показани е твърде голÑм (%{max})
   
+  error_can_t_load_default_data: "Грешка при зареждане на примерната информациÑ: %{value}"
   error_scm_not_found: ÐеÑъщеÑтвуващ обект в хранилището.
   error_scm_command_failed: "Грешка при опит за ÐºÐ¾Ð¼ÑƒÐ½Ð¸ÐºÐ°Ñ†Ð¸Ñ Ñ Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰Ðµ: %{value}"
+  error_scm_annotate: "Обектът не ÑъщеÑтвува или не може да бъде анотиран."
+  error_issue_not_found_in_project: 'Задачата не е намерена или не принадлежи на този проект'
+  error_no_tracker_in_project: ÐÑма аÑоциирани тракери Ñ Ñ‚Ð¾Ð·Ð¸ проект. Проверете наÑтройките на проекта.
+  error_no_default_issue_status: ÐÑма уÑтановено подразбиращо Ñе ÑÑŠÑтоÑние за задачите. ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐµÑ‚Ðµ вашата ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ (Вижте "ÐдминиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ -> СъÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи").
+  error_can_not_delete_custom_field: ÐевъзможноÑÑ‚ за изтриване на потребителÑко поле
+  error_can_not_delete_tracker: Този тракер Ñъдържа задачи и не може да бъде изтрит.
+  error_can_not_remove_role: Тази Ñ€Ð¾Ð»Ñ Ñе използва и не може да бъде изтрита.
+  error_can_not_reopen_issue_on_closed_version: Задача, аÑоциирана ÑÑŠÑ Ð·Ð°Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð° верÑÐ¸Ñ Ð½Ðµ може да бъде отворена отново
+  error_can_not_archive_project: Този проект не може да бъде архивиран
+  error_issue_done_ratios_not_updated: Процентът на завършените задачи не е обновен.
+  error_workflow_copy_source: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ source тракер или ролÑ
+  error_workflow_copy_target: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ тракер(и) и Ñ€Ð¾Ð»Ñ (роли).
+  error_unable_delete_issue_status: ÐевъзможноÑÑ‚ за изтриване на ÑÑŠÑтоÑние на задача
+  error_unable_to_connect: ÐевъзможноÑÑ‚ за Ñвързване Ñ (%{value})
+  warning_attachments_not_saved: "%{count} файла не бÑха запиÑани."
   
   mail_subject_lost_password: "Вашата парола (%{value})"
   mail_body_lost_password: 'За да Ñмените паролата Ñи, използвайте ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð»Ð¸Ð½Ðº:'
   mail_subject_register: "ÐÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ñ Ð½Ð° профил (%{value})"
   mail_body_register: 'За да активирате профила Ñи използвайте ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð»Ð¸Ð½Ðº:'
+  mail_body_account_information_external: "Можете да използвате Ð²Ð°ÑˆÐ¸Ñ %{value} профил за вход."
+  mail_body_account_information: ИнформациÑта за профила ви
+  mail_subject_account_activation_request: "ЗаÑвка за активиране на профил в %{value}"
+  mail_body_account_activation_request: "Има новорегиÑтриран потребител (%{value}), очакващ вашето одобрение:"
+  mail_subject_reminder: "%{count} задачи Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок Ñ Ñледващите %{days} дни"
+  mail_body_reminder: "%{count} задачи, назначени на Ð²Ð°Ñ Ñа Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок в Ñледващите %{days} дни:"
+  mail_subject_wiki_content_added: "Wiki Ñтраницата '%{id}' беше добавена"
+  mail_body_wiki_content_added: Wiki Ñтраницата '%{id}' беше добавена от %{author}.
+  mail_subject_wiki_content_updated: "Wiki Ñтраницата '%{id}' не беше обновена"
+  mail_body_wiki_content_updated: Wiki Ñтраницата '%{id}' беше обновена от %{author}.
   
   gui_validation_error: 1 грешка
   gui_validation_error_plural: "%{count} грешки"
   
   field_name: Име
   field_description: ОпиÑание
-  field_summary: Групиран изглед
+  field_summary: ÐнотациÑ
   field_is_required: Задължително
   field_firstname: Име
   field_lastname: ФамилиÑ
@@ -200,6 +241,7 @@
   field_priority: Приоритет
   field_fixed_version: Планувана верÑиÑ
   field_user: Потребител
+  field_principal: Principal
   field_role: РолÑ
   field_homepage: Ðачална Ñтраница
   field_is_public: Публичен
@@ -225,6 +267,7 @@
   field_attr_lastname: Ðтрибут Ð¤Ð°Ð¼Ð¸Ð»Ð¸Ñ (Lastname)
   field_attr_mail: Ðтрибут Email
   field_onthefly: Динамично Ñъздаване на потребител
+  field_start_date: Ðачална дата
   field_done_ratio: % ПрогреÑ
   field_auth_source: Ðачин на оторизациÑ
   field_hide_mail: Скрий e-mail адреÑа ми
@@ -242,7 +285,25 @@
   field_assignable: Възможно е възлагане на задачи за тази ролÑ
   field_redirect_existing_links: ПренаÑочване на ÑъщеÑтвуващи линкове
   field_estimated_hours: ИзчиÑлено време
+  field_column_names: Колони
+  field_time_entries: Log time
+  field_time_zone: ЧаÑова зона
+  field_searchable: С възможноÑÑ‚ за търÑене
   field_default_value: СтойноÑÑ‚ по подразбиране
+  field_comments_sorting: Сортиране на коментарите
+  field_parent_title: РодителÑка Ñтраница
+  field_editable: Editable
+  field_watcher: Ðаблюдател
+  field_identity_url: OpenID URL
+  field_content: Съдържание
+  field_group_by: Групиране на резултатите по
+  field_sharing: Sharing
+  field_parent_issue: РодителÑка задача
+  field_member_of_group: Член на група
+  field_assigned_to_role: Assignee's role
+  field_text: ТекÑтово поле
+  field_visible: Видим
+  field_warn_on_leaving_unsaved: Предупреди ме, когато напуÑкам Ñтраница Ñ Ð½ÐµÐ·Ð°Ð¿Ð¸Ñано Ñъдържание
   
   setting_app_title: Заглавие
   setting_app_subtitle: ОпиÑание
@@ -253,26 +314,132 @@
   setting_attachment_max_size: МакÑимална големина на прикачен файл
   setting_issues_export_limit: МакÑимален брой задачи за екÑпорт
   setting_mail_from: E-mail Ð°Ð´Ñ€ÐµÑ Ð·Ð° емиÑии
+  setting_bcc_recipients: Получатели на Ñкрито копие (bcc)
+  setting_plain_text_mail: Ñамо чиÑÑ‚ текÑÑ‚ (без HTML)
   setting_host_name: ХоÑÑ‚
   setting_text_formatting: Форматиране на текÑта
   setting_wiki_compression: Wiki компреÑиране на иÑториÑта
   setting_feeds_limit: МакÑимален брой за емиÑии
+  setting_default_projects_public: Ðовите проекти Ñа публични по подразбиране
   setting_autofetch_changesets: Ðвтоматично обработване на ревизиите
   setting_sys_api_enabled: Разрешаване на WS за управление
   setting_commit_ref_keywords: ОтбелÑзващи ключови думи
   setting_commit_fix_keywords: Приключващи ключови думи
   setting_autologin: Ðвтоматичен вход
   setting_date_format: Формат на датата
+  setting_time_format: Формат на чаÑа
   setting_cross_project_issue_relations: Релации на задачи между проекти
+  setting_issue_list_default_columns: Показвани колони по подразбиране
+  setting_repositories_encodings: Кодови таблици
+  setting_commit_logs_encoding: Кодова таблица на ÑъобщениÑта при поверÑване
+  setting_emails_header: Emails header
+  setting_emails_footer: ПодтекÑÑ‚ за e-mail
+  setting_protocol: Протокол
+  setting_per_page_options: Опции за Ñтраниране
+  setting_user_format: ПотребителÑки формат
+  setting_activity_days_default: Брой дни показвани на таб ДейноÑÑ‚
+  setting_display_subprojects_issues: Показване на подпроектите в проектите по подразбиране
+  setting_enabled_scm: Разрешена SCM
+  setting_mail_handler_body_delimiters: ОтрÑзване на e-mail-ите Ñлед един от тези редове
+  setting_mail_handler_api_enabled: Разрешаване на WS за входÑщи e-mail-и
+  setting_mail_handler_api_key: API ключ
+  setting_sequential_project_identifiers: Генериране на поÑледователни проектни идентификатори
+  setting_gravatar_enabled: Използване на портребителÑки икони от Gravatar
+  setting_gravatar_default: Подразбиращо Ñе изображение от Gravatar
+  setting_diff_max_lines_displayed: МакÑимален брой показани diff редове
+  setting_file_max_size_displayed: МакÑимален размер на текÑтовите файлове, показвани inline
+  setting_repository_log_display_limit: МакÑимален брой на показванете ревизии в лог файла
+  setting_openid: Рарешаване на OpenID вход и региÑтрациÑ
+  setting_password_min_length: Минимална дължина на парола
+  setting_new_project_user_role_id: РолÑ, давана на потребител, Ñъздаващ проекти, който не е админиÑтратор
+  setting_default_projects_modules: Ðктивирани модули по подразбиране за нов проект
+  setting_issue_done_ratio: ИзчиÑление на процента на готови задачи Ñ
+  setting_issue_done_ratio_issue_field: Използване на поле '% ПрогреÑ'
+  setting_issue_done_ratio_issue_status: Използване на ÑÑŠÑтоÑнието на задачите
+  setting_start_of_week: Първи ден на Ñедмицата
+  setting_rest_api_enabled: Разрешаване на REST web ÑървиÑ
+  setting_cache_formatted_text: Cache formatted text
+  setting_default_notification_option: Подразбиращ Ñе начин за извеÑÑ‚Ñване
+  setting_commit_logtime_enabled: Разрешаване на отчитането на работното време
+  setting_commit_logtime_activity_id: ДейноÑÑ‚ при отчитане на работното време
+  setting_gantt_items_limit: МакÑимален брой обекти, които да Ñе показват в мрежов график
   
+  permission_add_project: Създаване на проект
+  permission_add_subprojects: Създаване на подпроекти
+  permission_edit_project: Редактиране на проект
+  permission_select_project_modules: Избор на проектни модули
+  permission_manage_members: Управление на членовете (на екип)
+  permission_manage_project_activities: Управление на дейноÑтите на проекта
+  permission_manage_versions: Управление на верÑиите
+  permission_manage_categories: Управление на категориите
+  permission_view_issues: Разглеждане на задачите
+  permission_add_issues: ДобавÑне на задачи
+  permission_edit_issues: Редактиране на задачи
+  permission_manage_issue_relations: Управление на връзките между задачите
+  permission_add_issue_notes: Добаване на бележки
+  permission_edit_issue_notes: Редактиране на бележки
+  permission_edit_own_issue_notes: Редактиране на ÑобÑтвени бележки
+  permission_move_issues: ПремеÑтване на задачи
+  permission_delete_issues: Изтриване на задачи
+  permission_manage_public_queries: Управление на публичните заÑвки
+  permission_save_queries: Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ‚Ð²Ð°Ð½Ð¸Ñ (queries)
+  permission_view_gantt: Разглеждане на мрежов график
+  permission_view_calendar: Разглеждане на календари
+  permission_view_issue_watchers: Разглеждане на ÑпиÑък Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÐµÐ»Ð¸
+  permission_add_issue_watchers: ДобавÑне на наблюдатели
+  permission_delete_issue_watchers: Изтриване на наблюдатели
+  permission_log_time: Log spent time
+  permission_view_time_entries: Разглеждане на изразходваното време
+  permission_edit_time_entries: Редактиране на time logs
+  permission_edit_own_time_entries: Редактиране на ÑобÑтвените time logs
+  permission_manage_news: Управление на новини
+  permission_comment_news: Коментиране на новини
+  permission_manage_documents: Управление на документи
+  permission_view_documents: Разглеждане на документи
+  permission_manage_files: Управление на файлове
+  permission_view_files: Разглеждане на файлове
+  permission_manage_wiki: Управление на wiki
+  permission_rename_wiki_pages: Преименуване на wiki Ñтраници
+  permission_delete_wiki_pages: Изтриване на wiki Ñтраници
+  permission_view_wiki_pages: Разглеждане на wiki
+  permission_view_wiki_edits: Разглеждане на wiki иÑториÑ
+  permission_edit_wiki_pages: Редактиране на wiki Ñтраници
+  permission_delete_wiki_pages_attachments: Изтриване на прикачени файлове към wiki Ñтраници
+  permission_protect_wiki_pages: Заключване на wiki Ñтраници
+  permission_manage_repository: Управление на хранилища
+  permission_browse_repository: Разглеждане на хранилища
+  permission_view_changesets: Разглеждане на changesets
+  permission_commit_access: ПоверÑване
+  permission_manage_boards: Управление на boards
+  permission_view_messages: Разглеждане на ÑъобщениÑ
+  permission_add_messages: Публикуване на ÑъобщениÑ
+  permission_edit_messages: Редактиране на ÑъобщениÑ
+  permission_edit_own_messages: Редактиране на ÑобÑтвени ÑъобщениÑ
+  permission_delete_messages: Изтриване на ÑъобщениÑ
+  permission_delete_own_messages: Изтриване на ÑобÑтвени ÑъобщениÑ
+  permission_export_wiki_pages: ЕкÑпорт на wiki Ñтраници
+  permission_manage_subtasks: Управление на подзадачите
+
+  project_module_issue_tracking: Тракинг
+  project_module_time_tracking: ОтделÑне на време
+  project_module_news: Ðовини
+  project_module_documents: Документи
+  project_module_files: Файлове
+  project_module_wiki: Wiki
+  project_module_repository: Хранилище
+  project_module_boards: Форуми
+  project_module_calendar: Календар
+  project_module_gantt: Мрежов график
+
   label_user: Потребител
   label_user_plural: Потребители
   label_user_new: Ðов потребител
+  label_user_anonymous: Ðнонимен
   label_project: Проект
   label_project_new: Ðов проект
   label_project_plural: Проекти
   label_x_projects:
-    zero:  0 проекти
+    zero:  0 проекта
     one:   1 проект
     other: "%{count} проекта"
   label_project_all: Ð’Ñички проекти
@@ -281,9 +448,13 @@
   label_issue_new: Ðова задача
   label_issue_plural: Задачи
   label_issue_view_all: Ð’Ñички задачи
+  label_issues_by: "Задачи по %{value}"
+  label_issue_added: Добавена задача
+  label_issue_updated: Обновена задача
   label_document: Документ
   label_document_new: Ðов документ
   label_document_plural: Документи
+  label_document_added: Добавен документ
   label_role: РолÑ
   label_role_plural: Роли
   label_role_new: Ðова ролÑ
@@ -310,12 +481,14 @@
   label_information_plural: ИнформациÑ
   label_please_login: Вход
   label_register: РегиÑтрациÑ
+  label_login_with_open_id_option: или вход чрез OpenID
   label_password_lost: Забравена парола
   label_home: Ðачало
   label_home_heading: Ðачало
   label_my_page: Лична Ñтраница
   label_my_account: Профил
   label_my_projects: Проекти, в които учаÑтвам
+  label_my_page_block: Блокове в личната Ñтраница
   label_administration: ÐдминиÑтрациÑ
   label_login: Вход
   label_logout: Изход
@@ -325,6 +498,8 @@
   label_last_login: ПоÑледно Ñвързване
   label_registered_on: РегиÑтрациÑ
   label_activity: ДейноÑÑ‚
+  label_overall_activity: ЦÑлоÑтна дейноÑÑ‚
+  label_user_activity: "ÐктивноÑÑ‚ на %{value}"
   label_new: Ðов
   label_logged_as: Здравейте,
   label_environment: Среда
@@ -333,10 +508,13 @@
   label_auth_source_new: Ðов начин на оторизациÑ
   label_auth_source_plural: Ðачини на оторизациÑ
   label_subproject_plural: Подпроекти
+  label_subproject_new: Ðов подпроект
+  label_and_its_subprojects: "%{value} и неговите подпроекти"
   label_min_max_length: Минимална - макÑимална дължина
   label_list: СпиÑък
   label_date: Дата
   label_integer: ЦелочиÑлен
+  label_float: Дробно
   label_boolean: ЧекбокÑ
   label_string: ТекÑÑ‚
   label_text: Дълъг текÑÑ‚
@@ -351,6 +529,7 @@
   label_attachment_new: Ðов файл
   label_attachment_delete: Изтриване
   label_attachment_plural: Файлове
+  label_file_added: Добавен файл
   label_report: Справка
   label_report_plural: Справки
   label_news: Ðовини
@@ -358,11 +537,13 @@
   label_news_plural: Ðовини
   label_news_latest: ПоÑледни новини
   label_news_view_all: Виж вÑички
+  label_news_added: Добавена новина
   label_settings: ÐаÑтройки
   label_overview: Общ изглед
   label_version: ВерÑиÑ
   label_version_new: Ðова верÑиÑ
   label_version_plural: ВерÑии
+  label_close_versions: ЗатварÑне на завършените верÑии
   label_confirmation: Одобрение
   label_export_to: ЕкÑпорт към
   label_read: Read...
@@ -389,6 +570,7 @@
   label_new_statuses_allowed: Позволени ÑÑŠÑтоÑниÑ
   label_all: вÑички
   label_none: никакви
+  label_nobody: никой
   label_next: Следващ
   label_previous: Предишен
   label_used_by: Използва Ñе от
@@ -414,15 +596,26 @@
   label_query: ПотребителÑка Ñправка
   label_query_plural: ПотребителÑки Ñправки
   label_query_new: Ðова заÑвка
+  label_my_queries: Моите заÑвки
   label_filter_add: Добави филтър
   label_filter_plural: Филтри
   label_equals: е
   label_not_equals: не е
   label_in_less_than: Ñлед по-малко от
   label_in_more_than: Ñлед повече от
+  label_greater_or_equal: ">="
+  label_less_or_equal: <=
   label_in: в Ñледващите
   label_today: днеÑ
+  label_all_time: вÑички
+  label_yesterday: вчера
   label_this_week: тази Ñедмица
+  label_last_week: поÑледната Ñедмица
+  label_last_n_days: "поÑледните %{count} дни"
+  label_this_month: Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ð¼ÐµÑец
+  label_last_month: поÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð¼ÐµÑец
+  label_this_year: текущата година
+  label_date_range: Период
   label_less_than_ago: преди по-малко от
   label_more_than_ago: преди повече от
   label_ago: преди
@@ -430,17 +623,25 @@
   label_not_contains: не Ñъдържа
   label_day_plural: дни
   label_repository: Хранилище
+  label_repository_plural: Хранилища
   label_browse: Разглеждане
   label_modification: "%{count} промÑна"
   label_modification_plural: "%{count} промени"
+  label_branch: работен вариант
+  label_tag: ВерÑиÑ
   label_revision: РевизиÑ
   label_revision_plural: Ревизии
+  label_revision_id: Ð ÐµÐ²Ð¸Ð·Ð¸Ñ %{value}
+  label_associated_revisions: ÐÑоциирани ревизии
   label_added: добавено
   label_modified: променено
+  label_copied: копирано
+  label_renamed: преименувано
   label_deleted: изтрито
   label_latest_revision: ПоÑледна ревизиÑ
   label_latest_revision_plural: ПоÑледни ревизии
   label_view_revisions: Виж ревизиите
+  label_view_all_revisions: Разглеждане на вÑички ревизии
   label_max_size: МакÑимална големина
   label_sort_highest: ПремеÑти най-горе
   label_sort_higher: ПремеÑти по-горе
@@ -466,6 +667,7 @@
   label_changes_details: Подробни промени
   label_issue_tracking: Тракинг
   label_spent_time: Отделено време
+  label_overall_spent_time: Общо употребено време
   label_f_hour: "%{value} чаÑ"
   label_f_hour_plural: "%{value} чаÑа"
   label_time_tracking: ОтделÑне на време
@@ -487,6 +689,7 @@
   label_relation_delete: Изтриване на релациÑ
   label_relates_to: Ñвързана ÑÑŠÑ
   label_duplicates: дублира
+  label_duplicated_by: дублирана от
   label_blocks: блокира
   label_blocked_by: блокирана от
   label_precedes: предшеÑтва
@@ -502,10 +705,13 @@
   label_board: Форум
   label_board_new: Ðов форум
   label_board_plural: Форуми
+  label_board_locked: Заключена
+  label_board_sticky: Sticky
   label_topic_plural: Теми
   label_message_plural: СъобщениÑ
   label_message_last: ПоÑледно Ñъобщение
   label_message_new: Ðова тема
+  label_message_posted: Добавено Ñъобщение
   label_reply_plural: Отговори
   label_send_information: Изпращане на информациÑта до потребителÑ
   label_year: Година
@@ -516,12 +722,81 @@
   label_language_based: Ð’ завиÑимоÑÑ‚ от езика
   label_sort_by: "Сортиране по %{value}"
   label_send_test_email: Изпращане на теÑтов e-mail
+  label_feeds_access_key: RSS access ключ
+  label_missing_feeds_access_key: ЛипÑващ RSS ключ за доÑтъп
   label_feeds_access_key_created_on: "%{value} от Ñъздаването на RSS ключа"
   label_module_plural: Модули
   label_added_time_by: "Публикувана от %{author} преди %{age}"
+  label_updated_time_by: "Обновена от %{author} преди %{age}"
   label_updated_time: "Обновена преди %{value}"
   label_jump_to_a_project: Проект...
-  
+  label_file_plural: Файлове
+  label_changeset_plural: Ревизии
+  label_default_columns: По подразбиране
+  label_no_change_option: (Без промÑна)
+  label_bulk_edit_selected_issues: Редактиране на задачи
+  label_theme: Тема
+  label_default: По подразбиране
+  label_search_titles_only: Само в заглавиÑта
+  label_user_mail_option_all: "За вÑÑко Ñъбитие в проектите, в които учаÑтвам"
+  label_user_mail_option_selected: "За вÑички ÑÑŠÐ±Ð¸Ñ‚Ð¸Ñ Ñамо в избраните проекти..."
+  label_user_mail_option_none: "Само за наблюдавани или в които учаÑтвам (автор или назначени на мен)"
+  label_user_mail_option_only_my_events: Само за неща, в които Ñъм включен/а
+  label_user_mail_option_only_assigned: Само за неща, назначени на мен
+  label_user_mail_option_only_owner: Само за неща, на които аз Ñъм ÑобÑтвеник
+  label_user_mail_no_self_notified: "Ðе иÑкам извеÑÑ‚Ð¸Ñ Ð·Ð° извършени от мен промени"
+  label_registration_activation_by_email: активиране на профила по email
+  label_registration_manual_activation: ръчно активиране
+  label_registration_automatic_activation: автоматично активиране
+  label_display_per_page: "Ðа Ñтраница по: %{value}"
+  label_age: ВъзраÑÑ‚
+  label_change_properties: ПромÑна на наÑтройки
+  label_general: ОÑновни
+  label_more: Още
+  label_scm: SCM (СиÑтема за контрол на верÑиите)
+  label_plugins: Плъгини
+  label_ldap_authentication: LDAP оторизациÑ
+  label_downloads_abbr: D/L
+  label_optional_description: Ðезадължително опиÑание
+  label_add_another_file: ДобавÑне на друг файл
+  label_preferences: ПредпочитаниÑ
+  label_chronological_order: Хронологичен ред
+  label_reverse_chronological_order: Обратен хронологичен ред
+  label_planning: Планиране
+  label_incoming_emails: ВходÑщи e-mail-и
+  label_generate_key: Генериране на ключ
+  label_issue_watchers: Ðаблюдатели
+  label_example: Пример
+  label_display: Display
+  label_sort: Сортиране
+  label_ascending: ÐараÑтващ
+  label_descending: ÐамалÑващ
+  label_date_from_to: От %{start} до %{end}
+  label_wiki_content_added: Wiki Ñтраница беше добавена
+  label_wiki_content_updated: Wiki Ñтраница беше обновена
+  label_group: Група
+  label_group_plural: Групи
+  label_group_new: Ðова група
+  label_time_entry_plural: Използвано време
+  label_version_sharing_none: Ðе Ñподелен
+  label_version_sharing_descendants: С подпроекти
+  label_version_sharing_hierarchy: С проектна йерархиÑ
+  label_version_sharing_tree: С дърво на проектите
+  label_version_sharing_system: С вÑички проекти
+  label_update_issue_done_ratios: ОбновÑване на процента на завършените задачи
+  label_copy_source: Източник
+  label_copy_target: Цел
+  label_copy_same_as_target: Също като целта
+  label_display_used_statuses_only: Показване Ñамо на ÑÑŠÑтоÑниÑта, използвани от този тракер
+  label_api_access_key: API ключ за доÑтъп
+  label_missing_api_access_key: ЛипÑващ API ключ
+  label_api_access_key_created_on: API ключ за доÑтъп е Ñъздаден преди %{value}
+  label_profile: Профил
+  label_subtask_plural: Подзадачи
+  label_project_copy_notifications: Изпращане на Send e-mail извеÑÑ‚Ð¸Ñ Ð¿Ð¾ време на копирането на проекта
+  label_principal_search: "ТърÑене на потребител или група:"
+  label_user_search: "ТърÑене на потребител:"
+
   button_login: Вход
   button_submit: Прикачване
   button_save: ЗапиÑ
@@ -529,8 +804,10 @@
   button_uncheck_all: ИзчиÑтване на вÑички
   button_delete: Изтриване
   button_create: Създаване
+  button_create_and_continue: Създаване и продължаване
   button_test: ТеÑÑ‚
   button_edit: РедакциÑ
+  button_edit_associated_wikipage: "Редактиране на аÑоциираната Wiki Ñтраница: %{page_title}"
   button_add: ДобавÑне
   button_change: ПромÑна
   button_apply: Приложи
@@ -541,6 +818,7 @@
   button_list: СпиÑък
   button_view: Преглед
   button_move: ПремеÑтване
+  button_move_and_follow: ПремеÑтване и продължаване
   button_back: Ðазад
   button_cancel: Отказ
   button_activate: ÐктивациÑ
@@ -554,26 +832,49 @@
   button_unarchive: Разархивиране
   button_reset: Генериране наново
   button_rename: Преименуване
+  button_change_password: ПромÑна на парола
+  button_copy: Копиране
+  button_copy_and_follow: Копиране и продължаване
+  button_annotate: ÐнотациÑ
+  button_update: ОбновÑване
+  button_configure: Конфигуриране
+  button_quote: Цитат
+  button_duplicate: Дублиране
+  button_show: Показване
   
   status_active: активен
   status_registered: региÑтриран
   status_locked: заключен
   
+  version_status_open: отворена
+  version_status_locked: заключена
+  version_status_closed: затворена
+
+  field_active: Ðктивен
+
   text_select_mail_notifications: Изберете ÑÑŠÐ±Ð¸Ñ‚Ð¸Ñ Ð·Ð° изпращане на e-mail.
   text_regexp_info: пр. ^[A-Z0-9]+$
   text_min_max_length_info: 0 - без ограничениÑ
   text_project_destroy_confirmation: Сигурни ли Ñте, че иÑкате да изтриете проекта и данните в него?
+  text_subprojects_destroy_warning: "Ðеговите подпроекти: %{value} Ñъщо ще бъдат изтрити."
   text_workflow_edit: Изберете Ñ€Ð¾Ð»Ñ Ð¸ тракер за да редактирате Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑ
   text_are_you_sure: Сигурни ли Ñте?
-  text_tip_task_begin_day: задача започваща този ден
-  text_tip_task_end_day: задача завършваща този ден
-  text_tip_task_begin_end_day: задача започваща и завършваща този ден
+  text_are_you_sure_with_children: Изтриване на задачата и нейните подзадачи?
+  text_journal_changed: "%{label} променен от %{old} на %{new}"
+  text_journal_set_to: "%{label} уÑтановен на %{value}"
+  text_journal_deleted: "%{label} изтрит (%{old})"
+  text_journal_added: "Добавено %{label} %{value}"
+  text_tip_issue_begin_day: задача, започваща този ден
+  text_tip_issue_end_day: задача, завършваща този ден
+  text_tip_issue_begin_end_day: задача, започваща и завършваща този ден
   text_project_identifier_info: 'Позволени Ñа малки букви (a-z), цифри и тирета.<br />Ðевъзможна промÑна Ñлед запиÑ.'
   text_caracters_maximum: "До %{count} Ñимвола."
+  text_caracters_minimum: "Минимум %{count} Ñимвола."
   text_length_between: "От %{min} до %{max} Ñимвола."
   text_tracker_no_workflow: ÐÑма дефиниран работен Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð° този тракер
   text_unallowed_characters: Ðепозволени Ñимволи
   text_comma_separated: Позволено е изброÑване (Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¸Ñ‚ÐµÐ» запетаÑ).
+  text_line_separated: Позволени Ñа много ÑтойноÑти (по едно на ред).
   text_issues_ref_in_commit_messages: ОтбелÑзване и приключване на задачи от ревизии
   text_issue_added: "Публикувана е нова задача Ñ Ð½Ð¾Ð¼ÐµÑ€ %{id} (от %{author})."
   text_issue_updated: "Задача %{id} е обновена (от %{author})."
@@ -581,7 +882,37 @@
   text_issue_category_destroy_question: "Има задачи (%{count}) обвързани Ñ Ñ‚Ð°Ð·Ð¸ категориÑ. Какво ще изберете?"
   text_issue_category_destroy_assignments: Премахване на връзките Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñта
   text_issue_category_reassign_to: Преобвързване Ñ ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ
-  
+  text_user_mail_option: "За неизбраните проекти, ще получавате извеÑÑ‚Ð¸Ñ Ñамо за наблюдавани дейноÑти или в които учаÑтвате (Ñ‚.е. автор или назначени на мен)."
+  text_no_configuration_data: "Ð’Ñе още не Ñа конфигурирани Роли, тракери, ÑÑŠÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи и работен процеÑ.\nСтрого Ñе препоръчва зареждането на примерната информациÑ. Веднъж заредена ще имате възможноÑÑ‚ да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ."
+  text_load_default_configuration: Зареждане на примерна информациÑ
+  text_status_changed_by_changeset: "Приложено Ñ Ñ€ÐµÐ²Ð¸Ð·Ð¸Ñ %{value}."
+  text_time_logged_by_changeset: Приложено в Ñ€ÐµÐ²Ð¸Ð·Ð¸Ñ %{value}.
+  text_issues_destroy_confirmation: 'Сигурни ли Ñте, че иÑкате да изтриете избраните задачи?'
+  text_select_project_modules: 'Изберете активните модули за този проект:'
+  text_default_administrator_account_changed: Сменен Ñ„Ð°Ð±Ñ€Ð¸Ñ‡Ð½Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑтраторÑки профил
+  text_file_repository_writable: ВъзможноÑÑ‚ за пиÑане в хранилището Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ðµ
+  text_plugin_assets_writable: Папката на приÑтавките е разрешена за запиÑ
+  text_rmagick_available: Ðаличен RMagick (по избор)
+  text_destroy_time_entries_question: "%{hours} чаÑа Ñа отделени на задачите, които иÑкате да изтриете. Какво избирате?"
+  text_destroy_time_entries: Изтриване на отделеното време
+  text_assign_time_entries_to_project: ПрехвърлÑне на отделеното време към проект
+  text_reassign_time_entries: 'ПрехвърлÑне на отделеното време към задача:'
+  text_user_wrote: "%{value} напиÑа:"
+  text_enumeration_destroy_question: "%{count} обекта Ñа Ñвързани Ñ Ñ‚Ð°Ð·Ð¸ ÑтойноÑÑ‚."
+  text_enumeration_category_reassign_to: 'ПреÑвържете ги към тази ÑтойноÑÑ‚:'
+  text_email_delivery_not_configured: "Изпращането на e-mail-и не е конфигурирано и извеÑтиÑта не Ñа разрешени.\nКонфигурирайте Ð²Ð°ÑˆÐ¸Ñ SMTP Ñървър в config/configuration.yml и реÑтартирайте Redmine, за да ги разрешите."
+  text_repository_usernames_mapping: "Изберете или променете потребителите в Redmine, ÑъответÑтващи на потребителите в дневника на хранилището (repository).\nПотребителите Ñ ÐµÐ´Ð½Ð°ÐºÐ²Ð¸ имена в Redmine и хранилищата Ñе ÑъвмеÑÑ‚Ñват автоматично."
+  text_diff_truncated: '... Този diff не е пълен, понеже е Ð½Ð°Ð´Ñ…Ð²ÑŠÑ€Ð»Ñ Ð¼Ð°ÐºÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€, който може да бъде показан.'
+  text_custom_field_possible_values_info: 'Една ÑтойноÑÑ‚ на ред'
+  text_wiki_page_destroy_question: Тази Ñтраница има %{descendants} Ñтраници деца и descendant(s). Какво желаете да правите?
+  text_wiki_page_nullify_children: Запазване на тези Ñтраници като коренни Ñтраници
+  text_wiki_page_destroy_children: Изтриване на Ñтраниците деца и вÑички техни descendants
+  text_wiki_page_reassign_children: Преназначаване на Ñтраниците деца на тази родителÑка Ñтраница
+  text_own_membership_delete_confirmation: "Вие Ñте на път да премахнете нÑкои или вÑички ваши Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ е възможно Ñлед това да не можете да редактирате този проект.\nСигурен ли Ñте, че иÑкате да продължите?"
+  text_zoom_in: Увеличаване
+  text_zoom_out: ÐамалÑване
+  text_warn_on_leaving_unsaved: Страницата Ñъдържа незапиÑано Ñъдържание, което може да бъде загубено, ако Ñ Ð½Ð°Ð¿ÑƒÑнете.
+
   default_role_manager: Мениджър
   default_role_developer: Разработчик
   default_role_reporter: Публикуващ
@@ -603,333 +934,10 @@
   default_priority_immediate: Веднага
   default_activity_design: Дизайн
   default_activity_development: Разработка
-  
+
   enumeration_issue_priorities: Приоритети на задачи
   enumeration_doc_categories: Категории документи
   enumeration_activities: ДейноÑти (time tracking)
-  label_file_plural: Файлове
-  label_changeset_plural: Ревизии
-  field_column_names: Колони
-  label_default_columns: По подразбиране
-  setting_issue_list_default_columns: Показвани колони по подразбиране
-  setting_repositories_encodings: Кодови таблици
-  notice_no_issue_selected: "ÐÑма избрани задачи."
-  label_bulk_edit_selected_issues: Редактиране на задачи
-  label_no_change_option: (Без промÑна)
-  notice_failed_to_save_issues: "ÐеуÑпешен Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° %{count} задачи от %{total} избрани: %{ids}."
-  label_theme: Тема
-  label_default: По подразбиране
-  label_search_titles_only: Само в заглавиÑта
-  label_nobody: никой
-  button_change_password: ПромÑна на парола
-  text_user_mail_option: "За неизбраните проекти, ще получавате извеÑÑ‚Ð¸Ñ Ñамо за наблюдавани дейноÑти или в които учаÑтвате (Ñ‚.е. автор или назначени на мен)."
-  label_user_mail_option_selected: "За вÑички ÑÑŠÐ±Ð¸Ñ‚Ð¸Ñ Ñамо в избраните проекти..."
-  label_user_mail_option_all: "За вÑÑко Ñъбитие в проектите, в които учаÑтвам"
-  label_user_mail_option_none: "Само за наблюдавани или в които учаÑтвам (автор или назначени на мен)"
-  setting_emails_footer: ПодтекÑÑ‚ за e-mail
-  label_float: Дробно
-  button_copy: Копиране
-  mail_body_account_information_external: "Можете да използвате Ð²Ð°ÑˆÐ¸Ñ %{value} профил за вход."
-  mail_body_account_information: ИнформациÑта за профила ви
-  setting_protocol: Протокол
-  label_user_mail_no_self_notified: "Ðе иÑкам извеÑÑ‚Ð¸Ñ Ð·Ð° извършени от мен промени"
-  setting_time_format: Формат на чаÑа
-  label_registration_activation_by_email: активиране на профила по email
-  mail_subject_account_activation_request: "ЗаÑвка за активиране на профил в %{value}"
-  mail_body_account_activation_request: "Има новорегиÑтриран потребител (%{value}), очакващ вашето одобрение:"
-  label_registration_automatic_activation: автоматично активиране
-  label_registration_manual_activation: ръчно активиране
-  notice_account_pending: "Профилът Ви е Ñъздаден и очаква одобрение от админиÑтратор."
-  field_time_zone: ЧаÑова зона
-  text_caracters_minimum: "Минимум %{count} Ñимвола."
-  setting_bcc_recipients: Получатели на Ñкрито копие (bcc)
-  button_annotate: ÐнотациÑ
-  label_issues_by: "Задачи по %{value}"
-  field_searchable: С възможноÑÑ‚ за търÑене
-  label_display_per_page: "Ðа Ñтраница по: %{value}"
-  setting_per_page_options: Опции за Ñтраниране
-  label_age: ВъзраÑÑ‚
-  notice_default_data_loaded: Примерната информациÑта е уÑпешно заредена.
-  text_load_default_configuration: Зареждане на примерна информациÑ
-  text_no_configuration_data: "Ð’Ñе още не Ñа конфигурирани Роли, тракери, ÑÑŠÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи и работен процеÑ.\nСтрого Ñе препоръчва зареждането на примерната информациÑ. Веднъж заредена ще имате възможноÑÑ‚ да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ."
-  error_can_t_load_default_data: "Грешка при зареждане на примерната информациÑ: %{value}"
-  button_update: ОбновÑване
-  label_change_properties: ПромÑна на наÑтройки
-  label_general: ОÑновни
-  label_repository_plural: Хранилища
-  label_associated_revisions: ÐÑоциирани ревизии
-  setting_user_format: ПотребителÑки формат
-  text_status_changed_by_changeset: "Приложено Ñ Ñ€ÐµÐ²Ð¸Ð·Ð¸Ñ %{value}."
-  label_more: Още
-  text_issues_destroy_confirmation: 'Сигурни ли Ñте, че иÑкате да изтриете избраните задачи?'
-  label_scm: SCM (СиÑтема за контрол на кода)
-  text_select_project_modules: 'Изберете активните модули за този проект:'
-  label_issue_added: Добавена задача
-  label_issue_updated: Обновена задача
-  label_document_added: Добавен документ
-  label_message_posted: Добавено Ñъобщение
-  label_file_added: Добавен файл
-  label_news_added: Добавена новина
-  project_module_boards: Форуми
-  project_module_issue_tracking: Тракинг
-  project_module_wiki: Wiki
-  project_module_files: Файлове
-  project_module_documents: Документи
-  project_module_repository: Хранилище
-  project_module_news: Ðовини
-  project_module_time_tracking: ОтделÑне на време
-  text_file_repository_writable: ВъзможноÑÑ‚ за пиÑане в хранилището Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ðµ
-  text_default_administrator_account_changed: Сменен Ñ„Ð°Ð±Ñ€Ð¸Ñ‡Ð½Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑтраторÑки профил
-  text_rmagick_available: Ðаличен RMagick (по избор)
-  button_configure: Конфигуриране
-  label_plugins: Плъгини
-  label_ldap_authentication: LDAP оторизациÑ
-  label_downloads_abbr: D/L
-  label_this_month: Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ð¼ÐµÑец
-  label_last_n_days: "поÑледните %{count} дни"
-  label_all_time: вÑички
-  label_this_year: текущата година
-  label_date_range: Период
-  label_last_week: поÑледната Ñедмица
-  label_yesterday: вчера
-  label_last_month: поÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð¼ÐµÑец
-  label_add_another_file: ДобавÑне на друг файл
-  label_optional_description: Ðезадължително опиÑание
-  text_destroy_time_entries_question: "%{hours} чаÑа Ñа отделени на задачите, които иÑкате да изтриете. Какво избирате?"
-  error_issue_not_found_in_project: 'Задачата не е намерена или не принадлежи на този проект'
-  text_assign_time_entries_to_project: ПрехвърлÑне на отделеното време към проект
-  text_destroy_time_entries: Изтриване на отделеното време
-  text_reassign_time_entries: 'ПрехвърлÑне на отделеното време към задача:'
-  setting_activity_days_default: Брой дни показвани на таб ДейноÑÑ‚
-  label_chronological_order: Хронологичен ред
-  field_comments_sorting: Сортиране на коментарите
-  label_reverse_chronological_order: Обратен хронологичен ред
-  label_preferences: ПредпочитаниÑ
-  setting_display_subprojects_issues: Показване на подпроектите в проектите по подразбиране
-  label_overall_activity: ЦÑлоÑтна дейноÑÑ‚
-  setting_default_projects_public: Ðовите проекти Ñа публични по подразбиране
-  error_scm_annotate: "Обектът не ÑъщеÑтвува или не може да бъде анотиран."
-  label_planning: Планиране
-  text_subprojects_destroy_warning: "Ðеговите подпроекти: %{value} Ñъщо ще бъдат изтрити."
-  label_and_its_subprojects: "%{value} и неговите подпроекти"
-  mail_body_reminder: "%{count} задачи, назначени на Ð²Ð°Ñ Ñа Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок в Ñледващите %{days} дни:"
-  mail_subject_reminder: "%{count} задачи Ñ ÐºÑ€Ð°ÐµÐ½ Ñрок Ñ Ñледващите %{days} дни"
-  text_user_wrote: "%{value} напиÑа:"
-  label_duplicated_by: дублирана от
-  setting_enabled_scm: Разрешена SCM
-  text_enumeration_category_reassign_to: 'ПреÑвържете ги към тази ÑтойноÑÑ‚:'
-  text_enumeration_destroy_question: "%{count} обекта Ñа Ñвързани Ñ Ñ‚Ð°Ð·Ð¸ ÑтойноÑÑ‚."
-  label_incoming_emails: ВходÑщи e-mail-и
-  label_generate_key: Генериране на ключ
-  setting_mail_handler_api_enabled: Разрешаване на WS за входÑщи e-mail-и
-  setting_mail_handler_api_key: API ключ
-  text_email_delivery_not_configured: "Изпращането на e-mail-и не е конфигурирано и извеÑтиÑта не Ñа разрешени.\nКонфигурирайте Ð²Ð°ÑˆÐ¸Ñ SMTP Ñървър в config/email.yml и реÑтартирайте Redmine, за да ги разрешите."
-  field_parent_title: РодителÑка Ñтраница
-  label_issue_watchers: Ðаблюдатели
-  setting_commit_logs_encoding: Кодова таблица на ÑъобщениÑта при поверÑване
-  button_quote: Цитат
-  setting_sequential_project_identifiers: Генериране на поÑледователни проектни идентификатори
-  notice_unable_delete_version: ÐевъзможноÑÑ‚ за изтриване на верÑиÑ
-  label_renamed: преименувано
-  label_copied: копирано
-  setting_plain_text_mail: Ñамо чиÑÑ‚ текÑÑ‚ (без HTML)
-  permission_view_files: Разглеждане на файлове
-  permission_edit_issues: Редактиране на задачи
-  permission_edit_own_time_entries: Редактиране на ÑобÑтвените time logs
-  permission_manage_public_queries: Управление на публичните заÑвки
-  permission_add_issues: ДобавÑне на задачи
-  permission_log_time: Log spent time
-  permission_view_changesets: Разглеждане на changesets
-  permission_view_time_entries: Разглеждане на изразходваното време
-  permission_manage_versions: Управление на верÑиите
-  permission_manage_wiki: Управление на wiki
-  permission_manage_categories: Управление на категориите задачи
-  permission_protect_wiki_pages: Заключване на wiki Ñтраници
-  permission_comment_news: Коментиране на новини
-  permission_delete_messages: Изтриване на ÑъобщениÑ
-  permission_select_project_modules: Избор на проектни модули
-  permission_manage_documents: Управление на документи
-  permission_edit_wiki_pages: Редактиране на wiki Ñтраници
-  permission_add_issue_watchers: ДобавÑне на наблюдатели
-  permission_view_gantt: Разглеждане на мрежов график
-  permission_move_issues: ПремеÑтване на задачи
-  permission_manage_issue_relations: Управление на връзките между задачите
-  permission_delete_wiki_pages: Изтриване на wiki Ñтраници
-  permission_manage_boards: Управление на boards
-  permission_delete_wiki_pages_attachments: Изтриване на прикачени файлове
-  permission_view_wiki_edits: Разглеждане на wiki иÑториÑ
-  permission_add_messages: Публикуване на ÑъобщениÑ
-  permission_view_messages: Разглеждане на ÑъобщениÑ
-  permission_manage_files: Управление на файлове
-  permission_edit_issue_notes: Редактиране на бележки
-  permission_manage_news: Управление на новини
-  permission_view_calendar: Разглеждане на календари
-  permission_manage_members: Управление на членовете (на екип)
-  permission_edit_messages: Редактиране на ÑъобщениÑ
-  permission_delete_issues: Изтриване на задачи
-  permission_view_issue_watchers: Разглеждане на ÑпиÑък Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÐµÐ»Ð¸
-  permission_manage_repository: Управление на хранилища
-  permission_commit_access: ПоверÑване
-  permission_browse_repository: Разглеждане на хранилища
-  permission_view_documents: Разглеждане на документи
-  permission_edit_project: Редактиране на проект
-  permission_add_issue_notes: Добаване на бележки
-  permission_save_queries: Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ‚Ð²Ð°Ð½Ð¸Ñ (queries)
-  permission_view_wiki_pages: Разглеждане на wiki
-  permission_rename_wiki_pages: Преименуване на wiki Ñтраници
-  permission_edit_time_entries: Редактиране на time logs
-  permission_edit_own_issue_notes: Редактиране на ÑобÑтвени бележки
-  setting_gravatar_enabled: Използване на портребителÑки икони от Gravatar
-  label_example: Пример
-  text_repository_usernames_mapping: "Select ou update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
-  permission_edit_own_messages: Редактиране на ÑобÑтвени ÑъобщениÑ
-  permission_delete_own_messages: Изтриване на ÑобÑтвени ÑъобщениÑ
-  label_user_activity: "ÐктивноÑÑ‚ на %{value}"
-  label_updated_time_by: "Обновена от %{author} преди %{age}"
-  text_diff_truncated: '... Този diff не е пълен, понеже е Ð½Ð°Ð´Ñ…Ð²ÑŠÑ€Ð»Ñ Ð¼Ð°ÐºÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€, който може да бъде показан.'
-  setting_diff_max_lines_displayed: МакÑимален брой показани diff редове
-  text_plugin_assets_writable: Папката на приÑтавките е разрешена за запиÑ
-  warning_attachments_not_saved: "%{count} файла не бÑха запиÑани."
-  button_create_and_continue: Създаване и продължаване
-  text_custom_field_possible_values_info: 'Една ÑтойноÑÑ‚ на ред'
-  label_display: Display
-  field_editable: Editable
-  setting_repository_log_display_limit: МакÑимален брой на показванете ревизии в лог файла
-  setting_file_max_size_displayed: МакÑимален размер на текÑтовите файлове, показвани inline
-  field_watcher: Ðаблюдател
-  setting_openid: Рарешаване на OpenID вход и региÑтрациÑ
-  field_identity_url: OpenID URL
-  label_login_with_open_id_option: или вход чрез OpenID
-  field_content: Съдържание
-  label_descending: ÐамалÑващ
-  label_sort: Сортиране
-  label_ascending: ÐараÑтващ
-  label_date_from_to: От %{start} до %{end}
-  label_greater_or_equal: ">="
-  label_less_or_equal: <=
-  text_wiki_page_destroy_question: Тази Ñтраница има %{descendants} Ñтраници деца и descendant(s). Какво желаете да правите?
-  text_wiki_page_reassign_children: Преназначаване на Ñтраниците деца на тази родителÑка Ñтраница
-  text_wiki_page_nullify_children: Запазване на тези Ñтраници като коренни Ñтраници
-  text_wiki_page_destroy_children: Изтриване на Ñтраниците деца и вÑички техни descendants
-  setting_password_min_length: Минимална дължина на парола
-  field_group_by: Групиране на резултатите по
-  mail_subject_wiki_content_updated: "Wiki Ñтраницата '%{id}' не беше обновена"
-  label_wiki_content_added: Wiki Ñтраница беше добавена
-  mail_subject_wiki_content_added: "Wiki Ñтраницата '%{id}' беше добавена"
-  mail_body_wiki_content_added: Wiki Ñтраницата '%{id}' беше добавена от %{author}.
-  label_wiki_content_updated: Wiki Ñтраница беше обновена
-  mail_body_wiki_content_updated: Wiki Ñтраницата '%{id}' беше обновена от %{author}.
-  permission_add_project: Създаване на проект
-  setting_new_project_user_role_id: РолÑ, давана на потребител, Ñъздаващ проекти, който не е админиÑтратор
-  label_view_all_revisions: Разглеждане на вÑички ревизии
-  label_tag: ВерÑиÑ
-  label_branch: работен вариант
-  error_no_tracker_in_project: ÐÑма аÑоциирани тракери Ñ Ñ‚Ð¾Ð·Ð¸ проект. Проверете наÑтройките на проекта.
-  error_no_default_issue_status: ÐÑма уÑтановено подразбиращо Ñе ÑÑŠÑтоÑние за задачите. ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐµÑ‚Ðµ вашата ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ (Вижте "ÐдминиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ -> СъÑтоÑÐ½Ð¸Ñ Ð½Ð° задачи").
-  text_journal_changed: "%{label} променен от %{old} на %{new}"
-  text_journal_set_to: "%{label} уÑтановен на %{value}"
-  text_journal_deleted: "%{label} изтрит (%{old})"
-  label_group_plural: Групи
-  label_group: Група
-  label_group_new: Ðова група
-  label_time_entry_plural: Използвано време
-  text_journal_added: "Добавено %{label} %{value}"
-  field_active: Ðктивен
   enumeration_system_activity: СиÑтемна активноÑÑ‚
-  permission_delete_issue_watchers: Изтриване на наблюдатели
-  version_status_closed: затворена
-  version_status_locked: заключена
-  version_status_open: отворена
-  error_can_not_reopen_issue_on_closed_version: Задача, аÑоциирана ÑÑŠÑ Ð·Ð°Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð° верÑÐ¸Ñ Ð½Ðµ може да бъде отворена отново
-  label_user_anonymous: Ðнонимен
-  button_move_and_follow: ПремеÑтване и продължаване
-  setting_default_projects_modules: Ðктивирани модули по подразбиране за нов проект
-  setting_gravatar_default: Подразбиращо Ñе изображение от Gravatar
-  field_sharing: Sharing
-  label_version_sharing_hierarchy: С проектна йерархиÑ
-  label_version_sharing_system: С вÑички проекти
-  label_version_sharing_descendants: С подпроекти
-  label_version_sharing_tree: С дърво на проектите
-  label_version_sharing_none: Ðе Ñподелен
-  error_can_not_archive_project: Този проект не може да бъде архивиран
-  button_duplicate: Дублиране
-  button_copy_and_follow: Копиране и продължаване
-  label_copy_source: Източник
-  setting_issue_done_ratio: ИзчиÑление на процента на готови задачи Ñ
-  setting_issue_done_ratio_issue_status: Използване на ÑÑŠÑтоÑнието на задачите
-  error_issue_done_ratios_not_updated: Процентът на завършените задачи не е обновен.
-  error_workflow_copy_target: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ тракер(и) и Ñ€Ð¾Ð»Ñ (роли).
-  setting_issue_done_ratio_issue_field: Използване на поле '% ПрогреÑ'
-  label_copy_same_as_target: Също като целта
-  label_copy_target: Цел
-  notice_issue_done_ratios_updated: Обновен процент на завършените задачи.
-  error_workflow_copy_source: ÐœÐ¾Ð»Ñ Ð¸Ð·Ð±ÐµÑ€ÐµÑ‚Ðµ source тракер или ролÑ
-  label_update_issue_done_ratios: ОбновÑване на процента на завършените задачи
-  setting_start_of_week: Първи ден на Ñедмицата
-  permission_view_issues: Разглеждане на задачите
-  label_display_used_statuses_only: Показване Ñамо на ÑÑŠÑтоÑниÑта, използвани от този тракер
-  label_revision_id: Ð ÐµÐ²Ð¸Ð·Ð¸Ñ %{value}
-  label_api_access_key: API ключ за доÑтъп
-  label_api_access_key_created_on: API ключ за доÑтъп е Ñъздаден преди %{value}
-  label_feeds_access_key: RSS access ключ
-  notice_api_access_key_reseted: ВашиÑÑ‚ API ключ за доÑтъп беше изчиÑтен.
-  setting_rest_api_enabled: Разрешаване на REST web ÑървиÑ
-  label_missing_api_access_key: ЛипÑващ API ключ
-  label_missing_feeds_access_key: ЛипÑващ RSS ключ за доÑтъп
-  button_show: Показване
-  text_line_separated: Позволени Ñа много ÑтойноÑти (по едно на ред).
-  setting_mail_handler_body_delimiters: ОтрÑзване на e-mail-ите Ñлед един от тези редове
-  permission_add_subprojects: Създаване на подпроекти
-  label_subproject_new: Ðов подпроект
-  text_own_membership_delete_confirmation: |-
-    Вие Ñте на път да премахнете нÑкои или вÑички ваши Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ е възможно Ñлед това на да не можете да редатирате този проект.
-    Сигурен ли Ñте, че иÑкате да продължите?
-  label_close_versions: ЗатварÑне на завършените верÑии
-  label_board_sticky: Sticky
-  label_board_locked: Заключена
-  permission_export_wiki_pages: ЕкÑпорт на wiki Ñтраници
-  setting_cache_formatted_text: Cache formatted text
-  permission_manage_project_activities: Управление на дейноÑтите на проекта
-  error_unable_delete_issue_status: ÐевъзможноÑÑ‚ за изтриване на ÑÑŠÑтоÑние на задача
-  label_profile: Профил
-  permission_manage_subtasks: Управление на подзадачите
-  field_parent_issue: РодителÑка задача
-  label_subtask_plural: Подзадачи
-  label_project_copy_notifications: Изпращане на Send e-mail извеÑÑ‚Ð¸Ñ Ð¿Ð¾ време на копирането на проекта
-  error_can_not_delete_custom_field: ÐевъзможноÑÑ‚ за изтриване на потребителÑко поле
-  error_unable_to_connect: ÐевъзможноÑÑ‚ за Ñвързване Ñ (%{value})
-  error_can_not_remove_role: Тази Ñ€Ð¾Ð»Ñ Ñе използва и не може да бъде изтрита.
-  error_can_not_delete_tracker: Този тракер Ñъдържа задачи и не може да бъде изтрит.
-  field_principal: Principal
-  label_my_page_block: Блокове в личната Ñтраница
-  notice_failed_to_save_members: "ÐевъзможноÑÑ‚ за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° член(ове): %{errors}."
-  text_zoom_out: ÐамалÑване
-  text_zoom_in: Увеличаване
-  notice_unable_delete_time_entry: ÐевъзможноÑÑ‚ за изтриване на Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° time log.
-  label_overall_spent_time: Общо употребено време
-  field_time_entries: Log time
-  notice_not_authorized_archived_project: Проектът, който Ñе опитвате да видите е архивиран.
-  text_tip_issue_end_day: задача, завършваща този ден
-  field_text: ТекÑтово поле
-  label_user_mail_option_only_owner: Само за неща, на които аз Ñъм ÑобÑтвеник
-  field_member_of_group: Член на група
-  project_module_gantt: Мрежов график
-  text_are_you_sure_with_children: Изтриване на задачата и нейните подзадачи?
-  text_tip_issue_begin_end_day: задача, започваща и завършваща този ден
-  setting_default_notification_option: Подразбиращ Ñе начин за извеÑÑ‚Ñване
-  project_module_calendar: Календар
-  label_user_mail_option_only_my_events: Само за неща, в които Ñъм включен/а
-  text_tip_issue_begin_day: задача, започваща този ден
-  label_user_mail_option_only_assigned: Само за неща, назначени на мен
-  button_edit_associated_wikipage: "Редактиране на аÑоциираната Wiki Ñтраница: %{page_title}"
-  field_assigned_to_role: Assignee's role
-  field_start_date: Ðачална дата
-  label_principal_search: "ТърÑене на потребител или група:"
-  label_user_search: "ТърÑене на потребител:"
-  field_visible: Видим
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: ДейноÑÑ‚ при отчитане на работното време
-  text_time_logged_by_changeset: Приложено в Ñ€ÐµÐ²Ð¸Ð·Ð¸Ñ %{value}.
-  setting_commit_logtime_enabled: Разрешаване на отчитането на работното време
-  notice_gantt_chart_truncated: МрежовиÑÑ‚ график е Ñъкратен, понеже броÑÑ‚ на обектите, които могат да бъдат показани е твърде голÑм (%{max})
-  setting_gantt_items_limit: МакÑимален брой обекти, които да Ñе показват в мрежов график
+
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/bs.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/bs.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -788,7 +788,7 @@
   text_user_wrote: "%{value} je napisao/la:"
   text_enumeration_destroy_question: "Za %{count} objekata je dodjeljenja ova vrijednost."
   text_enumeration_category_reassign_to: 'Ponovo im dodjeli ovu vrijednost:'
-  text_email_delivery_not_configured: "Email dostava nije konfiguraisana, notifikacija je onemogućena.\nKonfiguriši SMTP server u config/email.yml i restartuj aplikaciju nakon toga."
+  text_email_delivery_not_configured: "Email dostava nije konfiguraisana, notifikacija je onemogućena.\nKonfiguriši SMTP server u config/configuration.yml i restartuj aplikaciju nakon toga."
   text_repository_usernames_mapping: "Odaberi ili ispravi redmine korisnika mapiranog za svako korisniÄko ima naÄ‘eno u logu repozitorija.\nKorisnici sa istim imenom u redmineu i u repozitoruju se automatski mapiraju."
   text_diff_truncated: '... Ovaj prikaz razlike je odsjeÄen poÅ¡to premaÅ¡uje maksimalnu veliÄinu za prikaz'
   text_custom_field_possible_values_info: 'Jedna linija za svaku vrijednost'
@@ -951,3 +951,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/ca.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/ca.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -881,7 +881,7 @@
   text_user_wrote: "%{value} va escriure:"
   text_enumeration_destroy_question: "%{count} objectes estan assignats a aquest valor."
   text_enumeration_category_reassign_to: "Torna a assignar-los a aquest valor:"
-  text_email_delivery_not_configured: "El lliurament per correu electrònic no està configurat i les notificacions estan inhabilitades.\nConfigureu el servidor SMTP a config/email.yml i reinicieu l'aplicació per habilitar-lo."
+  text_email_delivery_not_configured: "El lliurament per correu electrònic no està configurat i les notificacions estan inhabilitades.\nConfigureu el servidor SMTP a config/configuration.yml i reinicieu l'aplicació per habilitar-lo."
   text_repository_usernames_mapping: "Seleccioneu l'assignació entre els usuaris del Redmine i cada nom d'usuari trobat al dipòsit.\nEls usuaris amb el mateix nom d'usuari o correu del Redmine i del dipòsit s'assignaran automàticament."
   text_diff_truncated: "... Aquestes diferències s'han trucat perquè excedeixen la mida màxima que es pot mostrar."
   text_custom_field_possible_values_info: "Una línia per a cada valor"
@@ -940,3 +940,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/cs.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/cs.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -1,4 +1,9 @@
+# Update to 1.1 by Michal Gebauer <mishak@mishak.net>
+# Updated by Josef Liška <jl@chl.cz>
+# CZ translation by Maxim Krušina | Massimo Filippi, s.r.o. | maxim@mxm.cz
+# Based on original CZ translation by Jan KadleÄek
 cs:
+  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
   direction: ltr
   date:
     formats:
@@ -26,7 +31,7 @@
       long: "%B %d, %Y %H:%M"
     am: "dop."
     pm: "odp."
-    
+      
   datetime:
     distance_in_words:
       half_a_minute: "půl minuty"
@@ -65,24 +70,26 @@
         other: "téměř %{count} roky"
 
   number:
+    # Výchozí formát pro Äísla
     format:
-      separator: "."
+      separator: "." 
       delimiter: ""
       precision: 3
-    human: 
-      format: 
+    human:
+      format:
+        delimiter: ""
         precision: 1
-        delimiter: ""
-      storage_units: 
+      storage_units:
         format: "%n %u"
-        units: 
-          kb: KB
-          tb: TB
-          gb: GB
-          byte: 
-            one: Byte
-            other: Bytes
-          mb: MB
+        units:
+          byte:
+            one: "Bajt"
+            other: "Bajtů"
+          kb: "kB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
         
 # Used in array.to_sentence.
   support:
@@ -94,8 +101,8 @@
     errors:
       template:
         header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
+          one:    "1 chyba zabránila uložení %{model}"
+          other:  "%{count} chyb zabránilo uložení %{model}"
       messages:
         inclusion: "není zahrnuto v seznamu"
         exclusion: "je rezervováno"
@@ -122,10 +129,6 @@
         circular_dependency: "Tento vztah by vytvořil cyklickou závislost"
         cant_link_an_issue_with_a_descendant: "Úkol nemůže být spojen s jedním z jeho dílÄích úkolů"
 
-  # Updated by Josef Liška <jl@chl.cz>
-  # CZ translation by Maxim Krušina | Massimo Filippi, s.r.o. | maxim@mxm.cz
-  # Based on original CZ translation by Jan KadleÄek
-  
   actionview_instancetag_blank_option: Prosím vyberte
   
   general_text_No: 'Ne'
@@ -154,20 +157,40 @@
   notice_successful_connection: Úspěšné připojení.
   notice_file_not_found: Stránka na kterou se snažíte zobrazit neexistuje nebo byla smazána.
   notice_locking_conflict: Údaje byly změněny jiným uživatelem.
-  notice_scm_error: Záznam a/nebo revize neexistuje v repozitáři.
   notice_not_authorized: Nemáte dostateÄná práva pro zobrazení této stránky.
+  notice_not_authorized_archived_project: Projekt ke kterému se snažíte přistupovat byl archivován.
   notice_email_sent: "Na adresu %{value} byl odeslán email"
   notice_email_error: "Při odesílání emailu nastala chyba (%{value})"
   notice_feeds_access_key_reseted: Váš klÃ­Ä pro přístup k RSS byl resetován.
+  notice_api_access_key_reseted: Váš API přístupový klÃ­Ä byl resetován.
   notice_failed_to_save_issues: "Chyba při uložení %{count} úkolu(ů) z %{total} vybraných: %{ids}."
+  notice_failed_to_save_members: "NepodaÅ™ilo se uložit Älena(y): %{errors}."
   notice_no_issue_selected: "Nebyl zvolen žádný úkol. Prosím, zvolte úkoly, které chcete editovat"
   notice_account_pending: "Váš úÄet byl vytvoÅ™en, nyní Äeká na schválení administrátorem."
   notice_default_data_loaded: Výchozí konfigurace úspěšně nahrána.
+  notice_unable_delete_version: Nemohu odstanit verzi
+  notice_unable_delete_time_entry: Nelze smazat Äas ze záznamu.
+  notice_issue_done_ratios_updated: Koeficienty dokonÄení úkolu byly aktualizovány.
+  notice_gantt_chart_truncated: Graf byl oříznut, poÄet položek pÅ™esáhl limit pro zobrazení (%{max})
   
   error_can_t_load_default_data: "Výchozí konfigurace nebyla nahrána: %{value}"
   error_scm_not_found: "Položka a/nebo revize neexistují v repozitáři."
   error_scm_command_failed: "Při pokusu o přístup k repozitáři došlo k chybě: %{value}"
+  error_scm_annotate: "Položka neexistuje nebo nemůže být komentována."
   error_issue_not_found_in_project: 'Úkol nebyl nalezen nebo nepatří k tomuto projektu'
+  error_no_tracker_in_project: Žádná fronta nebyla přiřazena tomuto projektu. Prosím zkontroluje nastavení projektu.
+  error_no_default_issue_status: Není nastaven výchozí stav úkolu. Prosím zkontrolujte nastavení ("Administrace -> Stavy úkolů").
+  error_can_not_delete_custom_field: Nelze smazat volitelné pole
+  error_can_not_delete_tracker: Tato fronta obsahuje úkoly a nemůže být smazán.
+  error_can_not_remove_role: Tato role je právě používaná a nelze ji smazat.
+  error_can_not_reopen_issue_on_closed_version: Úkol přiřazený k uzavřené verzi nemůže být znovu otevřen
+  error_can_not_archive_project: Tento projekt nemůže být archivován
+  error_issue_done_ratios_not_updated: Koeficient dokonÄení úkolu nebyl aktualizován.
+  error_workflow_copy_source: Prosím vyberte zdrojovou frontu nebo roly
+  error_workflow_copy_target: Prosím vyberte cílovou frontu(y) a roly(e)
+  error_unable_delete_issue_status: Nelze smazat stavy úkolů
+  error_unable_to_connect: Nelze se připojit (%{value})
+  warning_attachments_not_saved: "%{count} soubor(ů) nebylo možné uložit."
   
   mail_subject_lost_password: "Vaše heslo (%{value})"
   mail_body_lost_password: 'Pro změnu vašeho hesla klikněte na následující odkaz:'
@@ -177,6 +200,12 @@
   mail_body_account_information: Informace o vaÅ¡em úÄtu
   mail_subject_account_activation_request: "Aktivace %{value} úÄtu"
   mail_body_account_activation_request: "Byl zaregistrován nový uživatel %{value}. Aktivace jeho úÄtu závisí na vaÅ¡em potvrzení."
+  mail_subject_reminder: "%{count} úkol(ů) má termín během několik dní (%{days})"
+  mail_body_reminder: "%{count} úkol(ů), které máte přiřazeny má termín během několik dní (%{days}):"
+  mail_subject_wiki_content_added: "'%{id}' Wiki stránka byla přidána"
+  mail_body_wiki_content_added: "'%{id}' Wiki stránka byla přidána od %{author}."
+  mail_subject_wiki_content_updated: "'%{id}' Wiki stránka byla aktualizována"
+  mail_body_wiki_content_updated: "'%{id}' Wiki stránka byla aktualizována od %{author}."
   
   gui_validation_error: 1 chyba
   gui_validation_error_plural: "%{count} chyb(y)"
@@ -216,6 +245,7 @@
   field_priority: Priorita
   field_fixed_version: Cílová verze
   field_user: Uživatel
+  field_principal: Hlavní
   field_role: Role
   field_homepage: Domovská stránka
   field_is_public: Veřejný
@@ -260,10 +290,23 @@
   field_redirect_existing_links: Přesměrovat stvávající odkazy
   field_estimated_hours: Odhadovaná doba
   field_column_names: Sloupce
+  field_time_entries: Zaznamenaný Äas
   field_time_zone: Časové pásmo
   field_searchable: Umožnit vyhledávání
   field_default_value: Výchozí hodnota
   field_comments_sorting: Zobrazit komentáře
+  field_parent_title: RodiÄovská stránka
+  field_editable: Editovatelný
+  field_watcher: Sleduje
+  field_identity_url: OpenID URL
+  field_content: Obsah
+  field_group_by: Seskupovat výsledky podle
+  field_sharing: Sdílení
+  field_parent_issue: RodiÄovský úkol
+  field_member_of_group: Skupina přiřaditele
+  field_assigned_to_role: Role přiřaditele
+  field_text: Textové pole
+  field_visible: Viditelný
   
   setting_app_title: Název aplikace
   setting_app_subtitle: Podtitulek aplikace
@@ -275,6 +318,7 @@
   setting_issues_export_limit: Limit pro export úkolů
   setting_mail_from: Odesílat emaily z adresy
   setting_bcc_recipients: Příjemci skryté kopie (bcc)
+  setting_plain_text_mail: pouze prostý text (ne HTML)
   setting_host_name: Jméno serveru
   setting_text_formatting: Formátování textu
   setting_wiki_compression: Komprese historie Wiki
@@ -290,12 +334,94 @@
   setting_cross_project_issue_relations: Povolit vazby úkolů napÅ™Ã­Ä projekty
   setting_issue_list_default_columns: Výchozí sloupce zobrazené v seznamu úkolů
   setting_repositories_encodings: Kódování 
+  setting_commit_logs_encoding: Kódování zpráv při commitu
+  setting_emails_header: HlaviÄka emailů
   setting_emails_footer: PatiÄka emailů
   setting_protocol: Protokol
   setting_per_page_options: Povolené poÄty řádků na stránce
   setting_user_format: Formát zobrazení uživatele
   setting_activity_days_default: Dny zobrazené v Äinnosti projektu
   setting_display_subprojects_issues: Automaticky zobrazit úkoly podprojektu v hlavním projektu
+  setting_enabled_scm: Povolené SCM
+  setting_mail_handler_body_delimiters: Zkrátit e-maily po jednom z těchto řádků
+  setting_mail_handler_api_enabled: Povolit WS pro příchozí e-maily
+  setting_mail_handler_api_key: API klíÄ
+  setting_sequential_project_identifiers: Generovat sekvenÄní identifikátory projektů
+  setting_gravatar_enabled: Použít uživatelské ikony Gravatar
+  setting_gravatar_default: Výchozí Gravatar
+  setting_diff_max_lines_displayed: Maximální poÄet zobrazenách řádků rozdílů
+  setting_file_max_size_displayed: Maximální velikost textových souborů zobrazených přímo na stránce
+  setting_repository_log_display_limit: Maximální poÄet revizí zobrazených v logu souboru
+  setting_openid: Umožnit přihlašování a registrace s OpenID
+  setting_password_min_length: Minimální délka hesla
+  setting_new_project_user_role_id: Role přiřazená uživateli bez práv administrátora, který projekt vytvořil
+  setting_default_projects_modules: Výchozí zapnutné moduly pro nový projekt
+  setting_issue_done_ratio: SpoÄítat koeficient dokonÄení úkolu s
+  setting_issue_done_ratio_issue_field: Použít pole úkolu
+  setting_issue_done_ratio_issue_status: Použít stav úkolu
+  setting_start_of_week: ZaÄínat kalendáře
+  setting_rest_api_enabled: Zapnout službu REST
+  setting_cache_formatted_text: Ukládat formátovaný text do vyrovnávací paměti
+  setting_default_notification_option: Výchozí nastavení oznámení
+  setting_commit_logtime_enabled: Povolit zapisování Äasu
+  setting_commit_logtime_activity_id: Aktivita pro zapsaný Äas
+  setting_gantt_items_limit: Maximální poÄet položek zobrazený na ganttovÄ› grafu
+  
+  permission_add_project: Vytvořit projekt
+  permission_add_subprojects: Vytvořit podprojekty
+  permission_edit_project: Úprava projektů
+  permission_select_project_modules: Výběr modulů projektu
+  permission_manage_members: Spravování Älenství
+  permission_manage_project_activities: Spravovat aktivity projektu
+  permission_manage_versions: Spravování verzí
+  permission_manage_categories: Spravování kategorií úkolů
+  permission_view_issues: Zobrazit úkoly
+  permission_add_issues: Přidávání úkolů
+  permission_edit_issues: Upravování úkolů
+  permission_manage_issue_relations: Spravování vztahů mezi úkoly
+  permission_add_issue_notes: Přidávání poznámek
+  permission_edit_issue_notes: Upravování poznámek
+  permission_edit_own_issue_notes: Upravování vlastních poznámek
+  permission_move_issues: Přesouvání úkolů
+  permission_delete_issues: Mazání úkolů
+  permission_manage_public_queries: Správa veřejných dotazů
+  permission_save_queries: Ukládání dotazů
+  permission_view_gantt: Zobrazené Ganttova diagramu
+  permission_view_calendar: Prohlížení kalendáře
+  permission_view_issue_watchers: Zobrazení seznamu sledujícíh uživatelů
+  permission_add_issue_watchers: Přidání sledujících uživatelů
+  permission_delete_issue_watchers: Smazat přihlížející
+  permission_log_time: Zaznamenávání stráveného Äasu
+  permission_view_time_entries: Zobrazení stráveného Äasu
+  permission_edit_time_entries: Upravování záznamů o stráveném Äasu
+  permission_edit_own_time_entries: Upravování vlastních zázamů o stráveném Äase
+  permission_manage_news: Spravování novinek
+  permission_comment_news: Komentování novinek
+  permission_manage_documents: Správa dokumentů
+  permission_view_documents: Prohlížení dokumentů
+  permission_manage_files: Spravování souborů
+  permission_view_files: Prohlížení souborů
+  permission_manage_wiki: Spravování Wiki
+  permission_rename_wiki_pages: Přejmenovávání Wiki stránek
+  permission_delete_wiki_pages: Mazání stránek na Wiki
+  permission_view_wiki_pages: Prohlížení Wiki
+  permission_view_wiki_edits: Prohlížení historie Wiki
+  permission_edit_wiki_pages: Upravování stránek Wiki
+  permission_delete_wiki_pages_attachments: Mazání příloh
+  permission_protect_wiki_pages: ZabezpeÄení Wiki stránek
+  permission_manage_repository: Spravování repozitáře
+  permission_browse_repository: Procházení repozitáře
+  permission_view_changesets: Zobrazování sady změn
+  permission_commit_access: Commit přístup
+  permission_manage_boards: Správa diskusních fór
+  permission_view_messages: Prohlížení zpráv
+  permission_add_messages: Posílání zpráv
+  permission_edit_messages: Upravování zpráv
+  permission_edit_own_messages: Upravit vlastní zprávy
+  permission_delete_messages: Mazání zpráv
+  permission_delete_own_messages: Smazat vlastní zprávy
+  permission_export_wiki_pages: Exportovat Wiki stránky
+  permission_manage_subtasks: Spravovat podúkoly
   
   project_module_issue_tracking: Sledování úkolů
   project_module_time_tracking: Sledování Äasu
@@ -305,10 +431,13 @@
   project_module_wiki: Wiki
   project_module_repository: Repozitář
   project_module_boards: Diskuse
+  project_module_calendar: Kalendář
+  project_module_gantt: Gantt
   
   label_user: Uživatel
   label_user_plural: Uživatelé
   label_user_new: Nový uživatel
+  label_user_anonymous: Anonymní
   label_project: Projekt
   label_project_new: Nový projekt
   label_project_plural: Projekty
@@ -355,12 +484,14 @@
   label_information_plural: Informace
   label_please_login: Prosím přihlašte se
   label_register: Registrovat
+  label_login_with_open_id_option: nebo se přihlašte s OpenID
   label_password_lost: Zapomenuté heslo
   label_home: Úvodní
   label_home_heading: Úvodní
   label_my_page: Moje stránka
   label_my_account: Můj úÄet
   label_my_projects: Moje projekty
+  label_my_page_block: Bloky na mé stránce
   label_administration: Administrace
   label_login: Přihlášení
   label_logout: Odhlášení
@@ -371,6 +502,7 @@
   label_registered_on: Registrován
   label_activity: Aktivita
   label_overall_activity: Celková aktivita
+  label_user_activity: "Aktivita uživatele: %{value}"
   label_new: Nový
   label_logged_as: Přihlášen jako
   label_environment: Prostředí
@@ -379,6 +511,8 @@
   label_auth_source_new: Nový mód autentifikace
   label_auth_source_plural: Módy autentifikace
   label_subproject_plural: Podprojekty
+  label_subproject_new: Nový podprojekt
+  label_and_its_subprojects: "%{value} a jeho  podprojekty"
   label_min_max_length: Min - Max délka
   label_list: Seznam
   label_date: Datum
@@ -412,6 +546,7 @@
   label_version: Verze
   label_version_new: Nová verze
   label_version_plural: Verze
+  label_close_versions: Zavřít dokonÄené verze
   label_confirmation: Potvrzení
   label_export_to: 'Také k dispozici:'
   label_read: NaÄítá se...
@@ -470,6 +605,8 @@
   label_not_equals: není
   label_in_less_than: je měší než
   label_in_more_than: je větší než
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
   label_in: v
   label_today: dnes
   label_all_time: vše
@@ -492,15 +629,21 @@
   label_browse: Procházet
   label_modification: "%{count} změna"
   label_modification_plural: "%{count} změn"
+  label_branch: Větev
+  label_tag: Tag
   label_revision: Revize
   label_revision_plural: Revizí
+  label_revision_id: "Revize %{value}"
   label_associated_revisions: Související verze
   label_added: přidáno
   label_modified: změněno
+  label_copied: zkopírováno
+  label_renamed: přejmenováno
   label_deleted: odstraněno
   label_latest_revision: Poslední revize
   label_latest_revision_plural: Poslední revize
   label_view_revisions: Zobrazit revize
+  label_view_all_revisions: Zobrazit všechny revize
   label_max_size: Maximální velikost
   label_sort_highest: PÅ™esunout na zaÄátek
   label_sort_higher: Přesunout nahoru
@@ -526,6 +669,7 @@
   label_changes_details: Detail všech změn
   label_issue_tracking: Sledování úkolů
   label_spent_time: Strávený Äas
+  label_overall_spent_time: Celkem strávený Äas
   label_f_hour: "%{value} hodina"
   label_f_hour_plural: "%{value} hodin"
   label_time_tracking: Sledování Äasu
@@ -546,8 +690,9 @@
   label_relation_new: Nová souvislost
   label_relation_delete: Odstranit souvislost
   label_relates_to: související s
-  label_duplicates: duplicity
-  label_blocks: bloků
+  label_duplicates: duplikuje
+  label_duplicated_by: zduplikován
+  label_blocks: blokuje
   label_blocked_by: zablokován
   label_precedes: předchází
   label_follows: následuje
@@ -562,6 +707,8 @@
   label_board: Fórum
   label_board_new: Nové fórum
   label_board_plural: Fóra
+  label_board_locked: UzamÄeno
+  label_board_sticky: Nálepka
   label_topic_plural: Témata
   label_message_plural: Zprávy
   label_message_last: Poslední zpráva
@@ -577,9 +724,12 @@
   label_language_based: Podle výchozího jazyku
   label_sort_by: "Seřadit podle %{value}"
   label_send_test_email: Poslat testovací email
+  label_feeds_access_key: Přístupový klÃ­Ä pro RSS
+  label_missing_feeds_access_key: Postrádá přístupový klÃ­Ä pro RSS
   label_feeds_access_key_created_on: "Přístupový klÃ­Ä pro RSS byl vytvoÅ™en pÅ™ed %{value}"
   label_module_plural: Moduly
   label_added_time_by: "Přidáno uživatelem %{author} před %{age}"
+  label_updated_time_by: "Aktualizováno uživatelem %{author} před %{age}"
   label_updated_time: "Aktualizováno před %{value}"
   label_jump_to_a_project: Vyberte projekt...
   label_file_plural: Soubory
@@ -592,6 +742,10 @@
   label_search_titles_only: Vyhledávat pouze v názvech
   label_user_mail_option_all: "Pro všechny události všech mých projektů"
   label_user_mail_option_selected: "Pro všechny události vybraných projektů..."
+  label_user_mail_option_none: "Žádné události"
+  label_user_mail_option_only_my_events: "Jen pro věci co sleduji nebo jsem v nich zapojen"
+  label_user_mail_option_only_assigned: "Jen pro všeci kterým sem přiřazen"
+  label_user_mail_option_only_owner: "Jen pro věci které vlastním"
   label_user_mail_no_self_notified: "Nezasílat informace o mnou vytvořených změnách"
   label_registration_activation_by_email: aktivace úÄtu emailem
   label_registration_manual_activation: manuální aktivace úÄtu
@@ -610,6 +764,40 @@
   label_preferences: Nastavení
   label_chronological_order: V chronologickém pořadí
   label_reverse_chronological_order: V obrácaném chronologickém pořadí
+  label_planning: Plánování
+  label_incoming_emails: Příchozí e-maily
+  label_generate_key: Generovat klíÄ
+  label_issue_watchers: Sledování
+  label_example: Příklad
+  label_display: Zobrazit
+  label_sort: Řazení
+  label_ascending: VzestupnÄ›
+  label_descending: SestupnÄ›
+  label_date_from_to: Od %{start} do %{end}
+  label_wiki_content_added: Wiki stránka přidána
+  label_wiki_content_updated: Wiki stránka aktualizována
+  label_group: Skupina
+  label_group_plural: Skupiny
+  label_group_new: Nová skupina
+  label_time_entry_plural: Strávený Äas
+  label_version_sharing_none: Nesdíleno
+  label_version_sharing_descendants: S podprojekty
+  label_version_sharing_hierarchy: S hierarchií projektu
+  label_version_sharing_tree: Se stromem projektu
+  label_version_sharing_system: Se všemi projekty
+  label_update_issue_done_ratios: Aktualizovat koeficienty dokonÄení úkolů
+  label_copy_source: Zdroj
+  label_copy_target: Cíl
+  label_copy_same_as_target: Stejný jako cíl
+  label_display_used_statuses_only: Zobrazit pouze stavy které jsou použité touto frontou
+  label_api_access_key: API přístupový klíÄ
+  label_missing_api_access_key: ChybÄ›jící přístupový klÃ­Ä API
+  label_api_access_key_created_on: API přístupový klÃ­Ä vytvoÅ™en %{value} 
+  label_profile: Profil
+  label_subtask_plural: Podúkol
+  label_project_copy_notifications: Odeslat email oznámení v průběhu kopie projektu
+  label_principal_search: "Hledat uživatele nebo skupinu:"
+  label_user_search: "Hledat uživatele:"
   
   button_login: Přihlásit
   button_submit: Potvrdit
@@ -618,8 +806,10 @@
   button_uncheck_all: Odšrtnout vše
   button_delete: Odstranit
   button_create: Vytvořit
-  button_test: Test
+  button_create_and_continue: VytvoÅ™it a pokraÄovat
+  button_test: Testovat
   button_edit: Upravit
+  button_edit_associated_wikipage: "Upravit přiřazenou Wiki stránku: %{page_title}"
   button_add: Přidat
   button_change: Změnit
   button_apply: Použít
@@ -630,6 +820,7 @@
   button_list: Vypsat
   button_view: Zobrazit
   button_move: Přesunout
+  button_move_and_follow: Přesunout a následovat
   button_back: Zpět
   button_cancel: Storno
   button_activate: Aktivovat
@@ -641,24 +832,40 @@
   button_reply: Odpovědět
   button_archive: Archivovat
   button_unarchive: Odarchivovat
-  button_reset: Reset
+  button_reset: Resetovat
   button_rename: Přejmenovat
   button_change_password: Změnit heslo
   button_copy: Kopírovat
+  button_copy_and_follow: Kopírovat a následovat
   button_annotate: Komentovat
   button_update: Aktualizovat
   button_configure: Konfigurovat
+  button_quote: Citovat
+  button_duplicate: Duplikát
+  button_show: Zobrazit
   
   status_active: aktivní
   status_registered: registrovaný
   status_locked: uzamÄený
   
+  version_status_open: otevřený
+  version_status_locked: uzamÄený
+  version_status_closed: zavřený
+  
+  field_active: Aktivní
+  
   text_select_mail_notifications: Vyberte akci při které bude zasláno upozornění emailem.
   text_regexp_info: napÅ™. ^[A-Z0-9]+$
   text_min_max_length_info: 0 znamená bez limitu
   text_project_destroy_confirmation: Jste si jisti, že chcete odstranit tento projekt a všechna související data ?
+  text_subprojects_destroy_warning: "Jeho podprojek(y): %{value} budou také smazány."
   text_workflow_edit: Vyberte roli a frontu k editaci průběhu práce
   text_are_you_sure: Jste si jisti?
+  text_are_you_sure_with_children: Smazat úkol vÄetnÄ› vÅ¡ech podúkolů?
+  text_journal_changed: "%{label} změněn z %{old} na %{new}"
+  text_journal_set_to: "%{label} nastaven na %{value}"
+  text_journal_deleted: "%{label} smazán (%{old})"
+  text_journal_added: "%{label} %{value} přidán"
   text_tip_issue_begin_day: úkol zaÄíná v tento den
   text_tip_issue_end_day: úkol konÄí v tento den
   text_tip_issue_begin_end_day: úkol zaÄíná a konÄí v tento den
@@ -669,6 +876,7 @@
   text_tracker_no_workflow: Pro tuto frontu není definován žádný průběh práce
   text_unallowed_characters: Nepovolené znaky
   text_comma_separated: Povoleno více hodnot (oddÄ›lÄ›né Äárkou).
+  text_line_separated: Více hodnot povoleno (jeden řádek pro každou hodnotu).
   text_issues_ref_in_commit_messages: Odkazování a opravování úkolů ve zprávách commitů
   text_issue_added: "Úkol %{id} byl vytvořen uživatelem %{author}."
   text_issue_updated: "Úkol %{id} byl aktualizován uživatelem %{author}."
@@ -680,15 +888,31 @@
   text_no_configuration_data: "Role, fronty, stavy úkolů ani průbÄ›h práce nebyly zatím nakonfigurovány.\nVelice doporuÄujeme nahrát výchozí konfiguraci. Po té si můžete vÅ¡e upravit"
   text_load_default_configuration: Nahrát výchozí konfiguraci
   text_status_changed_by_changeset: "Použito v changesetu %{value}."
+  text_time_logged_by_changeset: Aplikováno v changesetu %{value}.
   text_issues_destroy_confirmation: 'Opravdu si přejete odstranit všechny zvolené úkoly?'
   text_select_project_modules: 'Aktivní moduly v tomto projektu:'
   text_default_administrator_account_changed: Výchozí nastavení administrátorského úÄtu zmÄ›nÄ›no
   text_file_repository_writable: Povolen zápis do adresáře ukládání souborů
+  text_plugin_assets_writable: Možnost zápisu do adresáře plugin assets
   text_rmagick_available: RMagick k dispozici (volitelné)
   text_destroy_time_entries_question: "U úkolů, které chcete odstranit je evidováno %{hours} práce. Co chete udělat?"
   text_destroy_time_entries: Odstranit evidované hodiny.
   text_assign_time_entries_to_project: Přiřadit evidované hodiny projektu
   text_reassign_time_entries: 'Přeřadit evidované hodiny k tomuto úkolu:'
+  text_user_wrote: "%{value} napsal:"
+  text_enumeration_destroy_question: "Několik (%{count}) objektů je přiřazeno k této hodnotě."
+  text_enumeration_category_reassign_to: 'Přeřadit je do této:'
+  text_email_delivery_not_configured: "DoruÄování e-mailů není nastaveno a odesílání notifikací je zakázáno.\nNastavte Váš SMTP server v souboru config/email.yml a restartujte aplikaci."
+  text_repository_usernames_mapping: "Vybrat nebo upravit mapování mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným Redmine uživatelským jménem a uživatelským jménem v repozitáři jsou mapovaní automaticky."
+  text_diff_truncated: '... Rozdílový soubor je zkrácen, protože jeho délka přesahuje max. limit.'
+  text_custom_field_possible_values_info: 'Každá hodnota na novém řádku'
+  text_wiki_page_destroy_question: Tato stránka má %{descendants} podstránek a potomků. Co chcete udělat?
+  text_wiki_page_nullify_children: Ponechat podstránky jako kořenové stránky
+  text_wiki_page_destroy_children: Smazat podstránky a všechny jejich potomky
+  text_wiki_page_reassign_children: PÅ™iÅ™adit podstránky k tomuto rodiÄi
+  text_own_membership_delete_confirmation: "Chystáte se odebrat si nÄ›která nebo vÅ¡echny svá oprávnÄ›ní a potom již nemusíte být schopni upravit tento projekt.\nOpravdu chcete pokraÄovat?"
+  text_zoom_in: Přiblížit
+  text_zoom_out: Oddálit
   
   default_role_manager: Manažer
   default_role_developer: Vývojář
@@ -715,225 +939,9 @@
   enumeration_issue_priorities: Priority úkolů
   enumeration_doc_categories: Kategorie dokumentů
   enumeration_activities: Aktivity (sledování Äasu)
-  error_scm_annotate: "Položka neexistuje nebo nemůže být komentována."
-  label_planning: Plánování
-  text_subprojects_destroy_warning: "Jeho podprojek(y): %{value} budou také smazány."
-  label_and_its_subprojects: "%{value} a jeho  podprojekty"
-  mail_body_reminder: "%{count} úkol(ů), které máte přiřazeny má termín během několik dní (%{days}):"
-  mail_subject_reminder: "%{count} úkol(ů) má termín během několik dní (%{days})"
-  text_user_wrote: "%{value} napsal:"
-  label_duplicated_by: duplikováno od
-  setting_enabled_scm: Povolené SCM
-  text_enumeration_category_reassign_to: 'Přeřadit je do této:'
-  text_enumeration_destroy_question: "Několik (%{count}) objektů je přiřazeno k této hodnotě."
-  label_incoming_emails: Příchozí e-maily
-  label_generate_key: Generovat klíÄ
-  setting_mail_handler_api_enabled: Povolit WS pro příchozí e-maily
-  setting_mail_handler_api_key: API klíÄ
-  text_email_delivery_not_configured: "DoruÄování e-mailů není nastaveno a odesílání notifikací je zakázáno.\nNastavte Váš SMTP server v souboru config/email.yml a restartujte aplikaci."
-  field_parent_title: RodiÄovská stránka
-  label_issue_watchers: Sledování
-  setting_commit_logs_encoding: Kódování zpráv při commitu
-  button_quote: Citovat
-  setting_sequential_project_identifiers: Generovat sekvenÄní identifikátory projektů
-  notice_unable_delete_version: Nemohu odstanit verzi
-  label_renamed: přejmenováno
-  label_copied: zkopírováno
-  setting_plain_text_mail: pouze prostý text (ne HTML)
-  permission_view_files: Prohlížení souborů
-  permission_edit_issues: Upravování úkolů
-  permission_edit_own_time_entries: Upravování vlastních zázamů o stráveném Äase
-  permission_manage_public_queries: Správa veřejných dotazů
-  permission_add_issues: Přidávání úkolů
-  permission_log_time: Zaznamenávání stráveného Äasu
-  permission_view_changesets: Zobrazování sady změn
-  permission_view_time_entries: Zobrazení stráveného Äasu
-  permission_manage_versions: Spravování verzí
-  permission_manage_wiki: Spravování Wiki
-  permission_manage_categories: Spravování kategorií úkolů
-  permission_protect_wiki_pages: ZabezpeÄení Wiki stránek
-  permission_comment_news: Komentování novinek
-  permission_delete_messages: Mazání zpráv
-  permission_select_project_modules: Výběr modulů projektu
-  permission_manage_documents: Správa dokumentů
-  permission_edit_wiki_pages: Upravování stránek Wiki
-  permission_add_issue_watchers: Přidání sledujících uživatelů
-  permission_view_gantt: Zobrazené Ganttova diagramu
-  permission_move_issues: Přesouvání úkolů
-  permission_manage_issue_relations: Spravování vztahů mezi úkoly
-  permission_delete_wiki_pages: Mazání stránek na Wiki
-  permission_manage_boards: Správa diskusních fór
-  permission_delete_wiki_pages_attachments: Mazání příloh
-  permission_view_wiki_edits: Prohlížení historie Wiki
-  permission_add_messages: Posílání zpráv
-  permission_view_messages: Prohlížení zpráv
-  permission_manage_files: Spravování souborů
-  permission_edit_issue_notes: Upravování poznámek
-  permission_manage_news: Spravování novinek
-  permission_view_calendar: Prohlížení kalendáře
-  permission_manage_members: Spravování Älenství
-  permission_edit_messages: Upravování zpráv
-  permission_delete_issues: Mazání úkolů
-  permission_view_issue_watchers: Zobrazení seznamu sledujícíh uživatelů
-  permission_manage_repository: Spravování repozitáře
-  permission_commit_access: Commit přístup
-  permission_browse_repository: Procházení repozitáře
-  permission_view_documents: Prohlížení dokumentů
-  permission_edit_project: Úprava projektů
-  permission_add_issue_notes: Přidávání poznámek
-  permission_save_queries: Ukládání dotazů
-  permission_view_wiki_pages: Prohlížení Wiki
-  permission_rename_wiki_pages: Přejmenovávání Wiki stránek
-  permission_edit_time_entries: Upravování záznamů o stráveném Äasu
-  permission_edit_own_issue_notes: Upravování vlastních poznámek
-  setting_gravatar_enabled: Použít uživatelské ikony Gravatar
-  label_example: Příklad
-  text_repository_usernames_mapping: "Vybrat nebo upravit mapování mezi Redmine uživateli a uživatelskými jmény nalezenými v logu repozitáře.\nUživatelé se shodným Redmine uživatelským jménem a uživatelským jménem v repozitáři jsou mapovaní automaticky."
-  permission_edit_own_messages: Upravit vlastní zprávy
-  permission_delete_own_messages: Smazat vlastní zprávy
-  label_user_activity: "Aktivita uživatele: %{value}"
-  label_updated_time_by: "Akutualizováno: %{author} před: %{age}"
-  text_diff_truncated: '... Rozdílový soubor je zkrácen, protože jeho délka přesahuje max. limit.'
-  setting_diff_max_lines_displayed: Maximální poÄet zobrazenách řádků rozdílů
-  text_plugin_assets_writable: Možnost zápisu do adresáře plugin assets
-  warning_attachments_not_saved: "%{count} soubor(ů) nebylo možné uložit."
-  button_create_and_continue: VytvoÅ™it a pokraÄovat
-  text_custom_field_possible_values_info: 'Každá hodnota na novém řádku'
-  label_display: Zobrazit
-  field_editable: Editovatelný
-  setting_repository_log_display_limit: Maximální poÄet revizí zobrazených v logu souboru
-  setting_file_max_size_displayed: Maximální velikost textových souborů zobrazených přímo na stránce
-  field_watcher: Sleduje
-  setting_openid: Umožnit přihlašování a registrace s OpenID
-  field_identity_url: OpenID URL
-  label_login_with_open_id_option: nebo se přihlašte s OpenID
-  field_content: Obsah
-  label_descending: SestupnÄ›
-  label_sort: Řazení
-  label_ascending: VzestupnÄ›
-  label_date_from_to: Od %{start} do %{end}
-  label_greater_or_equal: ">="
-  label_less_or_equal: <=
-  text_wiki_page_destroy_question: Tato stránka má %{descendants} podstránek a potomků. Co chcete udělat?
-  text_wiki_page_reassign_children: PÅ™iÅ™adit podstránky k tomuto rodiÄi
-  text_wiki_page_nullify_children: Ponechat podstránky jako kořenové stránky
-  text_wiki_page_destroy_children: Smazat podstránky a všechny jejich potomky
-  setting_password_min_length: Minimální délka hesla
-  field_group_by: Seskupovat výsledky podle
-  mail_subject_wiki_content_updated: "'%{id}' Wiki stránka byla aktualizována"
-  label_wiki_content_added: Wiki stránka přidána
-  mail_subject_wiki_content_added: "'%{id}' Wiki stránka byla přidána"
-  mail_body_wiki_content_added: "'%{id}' Wiki stránka byla přidána od %{author}."
-  label_wiki_content_updated: Wiki stránka aktualizována
-  mail_body_wiki_content_updated: "'%{id}' Wiki stránka byla aktualizována od %{author}."
-  permission_add_project: Vytvořit projekt
-  setting_new_project_user_role_id: Role přiřazená uživateli bez práv administrátora, který projekt vytvořil
-  label_view_all_revisions: Zobrazit všechny revize
-  label_tag: Tag
-  label_branch: Branch
-  error_no_tracker_in_project: Žádná fronta nebyla přiřazena tomuto projektu. Prosím zkontroluje nastavení projektu.
-  error_no_default_issue_status: Není nastaven výchozí stav úkolu. Prosím zkontrolujte nastavení ("Administrace -> Stavy úkolů").
-  text_journal_changed: "%{label} změněn z %{old} na %{new}"
-  text_journal_set_to: "%{label} nastaven na %{value}"
-  text_journal_deleted: "%{label} smazán (%{old})"
-  label_group_plural: Skupiny
-  label_group: Skupina
-  label_group_new: Nová skupina
-  label_time_entry_plural: Strávený Äas
-  text_journal_added: "%{label} %{value} přidán"
-  field_active: Aktivní
   enumeration_system_activity: Systémová aktivita
-  permission_delete_issue_watchers: Smazat přihlížející
-  version_status_closed: zavřený
-  version_status_locked: uzamÄený
-  version_status_open: otevřený
-  error_can_not_reopen_issue_on_closed_version: Úkol přiřazený k uzavřené verzi nemůže být znovu otevřen
-  label_user_anonymous: Anonymní
-  button_move_and_follow: Přesunout a následovat
-  setting_default_projects_modules: Výchozí zapnutné moduly pro nový projekt
-  setting_gravatar_default: Výchozí Gravatar
-  field_sharing: Sdílení
-  label_version_sharing_hierarchy: S hierarchií projektu
-  label_version_sharing_system: Se všemi projekty
-  label_version_sharing_descendants: S podprojekty
-  label_version_sharing_tree: Se stromem projektu
-  label_version_sharing_none: Nesdíleno
-  error_can_not_archive_project: Tento projekt nemůže být archivován
-  button_duplicate: Duplikát
-  button_copy_and_follow: Kopírovat a následovat
-  label_copy_source: Zdroj
-  setting_issue_done_ratio: SpoÄítat koeficient dokonÄení úkolu s
-  setting_issue_done_ratio_issue_status: Použít stav úkolu
-  error_issue_done_ratios_not_updated: Koeficient dokonÄení úkolu nebyl aktualizován.
-  error_workflow_copy_target: Prosím vyberte cílovou frontu(y) a roly(e)
-  setting_issue_done_ratio_issue_field: Použít pole úkolu
-  label_copy_same_as_target: Stejný jako cíl
-  label_copy_target: Cíl
-  notice_issue_done_ratios_updated: Koeficienty dokonÄení úkolu byly aktualizovány.
-  error_workflow_copy_source: Prosím vyberte zdrojovou frontu nebo roly
-  label_update_issue_done_ratios: Aktualizovat koeficienty dokonÄení úkolů
-  setting_start_of_week: ZaÄínat kalendáře
-  permission_view_issues: Zobrazit úkoly
-  label_display_used_statuses_only: Zobrazit pouze stavy které jsou použité touto frontou
-  label_revision_id: Revize %{value}
-  label_api_access_key: API přístupový klíÄ
-  label_api_access_key_created_on: API přístupový klÃ­Ä vytvoÅ™en %{value} 
-  label_feeds_access_key: RSS přístupový klíÄ
-  notice_api_access_key_reseted: Váš API přístupový klÃ­Ä byl resetován.
-  setting_rest_api_enabled: Zapnout službu REST
-  label_missing_api_access_key: ChybÄ›jící přístupový klÃ­Ä API
-  label_missing_feeds_access_key: ChybÄ›jící přístupový klÃ­Ä RSS
-  button_show: Zobrazit
-  text_line_separated: Více hodnot povoleno (jeden řádek pro každou hodnotu).
-  setting_mail_handler_body_delimiters: Zkrátit e-maily po jednom z těchto řádků
-  permission_add_subprojects: Vytvořit podprojekty
-  label_subproject_new: Nový podprojekt
-  text_own_membership_delete_confirmation: |-
-    Chystáte se odebrat si některá nebo všechny svá oprávnění a potom již nemusíte být schopni upravit tento projekt.
-    Opravdu chcete pokraÄovat?
-  label_close_versions: Zavřít dokonÄené verze
-  label_board_sticky: Nálepka
-  label_board_locked: UzamÄeno
-  permission_export_wiki_pages: Exportovat Wiki stránky
-  setting_cache_formatted_text: Ukládat formátovaný text do vyrovnávací paměti
-  permission_manage_project_activities: Spravovat aktivity projektu
-  error_unable_delete_issue_status: Nelze smazat stavy úkolů
-  label_profile: Profil
-  permission_manage_subtasks: Spravovat podúkoly
-  field_parent_issue: RodiÄovský úkol
-  label_subtask_plural: Podúkol
-  label_project_copy_notifications: Odeslat email oznámení v průběhu kopie projektu
-  error_can_not_delete_custom_field: Nelze smazat volitelné pole
-  error_unable_to_connect: Nelze se připojit (%{value})
-  error_can_not_remove_role: Tato role je právě používaná a nelze ji smazat.
-  error_can_not_delete_tracker: Tato fronta obsahuje úkoly a nemůže být smazán.
-  field_principal: Hlavní
-  label_my_page_block: Bloky na mé stránce
-  notice_failed_to_save_members: "NepodaÅ™ilo se uložit Älena(y): %{errors}."
-  text_zoom_out: Oddálit
-  text_zoom_in: Přiblížit
-  notice_unable_delete_time_entry: Nelze smazat Äas ze záznamu.
-  label_overall_spent_time: CelkovÄ› strávený Äas
-  field_time_entries: Zaznamenaný Äas
-  project_module_gantt: Gantt
-  project_module_calendar: Kalendář
-  button_edit_associated_wikipage: "Upravit přiřazenou Wiki stránku: %{page_title}"
-  text_are_you_sure_with_children: Smazat úkol vÄetnÄ› vÅ¡ech podúkolů?
-  field_text: Textové pole
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/da.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/da.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -754,7 +754,7 @@
   setting_sequential_project_identifiers: Generér sekventielle projekt-identifikatorer
   setting_plain_text_mail: Emails som almindelig tekst (ingen HTML)
   field_parent_title: Siden over
-  text_email_delivery_not_configured: "Email-afsendelse er ikke indstillet og notifikationer er defor slået fra.\nKonfigurér din SMTP server i config/email.yml og genstart applikationen for at aktivere email-afsendelse."
+  text_email_delivery_not_configured: "Email-afsendelse er ikke indstillet og notifikationer er defor slået fra.\nKonfigurér din SMTP server i config/configuration.yml og genstart applikationen for at aktivere email-afsendelse."
   permission_protect_wiki_pages: Beskyt wiki sider
   permission_manage_documents: Administrér dokumenter
   permission_add_issue_watchers: Tilføj overvågere
@@ -953,3 +953,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/de.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/de.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -899,7 +899,7 @@
   text_user_wrote: "%{value} schrieb:"
   text_enumeration_destroy_question: "%{count} Objekt(e) sind diesem Wert zugeordnet."
   text_enumeration_category_reassign_to: 'Die Objekte stattdessen diesem Wert zuordnen:'
-  text_email_delivery_not_configured: "Der SMTP-Server ist nicht konfiguriert und Mailbenachrichtigungen sind ausgeschaltet.\nNehmen Sie die Einstellungen für Ihren SMTP-Server in config/email.yml vor und starten Sie die Applikation neu."
+  text_email_delivery_not_configured: "Der SMTP-Server ist nicht konfiguriert und Mailbenachrichtigungen sind ausgeschaltet.\nNehmen Sie die Einstellungen für Ihren SMTP-Server in config/configuration.yml vor und starten Sie die Applikation neu."
   text_repository_usernames_mapping: "Bitte legen Sie die Zuordnung der Redmine-Benutzer zu den Benutzernamen der Commit-Log-Meldungen des Projektarchivs fest.\nBenutzer mit identischen Redmine- und Projektarchiv-Benutzernamen oder -E-Mail-Adressen werden automatisch zugeordnet."
   text_diff_truncated: '... Dieser Diff wurde abgeschnitten, weil er die maximale Anzahl anzuzeigender Zeilen überschreitet.'
   text_custom_field_possible_values_info: 'Eine Zeile pro Wert'
@@ -954,3 +954,7 @@
   setting_commit_logtime_enabled: Aktiviere Zeitlogging
   notice_gantt_chart_truncated: Die Grafik ist unvollständig, da das Maximum der anzeigbaren Aufgaben überschritten wurde (%{max})
   setting_gantt_items_limit: Maximale Anzahl von Aufgaben die im Gantt-Chart angezeigt werden.
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/el.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/el.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -799,7 +799,7 @@
   text_user_wrote: "%{value} έγÏαψε:"
   text_enumeration_destroy_question: "%{count} αντικείμενα έχουν τεθεί σε αυτή την τιμή."
   text_enumeration_category_reassign_to: 'ΕπανεκχώÏηση τους στην παÏοÏσα αξία:'
-  text_email_delivery_not_configured: "Δεν έχουν γίνει Ïυθμίσεις παÏάδοσης email, και οι ειδοποιήσεις είναι απενεÏγοποιημένες.\nΔηλώστε τον εξυπηÏετητή SMTP στο config/email.yml και κάντε επανακκίνηση την εφαÏμογή για να τις Ïυθμίσεις."
+  text_email_delivery_not_configured: "Δεν έχουν γίνει Ïυθμίσεις παÏάδοσης email, και οι ειδοποιήσεις είναι απενεÏγοποιημένες.\nΔηλώστε τον εξυπηÏετητή SMTP στο config/configuration.yml και κάντε επανακκίνηση την εφαÏμογή για να τις Ïυθμίσεις."
   text_repository_usernames_mapping: "Επιλέξτε ή ενημεÏώστε τον χÏήστη Redmine που αντιστοιχεί σε κάθε όνομα χÏήστη  στο ιστοÏικό του αποθετηÏίου.\nΧÏήστες με το ίδιο όνομα χÏήστη ή email στο Redmine και στο αποθετηÏίο αντιστοιχίζονται αυτόματα."
   text_diff_truncated: '... Αυτό το diff εχεί κοπεί επειδή υπεÏβαίνει το μέγιστο μέγεθος που μποÏεί να Ï€Ïοβληθεί.'
   text_custom_field_possible_values_info: 'Μία γÏαμμή για κάθε τιμή'
@@ -937,3 +937,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/en-GB.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/en-GB.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -1,962 +1,946 @@
-en-GB:
-  direction: ltr
-  date:
-    formats:
-      # Use the strftime parameters for formats.
-      # When no format has been given, it uses default.
-      # You can provide other formats here if you like!
-      default: "%d/%m/%Y"
-      short: "%d %b"
-      long: "%d %B, %Y"
-      
-    day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
-    abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
-      
-    # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
-    abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
-    # Used in date_select and datime_select.
-    order: [ :year, :month, :day ]
-
-  time:
-    formats:
-      default: "%d/%m/%Y %I:%M %p"
-      time: "%I:%M %p"
-      short: "%d %b %H:%M"
-      long: "%d %B, %Y %H:%M"
-    am: "am"
-    pm: "pm"
-      
-  datetime:
-    distance_in_words:
-      half_a_minute: "half a minute"
-      less_than_x_seconds:
-        one:   "less than 1 second"
-        other: "less than %{count} seconds"
-      x_seconds:
-        one:   "1 second"
-        other: "%{count} seconds"
-      less_than_x_minutes:
-        one:   "less than a minute"
-        other: "less than %{count} minutes"
-      x_minutes:
-        one:   "1 minute"
-        other: "%{count} minutes"
-      about_x_hours:
-        one:   "about 1 hour"
-        other: "about %{count} hours"
-      x_days:
-        one:   "1 day"
-        other: "%{count} days"
-      about_x_months:
-        one:   "about 1 month"
-        other: "about %{count} months"
-      x_months:
-        one:   "1 month"
-        other: "%{count} months"
-      about_x_years:
-        one:   "about 1 year"
-        other: "about %{count} years"
-      over_x_years:
-        one:   "over 1 year"
-        other: "over %{count} years"
-      almost_x_years:
-        one:   "almost 1 year"
-        other: "almost %{count} years"
-
-  number:
-    format:
-      separator: "."
-      delimiter: " "
-      precision: 3
-
-    currency:
-      format:
-        format: "%u%n"
-        unit: "£"
-    human:
-      format:
-        delimiter: ""
-        precision: 1
-      storage_units:
-        format: "%n %u"
-        units:
-          byte:
-            one: "Byte"
-            other: "Bytes"
-          kb: "kB"
-          mb: "MB"
-          gb: "GB"
-          tb: "TB"
-
-        
-# Used in array.to_sentence.
-  support:
-    array:
-      sentence_connector: "and"
-      skip_last_comma: false
-      
-  activerecord:
-    errors:
-      template:
-        header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
-      messages:
-        inclusion: "is not included in the list"
-        exclusion: "is reserved"
-        invalid: "is invalid"
-        confirmation: "doesn't match confirmation"
-        accepted: "must be accepted"
-        empty: "can't be empty"
-        blank: "can't be blank"
-        too_long: "is too long (maximum is %{count} characters)"
-        too_short: "is too short (minimum is %{count} characters)"
-        wrong_length: "is the wrong length (should be %{count} characters)"
-        taken: "has already been taken"
-        not_a_number: "is not a number"
-        not_a_date: "is not a valid date"
-        greater_than: "must be greater than %{count}"
-        greater_than_or_equal_to: "must be greater than or equal to %{count}"
-        equal_to: "must be equal to %{count}"
-        less_than: "must be less than %{count}"
-        less_than_or_equal_to: "must be less than or equal to %{count}"
-        odd: "must be odd"
-        even: "must be even"
-        greater_than_start_date: "must be greater than start date"
-        not_same_project: "doesn't belong to the same project"
-        circular_dependency: "This relation would create a circular dependency"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
-
-  actionview_instancetag_blank_option: Please select
-  
-  general_text_No: 'No'
-  general_text_Yes: 'Yes'
-  general_text_no: 'no'
-  general_text_yes: 'yes'
-  general_lang_name: 'English (British)'
-  general_csv_separator: ','
-  general_csv_decimal_separator: '.'
-  general_csv_encoding: ISO-8859-1
-  general_pdf_encoding: ISO-8859-1
-  general_first_day_of_week: '1'
-  
-  notice_account_updated: Account was successfully updated.
-  notice_account_invalid_creditentials: Invalid user or password
-  notice_account_password_updated: Password was successfully updated.
-  notice_account_wrong_password: Wrong password
-  notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you.
-  notice_account_unknown_email: Unknown user.
-  notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
-  notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
-  notice_account_activated: Your account has been activated. You can now log in.
-  notice_successful_create: Successful creation.
-  notice_successful_update: Successful update.
-  notice_successful_delete: Successful deletion.
-  notice_successful_connection: Successful connection.
-  notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
-  notice_locking_conflict: Data has been updated by another user.
-  notice_not_authorized: You are not authorised to access this page.
-  notice_email_sent: "An email was sent to %{value}"
-  notice_email_error: "An error occurred while sending mail (%{value})"
-  notice_feeds_access_key_reseted: Your RSS access key was reset.
-  notice_api_access_key_reseted: Your API access key was reset.
-  notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
-  notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
-  notice_account_pending: "Your account was created and is now pending administrator approval."
-  notice_default_data_loaded: Default configuration successfully loaded.
-  notice_unable_delete_version: Unable to delete version.
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-  
-  error_can_t_load_default_data: "Default configuration could not be loaded: %{value}"
-  error_scm_not_found: "The entry or revision was not found in the repository."
-  error_scm_command_failed: "An error occurred when trying to access the repository: %{value}"
-  error_scm_annotate: "The entry does not exist or can not be annotated."
-  error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
-  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
-  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
-  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
-  error_can_not_archive_project: This project can not be archived
-  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
-  error_workflow_copy_source: 'Please select a source tracker or role'
-  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
-  
-  warning_attachments_not_saved: "%{count} file(s) could not be saved."
-  
-  mail_subject_lost_password: "Your %{value} password"
-  mail_body_lost_password: 'To change your password, click on the following link:'
-  mail_subject_register: "Your %{value} account activation"
-  mail_body_register: 'To activate your account, click on the following link:'
-  mail_body_account_information_external: "You can use your %{value} account to log in."
-  mail_body_account_information: Your account information
-  mail_subject_account_activation_request: "%{value} account activation request"
-  mail_body_account_activation_request: "A new user (%{value}) has registered. The account is pending your approval:"
-  mail_subject_reminder: "%{count} issue(s) due in the next %{days} days"
-  mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
-  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
-  mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
-  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
-  mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
-  
-  gui_validation_error: 1 error
-  gui_validation_error_plural: "%{count} errors"
-
-  field_ssamr_user_detail:
-    description: User Description
-  field_name: Name
-  field_description: Description
-  field_summary: Summary
-  field_is_required: Required
-  field_firstname: First name
-  field_lastname: Last name
-  field_mail: Email
-  field_filename: File
-  field_filesize: Size
-  field_downloads: Downloads
-  field_author: Author
-  field_created_on: Created
-  field_updated_on: Updated
-  field_field_format: Format
-  field_is_for_all: For all projects
-  field_possible_values: Possible values
-  field_regexp: Regular expression
-  field_min_length: Minimum length
-  field_max_length: Maximum length
-  field_value: Value
-  field_category: Category
-  field_title: Title
-  field_project: Project
-  field_issue: Issue
-  field_status: Status
-  field_notes: Notes
-  field_is_closed: Issue closed
-  field_is_default: Default value
-  field_tracker: Tracker
-  field_subject: Subject
-  field_due_date: Due date
-  field_assigned_to: Assignee
-  field_priority: Priority
-  field_fixed_version: Target version
-  field_user: User
-  field_role: Role
-  field_homepage: Homepage
-  field_is_public: Public
-  field_is_private: Private
-  field_parent: Subproject of
-  field_is_in_roadmap: Issues displayed in roadmap
-  field_login: Login
-  field_mail_notification: Email notifications
-  field_admin: Administrator
-  field_last_login_on: Last connection
-  field_language: Language
-  field_effective_date: Date
-  field_password: Password
-  field_new_password: New password
-  field_password_confirmation: Confirmation
-  field_version: Version
-  field_type: Type
-  field_host: Host
-  field_port: Port
-  field_account: Account
-  field_base_dn: Base DN
-  field_attr_login: Login attribute
-  field_attr_firstname: Firstname attribute
-  field_attr_lastname: Lastname attribute
-  field_attr_mail: Email attribute
-  field_onthefly: On-the-fly user creation
-  field_start_date: Start date
-  field_done_ratio: % Done
-  field_auth_source: Authentication mode
-  field_hide_mail: Hide my email address
-  field_comments: Comment
-  field_url: URL
-  field_start_page: Start page
-  field_subproject: Subproject
-  field_hours: Hours
-  field_activity: Activity
-  field_spent_on: Date
-  field_identifier: Identifier
-  field_is_filter: Used as a filter
-  field_issue_to: Related issue
-  field_delay: Delay
-  field_assignable: Issues can be assigned to this role
-  field_redirect_existing_links: Redirect existing links
-  field_estimated_hours: Estimated time
-  field_column_names: Columns
-  field_time_zone: Time zone
-  field_searchable: Searchable
-  field_default_value: Default value
-  field_comments_sorting: Display comments
-  field_parent_title: Parent page
-  field_editable: Editable
-  field_watcher: Watcher
-  field_identity_url: OpenID URL
-  field_content: Content
-  field_group_by: Group results by
-  field_sharing: Sharing
-  
-  setting_app_title: Application title
-  setting_app_subtitle: Application subtitle
-  setting_welcome_text: Welcome text
-  setting_tipoftheday_text: Tip of the Day
-  setting_notifications_text: Notifications
-  setting_default_language: Default language
-  setting_login_required: Authentication required
-  setting_self_registration: Self-registration
-  setting_attachment_max_size: Attachment max. size
-  setting_issues_export_limit: Issues export limit
-  setting_mail_from: Emission email address
-  setting_bcc_recipients: Blind carbon copy recipients (bcc)
-  setting_plain_text_mail: Plain text mail (no HTML)
-  setting_host_name: Host name and path
-  setting_text_formatting: Text formatting
-  setting_wiki_compression: Wiki history compression
-  setting_feeds_limit: Feed content limit
-  setting_default_projects_public: New projects are public by default
-  setting_autofetch_changesets: Autofetch commits
-  setting_sys_api_enabled: Enable WS for repository management
-  setting_commit_ref_keywords: Referencing keywords
-  setting_commit_fix_keywords: Fixing keywords
-  setting_autologin: Autologin
-  setting_date_format: Date format
-  setting_time_format: Time format
-  setting_cross_project_issue_relations: Allow cross-project issue relations
-  setting_issue_list_default_columns: Default columns displayed on the issue list
-  setting_repositories_encodings: Repositories encodings
-  setting_commit_logs_encoding: Commit messages encoding
-  setting_emails_footer: Emails footer
-  setting_protocol: Protocol
-  setting_per_page_options: Objects per page options
-  setting_user_format: Users display format
-  setting_activity_days_default: Days displayed on project activity
-  setting_display_subprojects_issues: Display subprojects issues on main projects by default
-  setting_enabled_scm: Enabled SCM
-  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
-  setting_mail_handler_api_enabled: Enable WS for incoming emails
-  setting_mail_handler_api_key: API key
-  setting_sequential_project_identifiers: Generate sequential project identifiers
-  setting_gravatar_enabled: Use Gravatar user icons
-  setting_gravatar_default: Default Gravatar image
-  setting_diff_max_lines_displayed: Max number of diff lines displayed
-  setting_file_max_size_displayed: Max size of text files displayed inline
-  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
-  setting_openid: Allow OpenID login and registration
-  setting_password_min_length: Minimum password length
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_field: Use the issue field
-  setting_issue_done_ratio_issue_status: Use the issue status
-  setting_start_of_week: Start calendars on
-  setting_rest_api_enabled: Enable REST web service
-  setting_cache_formatted_text: Cache formatted text
-  
-  permission_add_project: Create project
-  permission_add_subprojects: Create subprojects
-  permission_edit_project: Edit project
-  permission_select_project_modules: Select project modules
-  permission_manage_members: Manage members
-  permission_manage_project_activities: Manage project activities
-  permission_manage_versions: Manage versions
-  permission_manage_categories: Manage issue categories
-  permission_view_issues: View Issues
-  permission_add_issues: Add issues
-  permission_edit_issues: Edit issues
-  permission_manage_issue_relations: Manage issue relations
-  permission_add_issue_notes: Add notes
-  permission_edit_issue_notes: Edit notes
-  permission_edit_own_issue_notes: Edit own notes
-  permission_move_issues: Move issues
-  permission_delete_issues: Delete issues
-  permission_manage_public_queries: Manage public queries
-  permission_save_queries: Save queries
-  permission_view_gantt: View gantt chart
-  permission_view_calendar: View calendar
-  permission_view_issue_watchers: View watchers list
-  permission_add_issue_watchers: Add watchers
-  permission_delete_issue_watchers: Delete watchers
-  permission_log_time: Log spent time
-  permission_view_time_entries: View spent time
-  permission_edit_time_entries: Edit time logs
-  permission_edit_own_time_entries: Edit own time logs
-  permission_manage_news: Manage news
-  permission_comment_news: Comment news
-  permission_manage_documents: Manage documents
-  permission_view_documents: View documents
-  permission_manage_files: Manage files
-  permission_view_files: View files
-  permission_manage_wiki: Manage wiki
-  permission_rename_wiki_pages: Rename wiki pages
-  permission_delete_wiki_pages: Delete wiki pages
-  permission_view_wiki_pages: View wiki
-  permission_view_wiki_edits: View wiki history
-  permission_edit_wiki_pages: Edit wiki pages
-  permission_delete_wiki_pages_attachments: Delete attachments
-  permission_protect_wiki_pages: Protect wiki pages
-  permission_manage_repository: Manage repository
-  permission_browse_repository: Browse repository
-  permission_view_changesets: View changesets
-  permission_commit_access: Commit access
-  permission_manage_boards: Manage boards
-  permission_view_messages: View messages
-  permission_add_messages: Post messages
-  permission_edit_messages: Edit messages
-  permission_edit_own_messages: Edit own messages
-  permission_delete_messages: Delete messages
-  permission_delete_own_messages: Delete own messages
-  permission_export_wiki_pages: Export wiki pages
-  
-  project_module_issue_tracking: Issue tracking
-  project_module_time_tracking: Time tracking
-  project_module_news: News
-  project_module_documents: Documents
-  project_module_files: Files
-  project_module_wiki: Wiki
-  project_module_repository: Repository
-  project_module_boards: Boards
-  
-  label_tipoftheday: Tip of the day
-  label_notifications: Important Message
-  label_ssamr_description: Research description
-  label_ssamr_details: Other Details
-  
-  label_user: User
-  label_user_plural: Users
-  label_user_new: New user
-  label_user_anonymous: Anonymous
-  label_project: Project
-  label_project_new: New project
-  label_project_plural: Projects
-  label_my_project_plural: My Projects
-  label_other_project_plural: "Everyone Else's Projects"
-  label_x_projects:
-    zero:  no projects
-    one:   1 project
-    other: "%{count} projects"
-  label_project_all: All Projects
-  label_project_latest: Latest projects
-  label_managers: Managed by
-  label_issue: Issue
-  label_issue_new: New issue
-  label_issue_plural: Issues
-  label_issue_view_all: View all issues
-  label_issues_by: "Issues by %{value}"
-  label_issue_added: Issue added
-  label_issue_updated: Issue updated
-  label_document: Document
-  label_document_new: New document
-  label_document_plural: Documents
-  label_document_added: Document added
-  label_role: Role
-  label_role_plural: Roles
-  label_role_new: New role
-  label_role_and_permissions: Roles and permissions
-  label_member: Member
-  label_member_new: New member
-  label_member_plural: Members
-  label_tracker: Tracker
-  label_tracker_plural: Trackers
-  label_tracker_new: New tracker
-  label_workflow: Workflow
-  label_issue_status: Issue status
-  label_issue_status_plural: Issue statuses
-  label_issue_status_new: New status
-  label_issue_category: Issue category
-  label_issue_category_plural: Issue categories
-  label_issue_category_new: New category
-  label_custom_field: Custom field
-  label_custom_field_plural: Custom fields
-  label_custom_field_new: New custom field
-  label_enumerations: Enumerations
-  label_enumeration_new: New value
-  label_information: Information
-  label_information_plural: Information
-  label_please_login: Please log in
-  label_register: Register
-  label_login_with_open_id_option: or login with OpenID
-  label_password_lost: Lost password
-  label_home: Home
-  label_home_heading: Welcome!
-  label_my_page: My page
-  label_my_account: My account
-  label_my_projects: My projects
-  label_administration: Administration
-  label_login: Sign in
-  label_logout: Sign out
-  label_help: Help
-  label_reported_issues: Reported issues
-  label_assigned_to_me_issues: Issues assigned to me
-  label_last_login: Last connection
-  label_registered_on: Registered on
-  label_activity: Activity
-  label_overall_activity: Overall activity
-  label_user_activity: "%{value}'s activity"
-  label_new: New
-  label_logged_as: Logged in as
-  label_environment: Environment
-  label_authentication: Authentication
-  label_auth_source: Authentication mode
-  label_auth_source_new: New authentication mode
-  label_auth_source_plural: Authentication modes
-  label_subproject_plural: Subprojects
-  label_subproject_new: New subproject
-  label_and_its_subprojects: "%{value} and its subprojects"
-  label_min_max_length: Min - Max length
-  label_list: List
-  label_date: Date
-  label_integer: Integer
-  label_float: Float
-  label_boolean: Boolean
-  label_string: Text
-  label_text: Long text
-  label_attribute: Attribute
-  label_attribute_plural: Attributes
-  label_download: "%{count} Download"
-  label_download_plural: "%{count} Downloads"
-  label_no_data: No data to display
-  label_change_status: Change status
-  label_history: History
-  label_attachment: File
-  label_attachment_new: New file
-  label_attachment_delete: Delete file
-  label_attachment_plural: Files
-  label_file_added: File added
-  label_report: Report
-  label_report_plural: Reports
-  label_news: News
-  label_news_new: Add news
-  label_news_plural: News
-  label_news_latest: Latest news
-  label_news_view_all: View all news
-  label_news_added: News added
-  label_settings: Settings
-  label_overview: Overview
-  label_version: Version
-  label_version_new: New version
-  label_version_plural: Versions
-  label_close_versions: Close completed versions
-  label_confirmation: Confirmation
-  label_export_to: 'Also available in:'
-  label_read: Read...
-  label_public_projects: Public projects
-  label_open_issues: open
-  label_open_issues_plural: open
-  label_closed_issues: closed
-  label_closed_issues_plural: closed
-  label_x_open_issues_abbr_on_total:
-    zero:  0 open / %{total}
-    one:   1 open / %{total}
-    other: "%{count} open / %{total}"
-  label_x_open_issues_abbr:
-    zero:  0 open
-    one:   1 open
-    other: "%{count} open"
-  label_x_closed_issues_abbr:
-    zero:  0 closed
-    one:   1 closed
-    other: "%{count} closed"
-  label_total: Total
-  label_permissions: Permissions
-  label_current_status: Current status
-  label_new_statuses_allowed: New statuses allowed
-  label_all: all
-  label_none: none
-  label_nobody: nobody
-  label_next: Next
-  label_previous: Previous
-  label_used_by: Used by
-  label_details: Details
-  label_add_note: Add a note
-  label_per_page: Per page
-  label_calendar: Calendar
-  label_months_from: months from
-  label_gantt: Gantt
-  label_internal: Internal
-  label_last_changes: "last %{count} changes"
-  label_change_view_all: View all changes
-  label_personalize_page: Personalise this page
-  label_comment: Comment
-  label_comment_plural: Comments
-  label_x_comments:
-    zero: no comments
-    one: 1 comment
-    other: "%{count} comments"
-  label_comment_add: Add a comment
-  label_comment_added: Comment added
-  label_comment_delete: Delete comments
-  label_query: Custom query
-  label_query_plural: Custom queries
-  label_query_new: New query
-  label_filter_add: Add filter
-  label_filter_plural: Filters
-  label_equals: is
-  label_not_equals: is not
-  label_in_less_than: in less than
-  label_in_more_than: in more than
-  label_greater_or_equal: '>='
-  label_less_or_equal: '<='
-  label_in: in
-  label_today: today
-  label_all_time: all time
-  label_yesterday: yesterday
-  label_this_week: this week
-  label_last_week: last week
-  label_last_n_days: "last %{count} days"
-  label_this_month: this month
-  label_last_month: last month
-  label_this_year: this year
-  label_date_range: Date range
-  label_less_than_ago: less than days ago
-  label_more_than_ago: more than days ago
-  label_ago: days ago
-  label_contains: contains
-  label_not_contains: doesn't contain
-  label_day_plural: days
-  label_repository: Repository
-  label_repository_plural: Repositories
-  label_browse: Browse
-  label_modification: "%{count} change"
-  label_modification_plural: "%{count} changes"
-  label_branch: Branch
-  label_tag: Tag 
-  label_revision: Revision
-  label_revision_plural: Revisions
-  label_revision_id: "Revision %{value}"
-  label_associated_revisions: Associated revisions
-  label_added: added
-  label_modified: modified
-  label_copied: copied
-  label_renamed: renamed
-  label_deleted: deleted
-  label_latest_revision: Latest revision
-  label_latest_revision_plural: Latest revisions
-  label_view_revisions: View revisions
-  label_view_all_revisions: View all revisions
-  label_max_size: Maximum size
-  label_sort_highest: Move to top
-  label_sort_higher: Move up
-  label_sort_lower: Move down
-  label_sort_lowest: Move to bottom
-  label_roadmap: Roadmap
-  label_roadmap_due_in: "Due in %{value}"
-  label_roadmap_overdue: "%{value} late"
-  label_roadmap_no_issues: No issues for this version
-  label_search: Search
-  label_result_plural: Results
-  label_all_words: All words
-  label_wiki: Wiki
-  label_wiki_edit: Wiki edit
-  label_wiki_edit_plural: Wiki edits
-  label_wiki_page: Wiki page
-  label_wiki_page_plural: Wiki pages
-  label_index_by_title: Index by title
-  label_index_by_date: Index by date
-  label_current_version: Current version
-  label_preview: Preview
-  label_feed_plural: Feeds
-  label_changes_details: Details of all changes
-  label_issue_tracking: Issue tracking
-  label_spent_time: Spent time
-  label_f_hour: "%{value} hour"
-  label_f_hour_plural: "%{value} hours"
-  label_time_tracking: Time tracking
-  label_change_plural: Changes
-  label_statistics: Statistics
-  label_commits_per_month: Commits per month
-  label_commits_per_author: Commits per author
-  label_view_diff: View differences
-  label_diff_inline: inline
-  label_diff_side_by_side: side by side
-  label_options: Options
-  label_copy_workflow_from: Copy workflow from
-  label_permissions_report: Permissions report
-  label_watched_issues: Watched issues
-  label_related_issues: Related issues
-  label_applied_status: Applied status
-  label_loading: Loading...
-  label_relation_new: New relation
-  label_relation_delete: Delete relation
-  label_relates_to: related to
-  label_duplicates: duplicates
-  label_duplicated_by: duplicated by
-  label_blocks: blocks
-  label_blocked_by: blocked by
-  label_precedes: precedes
-  label_follows: follows
-  label_end_to_start: end to start
-  label_end_to_end: end to end
-  label_start_to_start: start to start
-  label_start_to_end: start to end
-  label_stay_logged_in: Stay logged in
-  label_disabled: disabled
-  label_show_completed_versions: Show completed versions
-  label_me: me
-  label_board: Forum
-  label_board_new: New forum
-  label_board_plural: Forums
-  label_board_locked: Locked
-  label_board_sticky: Sticky
-  label_topic_plural: Topics
-  label_message_plural: Messages
-  label_message_last: Last message
-  label_message_new: New message
-  label_message_posted: Message added
-  label_reply_plural: Replies
-  label_send_information: Send account information to the user
-  label_year: Year
-  label_month: Month
-  label_week: Week
-  label_date_from: From
-  label_date_to: To
-  label_language_based: "Based on user's language"
-  label_sort_by: "Sort by %{value}"
-  label_send_test_email: Send a test email
-  label_feeds_access_key: RSS access key
-  label_missing_feeds_access_key: Missing a RSS access key
-  label_feeds_access_key_created_on: "RSS access key created %{value} ago"
-  label_module_plural: Modules
-  label_added_time_by: "Added by %{author} %{age} ago"
-  label_updated_time_by: "Updated by %{author} %{age} ago"
-  label_updated_time: "Updated %{value} ago"
-  label_jump_to_a_project: Jump to a project...
-  label_file_plural: Files
-  label_changeset_plural: Changesets
-  label_default_columns: Default columns
-  label_no_change_option: (No change)
-  label_bulk_edit_selected_issues: Bulk edit selected issues
-  label_theme: Theme
-  label_default: Default
-  label_search_titles_only: Search titles only
-  label_user_mail_option_all: "For any event on all my projects"
-  label_user_mail_option_selected: "For any event on the selected projects only..."
-  label_user_mail_option_none: "No events"
-  label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
-  label_registration_activation_by_email: account activation by email
-  label_registration_manual_activation: manual account activation
-  label_registration_automatic_activation: automatic account activation
-  label_display_per_page: "Per page: %{value}"
-  label_age: Age
-  label_change_properties: Change properties
-  label_general: General
-  label_more: More
-  label_scm: SCM
-  label_plugins: Plugins
-  label_ldap_authentication: LDAP authentication
-  label_downloads_abbr: D/L
-  label_optional_description: Optional description
-  label_add_another_file: Add another file
-  label_preferences: Preferences
-  label_chronological_order: In chronological order
-  label_reverse_chronological_order: In reverse chronological order
-  label_planning: Planning
-  label_incoming_emails: Incoming emails
-  label_generate_key: Generate a key
-  label_issue_watchers: Watchers
-  label_example: Example
-  label_display: Display
-  label_sort: Sort
-  label_ascending: Ascending
-  label_descending: Descending
-  label_date_from_to: From %{start} to %{end}
-  label_wiki_content_added: Wiki page added
-  label_wiki_content_updated: Wiki page updated
-  label_group: Group
-  label_group_plural: Groups
-  label_group_new: New group
-  label_time_entry_plural: Spent time
-  label_version_sharing_none: Not shared
-  label_version_sharing_descendants: With subprojects
-  label_version_sharing_hierarchy: With project hierarchy
-  label_version_sharing_tree: With project tree
-  label_version_sharing_system: With all projects
-  label_update_issue_done_ratios: Update issue done ratios
-  label_copy_source: Source
-  label_copy_target: Target
-  label_copy_same_as_target: Same as target
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_api_access_key: API access key
-  label_missing_api_access_key: Missing an API access key
-  label_api_access_key_created_on: "API access key created %{value} ago"
-  
-  button_login: Login
-  button_submit: Submit
-  button_save: Save
-  button_check_all: Check all
-  button_uncheck_all: Uncheck all
-  button_delete: Delete
-  button_create: Create
-  button_create_and_continue: Create and continue
-  button_test: Test
-  button_edit: Edit
-  button_add: Add
-  button_change: Change
-  button_apply: Apply
-  button_clear: Clear
-  button_lock: Lock
-  button_unlock: Unlock
-  button_download: Download
-  button_list: List
-  button_view: View
-  button_move: Move
-  button_move_and_follow: Move and follow
-  button_back: Back
-  button_cancel: Cancel
-  button_activate: Activate
-  button_sort: Sort
-  button_log_time: Log time
-  button_rollback: Rollback to this version
-  button_watch: Watch
-  button_unwatch: Unwatch
-  button_reply: Reply
-  button_archive: Archive
-  button_unarchive: Unarchive
-  button_reset: Reset
-  button_rename: Rename
-  button_change_password: Change password
-  button_copy: Copy
-  button_copy_and_follow: Copy and follow
-  button_annotate: Annotate
-  button_update: Update
-  button_configure: Configure
-  button_quote: Quote
-  button_duplicate: Duplicate
-  button_show: Show
-  
-  status_active: active
-  status_registered: registered
-  status_locked: locked
-  
-  version_status_open: open
-  version_status_locked: locked
-  version_status_closed: closed
-
-  field_active: Active
-  
-  text_select_mail_notifications: Select actions for which email notifications should be sent.
-  text_regexp_info: eg. ^[A-Z0-9]+$
-  text_min_max_length_info: 0 means no restriction
-  text_project_destroy_confirmation: Are you sure you want to delete this project and related data?
-  text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted."
-  text_workflow_edit: Select a role and a tracker to edit the workflow
-  text_are_you_sure: Are you sure?
-  text_journal_changed: "%{label} changed from %{old} to %{new}"
-  text_journal_set_to: "%{label} set to %{value}"
-  text_journal_deleted: "%{label} deleted (%{old})"
-  text_journal_added: "%{label} %{value} added"
-  text_tip_issue_begin_day: task beginning this day
-  text_tip_issue_end_day: task ending this day
-  text_tip_issue_begin_end_day: task beginning and ending this day
-  text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br /> This will be used in all project-related URLs, and as the repository name. Once saved, the identifier <b>can not</b> be changed.'
-  text_caracters_maximum: "%{count} characters maximum."
-  text_caracters_minimum: "Must be at least %{count} characters long."
-  text_length_between: "Length between %{min} and %{max} characters."
-  text_project_homepage_info: 'Link to an external project page.'
-  text_project_name_info: "This will be the name of your project throughout this site.<br /> You can change your project's name at any time, in the project's settings."
-  text_project_visibility_info: "If your project is not public, it will only be visible to users that you have added as project members."
-  text_user_ssamr_description_info: 'Please describe your current research or development interests, within the fields of audio and music.<br/>This information is publicly visible in your profile and you can edit it at any time.<br/>It may also be used to establish eligibility for your initial registration.'
-  text_issue_parent_issue_info: 'If this is a subtask, please insert its parent task number or write the main task name.'
-  text_tracker_no_workflow: No workflow defined for this tracker
-  text_unallowed_characters: Unallowed characters
-  text_comma_separated: Multiple values allowed (comma separated).
-  text_line_separated: Multiple values allowed (one line for each value).
-  text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
-  text_issue_added: "Issue %{id} has been reported by %{author}."
-  text_issue_updated: "Issue %{id} has been updated by %{author}."
-  text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content?
-  text_issue_category_destroy_question: "Some issues (%{count}) are assigned to this category. What do you want to do?"
-  text_issue_category_destroy_assignments: Remove category assignments
-  text_issue_category_reassign_to: Reassign issues to this category
-  text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
-  text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
-  text_load_default_configuration: Load the default configuration
-  text_status_changed_by_changeset: "Applied in changeset %{value}."
-  text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s)?'
-  text_select_project_modules: 'Select modules to enable for this project:'
-  text_default_administrator_account_changed: Default administrator account changed
-  text_file_repository_writable: Attachments directory writable
-  text_plugin_assets_writable: Plugin assets directory writable
-  text_rmagick_available: RMagick available (optional)
-  text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do?"
-  text_destroy_time_entries: Delete reported hours
-  text_assign_time_entries_to_project: Assign reported hours to the project
-  text_reassign_time_entries: 'Reassign reported hours to this issue:'
-  text_user_wrote: "%{value} wrote:"
-  text_enumeration_destroy_question: "%{count} objects are assigned to this value."
-  text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
-  text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
-  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
-  text_custom_field_possible_values_info: 'One line for each value'
-  text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
-  text_wiki_page_nullify_children: "Keep child pages as root pages"
-  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
-  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
-  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
-  text_settings_repo_creation: The repository for a project should be set up automatically within a few minutes of the project being created.<br>You should not have to adjust any settings here; please check again in ten minutes.
-  
-  default_role_manager: Manager
-  default_role_developer: Developer
-  default_role_reporter: Reporter
-  default_tracker_bug: Bug
-  default_tracker_feature: Feature
-  default_tracker_support: Support
-  default_issue_status_new: New
-  default_issue_status_in_progress: In Progress
-  default_issue_status_resolved: Resolved
-  default_issue_status_feedback: Feedback
-  default_issue_status_closed: Closed
-  default_issue_status_rejected: Rejected
-  default_doc_category_user: User documentation
-  default_doc_category_tech: Technical documentation
-  default_priority_low: Low
-  default_priority_normal: Normal
-  default_priority_high: High
-  default_priority_urgent: Urgent
-  default_priority_immediate: Immediate
-  default_activity_design: Design
-  default_activity_development: Development
-  
-  enumeration_issue_priorities: Issue priorities
-  enumeration_doc_categories: Document categories
-  enumeration_activities: Activities (time tracking)
-  enumeration_system_activity: System Activity
-
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  error_can_not_delete_custom_field: Unable to delete custom field
-  permission_manage_subtasks: Manage subtasks
-  label_profile: Profile
-  error_unable_to_connect: Unable to connect (%{value})
-  label_overall_spent_time: Overall spent time
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  field_principal: Principal
-  field_parent_issue: Parent task
-  label_my_page_block: My page block
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_subtask_plural: Subtasks
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
-  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
-  label_project_copy_notifications: Send email notifications during the project copy
-  field_time_entries: Log time
-  project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  field_member_of_group: Member of Group
-  field_assigned_to_role: Member of Role
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search by name:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+en-GB:
+  direction: ltr
+  date:
+    formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
+      default: "%d/%m/%Y"
+      short: "%d %b"
+      long: "%d %B, %Y"
+      
+    day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
+    abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
+      
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
+    month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
+    abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
+    # Used in date_select and datime_select.
+    order: [ :year, :month, :day ]
+
+  time:
+    formats:
+      default: "%d/%m/%Y %I:%M %p"
+      time: "%I:%M %p"
+      short: "%d %b %H:%M"
+      long: "%d %B, %Y %H:%M"
+    am: "am"
+    pm: "pm"
+      
+  datetime:
+    distance_in_words:
+      half_a_minute: "half a minute"
+      less_than_x_seconds:
+        one:   "less than 1 second"
+        other: "less than %{count} seconds"
+      x_seconds:
+        one:   "1 second"
+        other: "%{count} seconds"
+      less_than_x_minutes:
+        one:   "less than a minute"
+        other: "less than %{count} minutes"
+      x_minutes:
+        one:   "1 minute"
+        other: "%{count} minutes"
+      about_x_hours:
+        one:   "about 1 hour"
+        other: "about %{count} hours"
+      x_days:
+        one:   "1 day"
+        other: "%{count} days"
+      about_x_months:
+        one:   "about 1 month"
+        other: "about %{count} months"
+      x_months:
+        one:   "1 month"
+        other: "%{count} months"
+      about_x_years:
+        one:   "about 1 year"
+        other: "about %{count} years"
+      over_x_years:
+        one:   "over 1 year"
+        other: "over %{count} years"
+      almost_x_years:
+        one:   "almost 1 year"
+        other: "almost %{count} years"
+
+  number:
+    format:
+      separator: "."
+      delimiter: " "
+      precision: 3
+
+    currency:
+      format:
+        format: "%u%n"
+        unit: "£"
+    human:
+      format:
+        delimiter: ""
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "Byte"
+            other: "Bytes"
+          kb: "kB"
+          mb: "MB"
+          gb: "GB"
+          tb: "TB"
+
+        
+# Used in array.to_sentence.
+  support:
+    array:
+      sentence_connector: "and"
+      skip_last_comma: false
+      
+  activerecord:
+    errors:
+      template:
+        header:
+          one:    "1 error prohibited this %{model} from being saved"
+          other:  "%{count} errors prohibited this %{model} from being saved"
+      messages:
+        inclusion: "is not included in the list"
+        exclusion: "is reserved"
+        invalid: "is invalid"
+        confirmation: "doesn't match confirmation"
+        accepted: "must be accepted"
+        empty: "can't be empty"
+        blank: "can't be blank"
+        too_long: "is too long (maximum is %{count} characters)"
+        too_short: "is too short (minimum is %{count} characters)"
+        wrong_length: "is the wrong length (should be %{count} characters)"
+        taken: "has already been taken"
+        not_a_number: "is not a number"
+        not_a_date: "is not a valid date"
+        greater_than: "must be greater than %{count}"
+        greater_than_or_equal_to: "must be greater than or equal to %{count}"
+        equal_to: "must be equal to %{count}"
+        less_than: "must be less than %{count}"
+        less_than_or_equal_to: "must be less than or equal to %{count}"
+        odd: "must be odd"
+        even: "must be even"
+        greater_than_start_date: "must be greater than start date"
+        not_same_project: "doesn't belong to the same project"
+        circular_dependency: "This relation would create a circular dependency"
+        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+
+  actionview_instancetag_blank_option: Please select
+  
+  general_text_No: 'No'
+  general_text_Yes: 'Yes'
+  general_text_no: 'no'
+  general_text_yes: 'yes'
+  general_lang_name: 'English (British)'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: ISO-8859-1
+  general_pdf_encoding: ISO-8859-1
+  general_first_day_of_week: '1'
+  
+  notice_account_updated: Account was successfully updated.
+  notice_account_invalid_creditentials: Invalid user or password
+  notice_account_password_updated: Password was successfully updated.
+  notice_account_wrong_password: Wrong password
+  notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you.
+  notice_account_unknown_email: Unknown user.
+  notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
+  notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
+  notice_account_activated: Your account has been activated. You can now log in.
+  notice_successful_create: Successful creation.
+  notice_successful_update: Successful update.
+  notice_successful_delete: Successful deletion.
+  notice_successful_connection: Successful connection.
+  notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
+  notice_locking_conflict: Data has been updated by another user.
+  notice_not_authorized: You are not authorised to access this page.
+  notice_email_sent: "An email was sent to %{value}"
+  notice_email_error: "An error occurred while sending mail (%{value})"
+  notice_feeds_access_key_reseted: Your RSS access key was reset.
+  notice_api_access_key_reseted: Your API access key was reset.
+  notice_failed_to_save_issues: "Failed to save %{count} issue(s) on %{total} selected: %{ids}."
+  notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
+  notice_account_pending: "Your account was created and is now pending administrator approval."
+  notice_default_data_loaded: Default configuration successfully loaded.
+  notice_unable_delete_version: Unable to delete version.
+  notice_issue_done_ratios_updated: Issue done ratios updated.
+  
+  error_can_t_load_default_data: "Default configuration could not be loaded: %{value}"
+  error_scm_not_found: "The entry or revision was not found in the repository."
+  error_scm_command_failed: "An error occurred when trying to access the repository: %{value}"
+  error_scm_annotate: "The entry does not exist or can not be annotated."
+  error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
+  error_no_tracker_in_project: 'No tracker is associated to this project. Please check the Project settings.'
+  error_no_default_issue_status: 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
+  error_can_not_reopen_issue_on_closed_version: 'An issue assigned to a closed version can not be reopened'
+  error_can_not_archive_project: This project can not be archived
+  error_issue_done_ratios_not_updated: "Issue done ratios not updated."
+  error_workflow_copy_source: 'Please select a source tracker or role'
+  error_workflow_copy_target: 'Please select target tracker(s) and role(s)'
+  
+  warning_attachments_not_saved: "%{count} file(s) could not be saved."
+  
+  mail_subject_lost_password: "Your %{value} password"
+  mail_body_lost_password: 'To change your password, click on the following link:'
+  mail_subject_register: "Your %{value} account activation"
+  mail_body_register: 'To activate your account, click on the following link:'
+  mail_body_account_information_external: "You can use your %{value} account to log in."
+  mail_body_account_information: Your account information
+  mail_subject_account_activation_request: "%{value} account activation request"
+  mail_body_account_activation_request: "A new user (%{value}) has registered. The account is pending your approval:"
+  mail_subject_reminder: "%{count} issue(s) due in the next %{days} days"
+  mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
+  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
+  mail_body_wiki_content_added: "The '%{id}' wiki page has been added by %{author}."
+  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
+  mail_body_wiki_content_updated: "The '%{id}' wiki page has been updated by %{author}."
+  
+  gui_validation_error: 1 error
+  gui_validation_error_plural: "%{count} errors"
+  
+  field_name: Name
+  field_description: Description
+  field_summary: Summary
+  field_is_required: Required
+  field_firstname: Firstname
+  field_lastname: Lastname
+  field_mail: Email
+  field_filename: File
+  field_filesize: Size
+  field_downloads: Downloads
+  field_author: Author
+  field_created_on: Created
+  field_updated_on: Updated
+  field_field_format: Format
+  field_is_for_all: For all projects
+  field_possible_values: Possible values
+  field_regexp: Regular expression
+  field_min_length: Minimum length
+  field_max_length: Maximum length
+  field_value: Value
+  field_category: Category
+  field_title: Title
+  field_project: Project
+  field_issue: Issue
+  field_status: Status
+  field_notes: Notes
+  field_is_closed: Issue closed
+  field_is_default: Default value
+  field_tracker: Tracker
+  field_subject: Subject
+  field_due_date: Due date
+  field_assigned_to: Assignee
+  field_priority: Priority
+  field_fixed_version: Target version
+  field_user: User
+  field_role: Role
+  field_homepage: Homepage
+  field_is_public: Public
+  field_parent: Subproject of
+  field_is_in_roadmap: Issues displayed in roadmap
+  field_login: Login
+  field_mail_notification: Email notifications
+  field_admin: Administrator
+  field_last_login_on: Last connection
+  field_language: Language
+  field_effective_date: Date
+  field_password: Password
+  field_new_password: New password
+  field_password_confirmation: Confirmation
+  field_version: Version
+  field_type: Type
+  field_host: Host
+  field_port: Port
+  field_account: Account
+  field_base_dn: Base DN
+  field_attr_login: Login attribute
+  field_attr_firstname: Firstname attribute
+  field_attr_lastname: Lastname attribute
+  field_attr_mail: Email attribute
+  field_onthefly: On-the-fly user creation
+  field_start_date: Start date
+  field_done_ratio: % Done
+  field_auth_source: Authentication mode
+  field_hide_mail: Hide my email address
+  field_comments: Comment
+  field_url: URL
+  field_start_page: Start page
+  field_subproject: Subproject
+  field_hours: Hours
+  field_activity: Activity
+  field_spent_on: Date
+  field_identifier: Identifier
+  field_is_filter: Used as a filter
+  field_issue_to: Related issue
+  field_delay: Delay
+  field_assignable: Issues can be assigned to this role
+  field_redirect_existing_links: Redirect existing links
+  field_estimated_hours: Estimated time
+  field_column_names: Columns
+  field_time_zone: Time zone
+  field_searchable: Searchable
+  field_default_value: Default value
+  field_comments_sorting: Display comments
+  field_parent_title: Parent page
+  field_editable: Editable
+  field_watcher: Watcher
+  field_identity_url: OpenID URL
+  field_content: Content
+  field_group_by: Group results by
+  field_sharing: Sharing
+  
+  setting_app_title: Application title
+  setting_app_subtitle: Application subtitle
+  setting_welcome_text: Welcome text
+  setting_default_language: Default language
+  setting_login_required: Authentication required
+  setting_self_registration: Self-registration
+  setting_attachment_max_size: Attachment max. size
+  setting_issues_export_limit: Issues export limit
+  setting_mail_from: Emission email address
+  setting_bcc_recipients: Blind carbon copy recipients (bcc)
+  setting_plain_text_mail: Plain text mail (no HTML)
+  setting_host_name: Host name and path
+  setting_text_formatting: Text formatting
+  setting_wiki_compression: Wiki history compression
+  setting_feeds_limit: Feed content limit
+  setting_default_projects_public: New projects are public by default
+  setting_autofetch_changesets: Autofetch commits
+  setting_sys_api_enabled: Enable WS for repository management
+  setting_commit_ref_keywords: Referencing keywords
+  setting_commit_fix_keywords: Fixing keywords
+  setting_autologin: Autologin
+  setting_date_format: Date format
+  setting_time_format: Time format
+  setting_cross_project_issue_relations: Allow cross-project issue relations
+  setting_issue_list_default_columns: Default columns displayed on the issue list
+  setting_repositories_encodings: Repositories encodings
+  setting_commit_logs_encoding: Commit messages encoding
+  setting_emails_footer: Emails footer
+  setting_protocol: Protocol
+  setting_per_page_options: Objects per page options
+  setting_user_format: Users display format
+  setting_activity_days_default: Days displayed on project activity
+  setting_display_subprojects_issues: Display subprojects issues on main projects by default
+  setting_enabled_scm: Enabled SCM
+  setting_mail_handler_body_delimiters: "Truncate emails after one of these lines"
+  setting_mail_handler_api_enabled: Enable WS for incoming emails
+  setting_mail_handler_api_key: API key
+  setting_sequential_project_identifiers: Generate sequential project identifiers
+  setting_gravatar_enabled: Use Gravatar user icons
+  setting_gravatar_default: Default Gravatar image
+  setting_diff_max_lines_displayed: Max number of diff lines displayed
+  setting_file_max_size_displayed: Max size of text files displayed inline
+  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
+  setting_openid: Allow OpenID login and registration
+  setting_password_min_length: Minimum password length
+  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
+  setting_default_projects_modules: Default enabled modules for new projects
+  setting_issue_done_ratio: Calculate the issue done ratio with
+  setting_issue_done_ratio_issue_field: Use the issue field
+  setting_issue_done_ratio_issue_status: Use the issue status
+  setting_start_of_week: Start calendars on
+  setting_rest_api_enabled: Enable REST web service
+  setting_cache_formatted_text: Cache formatted text
+  
+  permission_add_project: Create project
+  permission_add_subprojects: Create subprojects
+  permission_edit_project: Edit project
+  permission_select_project_modules: Select project modules
+  permission_manage_members: Manage members
+  permission_manage_project_activities: Manage project activities
+  permission_manage_versions: Manage versions
+  permission_manage_categories: Manage issue categories
+  permission_view_issues: View Issues
+  permission_add_issues: Add issues
+  permission_edit_issues: Edit issues
+  permission_manage_issue_relations: Manage issue relations
+  permission_add_issue_notes: Add notes
+  permission_edit_issue_notes: Edit notes
+  permission_edit_own_issue_notes: Edit own notes
+  permission_move_issues: Move issues
+  permission_delete_issues: Delete issues
+  permission_manage_public_queries: Manage public queries
+  permission_save_queries: Save queries
+  permission_view_gantt: View gantt chart
+  permission_view_calendar: View calendar
+  permission_view_issue_watchers: View watchers list
+  permission_add_issue_watchers: Add watchers
+  permission_delete_issue_watchers: Delete watchers
+  permission_log_time: Log spent time
+  permission_view_time_entries: View spent time
+  permission_edit_time_entries: Edit time logs
+  permission_edit_own_time_entries: Edit own time logs
+  permission_manage_news: Manage news
+  permission_comment_news: Comment news
+  permission_manage_documents: Manage documents
+  permission_view_documents: View documents
+  permission_manage_files: Manage files
+  permission_view_files: View files
+  permission_manage_wiki: Manage wiki
+  permission_rename_wiki_pages: Rename wiki pages
+  permission_delete_wiki_pages: Delete wiki pages
+  permission_view_wiki_pages: View wiki
+  permission_view_wiki_edits: View wiki history
+  permission_edit_wiki_pages: Edit wiki pages
+  permission_delete_wiki_pages_attachments: Delete attachments
+  permission_protect_wiki_pages: Protect wiki pages
+  permission_manage_repository: Manage repository
+  permission_browse_repository: Browse repository
+  permission_view_changesets: View changesets
+  permission_commit_access: Commit access
+  permission_manage_boards: Manage boards
+  permission_view_messages: View messages
+  permission_add_messages: Post messages
+  permission_edit_messages: Edit messages
+  permission_edit_own_messages: Edit own messages
+  permission_delete_messages: Delete messages
+  permission_delete_own_messages: Delete own messages
+  permission_export_wiki_pages: Export wiki pages
+  
+  project_module_issue_tracking: Issue tracking
+  project_module_time_tracking: Time tracking
+  project_module_news: News
+  project_module_documents: Documents
+  project_module_files: Files
+  project_module_wiki: Wiki
+  project_module_repository: Repository
+  project_module_boards: Boards
+  
+  label_user: User
+  label_user_plural: Users
+  label_user_new: New user
+  label_user_anonymous: Anonymous
+  label_project: Project
+  label_project_new: New project
+  label_project_plural: Projects
+  label_x_projects:
+    zero:  no projects
+    one:   1 project
+    other: "%{count} projects"
+  label_project_all: All Projects
+  label_project_latest: Latest projects
+  label_issue: Issue
+  label_issue_new: New issue
+  label_issue_plural: Issues
+  label_issue_view_all: View all issues
+  label_issues_by: "Issues by %{value}"
+  label_issue_added: Issue added
+  label_issue_updated: Issue updated
+  label_document: Document
+  label_document_new: New document
+  label_document_plural: Documents
+  label_document_added: Document added
+  label_role: Role
+  label_role_plural: Roles
+  label_role_new: New role
+  label_role_and_permissions: Roles and permissions
+  label_member: Member
+  label_member_new: New member
+  label_member_plural: Members
+  label_tracker: Tracker
+  label_tracker_plural: Trackers
+  label_tracker_new: New tracker
+  label_workflow: Workflow
+  label_issue_status: Issue status
+  label_issue_status_plural: Issue statuses
+  label_issue_status_new: New status
+  label_issue_category: Issue category
+  label_issue_category_plural: Issue categories
+  label_issue_category_new: New category
+  label_custom_field: Custom field
+  label_custom_field_plural: Custom fields
+  label_custom_field_new: New custom field
+  label_enumerations: Enumerations
+  label_enumeration_new: New value
+  label_information: Information
+  label_information_plural: Information
+  label_please_login: Please log in
+  label_register: Register
+  label_login_with_open_id_option: or login with OpenID
+  label_password_lost: Lost password
+  label_home: Home
+  label_my_page: My page
+  label_my_account: My account
+  label_my_projects: My projects
+  label_administration: Administration
+  label_login: Sign in
+  label_logout: Sign out
+  label_help: Help
+  label_reported_issues: Reported issues
+  label_assigned_to_me_issues: Issues assigned to me
+  label_last_login: Last connection
+  label_registered_on: Registered on
+  label_activity: Activity
+  label_overall_activity: Overall activity
+  label_user_activity: "%{value}'s activity"
+  label_new: New
+  label_logged_as: Logged in as
+  label_environment: Environment
+  label_authentication: Authentication
+  label_auth_source: Authentication mode
+  label_auth_source_new: New authentication mode
+  label_auth_source_plural: Authentication modes
+  label_subproject_plural: Subprojects
+  label_subproject_new: New subproject
+  label_and_its_subprojects: "%{value} and its subprojects"
+  label_min_max_length: Min - Max length
+  label_list: List
+  label_date: Date
+  label_integer: Integer
+  label_float: Float
+  label_boolean: Boolean
+  label_string: Text
+  label_text: Long text
+  label_attribute: Attribute
+  label_attribute_plural: Attributes
+  label_download: "%{count} Download"
+  label_download_plural: "%{count} Downloads"
+  label_no_data: No data to display
+  label_change_status: Change status
+  label_history: History
+  label_attachment: File
+  label_attachment_new: New file
+  label_attachment_delete: Delete file
+  label_attachment_plural: Files
+  label_file_added: File added
+  label_report: Report
+  label_report_plural: Reports
+  label_news: News
+  label_news_new: Add news
+  label_news_plural: News
+  label_news_latest: Latest news
+  label_news_view_all: View all news
+  label_news_added: News added
+  label_settings: Settings
+  label_overview: Overview
+  label_version: Version
+  label_version_new: New version
+  label_version_plural: Versions
+  label_close_versions: Close completed versions
+  label_confirmation: Confirmation
+  label_export_to: 'Also available in:'
+  label_read: Read...
+  label_public_projects: Public projects
+  label_open_issues: open
+  label_open_issues_plural: open
+  label_closed_issues: closed
+  label_closed_issues_plural: closed
+  label_x_open_issues_abbr_on_total:
+    zero:  0 open / %{total}
+    one:   1 open / %{total}
+    other: "%{count} open / %{total}"
+  label_x_open_issues_abbr:
+    zero:  0 open
+    one:   1 open
+    other: "%{count} open"
+  label_x_closed_issues_abbr:
+    zero:  0 closed
+    one:   1 closed
+    other: "%{count} closed"
+  label_total: Total
+  label_permissions: Permissions
+  label_current_status: Current status
+  label_new_statuses_allowed: New statuses allowed
+  label_all: all
+  label_none: none
+  label_nobody: nobody
+  label_next: Next
+  label_previous: Previous
+  label_used_by: Used by
+  label_details: Details
+  label_add_note: Add a note
+  label_per_page: Per page
+  label_calendar: Calendar
+  label_months_from: months from
+  label_gantt: Gantt
+  label_internal: Internal
+  label_last_changes: "last %{count} changes"
+  label_change_view_all: View all changes
+  label_personalize_page: Personalise this page
+  label_comment: Comment
+  label_comment_plural: Comments
+  label_x_comments:
+    zero: no comments
+    one: 1 comment
+    other: "%{count} comments"
+  label_comment_add: Add a comment
+  label_comment_added: Comment added
+  label_comment_delete: Delete comments
+  label_query: Custom query
+  label_query_plural: Custom queries
+  label_query_new: New query
+  label_filter_add: Add filter
+  label_filter_plural: Filters
+  label_equals: is
+  label_not_equals: is not
+  label_in_less_than: in less than
+  label_in_more_than: in more than
+  label_greater_or_equal: '>='
+  label_less_or_equal: '<='
+  label_in: in
+  label_today: today
+  label_all_time: all time
+  label_yesterday: yesterday
+  label_this_week: this week
+  label_last_week: last week
+  label_last_n_days: "last %{count} days"
+  label_this_month: this month
+  label_last_month: last month
+  label_this_year: this year
+  label_date_range: Date range
+  label_less_than_ago: less than days ago
+  label_more_than_ago: more than days ago
+  label_ago: days ago
+  label_contains: contains
+  label_not_contains: doesn't contain
+  label_day_plural: days
+  label_repository: Repository
+  label_repository_plural: Repositories
+  label_browse: Browse
+  label_modification: "%{count} change"
+  label_modification_plural: "%{count} changes"
+  label_branch: Branch
+  label_tag: Tag 
+  label_revision: Revision
+  label_revision_plural: Revisions
+  label_revision_id: "Revision %{value}"
+  label_associated_revisions: Associated revisions
+  label_added: added
+  label_modified: modified
+  label_copied: copied
+  label_renamed: renamed
+  label_deleted: deleted
+  label_latest_revision: Latest revision
+  label_latest_revision_plural: Latest revisions
+  label_view_revisions: View revisions
+  label_view_all_revisions: View all revisions
+  label_max_size: Maximum size
+  label_sort_highest: Move to top
+  label_sort_higher: Move up
+  label_sort_lower: Move down
+  label_sort_lowest: Move to bottom
+  label_roadmap: Roadmap
+  label_roadmap_due_in: "Due in %{value}"
+  label_roadmap_overdue: "%{value} late"
+  label_roadmap_no_issues: No issues for this version
+  label_search: Search
+  label_result_plural: Results
+  label_all_words: All words
+  label_wiki: Wiki
+  label_wiki_edit: Wiki edit
+  label_wiki_edit_plural: Wiki edits
+  label_wiki_page: Wiki page
+  label_wiki_page_plural: Wiki pages
+  label_index_by_title: Index by title
+  label_index_by_date: Index by date
+  label_current_version: Current version
+  label_preview: Preview
+  label_feed_plural: Feeds
+  label_changes_details: Details of all changes
+  label_issue_tracking: Issue tracking
+  label_spent_time: Spent time
+  label_f_hour: "%{value} hour"
+  label_f_hour_plural: "%{value} hours"
+  label_time_tracking: Time tracking
+  label_change_plural: Changes
+  label_statistics: Statistics
+  label_commits_per_month: Commits per month
+  label_commits_per_author: Commits per author
+  label_view_diff: View differences
+  label_diff_inline: inline
+  label_diff_side_by_side: side by side
+  label_options: Options
+  label_copy_workflow_from: Copy workflow from
+  label_permissions_report: Permissions report
+  label_watched_issues: Watched issues
+  label_related_issues: Related issues
+  label_applied_status: Applied status
+  label_loading: Loading...
+  label_relation_new: New relation
+  label_relation_delete: Delete relation
+  label_relates_to: related to
+  label_duplicates: duplicates
+  label_duplicated_by: duplicated by
+  label_blocks: blocks
+  label_blocked_by: blocked by
+  label_precedes: precedes
+  label_follows: follows
+  label_end_to_start: end to start
+  label_end_to_end: end to end
+  label_start_to_start: start to start
+  label_start_to_end: start to end
+  label_stay_logged_in: Stay logged in
+  label_disabled: disabled
+  label_show_completed_versions: Show completed versions
+  label_me: me
+  label_board: Forum
+  label_board_new: New forum
+  label_board_plural: Forums
+  label_board_locked: Locked
+  label_board_sticky: Sticky
+  label_topic_plural: Topics
+  label_message_plural: Messages
+  label_message_last: Last message
+  label_message_new: New message
+  label_message_posted: Message added
+  label_reply_plural: Replies
+  label_send_information: Send account information to the user
+  label_year: Year
+  label_month: Month
+  label_week: Week
+  label_date_from: From
+  label_date_to: To
+  label_language_based: Based on user's language
+  label_sort_by: "Sort by %{value}"
+  label_send_test_email: Send a test email
+  label_feeds_access_key: RSS access key
+  label_missing_feeds_access_key: Missing a RSS access key
+  label_feeds_access_key_created_on: "RSS access key created %{value} ago"
+  label_module_plural: Modules
+  label_added_time_by: "Added by %{author} %{age} ago"
+  label_updated_time_by: "Updated by %{author} %{age} ago"
+  label_updated_time: "Updated %{value} ago"
+  label_jump_to_a_project: Jump to a project...
+  label_file_plural: Files
+  label_changeset_plural: Changesets
+  label_default_columns: Default columns
+  label_no_change_option: (No change)
+  label_bulk_edit_selected_issues: Bulk edit selected issues
+  label_theme: Theme
+  label_default: Default
+  label_search_titles_only: Search titles only
+  label_user_mail_option_all: "For any event on all my projects"
+  label_user_mail_option_selected: "For any event on the selected projects only..."
+  label_user_mail_option_none: "No events"
+  label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
+  label_registration_activation_by_email: account activation by email
+  label_registration_manual_activation: manual account activation
+  label_registration_automatic_activation: automatic account activation
+  label_display_per_page: "Per page: %{value}"
+  label_age: Age
+  label_change_properties: Change properties
+  label_general: General
+  label_more: More
+  label_scm: SCM
+  label_plugins: Plugins
+  label_ldap_authentication: LDAP authentication
+  label_downloads_abbr: D/L
+  label_optional_description: Optional description
+  label_add_another_file: Add another file
+  label_preferences: Preferences
+  label_chronological_order: In chronological order
+  label_reverse_chronological_order: In reverse chronological order
+  label_planning: Planning
+  label_incoming_emails: Incoming emails
+  label_generate_key: Generate a key
+  label_issue_watchers: Watchers
+  label_example: Example
+  label_display: Display
+  label_sort: Sort
+  label_ascending: Ascending
+  label_descending: Descending
+  label_date_from_to: From %{start} to %{end}
+  label_wiki_content_added: Wiki page added
+  label_wiki_content_updated: Wiki page updated
+  label_group: Group
+  label_group_plural: Groups
+  label_group_new: New group
+  label_time_entry_plural: Spent time
+  label_version_sharing_none: Not shared
+  label_version_sharing_descendants: With subprojects
+  label_version_sharing_hierarchy: With project hierarchy
+  label_version_sharing_tree: With project tree
+  label_version_sharing_system: With all projects
+  label_update_issue_done_ratios: Update issue done ratios
+  label_copy_source: Source
+  label_copy_target: Target
+  label_copy_same_as_target: Same as target
+  label_display_used_statuses_only: Only display statuses that are used by this tracker
+  label_api_access_key: API access key
+  label_missing_api_access_key: Missing an API access key
+  label_api_access_key_created_on: "API access key created %{value} ago"
+  
+  button_login: Login
+  button_submit: Submit
+  button_save: Save
+  button_check_all: Check all
+  button_uncheck_all: Uncheck all
+  button_delete: Delete
+  button_create: Create
+  button_create_and_continue: Create and continue
+  button_test: Test
+  button_edit: Edit
+  button_add: Add
+  button_change: Change
+  button_apply: Apply
+  button_clear: Clear
+  button_lock: Lock
+  button_unlock: Unlock
+  button_download: Download
+  button_list: List
+  button_view: View
+  button_move: Move
+  button_move_and_follow: Move and follow
+  button_back: Back
+  button_cancel: Cancel
+  button_activate: Activate
+  button_sort: Sort
+  button_log_time: Log time
+  button_rollback: Rollback to this version
+  button_watch: Watch
+  button_unwatch: Unwatch
+  button_reply: Reply
+  button_archive: Archive
+  button_unarchive: Unarchive
+  button_reset: Reset
+  button_rename: Rename
+  button_change_password: Change password
+  button_copy: Copy
+  button_copy_and_follow: Copy and follow
+  button_annotate: Annotate
+  button_update: Update
+  button_configure: Configure
+  button_quote: Quote
+  button_duplicate: Duplicate
+  button_show: Show
+  
+  status_active: active
+  status_registered: registered
+  status_locked: locked
+  
+  version_status_open: open
+  version_status_locked: locked
+  version_status_closed: closed
+
+  field_active: Active
+  
+  text_select_mail_notifications: Select actions for which email notifications should be sent.
+  text_regexp_info: eg. ^[A-Z0-9]+$
+  text_min_max_length_info: 0 means no restriction
+  text_project_destroy_confirmation: Are you sure you want to delete this project and related data?
+  text_subprojects_destroy_warning: "Its subproject(s): %{value} will be also deleted."
+  text_workflow_edit: Select a role and a tracker to edit the workflow
+  text_are_you_sure: Are you sure?
+  text_journal_changed: "%{label} changed from %{old} to %{new}"
+  text_journal_set_to: "%{label} set to %{value}"
+  text_journal_deleted: "%{label} deleted (%{old})"
+  text_journal_added: "%{label} %{value} added"
+  text_tip_issue_begin_day: task beginning this day
+  text_tip_issue_end_day: task ending this day
+  text_tip_issue_begin_end_day: task beginning and ending this day
+  text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
+  text_caracters_maximum: "%{count} characters maximum."
+  text_caracters_minimum: "Must be at least %{count} characters long."
+  text_length_between: "Length between %{min} and %{max} characters."
+  text_tracker_no_workflow: No workflow defined for this tracker
+  text_unallowed_characters: Unallowed characters
+  text_comma_separated: Multiple values allowed (comma separated).
+  text_line_separated: Multiple values allowed (one line for each value).
+  text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
+  text_issue_added: "Issue %{id} has been reported by %{author}."
+  text_issue_updated: "Issue %{id} has been updated by %{author}."
+  text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content?
+  text_issue_category_destroy_question: "Some issues (%{count}) are assigned to this category. What do you want to do?"
+  text_issue_category_destroy_assignments: Remove category assignments
+  text_issue_category_reassign_to: Reassign issues to this category
+  text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
+  text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
+  text_load_default_configuration: Load the default configuration
+  text_status_changed_by_changeset: "Applied in changeset %{value}."
+  text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s)?'
+  text_select_project_modules: 'Select modules to enable for this project:'
+  text_default_administrator_account_changed: Default administrator account changed
+  text_file_repository_writable: Attachments directory writable
+  text_plugin_assets_writable: Plugin assets directory writable
+  text_rmagick_available: RMagick available (optional)
+  text_destroy_time_entries_question: "%{hours} hours were reported on the issues you are about to delete. What do you want to do?"
+  text_destroy_time_entries: Delete reported hours
+  text_assign_time_entries_to_project: Assign reported hours to the project
+  text_reassign_time_entries: 'Reassign reported hours to this issue:'
+  text_user_wrote: "%{value} wrote:"
+  text_enumeration_destroy_question: "%{count} objects are assigned to this value."
+  text_enumeration_category_reassign_to: 'Reassign them to this value:'
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
+  text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
+  text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
+  text_custom_field_possible_values_info: 'One line for each value'
+  text_wiki_page_destroy_question: "This page has %{descendants} child page(s) and descendant(s). What do you want to do?"
+  text_wiki_page_nullify_children: "Keep child pages as root pages"
+  text_wiki_page_destroy_children: "Delete child pages and all their descendants"
+  text_wiki_page_reassign_children: "Reassign child pages to this parent page"
+  text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
+  
+  default_role_manager: Manager
+  default_role_developer: Developer
+  default_role_reporter: Reporter
+  default_tracker_bug: Bug
+  default_tracker_feature: Feature
+  default_tracker_support: Support
+  default_issue_status_new: New
+  default_issue_status_in_progress: In Progress
+  default_issue_status_resolved: Resolved
+  default_issue_status_feedback: Feedback
+  default_issue_status_closed: Closed
+  default_issue_status_rejected: Rejected
+  default_doc_category_user: User documentation
+  default_doc_category_tech: Technical documentation
+  default_priority_low: Low
+  default_priority_normal: Normal
+  default_priority_high: High
+  default_priority_urgent: Urgent
+  default_priority_immediate: Immediate
+  default_activity_design: Design
+  default_activity_development: Development
+  
+  enumeration_issue_priorities: Issue priorities
+  enumeration_doc_categories: Document categories
+  enumeration_activities: Activities (time tracking)
+  enumeration_system_activity: System Activity
+
+  notice_unable_delete_time_entry: Unable to delete time log entry.
+  error_can_not_delete_custom_field: Unable to delete custom field
+  permission_manage_subtasks: Manage subtasks
+  label_profile: Profile
+  error_unable_to_connect: Unable to connect (%{value})
+  label_overall_spent_time: Overall spent time
+  error_can_not_remove_role: This role is in use and can not be deleted.
+  field_principal: Principal
+  field_parent_issue: Parent task
+  label_my_page_block: My page block
+  text_zoom_out: Zoom out
+  text_zoom_in: Zoom in
+  error_unable_delete_issue_status: Unable to delete issue status
+  label_subtask_plural: Subtasks
+  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
+  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
+  label_project_copy_notifications: Send email notifications during the project copy
+  field_time_entries: Log time
+  project_module_gantt: Gantt
+  project_module_calendar: Calendar
+  field_member_of_group: Member of Group
+  field_assigned_to_role: Member of Role
+  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
+  text_are_you_sure_with_children: Delete issue and all child issues?
+  field_text: Text field
+  label_user_mail_option_only_owner: Only for things I am the owner of
+  setting_default_notification_option: Default notification option
+  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
+  label_user_mail_option_only_assigned: Only for things I am assigned to
+  notice_not_authorized_archived_project: The project you're trying to access has been archived.
+  label_principal_search: "Search for user or group:"
+  label_user_search: "Search for user:"
+  field_visible: Visible
+  setting_emails_header: Emails header
+  setting_commit_logtime_activity_id: Activity for logged time
+  text_time_logged_by_changeset: Applied in changeset %{value}.
+  setting_commit_logtime_enabled: Enable time logging
+  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
+  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/en.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/en.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -205,15 +205,13 @@
   
   gui_validation_error: 1 error
   gui_validation_error_plural: "%{count} errors"
-
-  field_ssamr_user_detail:
-    description: User Description
+  
   field_name: Name
   field_description: Description
   field_summary: Summary
   field_is_required: Required
-  field_firstname: First name
-  field_lastname: Last name
+  field_firstname: Firstname
+  field_lastname: Lastname
   field_mail: Email
   field_filename: File
   field_filesize: Size
@@ -247,7 +245,6 @@
   field_role: Role
   field_homepage: Homepage
   field_is_public: Public
-  field_is_private: Private
   field_parent: Subproject of
   field_is_in_roadmap: Issues displayed in roadmap
   field_login: Login
@@ -306,10 +303,8 @@
   field_assigned_to_role: "Assignee's role"
   field_text: Text field
   field_visible: Visible
+  field_warn_on_leaving_unsaved: "Warn me when leaving a page with unsaved text"
   
-  setting_tipoftheday_text: Tip of the Day
-  setting_notifications_text: Notifications
-  label_ssamr_description: Research description
   setting_app_title: Application title
   setting_app_subtitle: Application subtitle
   setting_welcome_text: Welcome text
@@ -436,8 +431,6 @@
   project_module_calendar: Calendar
   project_module_gantt: Gantt
   
-  label_tipoftheday: Tip of the day
-  label_ssamr_details: Other Details
   label_user: User
   label_user_plural: Users
   label_user_new: New user
@@ -445,15 +438,12 @@
   label_project: Project
   label_project_new: New project
   label_project_plural: Projects
-  label_my_project_plural: My Projects
-  label_other_project_plural: "Everyone Else's Projects"
   label_x_projects:
     zero:  no projects
     one:   1 project
     other: "%{count} projects"
   label_project_all: All Projects
   label_project_latest: Latest projects
-  label_managers: Managed by
   label_issue: Issue
   label_issue_new: New issue
   label_issue_plural: Issues
@@ -494,7 +484,6 @@
   label_login_with_open_id_option: or login with OpenID
   label_password_lost: Lost password
   label_home: Home
-  label_home_heading: Welcome!
   label_my_page: My page
   label_my_account: My account
   label_my_projects: My projects
@@ -606,6 +595,7 @@
   label_query: Custom query
   label_query_plural: Custom queries
   label_query_new: New query
+  label_my_queries: My custom queries
   label_filter_add: Add filter
   label_filter_plural: Filters
   label_equals: is
@@ -803,7 +793,7 @@
   label_profile: Profile
   label_subtask_plural: Subtasks
   label_project_copy_notifications: Send email notifications during the project copy
-  label_principal_search: "Search by name:"
+  label_principal_search: "Search for user or group:"
   label_user_search: "Search for user:"
   
   button_login: Login
@@ -870,21 +860,17 @@
   text_are_you_sure: Are you sure ?
   text_are_you_sure_with_children: "Delete issue and all child issues?"
   text_journal_changed: "%{label} changed from %{old} to %{new}"
+  text_journal_changed_no_detail: "%{label} updated"
   text_journal_set_to: "%{label} set to %{value}"
   text_journal_deleted: "%{label} deleted (%{old})"
   text_journal_added: "%{label} %{value} added"
   text_tip_issue_begin_day: issue beginning this day
   text_tip_issue_end_day: issue ending this day
   text_tip_issue_begin_end_day: issue beginning and ending this day
-  text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br /> This will be used in all project-related URLs, and as the repository name. Once saved, the identifier <b>can not</b> be changed.'
-  text_project_name_info: "This will be the name of your project throughout this site.<br /> You can change your project's name at any time, in the project's settings."
-  text_project_visibility_info: "If your project is not public, it will only be visible to users that you have added as project members."
-  text_project_homepage_info: 'Link to an external project page.'
+  text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
   text_caracters_maximum: "%{count} characters maximum."
   text_caracters_minimum: "Must be at least %{count} characters long."
   text_length_between: "Length between %{min} and %{max} characters."
-  text_user_ssamr_description_info: 'Please describe your current research or development interests, within the fields of audio and music.<br/>This information is publicly visible in your profile and you can edit it at any time.<br/>It may also be used to establish eligibility for your initial registration.'
-  text_issue_parent_issue_info: 'If this is a subtask, please insert its parent task number or write the main task name.'
   text_tracker_no_workflow: No workflow defined for this tracker
   text_unallowed_characters: Unallowed characters
   text_comma_separated: Multiple values allowed (comma separated).
@@ -914,7 +900,7 @@
   text_user_wrote: "%{value} wrote:"
   text_enumeration_destroy_question: "%{count} objects are assigned to this value."
   text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
   text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
   text_custom_field_possible_values_info: 'One line for each value'
@@ -925,7 +911,7 @@
   text_own_membership_delete_confirmation: "You are about to remove some or all of your permissions and may no longer be able to edit this project after that.\nAre you sure you want to continue?"
   text_zoom_in: Zoom in
   text_zoom_out: Zoom out
-  text_settings_repo_creation: The repository for a project should be set up automatically within a few minutes of the project being created.<br>You should not have to adjust any settings here.<br>Please check again in ten minutes, and <a href="/projects/soundsoftware-site/wiki/Help">contact us</a> if there is any problem.
+  text_warn_on_leaving_unsaved: "The current page contains unsaved text that will be lost if you leave this page."
   
   default_role_manager: Manager
   default_role_developer: Developer
--- a/config/locales/es.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/es.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -796,7 +796,7 @@
   text_destroy_time_entries: Borrar las horas
   text_destroy_time_entries_question: Existen %{hours} horas asignadas a la petición que quiere borrar. ¿Qué quiere hacer?
   text_diff_truncated: '... Diferencia truncada por exceder el máximo tamaño visualizable.'
-  text_email_delivery_not_configured: "Las notificaciones están desactivadas porque el servidor de correo no está configurado.\nConfigure el servidor de SMTP en config/email.yml y reinicie la aplicación para activar los cambios."
+  text_email_delivery_not_configured: "Las notificaciones están desactivadas porque el servidor de correo no está configurado.\nConfigure el servidor de SMTP en config/configuration.yml y reinicie la aplicación para activar los cambios."
   text_enumeration_category_reassign_to: 'Reasignar al siguiente valor:'
   text_enumeration_destroy_question: "%{count} objetos con este valor asignado."
   text_file_repository_writable: Se puede escribir en el repositorio
@@ -974,3 +974,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/eu.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/eu.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -99,8 +99,8 @@
     errors:
       template:
         header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
+          one:    "Errore batek %{model} hau godetzea galarazi du."
+          other:  "%{count} errorek %{model} hau gordetzea galarazi dute."
       messages:
         inclusion: "ez dago zerrendan"
         exclusion: "erreserbatuta dago"
@@ -125,7 +125,7 @@
         greater_than_start_date: "hasiera data baino handiagoa izan behar du"
         not_same_project: "ez dago proiektu berdinean"
         circular_dependency: "Erlazio honek mendekotasun zirkular bat sortuko luke"
-        cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
+        cant_link_an_issue_with_a_descendant: "Zeregin bat ezin da bere azpiataza batekin estekatu."
 
   actionview_instancetag_blank_option: Hautatu mesedez
   
@@ -277,7 +277,7 @@
   field_issue_to: Erlazionatutako zereginak
   field_delay: Atzerapena
   field_assignable: Arazoak rol honetara esleitu daitezke
-  field_redirect_existing_links: Existitzen diren estelak berbideratu
+  field_redirect_existing_links: Existitzen diren estekak berbideratu
   field_estimated_hours: Estimatutako denbora
   field_column_names: Zutabeak
   field_time_zone: Ordu zonaldea
@@ -318,7 +318,7 @@
   setting_cross_project_issue_relations: Zereginak proiektuen artean erlazionatzea baimendu
   setting_issue_list_default_columns: Zereginen zerrendan defektuz ikusten diren zutabeak
   setting_repositories_encodings: Biltegien kodeketak
-  setting_commit_logs_encoding: Commit-en mezuen kodetzea
+  setting_commit_logs_encoding: Commit-en egunkarien kodetzea
   setting_emails_footer: Eposten oina
   setting_protocol: Protokoloa
   setting_per_page_options: Orriko objektuen aukerak
@@ -363,7 +363,7 @@
   permission_delete_issues: Zereginak ezabatu
   permission_manage_public_queries: Galdera publikoak kudeatu
   permission_save_queries: Galderak gorde
-  permission_view_gantt: Gantt diagrama ikusi
+  permission_view_gantt: Gantt grafikoa ikusi
   permission_view_calendar: Egutegia ikusi
   permission_view_issue_watchers: Behatzaileen zerrenda ikusi
   permission_add_issue_watchers: Behatzaileak gehitu
@@ -441,7 +441,7 @@
   label_tracker: Aztarnaria
   label_tracker_plural: Aztarnariak
   label_tracker_new: Aztarnari berria
-  label_workflow: Workflow
+  label_workflow: Lan-fluxua
   label_issue_status: Zeregin egoera
   label_issue_status_plural: Zeregin egoerak
   label_issue_status_new: Egoera berria
@@ -507,7 +507,7 @@
   label_file_added: Fitxategia gehituta
   label_report: Berri ematea
   label_report_plural: Berri emateak
-  label_news: Beria
+  label_news: Berria
   label_news_new: Berria gehitu
   label_news_plural: Berriak
   label_news_latest: Azken berriak
@@ -554,7 +554,7 @@
   label_add_note: Oharra gehitu
   label_per_page: Orriko
   label_calendar: Egutegia
-  label_months_from: months from
+  label_months_from: hilabete noiztik
   label_gantt: Gantt
   label_internal: Barnekoa
   label_last_changes: "azken %{count} aldaketak"
@@ -785,7 +785,7 @@
   button_cancel: Ezeztatu
   button_activate: Gahitu
   button_sort: Ordenatu
-  button_log_time: Denbora apuntatu
+  button_log_time: Denbora erregistratu
   button_rollback: Itzuli bertsio honetara
   button_watch: Behatu
   button_unwatch: Behatzen utzi
@@ -825,9 +825,9 @@
   text_journal_set_to: "%{label}-k %{value} balioa hartu du"
   text_journal_deleted: "%{label} ezabatuta (%{old})"
   text_journal_added: "%{label} %{value} gehituta"
-  text_tip_issue_begin_day: gaur hasten diren atazak
-  text_tip_issue_end_day: gaur bukatzen diren atazak
-  text_tip_issue_begin_end_day: gaur hasi eta bukatzen diren atazak
+  text_tip_issue_begin_day: gaur hasten diren zereginak
+  text_tip_issue_end_day: gaur bukatzen diren zereginak
+  text_tip_issue_begin_end_day: gaur hasi eta bukatzen diren zereginak
   text_project_identifier_info: 'Letra xeheak (a-z), zenbakiak eta marrak erabil daitezke bakarrik.<br />Gorde eta gero identifikadorea ezin da aldatu.'
   text_caracters_maximum: "%{count} karaktere gehienez."
   text_caracters_minimum: "Gutxienez %{count} karaktereetako luzerakoa izan behar du."
@@ -860,7 +860,7 @@
   text_user_wrote: "%{value}-(e)k idatzi zuen:"
   text_enumeration_destroy_question: "%{count} objetu balio honetara esleituta daude."
   text_enumeration_category_reassign_to: 'Beste balio honetara esleitu:'
-  text_email_delivery_not_configured: "Eposta bidalketa ez dago konfiguratuta eta jakinarazpenak ezgaituta daude.\nKonfiguratu zure SMTP zerbitzaria config/email.yml-n eta aplikazioa berrabiarazi hauek gaitzeko."
+  text_email_delivery_not_configured: "Eposta bidalketa ez dago konfiguratuta eta jakinarazpenak ezgaituta daude.\nKonfiguratu zure SMTP zerbitzaria config/configuration.yml-n eta aplikazioa berrabiarazi hauek gaitzeko."
   text_repository_usernames_mapping: "Hautatu edo eguneratu Redmineko erabiltzailea biltegiko egunkarietan topatzen diren erabiltzaile izenekin erlazionatzeko.\nRedmine-n eta biltegian erabiltzaile izen edo eposta berdina duten erabiltzaileak automatikoki erlazionatzen dira."
   text_diff_truncated: '... Diff hau moztua izan da erakus daitekeen tamaina maximoa gainditu duelako.'
   text_custom_field_possible_values_info: 'Lerro bat balio bakoitzeko'
@@ -896,7 +896,7 @@
   enumeration_doc_categories: Dokumentu kategoriak
   enumeration_activities: Jarduerak (denbora kontrola))
   enumeration_system_activity: Sistemako Jarduera
-  label_board_sticky: Itxaskorra
+  label_board_sticky: Itsaskorra
   label_board_locked: Blokeatuta
   permission_export_wiki_pages: Wiki orriak esportatu
   setting_cache_formatted_text: Formatudun testua katxeatu
@@ -904,40 +904,44 @@
   error_unable_delete_issue_status: Ezine da zereginaren egoera ezabatu
   label_profile: Profila
   permission_manage_subtasks: Azpiatazak kudeatu
-  field_parent_issue: Guraso ataza
+  field_parent_issue: Zeregin gurasoa
   label_subtask_plural: Azpiatazak
   label_project_copy_notifications: Proiektua kopiatzen den bitartean eposta jakinarazpenak bidali
-  error_can_not_delete_custom_field: Ezin da eremu pertsonallizatua ezabatu
+  error_can_not_delete_custom_field: Ezin da eremu pertsonalizatua ezabatu
   error_unable_to_connect: Ezin da konektatu (%{value})
   error_can_not_remove_role: Rol hau erabiltzen hari da eta ezin da ezabatu.
   error_can_not_delete_tracker: Aztarnari honek zereginak ditu eta ezin da ezabatu.
-  field_principal: Principal
-  label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
-  field_time_entries: Log time
+  field_principal: Ekintzaile
+  label_my_page_block: "Nire orriko blokea"
+  notice_failed_to_save_members: "Kidea(k) gordetzean errorea: %{errors}."
+  text_zoom_out: Zooma txikiagotu
+  text_zoom_in: Zooma handiagotu
+  notice_unable_delete_time_entry: "Ezin da hautatutako denbora erregistroa ezabatu."
+  label_overall_spent_time: Igarotako denbora guztira
+  field_time_entries: "Denbora erregistratu"
   project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: Visible
-  setting_emails_header: Emails header
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  project_module_calendar: Egutegia
+  button_edit_associated_wikipage: "Esleitutako wiki orria editatu: %{page_title}"
+  text_are_you_sure_with_children: "Zeregina eta azpi zeregin guztiak ezabatu?"
+  field_text: Testu eremua
+  label_user_mail_option_only_owner: "Jabea naizen gauzetarako barrarik"
+  setting_default_notification_option: "Lehenetsitako ohartarazpen aukera"
+  label_user_mail_option_only_my_events: "Behatzen ditudan edo partaide naizen gauzetarako bakarrik"
+  label_user_mail_option_only_assigned: "Niri esleitutako gauzentzat bakarrik"
+  label_user_mail_option_none: "Gertakaririk ez"
+  field_member_of_group: "Esleituta duenaren taldea"
+  field_assigned_to_role: "Esleituta duenaren rola"
+  notice_not_authorized_archived_project: "Atzitu nahi duzun proiektua artxibatua izan da."
+  label_principal_search: "Bilatu erabiltzaile edo taldea:"
+  label_user_search: "Erabiltzailea bilatu:"
+  field_visible: Ikusgai
+  setting_emails_header: "Eposten goiburua"
+  setting_commit_logtime_activity_id: "Erregistratutako denboraren jarduera"
+  text_time_logged_by_changeset: "%{value} aldaketan egindakoa."
+  setting_commit_logtime_enabled: "Erregistrutako denbora gaitu"
+  notice_gantt_chart_truncated: Grafikoa moztu da bistara daitekeen elementuen kopuru maximoa gainditu delako (%{max})
+  setting_gantt_items_limit: "Gantt grafikoan bistara daitekeen elementu kopuru maximoa"
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/locales/fa.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,945 @@
+fa:
+  # Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
+  direction: rtl
+  date:
+    formats:
+      # Use the strftime parameters for formats.
+      # When no format has been given, it uses default.
+      # You can provide other formats here if you like!
+      default: "%Y/%m/%d"
+      short: "%b %d"
+      long: "%B %d, %Y"
+      
+    day_names: [یک‌شنبه, دوشنبه, سه‌شنبه, چهارشنبه, پنج‌شنبه, آدینه, شنبه]
+    abbr_day_names: [یک, دو, سه, چهار, پنج, آدینه, شنبه]
+      
+    # Don't forget the nil at the beginning; there's no such thing as a 0th month
+    month_names: [~, ژانویه, Ùوریه, مارس, آوریل, مه, ژوئن, ژوئیه, اوت, سپتامبر, اکتبر, نوامبر, دسامبر]
+    abbr_month_names: [~, ژان, Ùور, مار, آور, مه, ژوئن, ژوئیه, اوت, سپت, اکت, نوا, دسا]
+    # Used in date_select and datime_select.
+    order: [ :year, :month, :day ]
+
+  time:
+    formats:
+      default: "%Y/%m/%d %p %I:%M"
+      time: "%p %I:%M"
+      short: "%d %b %H:%M"
+      long: "%B %d, %Y %H:%M"
+    am: "ق.ظ"
+    pm: "ب.ظ"
+      
+  datetime:
+    distance_in_words:
+      half_a_minute: "نیم دقیقه"
+      less_than_x_seconds:
+        one:   "کمتر از 1 ثانیه"
+        other: "کمتر از %{count} ثانیه"
+      x_seconds:
+        one:   "1 ثانیه"
+        other: "%{count} ثانیه"
+      less_than_x_minutes:
+        one:   "کمتر از 1 دقیقه"
+        other: "کمتر از %{count} دقیقه"
+      x_minutes:
+        one:   "1 دقیقه"
+        other: "%{count} دقیقه"
+      about_x_hours:
+        one:   "نزدیک 1 ساعت"
+        other: "نزدیک %{count} ساعت"
+      x_days:
+        one:   "1 روز"
+        other: "%{count} روز"
+      about_x_months:
+        one:   "نزدیک 1 ماه"
+        other: "نزدیک %{count} ماه"
+      x_months:
+        one:   "1 ماه"
+        other: "%{count} ماه"
+      about_x_years:
+        one:   "نزدیک 1 سال"
+        other: "نزدیک %{count} سال"
+      over_x_years:
+        one:   "بیش از 1 سال"
+        other: "بیش از %{count} سال"
+      almost_x_years:
+        one:   "نزدیک 1 سال"
+        other: "نزدیک %{count} سال"
+
+  number:
+    # Default format for numbers
+    format:
+      separator: "Ù«" 
+      delimiter: ""
+      precision: 3
+    human:
+      format:
+        delimiter: ""
+        precision: 1
+      storage_units:
+        format: "%n %u"
+        units:
+          byte:
+            one: "بایت"
+            other: "بایت"
+          kb: "کیلوبایت"
+          mb: "مگابایت"
+          gb: "گیگابایت"
+          tb: "ترابایت"
+
+        
+# Used in array.to_sentence.
+  support:
+    array:
+      sentence_connector: "Ùˆ"
+      skip_last_comma: false
+      
+  activerecord:
+    errors:
+      template:
+        header:
+          one:    "1 ایراد از ذخیره سازی این %{model} جلوگیری کرد"
+          other:  "%{count} ایراد از ذخیره سازی این %{model} جلوگیری کرد"
+      messages:
+        inclusion: "در Ùهرست نیامده است"
+        exclusion: "رزرو شده است"
+        invalid: "نادرست است"
+        confirmation: "با بررسی سازگاری ندارد"
+        accepted: "باید Ù¾Ø°ÛŒØ±ÙØªÙ‡ شود"
+        empty: "نمی‌تواند تهی باشد"
+        blank: "نمی‌تواند تهی باشد"
+        too_long: "خیلی بلند است (بیشترین اندازه %{count} نویسه است)"
+        too_short: "خیلی کوتاه است (کمترین اندازه %{count} نویسه است)"
+        wrong_length: "اندازه نادرست است (باید %{count} نویسه باشد)"
+        taken: "پیش از این Ú¯Ø±ÙØªÙ‡ شده است"
+        not_a_number: "شماره درستی نیست"
+        not_a_date: "تاریخ درستی نیست"
+        greater_than: "باید بزرگتر از %{count} باشد"
+        greater_than_or_equal_to: "باید بزرگتر از یا برابر با %{count} باشد"
+        equal_to: "باید برابر با %{count} باشد"
+        less_than: "باید کمتر از %{count} باشد"
+        less_than_or_equal_to: "باید کمتر از یا برابر با %{count} باشد"
+        odd: "باید ÙØ±Ø¯ باشد"
+        even: "باید زوج باشد"
+        greater_than_start_date: "باید از تاریخ آغاز بزرگتر باشد"
+        not_same_project: "به همان پروژه وابسته نیست"
+        circular_dependency: "این وابستگی یک وابستگی دایره وار خواهد ساخت"
+        cant_link_an_issue_with_a_descendant: "یک پیامد نمی‌تواند به یکی از زیر کارهایش پیوند بخورد"
+
+  actionview_instancetag_blank_option: گزینش کنید
+  
+  general_text_No: 'خیر'
+  general_text_Yes: 'آری'
+  general_text_no: 'خیر'
+  general_text_yes: 'آری'
+  general_lang_name: 'Persian (پارسی)'
+  general_csv_separator: ','
+  general_csv_decimal_separator: '.'
+  general_csv_encoding: UTF-8
+  general_pdf_encoding: UTF-8
+  general_first_day_of_week: '6'
+  
+  notice_account_updated: حساب شما بروز شد.
+  notice_account_invalid_creditentials: نام کاربری یا گذرواژه نادرست است
+  notice_account_password_updated: گذرواژه بروز شد
+  notice_account_wrong_password: گذرواژه نادرست است
+  notice_account_register_done: حساب ساخته شد. برای ÙØ¹Ø§Ù„ نمودن آن، روی پیوندی Ú©Ù‡ به شما ایمیل شده کلیک کنید.
+  notice_account_unknown_email: کاربر شناخته نشد.
+  notice_can_t_change_password:  این حساب یک روش شناسایی بیرونی را به کار Ú¯Ø±ÙØªÙ‡ است. گذرواژه را نمی‌توان جایگزین کرد.
+  notice_account_lost_email_sent: یک ایمیل با راهنمایی درباره گزینش گذرواژه تازه برای شما ÙØ±Ø³ØªØ§Ø¯Ù‡ شد.
+  notice_account_activated: حساب شما ÙØ¹Ø§Ù„ شده است. اکنون می‌توانید وارد شوید.
+  notice_successful_create: با موÙقیت ساخته شد.
+  notice_successful_update: با موÙقیت بروز شد.
+  notice_successful_delete: با موÙقیت برداشته شد.
+  notice_successful_connection: با موÙقیت متصل شد.
+  notice_file_not_found: برگه درخواستی شما در دسترس نیست یا پاک شده است.
+  notice_locking_conflict: داده‌ها را کاربر دیگری بروز کرده است.
+  notice_not_authorized: شما به این برگه دسترسی ندارید.
+  notice_not_authorized_archived_project: پروژه درخواستی شما بایگانی شده است.
+  notice_email_sent: "یک ایمیل به %{value} ÙØ±Ø³ØªØ§Ø¯Ù‡ شد."
+  notice_email_error: "یک ایراد در ÙØ±Ø³ØªØ§Ø¯Ù† ایمیل پیش آمد (%{value})."
+  notice_feeds_access_key_reseted: کلید دسترسی RSS شما بازنشانی شد.
+  notice_api_access_key_reseted: کلید دسترسی API شما بازنشانی شد.
+  notice_failed_to_save_issues: "ذخیره سازی %{count} پیامد از %{total} پیامد گزینش شده شکست خورد: %{ids}."
+  notice_failed_to_save_members: "ذخیره سازی اعضا شکست خورد: %{errors}."
+  notice_no_issue_selected: "هیچ پیامدی برگزیده نشده است! پیامدهایی که می‌خواهید ویرایش کنید را برگزینید."
+  notice_account_pending: "حساب شما ساخته شد و اکنون چشم به راه روادید سرپرست است."
+  notice_default_data_loaded: پیکربندی پیش‌گزیده با موÙقیت بار شد.
+  notice_unable_delete_version: نگارش را نمی‌توان پاک کرد.
+  notice_unable_delete_time_entry: زمان گزارش شده را نمی‌توان پاک کرد.
+  notice_issue_done_ratios_updated: اندازه انجام شده پیامد بروز شد.
+  notice_gantt_chart_truncated: "نمودار بریده شد چون از بیشترین شماری که می‌توان نشان داد بزگتر است (%{max})."
+  
+  error_can_t_load_default_data: "پیکربندی پیش‌گزیده نمی‌تواند بار شود: %{value}"
+  error_scm_not_found: "بخش یا نگارش در انباره پیدا نشد."
+  error_scm_command_failed: "ایرادی در دسترسی به انباره پیش آمد: %{value}"
+  error_scm_annotate: "بخش پیدا نشد یا نمی‌توان برای آن یادداشت نوشت."
+  error_issue_not_found_in_project: 'پیامد پیدا نشد یا به این پروژه وابسته نیست.'
+  error_no_tracker_in_project: 'هیچ پیگردی به این پروژه پیوسته نشده است. پیکربندی پروژه را بررسی کنید.'
+  error_no_default_issue_status: 'هیچ وضعیت پیامد پیش‌گزیده‌ای مشخص نشده است. پیکربندی را بررسی کنید (به «پیکربندی -> وضعیت‌های پیامد» بروید).'
+  error_can_not_delete_custom_field: Ùیلد Ø³ÙØ§Ø±Ø´ÛŒ را نمی‌توان پاک کرد.
+  error_can_not_delete_tracker: "این پیگرد دارای پیامد است و نمی‌توان آن را پاک کرد."
+  error_can_not_remove_role: "این نقش به کار Ú¯Ø±ÙØªÙ‡ شده است Ùˆ نمی‌توان آن را پاک کرد."
+  error_can_not_reopen_issue_on_closed_version: 'یک پیامد که به یک نگارش بسته شده وابسته است را نمی‌توان باز کرد.'
+  error_can_not_archive_project: این پروژه را نمی‌توان بایگانی کرد.
+  error_issue_done_ratios_not_updated: "اندازه انجام شده پیامد بروز نشد."
+  error_workflow_copy_source: 'یک پیگرد یا نقش منبع را برگزینید.'
+  error_workflow_copy_target: 'پیگردها یا نقش‌های مقصد را برگزینید.'
+  error_unable_delete_issue_status: 'وضعیت پیامد را نمی‌توان پاک کرد.'
+  error_unable_to_connect: "نمی‌توان متصل شد (%{value})"
+  warning_attachments_not_saved: "%{count} پرونده ذخیره نشد."
+  
+  mail_subject_lost_password: "گذرواژه حساب %{value} شما"
+  mail_body_lost_password: 'برای جایگزینی گذرواژه خود، بر روی پیوند زیر کلیک کنید:'
+  mail_subject_register: "ÙØ¹Ø§Ù„سازی حساب %{value} شما"
+  mail_body_register: 'برای ÙØ¹Ø§Ù„سازی حساب خود، بر روی پیوند زیر کلیک کنید:'
+  mail_body_account_information_external: "شما می‌توانید حساب %{value} خود را برای ورود به کار برید."
+  mail_body_account_information: داده‌های حساب شما
+  mail_subject_account_activation_request: "درخواست ÙØ¹Ø§Ù„سازی حساب %{value}"
+  mail_body_account_activation_request: "یک کاربر تازه (%{value}) نامنویسی کرده است. این حساب چشم به راه روادید شماست:"
+  mail_subject_reminder: "زمان رسیدگی به %{count} پیامد در %{days} روز آینده سر می‌رسد"
+  mail_body_reminder: "زمان رسیدگی به %{count} پیامد که به شما واگذار شده است، در %{days} روز آینده سر می‌رسد:"
+  mail_subject_wiki_content_added: "برگه ویکی «%{id}» Ø§ÙØ²ÙˆØ¯Ù‡ شد"
+  mail_body_wiki_content_added: "برگه ویکی «%{id}» به دست %{author} Ø§ÙØ²ÙˆØ¯Ù‡ شد."
+  mail_subject_wiki_content_updated: "برگه ویکی «%{id}» بروز شد"
+  mail_body_wiki_content_updated: "برگه ویکی «%{id}» به دست %{author} بروز شد."
+  
+  gui_validation_error: 1 ایراد
+  gui_validation_error_plural: "%{count} ایراد"
+  
+  field_name: نام
+  field_description: توضیح
+  field_summary: خلاصه
+  field_is_required: الزامی
+  field_firstname: نام کوچک
+  field_lastname: نام خانوادگی
+  field_mail: ایمیل
+  field_filename: پرونده
+  field_filesize: اندازه
+  field_downloads: Ø¯Ø±ÛŒØ§ÙØªâ€ŒÙ‡Ø§
+  field_author: نویسنده
+  field_created_on: ساخته شده در
+  field_updated_on: بروز شده در
+  field_field_format: قالب
+  field_is_for_all: برای همه پروژه‌ها
+  field_possible_values: مقادیر ممکن
+  field_regexp: عبارت منظم
+  field_min_length: کمترین اندازه
+  field_max_length: بیشترین اندازه
+  field_value: مقدار
+  field_category: دسته
+  field_title: عنوان
+  field_project: پروژه
+  field_issue: پیامد
+  field_status: وضعیت
+  field_notes: یادداشت‌ها
+  field_is_closed: پیامد بسته شده
+  field_is_default: مقدار پیش‌گزیده
+  field_tracker: پیگرد
+  field_subject: موضوع
+  field_due_date: زمان سررسید
+  field_assigned_to: واگذار شده به
+  field_priority: برتری
+  field_fixed_version: نگارش هدÙ
+  field_user: کاربر
+  field_principal: دستور دهنده
+  field_role: نقش
+  field_homepage: برگه خانه
+  field_is_public: همگانی
+  field_parent: پروژه پدر
+  field_is_in_roadmap: این پیامدها در نقشه راه نشان داده شوند
+  field_login: ورود
+  field_mail_notification: آگاه سازی‌های ایمیلی
+  field_admin: سرپرست
+  field_last_login_on: آخرین ورود
+  field_language: زبان
+  field_effective_date: تاریخ
+  field_password: گذرواژه
+  field_new_password: گذرواژه تازه
+  field_password_confirmation: بررسی گذرواژه
+  field_version: نگارش
+  field_type: گونه
+  field_host: میزبان
+  field_port: درگاه
+  field_account: حساب
+  field_base_dn: DN پایه
+  field_attr_login: نشانه ورود
+  field_attr_firstname: نشانه نام کوچک
+  field_attr_lastname: نشانه نام خانوادگی
+  field_attr_mail: نشانه ایمیل
+  field_onthefly: ساخت کاربر بیدرنگ
+  field_start_date: تاریخ آغاز
+  field_done_ratio: ٪ انجام شده
+  field_auth_source: روش شناسایی
+  field_hide_mail: ایمیل من پنهان شود
+  field_comments: دیدگاه
+  field_url: نشانی
+  field_start_page: برگه آغاز
+  field_subproject: زیر پروژه
+  field_hours: ساعت‌
+  field_activity: ÙØ¹Ø§Ù„یت
+  field_spent_on: در تاریخ
+  field_identifier: شناسه
+  field_is_filter: پالایش پذیر
+  field_issue_to: پیامد وابسته
+  field_delay: دیرکرد
+  field_assignable: پیامدها می‌توانند به این نقش واگذار شوند
+  field_redirect_existing_links: پیوندهای پیشین  به پیوند تازه راهنمایی شوند
+  field_estimated_hours: زمان برآورد شده
+  field_column_names: ستون‌ها
+  field_time_entries: زمان نوشتن
+  field_time_zone: پهنه زمانی
+  field_searchable: جستجو پذیر
+  field_default_value: مقدار پیش‌گزیده
+  field_comments_sorting: نمایش دیدگاه‌ها
+  field_parent_title: برگه پدر
+  field_editable: ویرایش پذیر
+  field_watcher: دیده‌بان
+  field_identity_url: نشانی OpenID
+  field_content: محتوا
+  field_group_by: دسته بندی با
+  field_sharing: اشتراک گذاری
+  field_parent_issue: کار پدر
+  field_member_of_group: "دسته واگذار شونده"
+  field_assigned_to_role: "نقش واگذار شونده"
+  field_text: Ùیلد متنی
+  field_visible: آشکار
+  
+  setting_app_title: نام برنامه
+  setting_app_subtitle: زیرنام برنامه
+  setting_welcome_text: نوشتار خوش‌آمد گویی
+  setting_default_language: زبان پیش‌گزیده
+  setting_login_required: الزامی بودن ورود
+  setting_self_registration: خود نام نویسی
+  setting_attachment_max_size: بیشترین اندازه پیوست
+  setting_issues_export_limit: کرانه صدور پییامدها
+  setting_mail_from: نشانی ÙØ±Ø³ØªÙ†Ø¯Ù‡ ایمیل
+  setting_bcc_recipients: گیرندگان ایمیل دیده نشوند (bcc)
+  setting_plain_text_mail: ایمیل نوشته ساده (بدون HTML)
+  setting_host_name: نام میزبان و نشانی
+  setting_text_formatting: قالب بندی نوشته
+  setting_wiki_compression: ÙØ´Ø±Ø¯Ù‡â€ŒØ³Ø§Ø²ÛŒ پیشینه ویکی
+  setting_feeds_limit: کرانه محتوای خوراک
+  setting_default_projects_public: حالت پیش‌گزیده پروژه‌های تازه، همگانی است
+  setting_autofetch_changesets: Ø¯Ø±ÛŒØ§ÙØª خودکار تغییرات
+  setting_sys_api_enabled: ÙØ¹Ø§Ù„ سازی وب سرویس برای سرپرستی انباره
+  setting_commit_ref_keywords: کلیدواژه‌های نشانه
+  setting_commit_fix_keywords: کلیدواژه‌های انجام
+  setting_autologin: ورود خودکار
+  setting_date_format: قالب تاریخ
+  setting_time_format: قالب زمان
+  setting_cross_project_issue_relations: توانایی وابستگی میان پروژه‌ای پیامدها
+  setting_issue_list_default_columns: ستون‌های پیش‌گزیده نمایش داده شده در Ùهرست پیامدها
+  setting_repositories_encodings: کدگذاری انباره‌ها
+  setting_commit_logs_encoding: کدگذاری پیام‌های انباره
+  setting_emails_header: سرنویس ایمیل‌ها
+  setting_emails_footer: پانویس ایمیل‌ها
+  setting_protocol: پیوندنامه
+  setting_per_page_options: گزینه‌های اندازه داده‌های هر برگ
+  setting_user_format: قالب نمایشی کاربران
+  setting_activity_days_default: روزهای نمایش داده شده در ÙØ¹Ø§Ù„یت پروژه
+  setting_display_subprojects_issues: پیش‌گزیده نمایش پیامدهای زیرپروژه در پروژه پدر
+  setting_enabled_scm: ÙØ¹Ø§Ù„سازی SCM
+  setting_mail_handler_body_delimiters: "بریدن ایمیل‌ها پس از یکی از این ردیÙ‌ها"
+  setting_mail_handler_api_enabled: ÙØ¹Ø§Ù„سازی وب سرویس برای ایمیل‌های آمده
+  setting_mail_handler_api_key: کلید API
+  setting_sequential_project_identifiers: ساخت پشت سر هم شناسه پروژه
+  setting_gravatar_enabled: کاربرد Gravatar برای عکس کاربر
+  setting_gravatar_default: عکس Gravatar پیش‌گزیده
+  setting_diff_max_lines_displayed: بیشترین اندازه ردیÙ‌های ØªÙØ§ÙˆØª نشان داده شده
+  setting_file_max_size_displayed: بیشترین اندازه پرونده‌های نمایش داده شده درون خطی
+  setting_repository_log_display_limit: بیشترین شمار نگارش‌های نمایش داده شده در گزارش پرونده
+  setting_openid: پذیرش ورود و نام نویسی با OpenID
+  setting_password_min_length: کمترین اندازه گذرواژه
+  setting_new_project_user_role_id: نقش داده شده به کاربری که سرپرست نیست و پروژه می‌سازد
+  setting_default_projects_modules: پیمانه‌های پیش‌گزیده ÙØ¹Ø§Ù„ برای پروژه‌های تازه
+  setting_issue_done_ratio: برآورد اندازه انجام شده پیامد با
+  setting_issue_done_ratio_issue_field: کاربرد Ùیلد پیامد
+  setting_issue_done_ratio_issue_status: کاربرد وضعیت پیامد
+  setting_start_of_week: آغاز گاهشمار از
+  setting_rest_api_enabled: ÙØ¹Ø§Ù„سازی وب سرویس‌های REST
+  setting_cache_formatted_text: نهان سازی نوشته‌های قالب بندی شده
+  setting_default_notification_option: آگاه سازی پیش‌گزیده
+  setting_commit_logtime_enabled: ÙØ¹Ø§Ù„سازی زمان گذاشته شده
+  setting_commit_logtime_activity_id: ÙØ¹Ø§Ù„یت زمان گذاشته شده
+  setting_gantt_items_limit: بیشترین شمار بخش‌های نمایش داده شده در نمودار گانت
+  
+  permission_add_project: ساخت پروژه
+  permission_add_subprojects: ساخت زیرپروژه
+  permission_edit_project: ویرایش پروژه
+  permission_select_project_modules: گزینش پیمانه‌های پروژه
+  permission_manage_members: سرپرستی اعضا
+  permission_manage_project_activities: سرپرستی ÙØ¹Ø§Ù„یت‌های پروژه
+  permission_manage_versions: سرپرستی نگارش‌ها
+  permission_manage_categories: سرپرستی دسته‌های پیامد
+  permission_view_issues: دیدن پیامدها
+  permission_add_issues: Ø§ÙØ²ÙˆØ¯Ù† پیامدها
+  permission_edit_issues: ویرایش پیامدها
+  permission_manage_issue_relations: سرپرستی وابستگی پیامدها
+  permission_add_issue_notes: Ø§ÙØ²ÙˆØ¯Ù† یادداشت‌ها
+  permission_edit_issue_notes: ویرایش یادداشت‌ها
+  permission_edit_own_issue_notes: ویرایش یادداشت خود
+  permission_move_issues: جابجایی پیامدها
+  permission_delete_issues: پاک کردن پیامدها
+  permission_manage_public_queries: سرپرستی پرس‌وجوهای همگانی
+  permission_save_queries: ذخیره سازی پرس‌وجوها
+  permission_view_gantt: دیدن نمودار گانت
+  permission_view_calendar: دیدن گاهشمار
+  permission_view_issue_watchers: دیدن Ùهرست دیده‌بان‌ها
+  permission_add_issue_watchers: Ø§ÙØ²ÙˆØ¯Ù† دیده‌بان‌ها
+  permission_delete_issue_watchers: پاک کردن دیده‌بان‌ها
+  permission_log_time: نوشتن زمان گذاشته شده
+  permission_view_time_entries: دیدن زمان گذاشته شده
+  permission_edit_time_entries: ویرایش زمان گذاشته شده
+  permission_edit_own_time_entries: ویرایش زمان گذاشته شده خود
+  permission_manage_news: سرپرستی رویدادها
+  permission_comment_news: گذاشتن دیدگاه روی رویدادها
+  permission_manage_documents: سرپرستی نوشتارها
+  permission_view_documents: دیدن نوشتارها
+  permission_manage_files: سرپرستی پرونده‌ها
+  permission_view_files: دیدن پرونده‌ها
+  permission_manage_wiki: سرپرستی ویکی
+  permission_rename_wiki_pages: نامگذاری برگه ویکی
+  permission_delete_wiki_pages: پاک کردن برگه ویکی
+  permission_view_wiki_pages: دیدن ویکی
+  permission_view_wiki_edits: دیدن پیشینه ویکی
+  permission_edit_wiki_pages: ویرایش برگه‌های ویکی
+  permission_delete_wiki_pages_attachments: پاک کردن پیوست‌های برگه ویکی
+  permission_protect_wiki_pages: نگه‌داری برگه‌های ویکی
+  permission_manage_repository: سرپرستی انباره
+  permission_browse_repository: چریدن در انباره
+  permission_view_changesets: دیدن تغییرات
+  permission_commit_access: دسترسی تغییر انباره
+  permission_manage_boards: سرپرستی انجمن‌ها
+  permission_view_messages: دیدن پیام‌ها
+  permission_add_messages: ÙØ±Ø³ØªØ§Ø¯Ù† پیام‌ها
+  permission_edit_messages: ویرایش پیام‌ها
+  permission_edit_own_messages: ویرایش پیام خود
+  permission_delete_messages: پاک کردن پیام‌ها
+  permission_delete_own_messages: پاک کردن پیام خود
+  permission_export_wiki_pages: صدور برگه‌های ویکی
+  permission_manage_subtasks: سرپرستی زیرکارها
+  
+  project_module_issue_tracking: پیگیری پیامدها
+  project_module_time_tracking: پیگیری زمان
+  project_module_news: رویدادها
+  project_module_documents: نوشتارها
+  project_module_files: پرونده‌ها
+  project_module_wiki: ویکی
+  project_module_repository: انباره
+  project_module_boards: انجمن‌ها
+  project_module_calendar: گاهشمار
+  project_module_gantt: گانت
+  
+  label_user: کاربر
+  label_user_plural: کاربر
+  label_user_new: کاربر تازه
+  label_user_anonymous: ناشناس
+  label_project: پروژه
+  label_project_new: پروژه تازه
+  label_project_plural: پروژه
+  label_x_projects:
+    zero:  بدون پروژه
+    one:   "1 پروژه"
+    other: "%{count} پروژه"
+  label_project_all: همه پروژه‌ها
+  label_project_latest: آخرین پروژه‌ها
+  label_issue: پیامد
+  label_issue_new: پیامد تازه
+  label_issue_plural: پیامد
+  label_issue_view_all: دیدن همه پیامدها
+  label_issues_by: "پیامدهای دست%{value}"
+  label_issue_added: پیامد Ø§ÙØ²ÙˆØ¯Ù‡ شد
+  label_issue_updated: پیامد بروز شد
+  label_document: نوشتار
+  label_document_new: نوشتار تازه
+  label_document_plural: نوشتار
+  label_document_added: نوشتار Ø§ÙØ²ÙˆØ¯Ù‡ شد
+  label_role: نقش
+  label_role_plural: نقش
+  label_role_new: نقش تازه
+  label_role_and_permissions: نقش‌ها و پروانه‌ها
+  label_member: عضو
+  label_member_new: عضو تازه
+  label_member_plural: عضو
+  label_tracker: پیگرد
+  label_tracker_plural: پیگرد
+  label_tracker_new: پیگرد تازه
+  label_workflow: گردش کار
+  label_issue_status: وضعیت پیامد
+  label_issue_status_plural: وضعیت پیامد
+  label_issue_status_new: وضعیت تازه
+  label_issue_category: دسته پیامد
+  label_issue_category_plural: دسته پیامد
+  label_issue_category_new: دسته تازه
+  label_custom_field: Ùیلد Ø³ÙØ§Ø±Ø´ÛŒ
+  label_custom_field_plural: Ùیلد Ø³ÙØ§Ø±Ø´ÛŒ
+  label_custom_field_new: Ùیلد Ø³ÙØ§Ø±Ø´ÛŒ تازه
+  label_enumerations: برشمردنی‌ها
+  label_enumeration_new: مقدار تازه
+  label_information: داده
+  label_information_plural: داده
+  label_please_login: وارد شوید
+  label_register: نام نویسی کنید
+  label_login_with_open_id_option: یا با OpenID وارد شوید
+  label_password_lost: Ø¨Ø§Ø²ÛŒØ§ÙØª گذرواژه
+  label_home: سرآغاز
+  label_my_page: برگه من
+  label_my_account: حساب من
+  label_my_projects: پروژه‌های من
+  label_my_page_block: بخش برگه من
+  label_administration: سرپرستی
+  label_login: ورود
+  label_logout: خروج
+  label_help: راهنما
+  label_reported_issues: پیامدهای گزارش شده
+  label_assigned_to_me_issues: پیامدهای واگذار شده به من
+  label_last_login: آخرین ورود
+  label_registered_on: نام نویسی شده در
+  label_activity: ÙØ¹Ø§Ù„یت
+  label_overall_activity: ÙØ¹Ø§Ù„یت روی هم Ø±ÙØªÙ‡
+  label_user_activity: "ÙØ¹Ø§Ù„یت %{value}"
+  label_new: تازه
+  label_logged_as: "نام کاربری:"
+  label_environment: محیط
+  label_authentication: شناسایی
+  label_auth_source: روش شناسایی
+  label_auth_source_new: روش شناسایی تازه
+  label_auth_source_plural: روش شناسایی
+  label_subproject_plural: زیرپروژه
+  label_subproject_new: زیرپروژه تازه
+  label_and_its_subprojects: "%{value} و زیرپروژه‌هایش"
+  label_min_max_length: کمترین و بیشترین اندازه
+  label_list: Ùهرست
+  label_date: تاریخ
+  label_integer: شماره درست
+  label_float: شماره شناور
+  label_boolean: درست/نادرست
+  label_string: نوشته
+  label_text: نوشته بلند
+  label_attribute: نشانه
+  label_attribute_plural: نشانه
+  label_download: "%{count} بار Ø¯Ø±ÛŒØ§ÙØª شده"
+  label_download_plural: "%{count} بار Ø¯Ø±ÛŒØ§ÙØª شده"
+  label_no_data: هیچ داده‌ای برای نمایش نیست
+  label_change_status: جایگزینی وضعیت
+  label_history: پیشینه
+  label_attachment: پرونده
+  label_attachment_new: پرونده تازه
+  label_attachment_delete: پاک کردن پرونده
+  label_attachment_plural: پرونده
+  label_file_added: پرونده Ø§ÙØ²ÙˆØ¯Ù‡ شد
+  label_report: گزارش
+  label_report_plural: گزارش
+  label_news: رویداد
+  label_news_new: Ø§ÙØ²ÙˆØ¯Ù† رویداد
+  label_news_plural: رویداد
+  label_news_latest: آخرین رویدادها
+  label_news_view_all: دیدن همه رویدادها
+  label_news_added: رویداد Ø§ÙØ²ÙˆØ¯Ù‡ شد
+  label_settings: پیکربندی
+  label_overview: دورنما
+  label_version: نگارش
+  label_version_new: نگارش تازه
+  label_version_plural: نگارش
+  label_close_versions: بستن نگارش‌های انجام شده
+  label_confirmation: بررسی
+  label_export_to: 'قالب‌های دیگر:'
+  label_read: خواندن...
+  label_public_projects: پروژه‌های همگانی
+  label_open_issues: باز
+  label_open_issues_plural: باز
+  label_closed_issues: بسته
+  label_closed_issues_plural: بسته
+  label_x_open_issues_abbr_on_total:
+    zero:  0 باز از %{total}
+    one:   1 باز از %{total}
+    other: "%{count} باز از %{total}"
+  label_x_open_issues_abbr:
+    zero:  0 باز
+    one:   1 باز
+    other: "%{count} باز"
+  label_x_closed_issues_abbr:
+    zero:  0 بسته
+    one:   1 بسته
+    other: "%{count} بسته"
+  label_total: جمله
+  label_permissions: پروانه‌ها
+  label_current_status: وضعیت کنونی
+  label_new_statuses_allowed: وضعیت‌های Ù¾Ø°ÛŒØ±ÙØªÙ†ÛŒ تازه
+  label_all: همه
+  label_none: هیچ
+  label_nobody: هیچکس
+  label_next: پسین
+  label_previous: پیشین
+  label_used_by: به کار Ø±ÙØªÙ‡ در
+  label_details: ریزه‌کاری
+  label_add_note: Ø§ÙØ²ÙˆØ¯Ù† یادداشت
+  label_per_page: ردیÙ‌ها در هر برگه
+  label_calendar: گاهشمار
+  label_months_from: از ماه
+  label_gantt: گانت
+  label_internal: درونی
+  label_last_changes: "%{count} تغییر آخر"
+  label_change_view_all: دیدن همه تغییرات
+  label_personalize_page: Ø³ÙØ§Ø±Ø´ÛŒ نمودن این برگه
+  label_comment: دیدگاه
+  label_comment_plural: دیدگاه
+  label_x_comments:
+    zero: بدون دیدگاه
+    one: 1 دیدگاه
+    other: "%{count} دیدگاه"
+  label_comment_add: Ø§ÙØ²ÙˆØ¯Ù† دیدگاه
+  label_comment_added: دیدگاه Ø§ÙØ²ÙˆØ¯Ù‡ شد
+  label_comment_delete: پاک کردن دیدگاه‌ها
+  label_query: پرس‌وجوی Ø³ÙØ§Ø±Ø´ÛŒ
+  label_query_plural: پرس‌وجوی Ø³ÙØ§Ø±Ø´ÛŒ
+  label_query_new: پرس‌وجوی تازه
+  label_filter_add: Ø§ÙØ²ÙˆØ¯Ù† پالایه
+  label_filter_plural: پالایه
+  label_equals: برابر است با
+  label_not_equals: برابر نیست با
+  label_in_less_than: کمتر است از
+  label_in_more_than: بیشتر است از
+  label_greater_or_equal: بیشتر یا برابر است با
+  label_less_or_equal: کمتر یا برابر است با
+  label_in: در
+  label_today: امروز
+  label_all_time: همیشه
+  label_yesterday: دیروز
+  label_this_week: این Ù‡ÙØªÙ‡
+  label_last_week: Ù‡ÙØªÙ‡ پیشین
+  label_last_n_days: "%{count} روز گذشته"
+  label_this_month: این ماه
+  label_last_month: ماه پیشین
+  label_this_year: امسال
+  label_date_range: بازه تاریخ
+  label_less_than_ago: کمتر از چند روز پیشین
+  label_more_than_ago: بیشتر از چند روز پیشین
+  label_ago: روز پیشین
+  label_contains: دارد
+  label_not_contains: ندارد
+  label_day_plural: روز
+  label_repository: انباره
+  label_repository_plural: انباره
+  label_browse: چریدن
+  label_modification: "%{count} جایگذاری"
+  label_modification_plural: "%{count} جایگذاری"
+  label_branch: شاخه
+  label_tag: برچسب
+  label_revision: بازبینی
+  label_revision_plural: بازبینی
+  label_revision_id: "بازبینی %{value}"
+  label_associated_revisions: بازبینی‌های وابسته
+  label_added: Ø§ÙØ²ÙˆØ¯Ù‡ شده
+  label_modified: پیراسته شده
+  label_copied: رونویسی شده
+  label_renamed: نامگذاری شده
+  label_deleted: پاکسازی شده
+  label_latest_revision: آخرین بازبینی
+  label_latest_revision_plural: آخرین بازبینی
+  label_view_revisions: دیدن بازبینی‌ها
+  label_view_all_revisions: دیدن همه بازبینی‌ها
+  label_max_size: بیشترین اندازه
+  label_sort_highest: بردن به آغاز
+  label_sort_higher: بردن به بالا
+  label_sort_lower: بردن به پایین
+  label_sort_lowest: بردن به پایان
+  label_roadmap: نقشه راه
+  label_roadmap_due_in: "سررسید در %{value}"
+  label_roadmap_overdue: "%{value} دیرکرد"
+  label_roadmap_no_issues: هیچ پیامدی برای این نگارش نیست
+  label_search: جستجو
+  label_result_plural: دست‌آورد
+  label_all_words: همه واژه‌ها
+  label_wiki: ویکی
+  label_wiki_edit: ویرایش ویکی
+  label_wiki_edit_plural: ویرایش ویکی
+  label_wiki_page: برگه ویکی
+  label_wiki_page_plural: برگه ویکی
+  label_index_by_title: شاخص بر اساس نام
+  label_index_by_date: شاخص بر اساس تاریخ
+  label_current_version: نگارش کنونی
+  label_preview: پیش‌نمایش
+  label_feed_plural: خوراک
+  label_changes_details: ریز همه جایگذاری‌ها
+  label_issue_tracking: پیگیری پیامد
+  label_spent_time: زمان گذاشته شده
+  label_overall_spent_time: زمان گذاشته شده روی هم
+  label_f_hour: "%{value} ساعت"
+  label_f_hour_plural: "%{value} ساعت"
+  label_time_tracking: پیگیری زمان
+  label_change_plural: جایگذاری
+  label_statistics: سرشماری
+  label_commits_per_month: تغییر در هر ماه
+  label_commits_per_author: تغییر هر نویسنده
+  label_view_diff: دیدن ØªÙØ§ÙˆØªâ€ŒÙ‡Ø§
+  label_diff_inline: همراستا
+  label_diff_side_by_side: کنار به کنار
+  label_options: گزینه‌ها
+  label_copy_workflow_from: رونویسی گردش کار از روی
+  label_permissions_report: گزارش پروانه‌ها
+  label_watched_issues: پیامدهای دیده‌بانی شده
+  label_related_issues: پیامدهای وابسته
+  label_applied_status: وضعیت به کار Ø±ÙØªÙ‡
+  label_loading: بار گذاری...
+  label_relation_new: وابستگی تازه
+  label_relation_delete: پاک کردن وابستگی
+  label_relates_to: وابسته به
+  label_duplicates: نگارش دیگری از
+  label_duplicated_by: نگارشی دیگر در
+  label_blocks: بازداشت‌ها
+  label_blocked_by: بازداشت به دست
+  label_precedes: جلوتر است از
+  label_follows: پستر است از
+  label_end_to_start: پایان به آغاز
+  label_end_to_end: پایان به پایان
+  label_start_to_start: آغاز به آغاز
+  label_start_to_end: آغاز به پایان
+  label_stay_logged_in: وارد شده بمانید
+  label_disabled: ØºÛŒØ±ÙØ¹Ø§Ù„
+  label_show_completed_versions: نمایش نگارش‌های انجام شده
+  label_me: من
+  label_board: انجمن
+  label_board_new: انجمن تازه
+  label_board_plural: انجمن
+  label_board_locked: Ù‚ÙÙ„ شده
+  label_board_sticky: چسبناک
+  label_topic_plural: Ø³Ø±ÙØµÙ„
+  label_message_plural: پیام
+  label_message_last: آخرین پیام
+  label_message_new: پیام تازه
+  label_message_posted: پیام Ø§ÙØ²ÙˆØ¯Ù‡ شد
+  label_reply_plural: پاسخ
+  label_send_information: ÙØ±Ø³ØªØ§Ø¯Ù† داده‌های حساب به کاربر
+  label_year: سال
+  label_month: ماه
+  label_week: Ù‡ÙØªÙ‡
+  label_date_from: از
+  label_date_to: تا
+  label_language_based: بر اساس زبان کاربر
+  label_sort_by: "جور کرد با %{value}"
+  label_send_test_email: ÙØ±Ø³ØªØ§Ø¯Ù† ایمیل آزمایشی
+  label_feeds_access_key: کلید دسترسی RSS
+  label_missing_feeds_access_key: کلید دسترسی RSS در دسترس نیست
+  label_feeds_access_key_created_on: "کلید دسترسی RSS %{value} پیش ساخته شده است"
+  label_module_plural: پیمانه
+  label_added_time_by: "Ø§ÙØ²ÙˆØ¯Ù‡ شده به دست %{author} در %{age} پیش"
+  label_updated_time_by: "بروز شده به دست %{author} در %{age} پیش"
+  label_updated_time: "بروز شده در %{value} پیش"
+  label_jump_to_a_project: پرش به یک پروژه...
+  label_file_plural: پرونده
+  label_changeset_plural: تغییر
+  label_default_columns: ستون‌های پیش‌گزیده
+  label_no_change_option: (بدون تغییر)
+  label_bulk_edit_selected_issues: ویرایش دسته‌ای پیامدهای گزینش شده
+  label_theme: پوسته
+  label_default: پیش‌گزیده
+  label_search_titles_only: تنها نام‌ها جستجو شود
+  label_user_mail_option_all: "برای هر رویداد در همه پروژه‌ها"
+  label_user_mail_option_selected: "برای هر رویداد تنها در پروژه‌های گزینش شده..."
+  label_user_mail_option_none: "هیچ رویدادی"
+  label_user_mail_option_only_my_events: "تنها برای چیزهایی که دیده‌بان هستم یا در آن‌ها درگیر هستم"
+  label_user_mail_option_only_assigned: "تنها برای چیزهایی که به من واگذار شده"
+  label_user_mail_option_only_owner: "تنها برای چیزهایی که من دارنده آن‌ها هستم"
+  label_user_mail_no_self_notified: "نمی‌خواهم از تغییراتی که خودم می‌دهم آگاه شوم"
+  label_registration_activation_by_email: ÙØ¹Ø§Ù„سازی حساب با ایمیل
+  label_registration_manual_activation: ÙØ¹Ø§Ù„سازی حساب دستی
+  label_registration_automatic_activation: ÙØ¹Ø§Ù„سازی حساب خودکار
+  label_display_per_page: "ردیÙ‌ها در هر برگه: %{value}"
+  label_age: سن
+  label_change_properties: ویرایش ویژگی‌ها
+  label_general: همگانی
+  label_more: بیشتر
+  label_scm: SCM
+  label_plugins: Ø§ÙØ²ÙˆÙ†Ù‡â€ŒÙ‡Ø§
+  label_ldap_authentication: شناساییLDAP
+  label_downloads_abbr: Ø¯Ø±ÛŒØ§ÙØª
+  label_optional_description: توضیح اختیاری
+  label_add_another_file: Ø§ÙØ²ÙˆØ¯Ù† پرونده دیگر
+  label_preferences: پسندها
+  label_chronological_order: به ترتیب تاریخ
+  label_reverse_chronological_order: برعکس ترتیب تاریخ
+  label_planning: برنامه ریزی
+  label_incoming_emails: ایمیل‌های آمده
+  label_generate_key: ساخت کلید
+  label_issue_watchers: دیده‌بان‌ها
+  label_example: نمونه
+  label_display: نمایش
+  label_sort: جور کرد
+  label_ascending: Ø§ÙØ²Ø§ÛŒØ´ÛŒ
+  label_descending: کاهشی
+  label_date_from_to: از %{start} تا %{end}
+  label_wiki_content_added: برگه ویکی Ø§ÙØ²ÙˆØ¯Ù‡ شد
+  label_wiki_content_updated: برگه ویکی بروز شد
+  label_group: دسته
+  label_group_plural: دسته
+  label_group_new: دسته تازه
+  label_time_entry_plural: زمان گذاشته شده
+  label_version_sharing_none: بدون اشتراک
+  label_version_sharing_descendants: با زیر پروژه‌ها
+  label_version_sharing_hierarchy: با رشته پروژه‌ها
+  label_version_sharing_tree: با درخت پروژه
+  label_version_sharing_system: با همه پروژه‌ها
+  label_update_issue_done_ratios: بروز رسانی اندازه انجام شده پیامد
+  label_copy_source: منبع
+  label_copy_target: مقصد
+  label_copy_same_as_target: مانند مقصد
+  label_display_used_statuses_only: تنها وضعیت‌هایی نشان داده شوند Ú©Ù‡ در این پیگرد به کار Ø±ÙØªÙ‡â€ŒØ§Ù†Ø¯
+  label_api_access_key: کلید دسترسی API
+  label_missing_api_access_key: کلید دسترسی API در دسترس نیست
+  label_api_access_key_created_on: "کلید دسترسی API %{value} پیش ساخته شده است"
+  label_profile: نمایه
+  label_subtask_plural: زیرکار
+  label_project_copy_notifications: در هنگام رونویسی پروژه ایمیل‌های آگاه‌سازی را Ø¨ÙØ±Ø³Øª
+  label_principal_search: "جستجو برای کاربر یا دسته:"
+  label_user_search: "جستجو برای کاربر:"
+  
+  button_login: ورود
+  button_submit: واگذاری
+  button_save: نگهداری
+  button_check_all: گزینش همه
+  button_uncheck_all: گزینش هیچ
+  button_delete: پاک
+  button_create: ساخت
+  button_create_and_continue: ساخت و ادامه
+  button_test: آزمایش
+  button_edit: ویرایش
+  button_edit_associated_wikipage: "ویرایش برگه ویکی وابسته: %{page_title}"
+  button_add: Ø§ÙØ²ÙˆØ¯Ù†
+  button_change: ویرایش
+  button_apply: انجام
+  button_clear: پاک
+  button_lock: گذاشتن Ù‚ÙÙ„
+  button_unlock: برداشتن Ù‚ÙÙ„
+  button_download: Ø¯Ø±ÛŒØ§ÙØª
+  button_list: Ùهرست
+  button_view: دیدن
+  button_move: جابجایی
+  button_move_and_follow: جابجایی و ادامه
+  button_back: برگشت
+  button_cancel: بازگشت
+  button_activate: ÙØ¹Ø§Ù„سازی
+  button_sort: جور کرد
+  button_log_time: زمان‌نویسی
+  button_rollback: برگرد به این نگارش
+  button_watch: دیده‌بانی
+  button_unwatch: نا‌دیده‌بانی
+  button_reply: پاسخ
+  button_archive: بایگانی
+  button_unarchive: برگشت از بایگانی
+  button_reset: بازنشانی
+  button_rename: نامگذاری
+  button_change_password: جایگزینی گذرواژه
+  button_copy: رونوشت
+  button_copy_and_follow: رونوشت و ادامه
+  button_annotate: یادداشت
+  button_update: بروز رسانی
+  button_configure: پیکربندی
+  button_quote: نقل قول
+  button_duplicate: نگارش دیگر
+  button_show: نمایش
+  
+  status_active: ÙØ¹Ø§Ù„
+  status_registered: نام‌نویسی شده
+  status_locked: Ù‚ÙÙ„
+  
+  version_status_open: باز
+  version_status_locked: Ù‚ÙÙ„
+  version_status_closed: بسته
+
+  field_active: ÙØ¹Ø§Ù„
+  
+  text_select_mail_notifications: ÙØ±Ù…ان‌هایی Ú©Ù‡ برای آن‌ها باید ایمیل ÙØ±Ø³ØªØ§Ø¯Ù‡ شود را برگزینید.
+  text_regexp_info: برای نمونه ^[A-Z0-9]+$
+  text_min_max_length_info: 0 یعنی بدون کران
+  text_project_destroy_confirmation: آیا براستی می‌خواهید این پروژه و همه داده‌های آن را پاک کنید؟
+  text_subprojects_destroy_warning: "زیرپروژه‌های آن: %{value} هم پاک خواهند شد."
+  text_workflow_edit: یک نقش و یک پیگرد را برای ویرایش گردش کار برگزینید
+  text_are_you_sure: آیا این کار انجام شود؟
+  text_are_you_sure_with_children: "آیا پیامد و همه زیرپیامدهای آن پاک شوند؟"
+  text_journal_changed: "«%{label}» از «%{old}» به «%{new}» جایگزین شد"
+  text_journal_set_to: "«%{label}» به «%{value}» نشانده شد"
+  text_journal_deleted: "«%{label}» پاک شد (%{old})"
+  text_journal_added: "«%{label}»، «%{value}» را Ø§ÙØ²ÙˆØ¯"
+  text_tip_task_begin_day: روز آغاز پیامد
+  text_tip_task_end_day: روز پایان پیامد
+  text_tip_task_begin_end_day: روز آغاز و پایان پیامد
+  text_project_identifier_info: 'تنها نویسه‌های Ú©ÙˆÚ†Ú© (a-z)ØŒ شماره‌ها Ùˆ خط تیره Ù¾Ø°ÛŒØ±ÙØªÙ†ÛŒ است.<br />پس از ذخیره سازی، شناسه نمی‌تواند جایگزین شود.'
+  text_caracters_maximum: "بیشترین اندازه %{count} است."
+  text_caracters_minimum: "کمترین اندازه %{count} است."
+  text_length_between: "باید میان %{min} و %{max} نویسه باشد."
+  text_tracker_no_workflow: هیچ گردش کاری برای این پیگرد مشخص نشده است
+  text_unallowed_characters: نویسه‌های ناپسند
+  text_comma_separated: چند مقدار Ù¾Ø°ÛŒØ±ÙØªÙ†ÛŒ است (با «,» از هم جدا شوند).
+  text_line_separated: چند مقدار Ù¾Ø°ÛŒØ±ÙØªÙ†ÛŒ است (هر مقدار در یک خط).
+  text_issues_ref_in_commit_messages: نشانه روی و بستن پیامدها در پیام‌های انباره
+  text_issue_added: "پیامد %{id} به دست %{author} گزارش شد."
+  text_issue_updated: "پیامد %{id} به دست %{author} بروز شد."
+  text_wiki_destroy_confirmation: آیا براستی می‌خواهید این ویکی و همه محتوای آن را پاک کنید؟
+  text_issue_category_destroy_question: "برخی پیامدها (%{count}) به این دسته واگذار شده‌اند. می‌خواهید چه کنید؟"
+  text_issue_category_destroy_assignments: پاک کردن واگذاری به دسته
+  text_issue_category_reassign_to: واگذاری دوباره پیامدها به این دسته
+  text_user_mail_option: "برای پروژه‌های گزینش نشده، تنها ایمیل‌هایی درباره چیزهایی Ú©Ù‡ دیده‌بان یا درگیر آن‌ها هستید Ø¯Ø±ÛŒØ§ÙØª خواهید کرد (مانند پیامدهایی Ú©Ù‡ نویسنده آن‌ها هستید یا به شما واگذار شده‌اند)."
+  text_no_configuration_data: "نقش‌ها، پیگردها، وضعیت‌های پیامد و گردش کار هنوز پیکربندی نشده‌اند. \nبه سختی پیشنهاد می‌شود که پیکربندی پیش‌گزیده را بار کنید. سپس می‌توانید آن را ویرایش کنید."
+  text_load_default_configuration: بارگذاری پیکربندی پیش‌گزیده
+  text_status_changed_by_changeset: "در تغییر %{value} بروز شده است."
+  text_time_logged_by_changeset: "در تغییر %{value} نوشته شده است."
+  text_issues_destroy_confirmation: 'آیا براستی می‌خواهید پیامدهای گزینش شده را پاک کنید؟'
+  text_select_project_modules: 'پیمانه‌هایی Ú©Ù‡ باید برای این پروژه ÙØ¹Ø§Ù„ شوند را برگزینید:'
+  text_default_administrator_account_changed: حساب سرپرستی پیش‌گزیده جایگزین شد
+  text_file_repository_writable: پوشه پیوست‌ها نوشتنی است
+  text_plugin_assets_writable: پوشه دارایی‌های Ø§ÙØ²ÙˆÙ†Ù‡â€ŒÙ‡Ø§ نوشتنی است
+  text_rmagick_available: RMagick در دسترس است (اختیاری)
+  text_destroy_time_entries_question: "%{hours} ساعت روی پیامدهایی که می‌خواهید پاک کنید کار گزارش شده است. می‌خواهید چه کنید؟"
+  text_destroy_time_entries: ساعت‌های گزارش شده پاک شوند
+  text_assign_time_entries_to_project: ساعت‌های گزارش شده به پروژه واگذار شوند
+  text_reassign_time_entries: 'ساعت‌های گزارش شده به این پیامد واگذار شوند:'
+  text_user_wrote: "%{value} نوشت:"
+  text_enumeration_destroy_question: "%{count} داده به این برشمردنی وابسته شده‌اند."
+  text_enumeration_category_reassign_to: 'به این برشمردنی وابسته شوند:'
+  text_email_delivery_not_configured: "Ø¯Ø±ÛŒØ§ÙØª ایمیل پیکربندی نشده است Ùˆ آگاه‌سازی‌ها غیر ÙØ¹Ø§Ù„ هستند.\nکارگزار SMTP خود را در config/email.yml پیکربندی کنید Ùˆ برنامه را بازنشانی کنید تا ÙØ¹Ø§Ù„ شوند."
+  text_repository_usernames_mapping: "کاربر Redmine که به هر نام کاربری پیام‌های انباره نگاشت می‌شود را برگزینید.\nکاربرانی که نام کاربری یا ایمیل همسان دارند، خود به خود نگاشت می‌شوند."
+  text_diff_truncated: '... این ØªÙØ§ÙˆØª بریده شده چون بیشتر از بیشترین اندازه نمایش دادنی است.'
+  text_custom_field_possible_values_info: 'یک خط برای هر مقدار'
+  text_wiki_page_destroy_question: "این برگه %{descendants} زیربرگه دارد.می‌خواهید چه کنید؟"
+  text_wiki_page_nullify_children: "زیربرگه‌ها برگه ریشه شوند"
+  text_wiki_page_destroy_children: "زیربرگه‌ها و زیربرگه‌های آن‌ها پاک شوند"
+  text_wiki_page_reassign_children: "زیربرگه‌ها به زیر این برگه پدر بروند"
+  text_own_membership_delete_confirmation: "شما دارید برخی یا همه پروانه‌های خود را برمی‌دارید و شاید پس از این دیگر نتوانید این پروژه را ویرایش کنید.\nآیا می‌خواهید این کار را بکنید؟"
+  text_zoom_in: درشتنمایی
+  text_zoom_out: ریزنمایی
+  
+  default_role_manager: سرپرست
+  default_role_developer: برنامه‌نویس
+  default_role_reporter: گزارش‌دهنده
+  default_tracker_bug: ایراد
+  default_tracker_feature: ویژگی
+  default_tracker_support: پشتیبانی
+  default_issue_status_new: تازه
+  default_issue_status_in_progress: در گردش
+  default_issue_status_resolved: درست شده
+  default_issue_status_feedback: بازخورد
+  default_issue_status_closed: بسته
+  default_issue_status_rejected: برگشت خورده
+  default_doc_category_user: نوشتار کاربر
+  default_doc_category_tech: نوشتار ÙÙ†ÛŒ
+  default_priority_low: پایین
+  default_priority_normal: میانه
+  default_priority_high: بالا
+  default_priority_urgent: زود
+  default_priority_immediate: بیدرنگ
+  default_activity_design: طراحی
+  default_activity_development: ساخت
+  
+  enumeration_issue_priorities: برتری‌های پیامد
+  enumeration_doc_categories: دسته‌های نوشتار
+  enumeration_activities: ÙØ¹Ø§Ù„یت‌ها (پیگیری زمان)
+  enumeration_system_activity: ÙØ¹Ø§Ù„یت سامانه
+
+  text_tip_issue_begin_day: issue beginning this day
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_tip_issue_begin_end_day: issue beginning and ending this day
+  text_tip_issue_end_day: issue ending this day
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/fi.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/fi.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -751,7 +751,7 @@
   label_generate_key: Luo avain
   setting_mail_handler_api_enabled: Ota käyttöön WS saapuville sähköposteille
   setting_mail_handler_api_key: API avain
-  text_email_delivery_not_configured: "Sähköpostin jakelu ei ole määritelty ja sähköpostimuistutukset eivät ole käytössä.\nKonfiguroi sähköpostipalvelinasetukset (SMTP) config/email.yml tiedostosta ja uudelleenkäynnistä sovellus jotta asetukset astuvat voimaan."
+  text_email_delivery_not_configured: "Sähköpostin jakelu ei ole määritelty ja sähköpostimuistutukset eivät ole käytössä.\nKonfiguroi sähköpostipalvelinasetukset (SMTP) config/configuration.yml tiedostosta ja uudelleenkäynnistä sovellus jotta asetukset astuvat voimaan."
   field_parent_title: Aloitussivu
   label_issue_watchers: Tapahtuman seuraajat
   button_quote: Vastaa
@@ -958,3 +958,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/fr.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/fr.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -166,10 +166,10 @@
   notice_successful_create: Création effectuée avec succès.
   notice_successful_update: Mise à jour effectuée avec succès.
   notice_successful_delete: Suppression effectuée avec succès.
-  notice_successful_connection: Connection réussie.
+  notice_successful_connection: Connexion réussie.
   notice_file_not_found: "La page à laquelle vous souhaitez accéder n'existe pas ou a été supprimée."
   notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible.
-  notice_not_authorized: "Vous n'êtes pas autorisés à accéder à cette page."
+  notice_not_authorized: "Vous n'êtes pas autorisé à accéder à cette page."
   notice_not_authorized_archived_project: Le projet auquel vous tentez d'accéder a été archivé.
   notice_email_sent: "Un email a été envoyé à %{value}"
   notice_email_error: "Erreur lors de l'envoi de l'email (%{value})"
@@ -307,6 +307,7 @@
   field_active: Actif
   field_parent_issue: Tâche parente
   field_visible: Visible
+  field_warn_on_leaving_unsaved: "M'avertir lorsque je quitte une page contenant du texte non sauvegardé"
   
   setting_app_title: Titre de l'application
   setting_app_subtitle: Sous-titre de l'application
@@ -323,11 +324,11 @@
   setting_text_formatting: Formatage du texte
   setting_wiki_compression: Compression historique wiki
   setting_feeds_limit: Limite du contenu des flux RSS
-  setting_default_projects_public: Définir les nouveaux projects comme publics par défaut
+  setting_default_projects_public: Définir les nouveaux projets comme publics par défaut
   setting_autofetch_changesets: Récupération auto. des commits
   setting_sys_api_enabled: Activer les WS pour la gestion des dépôts
-  setting_commit_ref_keywords: Mot-clés de référencement
-  setting_commit_fix_keywords: Mot-clés de résolution
+  setting_commit_ref_keywords: Mots-clés de référencement
+  setting_commit_fix_keywords: Mots-clés de résolution
   setting_autologin: Autologin
   setting_date_format: Format de date
   setting_time_format: Format d'heure
@@ -349,7 +350,7 @@
   setting_gravatar_enabled: Afficher les Gravatar des utilisateurs
   setting_diff_max_lines_displayed: Nombre maximum de lignes de diff affichées
   setting_file_max_size_displayed: Taille maximum des fichiers texte affichés en ligne
-  setting_repository_log_display_limit: "Nombre maximum de revisions affichées sur l'historique d'un fichier"
+  setting_repository_log_display_limit: "Nombre maximum de révisions affichées sur l'historique d'un fichier"
   setting_openid: "Autoriser l'authentification et l'enregistrement OpenID"
   setting_password_min_length: Longueur minimum des mots de passe
   setting_new_project_user_role_id: Rôle donné à un utilisateur non-administrateur qui crée un projet
@@ -369,7 +370,7 @@
   permission_add_subprojects: Créer des sous-projets
   permission_edit_project: Modifier le projet
   permission_select_project_modules: Choisir les modules
-  permission_manage_members: Gérer les members
+  permission_manage_members: Gérer les membres
   permission_manage_versions: Gérer les versions
   permission_manage_categories: Gérer les catégories de demandes
   permission_view_issues: Voir les demandes
@@ -597,6 +598,7 @@
   label_query: Rapport personnalisé
   label_query_plural: Rapports personnalisés
   label_query_new: Nouveau rapport
+  label_my_queries: Mes rapports personnalisés
   label_filter_add: "Ajouter le filtre "
   label_filter_plural: Filtres
   label_equals: égal
@@ -860,7 +862,7 @@
   text_issue_added: "La demande %{id} a été soumise par %{author}."
   text_issue_updated: "La demande %{id} a été mise à jour par %{author}."
   text_wiki_destroy_confirmation: Etes-vous sûr de vouloir supprimer ce wiki et tout son contenu ?
-  text_issue_category_destroy_question: "%{count} demandes sont affectées à cette catégories. Que voulez-vous faire ?"
+  text_issue_category_destroy_question: "%{count} demandes sont affectées à cette catégorie. Que voulez-vous faire ?"
   text_issue_category_destroy_assignments: N'affecter les demandes à aucune autre catégorie
   text_issue_category_reassign_to: Réaffecter les demandes à cette catégorie
   text_user_mail_option: "Pour les projets non sélectionnés, vous recevrez seulement des notifications pour ce que vous surveillez ou à quoi vous participez (exemple: demandes dont vous êtes l'auteur ou la personne assignée)."
@@ -881,7 +883,7 @@
   text_user_wrote: "%{value} a écrit :"
   text_enumeration_destroy_question: "Cette valeur est affectée à %{count} objets."
   text_enumeration_category_reassign_to: 'Réaffecter les objets à cette valeur:'
-  text_email_delivery_not_configured: "L'envoi de mail n'est pas configuré, les notifications sont désactivées.\nConfigurez votre serveur SMTP dans config/email.yml et redémarrez l'application pour les activer."
+  text_email_delivery_not_configured: "L'envoi de mail n'est pas configuré, les notifications sont désactivées.\nConfigurez votre serveur SMTP dans config/configuration.yml et redémarrez l'application pour les activer."
   text_repository_usernames_mapping: "Vous pouvez sélectionner ou modifier l'utilisateur Redmine associé à chaque nom d'utilisateur figurant dans l'historique du dépôt.\nLes utilisateurs avec le même identifiant ou la même adresse mail seront automatiquement associés."
   text_diff_truncated: '... Ce différentiel a été tronqué car il excède la taille maximale pouvant être affichée.'
   text_custom_field_possible_values_info: 'Une ligne par valeur'
@@ -890,6 +892,7 @@
   text_wiki_page_destroy_children: "Supprimer les sous-pages et toutes leurs descedantes"
   text_wiki_page_reassign_children: "Réaffecter les sous-pages à cette page"
   text_own_membership_delete_confirmation: "Vous allez supprimer tout ou partie de vos permissions sur ce projet et ne serez peut-être plus autorisé à modifier ce projet.\nEtes-vous sûr de vouloir continuer ?"
+  text_warn_on_leaving_unsaved: "Cette page contient du texte non sauvegardé qui sera perdu si vous quittez la page."
   
   default_role_manager: "Manager "
   default_role_developer: "Développeur "
@@ -924,6 +927,7 @@
   error_no_tracker_in_project: "Aucun tracker n'est associé à ce projet. Vérifier la configuration du projet."
   error_no_default_issue_status: "Aucun statut de demande n'est défini par défaut. Vérifier votre configuration (Administration -> Statuts de demandes)."
   text_journal_changed: "%{label} changé de %{old} à %{new}"
+  text_journal_changed_no_detail: "%{label} mis à jour"
   text_journal_set_to: "%{label} mis à %{value}"
   text_journal_deleted: "%{label} %{old} supprimé"
   text_journal_added: "%{label} %{value} ajouté"
--- a/config/locales/gl.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/gl.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -773,7 +773,7 @@
   text_destroy_time_entries: Borrar as horas
   text_destroy_time_entries_question: Existen %{hours} horas asignadas á petición que quere borrar. ¿Que quere facer ?
   text_diff_truncated: '... Diferencia truncada por exceder o máximo tamaño visualizable.'
-  text_email_delivery_not_configured: "O envío de correos non está configurado, e as notificacións desactiváronse. \n Configure o servidor de SMTP en config/email.yml e reinicie a aplicación para activar os cambios."
+  text_email_delivery_not_configured: "O envío de correos non está configurado, e as notificacións desactiváronse. \n Configure o servidor de SMTP en config/configuration.yml e reinicie a aplicación para activar os cambios."
   text_enumeration_category_reassign_to: 'Reasignar ó seguinte valor:'
   text_enumeration_destroy_question: "%{count} obxectos con este valor asignado."
   text_file_repository_writable: Pódese escribir no repositorio
@@ -949,3 +949,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/he.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/he.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -890,7 +890,7 @@
   text_user_wrote: "%{value} כתב:"
   text_enumeration_destroy_question: "%{count} ××•×‘×™×§×˜×™× ×ž×•×¦×‘×™× ×œ×¢×¨×š ×–×”."
   text_enumeration_category_reassign_to: 'הצב מחדש לערך הזה:'
-  text_email_delivery_not_configured: '×œ× × ×§×‘×¢×” תצורה לשליחת דו×ר, וההתר×ות כבויות.\nקבע ×ת תצורת שרת ×”Ö¾SMTP בקובץ /etc/redmine/&lt;instance&gt;/email.yml והתחל ×ת ×”×פליקציה מחדש ×¢"מ ל×פשר ×ות×.'
+  text_email_delivery_not_configured: '×œ× × ×§×‘×¢×” תצורה לשליחת דו×ר, וההתר×ות כבויות.\nקבע ×ת תצורת שרת ×”Ö¾SMTP בקובץ /etc/redmine/&lt;instance&gt;/configuration.yml והתחל ×ת ×”×פליקציה מחדש ×¢"מ ל×פשר ×ות×.'
   text_repository_usernames_mapping: "בחר ×ו עדכן ×ת משתמש Redmine הממופה לכל ×©× ×ž×©×ª×ž×© ביומן המ×גר.\n×ž×©×ª×ž×©×™× ×‘×¢×œ×™ ×©× ×ו כתובת דו×ר ×–×”×” ב־Redmine ובמ×גר ×ž×ž×•×¤×™× ×‘×ופן ×וטומטי."
   text_diff_truncated: '... ×”×©×™× ×•×™×™× ×¢×•×‘×¨×™× ×ת מספר השורות המירבי לתצוגה, ולכן ×”× ×§×•×¦×¦×•.'
   text_custom_field_possible_values_info: שורה ×חת לכל ערך
@@ -942,3 +942,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/hr.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/hr.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -855,7 +855,7 @@
   text_user_wrote: "%{value} je napisao/la:"
   text_enumeration_destroy_question: "%{count} objekata je pridruženo toj vrijednosti."
   text_enumeration_category_reassign_to: 'Premjesti ih ovoj vrijednosti:'
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
   text_diff_truncated: '... Ovaj diff je odrezan zato Å¡to prelazi maksimalnu veliÄinu koja može biti prikazana.'
   text_custom_field_possible_values_info: 'One line for each value'
@@ -944,3 +944,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/hu.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/hu.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -749,7 +749,7 @@
   label_generate_key: Kulcs generálása
   setting_mail_handler_api_enabled: Web Service engedélyezése a beérkezett levelekhez
   setting_mail_handler_api_key: API kulcs
-  text_email_delivery_not_configured: "Az E-mail küldés nincs konfigurálva, és az értesítések ki vannak kapcsolva.\nÃllítsd be az SMTP szervert a config/email.yml fájlban és indítsd újra az alkalmazást, hogy érvénybe lépjen."
+  text_email_delivery_not_configured: "Az E-mail küldés nincs konfigurálva, és az értesítések ki vannak kapcsolva.\nÃllítsd be az SMTP szervert a config/configuration.yml fájlban és indítsd újra az alkalmazást, hogy érvénybe lépjen."
   field_parent_title: Szülő oldal
   label_issue_watchers: Megfigyelők
   setting_commit_logs_encoding: Commit üzenetek kódlapja
@@ -956,3 +956,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/id.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/id.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -834,7 +834,7 @@
   text_user_wrote: "%{value} menulis:"
   text_enumeration_destroy_question: "%{count} obyek ditugaskan untuk nilai ini."
   text_enumeration_category_reassign_to: 'Tugaskan kembali untuk nilai ini:'
-  text_email_delivery_not_configured: "Pengiriman email belum dikonfigurasi, notifikasi tidak diaktifkan.\nAnda harus mengkonfigur SMTP server anda pada config/email.yml dan restart kembali aplikasi untuk mengaktifkan."
+  text_email_delivery_not_configured: "Pengiriman email belum dikonfigurasi, notifikasi tidak diaktifkan.\nAnda harus mengkonfigur SMTP server anda pada config/configuration.yml dan restart kembali aplikasi untuk mengaktifkan."
   text_repository_usernames_mapping: "Pilih atau perbarui pengguna Redmine yang terpetakan ke setiap nama pengguna yang ditemukan di log repositori.\nPengguna dengan nama pengguna dan repositori atau email yang sama  secara otomasit akan dipetakan."
   text_diff_truncated: '... Perbedaan terpotong karena melebihi batas maksimum yang bisa ditampilkan.'
   text_custom_field_possible_values_info: 'Satu baris untuk setiap nilai'
@@ -945,3 +945,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/it.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/it.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -731,7 +731,7 @@
   label_generate_key: Genera una chiave
   setting_mail_handler_api_enabled: Abilita WS per le email in arrivo
   setting_mail_handler_api_key: Chiave API
-  text_email_delivery_not_configured: "La consegna via email non è configurata e le notifiche sono disabilitate.\nConfigura il tuo server SMTP in config/email.yml e riavvia l'applicazione per abilitarle."
+  text_email_delivery_not_configured: "La consegna via email non è configurata e le notifiche sono disabilitate.\nConfigura il tuo server SMTP in config/configuration.yml e riavvia l'applicazione per abilitarle."
   field_parent_title: Pagina principale
   label_issue_watchers: Osservatori
   setting_commit_logs_encoding: Codifica dei messaggi di commit
@@ -938,3 +938,7 @@
   setting_commit_logtime_enabled: Abilita registrazione del tempo di collegamento
   notice_gantt_chart_truncated: Il grafico è stato troncato perchè eccede il numero di oggetti (%{max}) da visualizzare
   setting_gantt_items_limit: Massimo numero di oggetti da visualizzare sul diagramma di gantt
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/ja.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/ja.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -920,7 +920,7 @@
   text_user_wrote: "%{value} ã¯æ›¸ãã¾ã—ãŸ:"
   text_enumeration_destroy_question: "%{count}個ã®ã‚ªãƒ–ジェクトãŒã“ã®å€¤ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚"
   text_enumeration_category_reassign_to: '次ã®å€¤ã«å‰²ã‚Šå½“ã¦ç›´ã™:'
-  text_email_delivery_not_configured: "メールをé€ä¿¡ã™ã‚‹ãŸã‚ã«å¿…è¦ãªè¨­å®šãŒè¡Œã‚れã¦ã„ãªã„ãŸã‚ã€ãƒ¡ãƒ¼ãƒ«é€šçŸ¥ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。\nconfig/email.ymlã§SMTPサーãƒã®è¨­å®šã‚’行ã„ã€ã‚¢ãƒ—リケーションをå†èµ·å‹•ã—ã¦ãã ã•ã„。"
+  text_email_delivery_not_configured: "メールをé€ä¿¡ã™ã‚‹ãŸã‚ã«å¿…è¦ãªè¨­å®šãŒè¡Œã‚れã¦ã„ãªã„ãŸã‚ã€ãƒ¡ãƒ¼ãƒ«é€šçŸ¥ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。\nconfig/configuration.ymlã§SMTPサーãƒã®è¨­å®šã‚’行ã„ã€ã‚¢ãƒ—リケーションをå†èµ·å‹•ã—ã¦ãã ã•ã„。"
   text_repository_usernames_mapping: "リãƒã‚¸ãƒˆãƒªã®ãƒ­ã‚°ã‹ã‚‰æ¤œå‡ºã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼åã‚’ã©ã®Redmineユーザーã«é–¢é€£ã¥ã‘ã‚‹ã®ã‹é¸æŠžã—ã¦ãã ã•ã„。\nログ上ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¾ãŸã¯ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒRedmineã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ä¸€è‡´ã™ã‚‹å ´åˆã¯è‡ªå‹•çš„ã«é–¢é€£ã¥ã‘られã¾ã™ã€‚"
   text_diff_truncated: '... 差分ã®è¡Œæ•°ãŒè¡¨ç¤ºå¯èƒ½ãªä¸Šé™ã‚’è¶…ãˆã¾ã—ãŸã€‚è¶…éŽåˆ†ã¯è¡¨ç¤ºã—ã¾ã›ã‚“。'
   text_custom_field_possible_values_info: 'é¸æŠžè‚¢ã®å€¤ã¯1行ã«1個ãšã¤è¨˜è¿°ã—ã¦ãã ã•ã„。'
@@ -958,3 +958,7 @@
   enumeration_doc_categories: 文書カテゴリ
   enumeration_activities: 作業分類 (時間トラッキング)
   enumeration_system_activity: システム作業分類
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/ko.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/ko.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -844,7 +844,7 @@
   text_user_wrote: "%{value}ì˜ ë§ê¸€:"
   text_enumeration_category_reassign_to: '새로운 ê°’ì„ ì„¤ì •:'
   text_enumeration_destroy_question: "%{count} ê°œì˜ ì¼ê°ì´ ì´ ê°’ì„ ì‚¬ìš©í•˜ê³  있습니다."
-  text_email_delivery_not_configured: "ì´ë©”ì¼ ì „ë‹¬ì´ ì„¤ì •ë˜ì§€ 않았습니다. 그래서 ì•Œë¦¼ì´ ë¹„í™œì„±í™”ë˜ì—ˆìŠµë‹ˆë‹¤.\n SMTP서버를 config/email.ymlì—서 설정하고 어플리케ì´ì…˜ì„ 다시 시작하십시오. 그러면 ë™ìž‘합니다."
+  text_email_delivery_not_configured: "ì´ë©”ì¼ ì „ë‹¬ì´ ì„¤ì •ë˜ì§€ 않았습니다. 그래서 ì•Œë¦¼ì´ ë¹„í™œì„±í™”ë˜ì—ˆìŠµë‹ˆë‹¤.\n SMTP서버를 config/configuration.ymlì—서 설정하고 어플리케ì´ì…˜ì„ 다시 시작하십시오. 그러면 ë™ìž‘합니다."
   text_repository_usernames_mapping: "저장소 로그ì—서 ë°œê²¬ëœ ê° ì‚¬ìš©ìžì— ë ˆë“œë§ˆì¸ ì‚¬ìš©ìžë¥¼ ì—…ë°ì´íŠ¸í• ë•Œ ì„ íƒí•©ë‹ˆë‹¤.\n레드마ì¸ê³¼ ì €ìž¥ì†Œì˜ ì´ë¦„ì´ë‚˜ ì´ë©”ì¼ì´ ê°™ì€ ì‚¬ìš©ìžê°€ ìžë™ìœ¼ë¡œ ì—°ê²°ë©ë‹ˆë‹¤."
   text_diff_truncated: '... ì´ ì°¨ì´ì ì€ 표시할 수 있는 최대 줄수를 초과해서 ì´ ì°¨ì´ì ì€ 잘렸습니다.'
   text_custom_field_possible_values_info: 'ê° ê°’ 당 한 줄'
@@ -989,3 +989,7 @@
   setting_commit_logtime_enabled: 커밋 시ì ì— 작업 시간 ê¸°ë¡ í™œì„±í™”
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/lt.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/lt.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -886,7 +886,7 @@
   text_user_wrote: "%{value} parašė:"
   text_enumeration_destroy_question: "%{count} objektai priskirti šiai reikšmei."
   text_enumeration_category_reassign_to: 'Priskirti juos šiai reikšmei:'
-  text_email_delivery_not_configured: "El.pašto siuntimas nesukonfigūruotas, ir perspėjimai neaktyvus.\nSukonfigūruokite savo SMTP serverį byloje config/email.yml ir perleiskite programą norėdami pritaikyti pakeitimus."
+  text_email_delivery_not_configured: "El.pašto siuntimas nesukonfigūruotas, ir perspėjimai neaktyvus.\nSukonfigūruokite savo SMTP serverį byloje config/configuration.yml ir perleiskite programą norėdami pritaikyti pakeitimus."
   text_repository_usernames_mapping: "Parinkite  ar atnaujinkite Redmine vartotojo vardą kiekvienam saugyklos vardui, kuris paminėtas saugyklos log'e.\nVartotojai, turintys tą patį Redmine ir saugyklos vardą ar el.paštą automatiškai surišti."
   text_diff_truncated: "... Å is diff'as nukarpytas, nes jis virÅ¡ijo maksimalų rodomÄ… eiluÄių skaiÄių."
   text_custom_field_possible_values_info: 'Po vieną eilutę kiekvienai reikšmei'
@@ -997,3 +997,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/lv.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/lv.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -855,7 +855,7 @@
   text_user_wrote: "%{value} rakstīja:"
   text_enumeration_destroy_question: "%{count} objekti ir piešķirti šai vērtībai."
   text_enumeration_category_reassign_to: 'Piešķirt tos šai vērtībai:'
-  text_email_delivery_not_configured: "E-pastu nosÅ«tīšana nav konfigurÄ“ta, un ziņojumi ir izslÄ“gti.\nKonfigurÄ“jiet savu SMTP serveri datnÄ“ config/email.yml un pÄrstartÄ“jiet lietotni."
+  text_email_delivery_not_configured: "E-pastu nosÅ«tīšana nav konfigurÄ“ta, un ziņojumi ir izslÄ“gti.\nKonfigurÄ“jiet savu SMTP serveri datnÄ“ config/configuration.yml un pÄrstartÄ“jiet lietotni."
   text_repository_usernames_mapping: "IzvÄ“lieties vai atjaunojiet Redmine lietotÄju, saistÄ«tu ar katru lietotÄjvÄrdu, kas atrodams repozitorija žurnÄlÄ.\nLietotÄji ar to paÅ¡u Redmine un repozitorija lietotÄjvÄrdu bÅ«s saistÄ«ti automÄtiski."
   text_diff_truncated: '... Å is diff tika nošķelts, jo tas pÄrsniedz maksimÄlo izmÄ“ru, ko var parÄdÄ«t.'
   text_custom_field_possible_values_info: 'Katra vÄ“rtÄ«bas savÄ rindÄ'
@@ -932,3 +932,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/mk.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/mk.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -878,7 +878,7 @@
   text_user_wrote: "%{value} напиша:"
   text_enumeration_destroy_question: "%{count} objects are assigned to this value."
   text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  text_email_delivery_not_configured: "ДоÑтавата по е-пошта не е конфигурирана, и извеÑтувањата Ñе оневозможени.\nКонфигурирајте го Вашиот  SMTP Ñервер во config/email.yml и реÑтартирајте ја апликацијата."
+  text_email_delivery_not_configured: "ДоÑтавата по е-пошта не е конфигурирана, и извеÑтувањата Ñе оневозможени.\nКонфигурирајте го Вашиот  SMTP Ñервер во config/configuration.yml и реÑтартирајте ја апликацијата."
   text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
   text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
   text_custom_field_possible_values_info: 'One line for each value'
@@ -937,3 +937,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/mn.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/mn.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -860,7 +860,7 @@
   text_user_wrote: "%{value} бичихдÑÑ:"
   text_enumeration_destroy_question: "Ð­Ð½Ñ ÑƒÑ‚Ð³Ð°Ð´ %{count} обьект оноогдÑон байна."
   text_enumeration_category_reassign_to: 'ТÑдгÑÑрийг ÑÐ½Ñ ÑƒÑ‚Ð³Ð°Ð´ дахин оноо:'
-  text_email_delivery_not_configured: "ИмÑйлийн тохиргоог хараахан тохируулаагүй байна, тиймÑÑÑ Ð¸Ð¼Ñйл мÑдÑгдÑл Ñвуулах боломжгүй байна.\nSMTP ÑервÑÑ€ÑÑ config/email.yml файл дотор тохируулаад төÑлийн менежерÑÑ Ð´Ð°Ñ…Ð¸Ð°Ð´ ÑхлүүлÑÑÑ€Ñй."
+  text_email_delivery_not_configured: "ИмÑйлийн тохиргоог хараахан тохируулаагүй байна, тиймÑÑÑ Ð¸Ð¼Ñйл мÑдÑгдÑл Ñвуулах боломжгүй байна.\nSMTP ÑервÑÑ€ÑÑ config/configuration.yml файл дотор тохируулаад төÑлийн менежерÑÑ Ð´Ð°Ñ…Ð¸Ð°Ð´ ÑхлүүлÑÑÑ€Ñй."
   text_repository_usernames_mapping: "Репозиторийн логд байгаа бүх Ñ…ÑÑ€ÑглÑгчийн нÑрүүдÑд харгалзÑан ТөÑлийн Менежер ÑиÑтемд бүртгÑлтÑй Ñ…ÑÑ€ÑглÑгчдийг Сонгох юмуу шинÑÑ‡Ð¸Ð»Ð½Ñ Ò¯Ò¯.\nТөÑлийн менежер болон репозиторид байгаа ижилхÑн нÑÑ€ юмуу имÑйлтÑй Ñ…ÑÑ€ÑглÑгчид харилцан харгалзна."
   text_diff_truncated: '... Файлын Ñлгаврын Ñ…ÑмжÑÑ Ò¯Ð·Ò¯Ò¯Ð»ÑÑ…Ñд дÑндүү урт байгаа ÑƒÑ‡Ñ€Ð°Ð°Ñ Ñ‚Ó©Ð³ÑÐ³Ó©Ð»Ó©Ó©Ñ Ð½ÑŒ хаÑч үзүүлÑв.'
   text_custom_field_possible_values_info: 'One line for each value'
@@ -938,3 +938,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/nl.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/nl.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -743,7 +743,7 @@
   text_destroy_time_entries: Verwijder gerapporteerde uren
   text_destroy_time_entries_question: "%{hours} uren werden gerapporteerd op de issue(s) die u wilde verwijderen. Wat wil u doen?"
   text_diff_truncated: '... Deze diff werd afgekort omdat het de maximale weer te geven karakters overschreed.'
-  text_email_delivery_not_configured: "E-mailbezorging is niet geconfigureerd. Notificaties zijn uitgeschakeld.\nConfigureer uw SMTP server in config/email.yml en herstart de applicatie om dit te activeren."
+  text_email_delivery_not_configured: "E-mailbezorging is niet geconfigureerd. Notificaties zijn uitgeschakeld.\nConfigureer uw SMTP server in config/configuration.yml en herstart de applicatie om dit te activeren."
   text_enumeration_category_reassign_to: 'Wijs de volgende waarde toe:'
   text_enumeration_destroy_question: "%{count} objecten zijn toegewezen aan deze waarde."
   text_file_repository_writable: Bestandsrepository beschrijfbaar
@@ -919,3 +919,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/no.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/no.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -717,7 +717,7 @@
   label_generate_key: Generer en nøkkel
   setting_mail_handler_api_enabled: Skru på WS for innkommende e-post
   setting_mail_handler_api_key: API-nøkkel
-  text_email_delivery_not_configured: "Levering av e-post er ikke satt opp, og varsler er skrudd av.\nStill inn din SMTP-tjener i config/email.yml og start programmet på nytt for å skru det på."
+  text_email_delivery_not_configured: "Levering av e-post er ikke satt opp, og varsler er skrudd av.\nStill inn din SMTP-tjener i config/configuration.yml og start programmet på nytt for å skru det på."
   field_parent_title: Foreldreside
   label_issue_watchers: Overvåkere
   setting_commit_logs_encoding: Tegnkoding for innsendingsmeldinger
@@ -924,3 +924,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/pl.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/pl.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -772,7 +772,7 @@
   text_default_administrator_account_changed: Zmieniono domyślne hasło administratora
   text_destroy_time_entries: Usuń wpisy dziennika
   text_destroy_time_entries_question: Przepracowano %{hours} godzin przy zagadnieniu, które chcesz usunąć. Co chcesz zrobić?
-  text_email_delivery_not_configured: "Dostarczanie poczty elektronicznej nie zostało skonfigurowane, więc powiadamianie jest nieaktywne.\nSkonfiguruj serwer SMTP w config/email.yml  a następnie zrestartuj aplikację i uaktywnij to."
+  text_email_delivery_not_configured: "Dostarczanie poczty elektronicznej nie zostało skonfigurowane, więc powiadamianie jest nieaktywne.\nSkonfiguruj serwer SMTP w config/configuration.yml  a następnie zrestartuj aplikację i uaktywnij to."
   text_enumeration_category_reassign_to: 'Zmień przypisanie na tą wartość:'
   text_enumeration_destroy_question: "%{count} obiektów jest przypisana do tej wartości."
   text_file_repository_writable: Zapisywalne repozytorium plików
@@ -954,3 +954,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/pt-BR.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/pt-BR.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -729,7 +729,7 @@
   text_user_wrote: "%{value} escreveu:"
   text_enumeration_destroy_question: "%{count} objetos estão atribuídos a este valor."
   text_enumeration_category_reassign_to: 'Reatribuí-los ao valor:'
-  text_email_delivery_not_configured: "O envio de e-mail não está configurado, e as notificações estão inativas.\nConfigure seu servidor SMTP no arquivo config/email.yml e reinicie a aplicação para ativá-las."
+  text_email_delivery_not_configured: "O envio de e-mail não está configurado, e as notificações estão inativas.\nConfigure seu servidor SMTP no arquivo config/configuration.yml e reinicie a aplicação para ativá-las."
 
   default_role_manager: Gerente
   default_role_developer: Desenvolvedor
@@ -957,3 +957,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/pt.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/pt.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -716,7 +716,7 @@
   text_user_wrote: "%{value} escreveu:"
   text_enumeration_destroy_question: "%{count} objectos estão atribuídos a este valor."
   text_enumeration_category_reassign_to: 'Re-atribuí-los para este valor:'
-  text_email_delivery_not_configured: "Entrega por e-mail não está configurada, e as notificação estão desactivadas.\nConfigure o seu servidor de SMTP em config/email.yml e reinicie a aplicação para activar estas funcionalidades."
+  text_email_delivery_not_configured: "Entrega por e-mail não está configurada, e as notificação estão desactivadas.\nConfigure o seu servidor de SMTP em config/configuration.yml e reinicie a aplicação para activar estas funcionalidades."
   
   default_role_manager: Gestor
   default_role_developer: Programador
@@ -941,3 +941,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/ro.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/ro.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -775,7 +775,7 @@
   text_user_wrote: "%{value} a scris:"
   text_enumeration_destroy_question: "Această valoare are %{count} obiecte."
   text_enumeration_category_reassign_to: 'Atribuie la această valoare:'
-  text_email_delivery_not_configured: "Trimiterea de emailuri nu este configurată și ca urmare, notificările sunt dezactivate.\nConfigurați serverul SMTP în config/email.yml și reporniți aplicația pentru a le activa."
+  text_email_delivery_not_configured: "Trimiterea de emailuri nu este configurată și ca urmare, notificările sunt dezactivate.\nConfigurați serverul SMTP în config/configuration.yml și reporniți aplicația pentru a le activa."
   text_repository_usernames_mapping: "Selectați sau modificați contul Redmine echivalent contului din istoricul depozitului.\nUtilizatorii cu un cont (sau e-mail) identic în Redmine și depozit sunt echivalate automat." 
   text_diff_truncated: '... Comparația a fost trunchiată pentru ca depășește lungimea maximă de text care poate fi afișat.'
   text_custom_field_possible_values_info: 'O linie pentru fiecare valoare'
@@ -930,3 +930,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/ru.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/ru.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -914,7 +914,7 @@
   text_destroy_time_entries_question: Ð’Ñ‹ ÑобираетеÑÑŒ удалить %{hours} чаÑа(ов), прикрепленных за Ñтой задачей.
   text_destroy_time_entries: Удалить зарегиÑтрированное времÑ
   text_diff_truncated: '... Этот diff ограничен, так как превышает макÑимальный отображаемый размер.'
-  text_email_delivery_not_configured: "Параметры работы Ñ Ð¿Ð¾Ñ‡Ñ‚Ð¾Ð²Ñ‹Ð¼ Ñервером не наÑтроены и Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ email не активна.\nÐаÑтроить параметры Ð´Ð»Ñ Ð’Ð°ÑˆÐµÐ³Ð¾ SMTP-Ñервера Ð’Ñ‹ можете в файле config/email.yml. Ð”Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ перезапуÑтите приложение."
+  text_email_delivery_not_configured: "Параметры работы Ñ Ð¿Ð¾Ñ‡Ñ‚Ð¾Ð²Ñ‹Ð¼ Ñервером не наÑтроены и Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ email не активна.\nÐаÑтроить параметры Ð´Ð»Ñ Ð’Ð°ÑˆÐµÐ³Ð¾ SMTP-Ñервера Ð’Ñ‹ можете в файле config/configuration.yml. Ð”Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ перезапуÑтите приложение."
   text_enumeration_category_reassign_to: 'Ðазначить им Ñледующее значение:'
   text_enumeration_destroy_question: "%{count} объект(а,ов) ÑвÑзаны Ñ Ñтим значением."
   text_file_repository_writable: Хранилище Ñ Ð´Ð¾Ñтупом на запиÑÑŒ
@@ -1050,3 +1050,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/sk.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/sk.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -724,7 +724,7 @@
   label_generate_key: VygenerovaÅ¥ kľúÄ
   setting_mail_handler_api_enabled: Zapnúť Webovú Službu (WS) pre príchodzie emaily
   setting_mail_handler_api_key: API kľúÄ
-  text_email_delivery_not_configured: "DoruÄenie emailov nieje nastavené, notifikácie sú vypnuté.\nNastavte váš SMTP server v config/email.yml a reÅ¡tartnite aplikáciu pre aktiváciu funkcie."
+  text_email_delivery_not_configured: "DoruÄenie emailov nieje nastavené, notifikácie sú vypnuté.\nNastavte váš SMTP server v config/configuration.yml a reÅ¡tartnite aplikáciu pre aktiváciu funkcie."
   field_parent_title: Nadradená stránka
   label_issue_watchers: Pozorovatelia
   setting_commit_logs_encoding: Kódovanie prenášaných správ
@@ -932,3 +932,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/sl.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/sl.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -762,7 +762,7 @@
   text_user_wrote: "%{value} je napisal(a):"
   text_enumeration_destroy_question: "%{count} objektov je doloÄenih tej vrednosti."
   text_enumeration_category_reassign_to: 'Ponastavi jih na to vrednost:'
-  text_email_delivery_not_configured: "E-poÅ¡tna dostava ni nastavljena in oznanila so onemogoÄena.\nNastavite vaÅ¡ SMTP strežnik v config/email.yml in ponovno zaženite aplikacijo da ga omogoÄite.\n"
+  text_email_delivery_not_configured: "E-poÅ¡tna dostava ni nastavljena in oznanila so onemogoÄena.\nNastavite vaÅ¡ SMTP strežnik v config/configuration.yml in ponovno zaženite aplikacijo da ga omogoÄite.\n"
   text_repository_usernames_mapping: "Izberite ali posodobite Redmine uporabnika dodeljenega vsakemu uporabniškemu imenu najdenemu v zapisniku shrambe.\n Uporabniki z enakim Redmine ali shrambinem uporabniškem imenu ali e-poštnem naslovu so samodejno dodeljeni."
   text_diff_truncated: '... Ta sprememba je bila odsekana ker presega najveÄjo velikost ki je lahko prikazana.'
   
@@ -933,3 +933,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/sr-YU.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/sr-YU.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -875,7 +875,7 @@
   text_user_wrote: "%{value} je napisao:"
   text_enumeration_destroy_question: "%{count} objekat(a) je dodeljeno ovoj vrednosti."
   text_enumeration_category_reassign_to: 'Dodeli ih ponovo ovoj vrednosti:'
-  text_email_delivery_not_configured: "Isporuka e-poruka nije konfigurisana i obaveštenja su onemogućena.\nPodesite vaš SMTP server u config/email.yml i pokrenite ponovo aplikaciju za njihovo omogućavanje."
+  text_email_delivery_not_configured: "Isporuka e-poruka nije konfigurisana i obaveštenja su onemogućena.\nPodesite vaš SMTP server u config/configuration.yml i pokrenite ponovo aplikaciju za njihovo omogućavanje."
   text_repository_usernames_mapping: "Odaberite ili ažurirajte Redmine korisnike mapiranjem svakog korisniÄkog imena pronaÄ‘enog u evidenciji spremiÅ¡ta.\nKorisnici sa istim Redmine imenom i imenom spremiÅ¡ta ili e-adresom su automatski mapirani."
   text_diff_truncated: '... Ova razlika je iseÄena jer je dostignuta maksimalna veliÄina prikaza.'
   text_custom_field_possible_values_info: 'Jedan red za svaku vrednost'
@@ -937,3 +937,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/sr.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/sr.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -875,7 +875,7 @@
   text_user_wrote: "%{value} је напиÑао:"
   text_enumeration_destroy_question: "%{count} објекат(а) је додељено овој вредноÑти."
   text_enumeration_category_reassign_to: 'Додели их поново овој вредноÑти:'
-  text_email_delivery_not_configured: "ИÑпорука е-порука није конфигуриÑана и обавештења Ñу онемогућена.\nПодеÑите ваш SMTP Ñервер у config/email.yml и покрените поново апликацију за њихово омогућавање."
+  text_email_delivery_not_configured: "ИÑпорука е-порука није конфигуриÑана и обавештења Ñу онемогућена.\nПодеÑите ваш SMTP Ñервер у config/configuration.yml и покрените поново апликацију за њихово омогућавање."
   text_repository_usernames_mapping: "Одаберите или ажурирајте Redmine кориÑнике мапирањем Ñваког кориÑничког имена пронађеног у евиденцији Ñпремишта.\nКориÑници Ñа иÑтим Redmine именом и именом Ñпремишта или е-адреÑом Ñу аутоматÑки мапирани."
   text_diff_truncated: '... Ова разлика је иÑечена јер је доÑтигнута макÑимална величина приказа.'
   text_custom_field_possible_values_info: 'Један ред за Ñваку вредноÑÑ‚'
@@ -938,3 +938,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/sv.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/sv.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -208,6 +208,7 @@
   notice_unable_delete_version: Denna version var inte möjlig att ta bort.
   notice_unable_delete_time_entry: Tidloggning kunde inte tas bort.
   notice_issue_done_ratios_updated: % klart uppdaterade.
+  notice_gantt_chart_truncated: "Schemat förminskades eftersom det överskrider det maximala antalet aktiviteter som får visas (%{max})"
   
   error_can_t_load_default_data: "Standardkonfiguration gick inte att läsa in: %{value}"
   error_scm_not_found: "Inlägg och/eller revision finns inte i detta versionsarkiv."
@@ -217,7 +218,7 @@
   error_no_tracker_in_project: 'Ingen ärendetyp är associerad med projektet. Vänligen kontrollera projektinställningarna.'
   error_no_default_issue_status: 'Ingen status är definierad som standard för nya ärenden. Vänligen kontrollera din konfiguration (Gå till "Administration -> Ärendestatus").'
   error_can_not_delete_custom_field: Kan inte ta bort användardefinerat fält
-  error_can_not_delete_tracker: Det finns ärenden av denna typ och den är därför inte möjlig att ta bort.
+  error_can_not_delete_tracker: "Det finns ärenden av denna typ och den är därför inte möjlig att ta bort."
   error_can_not_remove_role: "Denna roll används och den är därför inte möjlig att ta bort."
   error_can_not_reopen_issue_on_closed_version: 'Ett ärende tilldelat en stängd version kan inte öppnas på nytt'
   error_can_not_archive_project: Detta projekt kan inte arkiveras
@@ -225,7 +226,7 @@
   error_workflow_copy_source: 'Vänligen välj källans ärendetyp eller roll'
   error_workflow_copy_target: 'Vänligen välj ärendetyp(er) och roll(er) för mål'
   error_unable_delete_issue_status: 'Ärendestatus kunde inte tas bort'
-  error_unable_to_connect: Kan inte ansluta (%{value})
+  error_unable_to_connect: "Kan inte ansluta (%{value})"
   
   warning_attachments_not_saved: "%{count} fil(er) kunde inte sparas."
   
@@ -240,9 +241,9 @@
   mail_subject_reminder: "%{count} ärende(n) har deadline under de kommande %{days} dagarna"
   mail_body_reminder: "%{count} ärende(n) som är tilldelat dig har deadline under de %{days} dagarna:"
   mail_subject_wiki_content_added: "'%{id}' wikisida has lagts till"
-  mail_body_wiki_content_added: The '%{id}' wikisida has lagts till av %{author}.
+  mail_body_wiki_content_added: "The '%{id}' wikisida has lagts till av %{author}."
   mail_subject_wiki_content_updated: "'%{id}' wikisida har uppdaterats"
-  mail_body_wiki_content_updated: The '%{id}' wikisida har uppdaterats av %{author}.
+  mail_body_wiki_content_updated: "The '%{id}' wikisida har uppdaterats av %{author}."
   
   gui_validation_error: 1 fel
   gui_validation_error_plural: "%{count} fel"
@@ -340,8 +341,8 @@
   field_group_by: Gruppera resultat efter
   field_sharing: Delning
   field_parent_issue: Förälderaktivitet
-  field_member_of_group: Tilldelad användares grupp
-  field_assigned_to_role: Tilldelad användares roll
+  field_member_of_group: "Tilldelad användares grupp"
+  field_assigned_to_role: "Tilldelad användares roll"
   field_text: Textfält
   field_visible: Synlig
   
@@ -380,7 +381,7 @@
   setting_activity_days_default: Dagar som visas på projektaktivitet
   setting_display_subprojects_issues: Visa ärenden från underprojekt i huvudprojekt
   setting_enabled_scm: Aktivera SCM
-  setting_mail_handler_body_delimiters: Trunkera mail efter en av följande rader
+  setting_mail_handler_body_delimiters: "Trunkera mail efter en av följande rader"
   setting_mail_handler_api_enabled: Aktivera WS för inkommande mail
   setting_mail_handler_api_key: API-nyckel
   setting_sequential_project_identifiers: Generera projektidentifierare sekventiellt
@@ -400,6 +401,9 @@
   setting_rest_api_enabled: Aktivera REST webbtjänst
   setting_cache_formatted_text: Cacha formaterad text
   setting_default_notification_option: Standard notifieringsalternativ
+  setting_commit_logtime_enabled: Aktivera tidloggning
+  setting_commit_logtime_activity_id: Aktivitet för loggad tid
+  setting_gantt_items_limit: Maximalt antal aktiviteter som visas i gantt-schemat
   
   permission_add_project: Skapa projekt
   permission_add_subprojects: Skapa underprojekt
@@ -582,7 +586,7 @@
   label_version_plural: Versioner
   label_close_versions: Stäng klara versioner
   label_confirmation: Bekräftelse
-  label_export_to: Exportera till
+  label_export_to: 'Finns även som:'
   label_read: Läs...
   label_public_projects: Publika projekt
   label_open_issues: öppen
@@ -667,7 +671,7 @@
   label_tag: Tag
   label_revision: Revision
   label_revision_plural: Revisioner
-  label_revision_id: Revision %{value}
+  label_revision_id: "Revision %{value}"
   label_associated_revisions: Associerade revisioner
   label_added: tillagd
   label_modified: modifierad
@@ -776,10 +780,10 @@
   label_search_titles_only: Sök endast i titlar
   label_user_mail_option_all: "För alla händelser i mina projekt"
   label_user_mail_option_selected: "För alla händelser i markerade projekt..."
-  label_user_mail_option_none: Inga händelser
-  label_user_mail_option_only_my_events: Endast för saker jag bevakar eller är inblandad i
-  label_user_mail_option_only_assigned: Endast för saker jag är tilldelad
-  label_user_mail_option_only_owner: Endast för saker jag äger
+  label_user_mail_option_none: "Inga händelser"
+  label_user_mail_option_only_my_events: "Endast för saker jag bevakar eller är inblandad i"
+  label_user_mail_option_only_assigned: "Endast för saker jag är tilldelad"
+  label_user_mail_option_only_owner: "Endast för saker jag äger"
   label_user_mail_no_self_notified: "Jag vill inte bli underrättad om ändringar som jag har gjort"
   label_registration_activation_by_email: kontoaktivering med mail
   label_registration_manual_activation: manuell kontoaktivering
@@ -826,7 +830,7 @@
   label_display_used_statuses_only: Visa endast status som används av denna ärendetyp
   label_api_access_key: API-nyckel
   label_missing_api_access_key: Saknar en API-nyckel
-  label_api_access_key_created_on: API-nyckel skapad för %{value} sedan
+  label_api_access_key_created_on: "API-nyckel skapad för %{value} sedan"
   label_profile: Profil
   label_subtask_plural: Underaktiviteter
   label_project_copy_notifications: Skicka mailnotifieringar när projektet kopieras
@@ -922,6 +926,7 @@
   text_no_configuration_data: "Roller, ärendetyper, ärendestatus och arbetsflöden har inte konfigurerats ännu.\nDet rekommenderas att läsa in standardkonfigurationen. Du kommer att kunna göra ändringar efter att den blivit inläst."
   text_load_default_configuration: Läs in standardkonfiguration
   text_status_changed_by_changeset: "Tilldelad i changeset %{value}."
+  text_time_logged_by_changeset: "Tilldelad i changeset %{value}."
   text_issues_destroy_confirmation: 'Är du säker på att du vill radera markerade ärende(n) ?'
   text_select_project_modules: 'Välj vilka moduler som ska vara aktiva för projektet:'
   text_default_administrator_account_changed: Standardadministratörens konto ändrat
@@ -935,14 +940,14 @@
   text_user_wrote: "%{value} skrev:"
   text_enumeration_destroy_question: "%{count} objekt är tilldelade till detta värde."
   text_enumeration_category_reassign_to: 'Återtilldela till detta värde:'
-  text_email_delivery_not_configured: "Mailfunktionen har inte konfigurerats, och notifieringar via mail kan därför inte skickas.\nKonfigurera din SMTP-server i config/email.yml och starta om applikationen för att aktivera dem."
+  text_email_delivery_not_configured: "Mailfunktionen har inte konfigurerats, och notifieringar via mail kan därför inte skickas.\nKonfigurera din SMTP-server i config/configuration.yml och starta om applikationen för att aktivera dem."
   text_repository_usernames_mapping: "Välj eller uppdatera den Redmine-användare som är mappad till varje användarnamn i versionarkivloggen.\nAnvändare med samma användarnamn eller mailadress i både Redmine och versionsarkivet mappas automatiskt."
   text_diff_truncated: '... Denna diff har förminskats eftersom den överskrider den maximala storlek som kan visas.'
   text_custom_field_possible_values_info: 'Ett värde per rad'
-  text_wiki_page_destroy_question: Denna sida har %{descendants} underliggande sidor. Vad vill du göra?
-  text_wiki_page_nullify_children: Behåll undersidor som rotsidor
-  text_wiki_page_destroy_children: Ta bort alla underliggande sidor
-  text_wiki_page_reassign_children: Flytta undersidor till denna föräldersida
+  text_wiki_page_destroy_question: "Denna sida har %{descendants} underliggande sidor. Vad vill du göra?"
+  text_wiki_page_nullify_children: "Behåll undersidor som rotsidor"
+  text_wiki_page_destroy_children: "Ta bort alla underliggande sidor"
+  text_wiki_page_reassign_children: "Flytta undersidor till denna föräldersida"
   text_own_membership_delete_confirmation: "Några av, eller alla, dina behörigheter kommer att tas bort och du kanske inte längre kommer kunna göra ändringar i det här projektet.\nVill du verkligen fortsätta?"
   text_zoom_out: Zooma ut
   text_zoom_in: Zooma in
@@ -973,8 +978,7 @@
   enumeration_doc_categories: Dokumentkategorier
   enumeration_activities: Aktiviteter (tidsuppföljning)
   enumeration_system_activity: Systemaktivitet
-  setting_commit_logtime_activity_id: Activity for logged time
-  text_time_logged_by_changeset: Applied in changeset %{value}.
-  setting_commit_logtime_enabled: Enable time logging
-  notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
-  setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/th.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/th.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -727,7 +727,7 @@
   label_generate_key: Generate a key
   setting_mail_handler_api_enabled: Enable WS for incoming emails
   setting_mail_handler_api_key: API key
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   field_parent_title: Parent page
   label_issue_watchers: Watchers
   setting_commit_logs_encoding: Commit messages encoding
@@ -934,3 +934,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/tr.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/tr.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -742,7 +742,7 @@
   label_generate_key: Generate a key
   setting_sequential_project_identifiers: Generate sequential project identifiers
   field_parent_title: Parent page
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   text_enumeration_category_reassign_to: 'Reassign them to this value:'
   label_issue_watchers: Watchers
   mail_body_reminder: "%{count} issue(s) that are assigned to you are due in the next %{days} days:"
@@ -956,3 +956,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/uk.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/uk.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -726,7 +726,7 @@
   label_generate_key: Generate a key
   setting_mail_handler_api_enabled: Enable WS for incoming emails
   setting_mail_handler_api_key: API key
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   field_parent_title: Parent page
   label_issue_watchers: Watchers
   setting_commit_logs_encoding: Commit messages encoding
@@ -933,3 +933,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/vi.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/vi.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -761,7 +761,7 @@
   text_user_wrote: "%{value} wrote:"
   text_enumeration_destroy_question: "%{count} objects are assigned to this value."
   text_enumeration_category_reassign_to: 'Reassign them to this value:'
-  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
+  text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/configuration.yml and restart the application to enable them."
   
   default_role_manager: Äiá»u hành
   default_role_developer: Phát triển
@@ -988,3 +988,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/zh-TW.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/zh-TW.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -980,7 +980,7 @@
   text_user_wrote: "%{value} å…ˆå‰æåˆ°:"
   text_enumeration_destroy_question: "ç›®å‰æœ‰ %{count} 個物件使用此列舉值。"
   text_enumeration_category_reassign_to: '釿–°è¨­å®šå…¶åˆ—舉值為:'
-  text_email_delivery_not_configured: "您尚未設定電å­éƒµä»¶å‚³é€æ–¹å¼ï¼Œå› æ­¤æé†’é¸é …已被åœç”¨ã€‚\n請在 config/email.yml 中設定 SMTP ä¹‹å¾Œï¼Œé‡æ–°å•Ÿå‹• Redmine,以啟用電å­éƒµä»¶æé†’é¸é …。"
+  text_email_delivery_not_configured: "您尚未設定電å­éƒµä»¶å‚³é€æ–¹å¼ï¼Œå› æ­¤æé†’é¸é …已被åœç”¨ã€‚\n請在 config/configuration.yml 中設定 SMTP ä¹‹å¾Œï¼Œé‡æ–°å•Ÿå‹• Redmine,以啟用電å­éƒµä»¶æé†’é¸é …。"
   text_repository_usernames_mapping: "鏿“‡æˆ–æ›´æ–° Redmine ä½¿ç”¨è€…èˆ‡ç‰ˆæœ¬åº«ä½¿ç”¨è€…ä¹‹å°æ‡‰é—œä¿‚。\n版本庫中之使用者帳號或電å­éƒµä»¶ä¿¡ç®±ï¼Œèˆ‡ Redmine 設定相åŒè€…ï¼Œå°‡è‡ªå‹•ç”¢ç”Ÿå°æ‡‰é—œä¿‚。"
   text_diff_truncated: '... 這份差異已被截短以符åˆé¡¯ç¤ºè¡Œæ•¸ä¹‹æœ€å¤§å€¼'
   text_custom_field_possible_values_info: '一列輸入一個值'
@@ -1018,3 +1018,7 @@
   enumeration_doc_categories: 文件分類
   enumeration_activities: 活動 (時間追蹤)
   enumeration_system_activity: 系統活動
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/config/locales/zh.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/config/locales/zh.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -870,7 +870,7 @@
   text_user_wrote: "%{value} 写到:"
   text_enumeration_category_reassign_to: '将它们关è”到新的枚举值:'
   text_enumeration_destroy_question: "%{count} 个对象被关è”到了这个枚举值。"
-  text_email_delivery_not_configured: "邮件傿•°å°šæœªé…置,因此邮件通知功能已被ç¦ç”¨ã€‚\n请在config/email.yml中é…置您的SMTPæœåŠ¡å™¨ä¿¡æ¯å¹¶é‡æ–°å¯åŠ¨ä»¥ä½¿å…¶ç”Ÿæ•ˆã€‚"
+  text_email_delivery_not_configured: "邮件傿•°å°šæœªé…置,因此邮件通知功能已被ç¦ç”¨ã€‚\n请在config/configuration.yml中é…置您的SMTPæœåŠ¡å™¨ä¿¡æ¯å¹¶é‡æ–°å¯åŠ¨ä»¥ä½¿å…¶ç”Ÿæ•ˆã€‚"
   text_repository_usernames_mapping: "选择或更新与版本库中的用户å对应的Redmine用户。\n版本库中与Redmine中的åŒå用户将被自动对应。"
   text_diff_truncated: '... å·®åˆ«å†…å®¹è¶…è¿‡äº†å¯æ˜¾ç¤ºçš„æœ€å¤§è¡Œæ•°å¹¶å·²è¢«æˆªæ–­'
   text_custom_field_possible_values_info: 'æ¯é¡¹æ•°å€¼ä¸€è¡Œ'
@@ -951,3 +951,7 @@
   setting_commit_logtime_enabled: Enable time logging
   notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
   setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
+  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
+  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
+  label_my_queries: My custom queries
+  text_journal_changed_no_detail: "%{label} updated"
--- a/db/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/db/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 27
-/svn/!svn/ver/4610/trunk/db
+/svn/!svn/ver/4981/trunk/db
 END
--- a/db/.svn/dir-prop-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/db/.svn/dir-prop-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,7 @@
 K 10
 svn:ignore
-V 26
+V 20
 schema.rb
-demo.db
-test.db
+*.sqlite3
 
 END
--- a/db/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/db/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/db
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-01T23:08:49.766359Z
-4610
-jbbarth
+2011-03-01T10:14:47.182368Z
+4981
+tmaruyama
 has-props
 
 
--- a/db/migrate/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/db/migrate/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 35
-/svn/!svn/ver/4610/trunk/db/migrate
+/svn/!svn/ver/4981/trunk/db/migrate
 END
 20101107130441_add_custom_fields_visible.rb
 K 25
@@ -105,18 +105,18 @@
 V 64
 /svn/!svn/ver/67/trunk/db/migrate/008_create_user_preferences.rb
 END
+025_add_search_permission.rb
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/674/trunk/db/migrate/025_add_search_permission.rb
+END
 023_add_tracker_is_in_roadmap.rb
 K 25
 svn:wc:ra_dav:version-url
 V 67
 /svn/!svn/ver/228/trunk/db/migrate/023_add_tracker_is_in_roadmap.rb
 END
-025_add_search_permission.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/674/trunk/db/migrate/025_add_search_permission.rb
-END
 20091220183727_add_index_to_settings_name.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -153,11 +153,11 @@
 V 71
 /svn/!svn/ver/1814/trunk/db/migrate/096_add_commit_access_permission.rb
 END
-024_add_roadmap_permission.rb
+20090401221305_update_enumerations_to_sti.rb
 K 25
 svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/674/trunk/db/migrate/024_add_roadmap_permission.rb
+V 80
+/svn/!svn/ver/2777/trunk/db/migrate/20090401221305_update_enumerations_to_sti.rb
 END
 091_change_changesets_revision_to_string.rb
 K 25
@@ -165,11 +165,11 @@
 V 79
 /svn/!svn/ver/1236/trunk/db/migrate/091_change_changesets_revision_to_string.rb
 END
-20090401221305_update_enumerations_to_sti.rb
+024_add_roadmap_permission.rb
 K 25
 svn:wc:ra_dav:version-url
-V 80
-/svn/!svn/ver/2777/trunk/db/migrate/20090401221305_update_enumerations_to_sti.rb
+V 64
+/svn/!svn/ver/674/trunk/db/migrate/024_add_roadmap_permission.rb
 END
 20091017214720_add_missing_indexes_to_wiki_redirects.rb
 K 25
@@ -177,17 +177,23 @@
 V 91
 /svn/!svn/ver/2928/trunk/db/migrate/20091017214720_add_missing_indexes_to_wiki_redirects.rb
 END
+072_add_enumerations_position.rb
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/1623/trunk/db/migrate/072_add_enumerations_position.rb
+END
 034_create_changesets.rb
 K 25
 svn:wc:ra_dav:version-url
 V 59
 /svn/!svn/ver/479/trunk/db/migrate/034_create_changesets.rb
 END
-072_add_enumerations_position.rb
+20090614091200_fix_messages_sticky_null.rb
 K 25
 svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/1623/trunk/db/migrate/072_add_enumerations_position.rb
+V 78
+/svn/!svn/ver/2787/trunk/db/migrate/20090614091200_fix_messages_sticky_null.rb
 END
 108_add_identity_url_to_users.rb
 K 25
@@ -195,12 +201,6 @@
 V 68
 /svn/!svn/ver/2440/trunk/db/migrate/108_add_identity_url_to_users.rb
 END
-20090614091200_fix_messages_sticky_null.rb
-K 25
-svn:wc:ra_dav:version-url
-V 78
-/svn/!svn/ver/2787/trunk/db/migrate/20090614091200_fix_messages_sticky_null.rb
-END
 20091220184736_add_indexes_to_issue_status.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -249,6 +249,12 @@
 V 66
 /svn/!svn/ver/674/trunk/db/migrate/012_add_comments_permissions.rb
 END
+20110223180953_salt_user_passwords.rb
+K 25
+svn:wc:ra_dav:version-url
+V 73
+/svn/!svn/ver/4936/trunk/db/migrate/20110223180953_salt_user_passwords.rb
+END
 038_add_custom_field_is_filter.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -273,6 +279,12 @@
 V 77
 /svn/!svn/ver/3240/trunk/db/migrate/20091225164732_remove_enumerations_opt.rb
 END
+20110220160626_add_workflows_assignee_and_author.rb
+K 25
+svn:wc:ra_dav:version-url
+V 87
+/svn/!svn/ver/4895/trunk/db/migrate/20110220160626_add_workflows_assignee_and_author.rb
+END
 030_add_projects_feeds_permissions.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -285,6 +297,12 @@
 V 55
 /svn/!svn/ver/864/trunk/db/migrate/045_create_boards.rb
 END
+20110228000000_add_repositories_log_encoding.rb
+K 25
+svn:wc:ra_dav:version-url
+V 83
+/svn/!svn/ver/4980/trunk/db/migrate/20110228000000_add_repositories_log_encoding.rb
+END
 076_allow_null_position.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -363,18 +381,18 @@
 V 64
 /svn/!svn/ver/674/trunk/db/migrate/047_add_boards_permissions.rb
 END
+037_add_project_identifier.rb
+K 25
+svn:wc:ra_dav:version-url
+V 64
+/svn/!svn/ver/397/trunk/db/migrate/037_add_project_identifier.rb
+END
 073_add_enumerations_is_default.rb
 K 25
 svn:wc:ra_dav:version-url
 V 69
 /svn/!svn/ver/803/trunk/db/migrate/073_add_enumerations_is_default.rb
 END
-037_add_project_identifier.rb
-K 25
-svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/397/trunk/db/migrate/037_add_project_identifier.rb
-END
 20100313171051_add_index_on_issues_nested_set.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -405,18 +423,18 @@
 V 77
 /svn/!svn/ver/2905/trunk/db/migrate/20091010093521_fix_users_custom_values.rb
 END
+001_setup.rb
+K 25
+svn:wc:ra_dav:version-url
+V 48
+/svn/!svn/ver/1764/trunk/db/migrate/001_setup.rb
+END
 016_add_repositories_permissions.rb
 K 25
 svn:wc:ra_dav:version-url
 V 70
 /svn/!svn/ver/674/trunk/db/migrate/016_add_repositories_permissions.rb
 END
-001_setup.rb
-K 25
-svn:wc:ra_dav:version-url
-V 48
-/svn/!svn/ver/1764/trunk/db/migrate/001_setup.rb
-END
 20100129193813_update_mail_notification_values.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -429,17 +447,29 @@
 V 85
 /svn/!svn/ver/2928/trunk/db/migrate/20091017214611_add_missing_indexes_to_journals.rb
 END
+041_rename_comment_to_comments.rb
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/482/trunk/db/migrate/041_rename_comment_to_comments.rb
+END
 20091017214107_add_missing_indexes_to_custom_fields.rb
 K 25
 svn:wc:ra_dav:version-url
 V 90
 /svn/!svn/ver/2928/trunk/db/migrate/20091017214107_add_missing_indexes_to_custom_fields.rb
 END
-041_rename_comment_to_comments.rb
+089_add_attachments_description.rb
 K 25
 svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/482/trunk/db/migrate/041_rename_comment_to_comments.rb
+V 70
+/svn/!svn/ver/1180/trunk/db/migrate/089_add_attachments_description.rb
+END
+067_create_wiki_redirects.rb
+K 25
+svn:wc:ra_dav:version-url
+V 63
+/svn/!svn/ver/720/trunk/db/migrate/067_create_wiki_redirects.rb
 END
 20091017214750_add_missing_indexes_to_custom_fields_trackers.rb
 K 25
@@ -447,41 +477,41 @@
 V 99
 /svn/!svn/ver/2928/trunk/db/migrate/20091017214750_add_missing_indexes_to_custom_fields_trackers.rb
 END
-067_create_wiki_redirects.rb
-K 25
-svn:wc:ra_dav:version-url
-V 63
-/svn/!svn/ver/720/trunk/db/migrate/067_create_wiki_redirects.rb
-END
-089_add_attachments_description.rb
-K 25
-svn:wc:ra_dav:version-url
-V 70
-/svn/!svn/ver/1180/trunk/db/migrate/089_add_attachments_description.rb
-END
 103_set_custom_fields_editable.rb
 K 25
 svn:wc:ra_dav:version-url
 V 69
 /svn/!svn/ver/2279/trunk/db/migrate/103_set_custom_fields_editable.rb
 END
+20110226120132_change_auth_sources_account_password_limit.rb
+K 25
+svn:wc:ra_dav:version-url
+V 96
+/svn/!svn/ver/4950/trunk/db/migrate/20110226120132_change_auth_sources_account_password_limit.rb
+END
 094_change_projects_homepage_limit.rb
 K 25
 svn:wc:ra_dav:version-url
 V 73
 /svn/!svn/ver/1457/trunk/db/migrate/094_change_projects_homepage_limit.rb
 END
+093_add_wiki_pages_protected.rb
+K 25
+svn:wc:ra_dav:version-url
+V 67
+/svn/!svn/ver/1415/trunk/db/migrate/093_add_wiki_pages_protected.rb
+END
 039_create_watchers.rb
 K 25
 svn:wc:ra_dav:version-url
 V 57
 /svn/!svn/ver/454/trunk/db/migrate/039_create_watchers.rb
 END
-093_add_wiki_pages_protected.rb
+083_add_messages_sticky.rb
 K 25
 svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/1415/trunk/db/migrate/093_add_wiki_pages_protected.rb
+V 61
+/svn/!svn/ver/926/trunk/db/migrate/083_add_messages_sticky.rb
 END
 060_change_changesets_committer_limit.rb
 K 25
@@ -489,12 +519,6 @@
 V 76
 /svn/!svn/ver/1222/trunk/db/migrate/060_change_changesets_committer_limit.rb
 END
-083_add_messages_sticky.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/926/trunk/db/migrate/083_add_messages_sticky.rb
-END
 069_add_issues_estimated_hours.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -561,18 +585,18 @@
 V 87
 /svn/!svn/ver/1938/trunk/db/migrate/099_add_delete_wiki_pages_attachments_permission.rb
 END
+098_set_topic_authors_as_watchers.rb
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/2415/trunk/db/migrate/098_set_topic_authors_as_watchers.rb
+END
 059_add_roles_assignable.rb
 K 25
 svn:wc:ra_dav:version-url
 V 62
 /svn/!svn/ver/649/trunk/db/migrate/059_add_roles_assignable.rb
 END
-098_set_topic_authors_as_watchers.rb
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/2415/trunk/db/migrate/098_set_topic_authors_as_watchers.rb
-END
 013_create_queries.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -585,18 +609,18 @@
 V 74
 /svn/!svn/ver/674/trunk/db/migrate/049_add_wiki_destroy_page_permission.rb
 END
+040_create_changesets_issues.rb
+K 25
+svn:wc:ra_dav:version-url
+V 66
+/svn/!svn/ver/473/trunk/db/migrate/040_create_changesets_issues.rb
+END
 048_allow_null_version_effective_date.rb
 K 25
 svn:wc:ra_dav:version-url
 V 76
 /svn/!svn/ver/1140/trunk/db/migrate/048_allow_null_version_effective_date.rb
 END
-040_create_changesets_issues.rb
-K 25
-svn:wc:ra_dav:version-url
-V 66
-/svn/!svn/ver/473/trunk/db/migrate/040_create_changesets_issues.rb
-END
 085_add_role_tracker_old_status_index_to_workflows.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -621,29 +645,35 @@
 V 81
 /svn/!svn/ver/1236/trunk/db/migrate/092_change_changes_from_revision_to_string.rb
 END
+20110223180944_add_users_salt.rb
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/4936/trunk/db/migrate/20110223180944_add_users_salt.rb
+END
 20090214190337_add_watchers_user_id_type_index.rb
 K 25
 svn:wc:ra_dav:version-url
 V 85
 /svn/!svn/ver/2466/trunk/db/migrate/20090214190337_add_watchers_user_id_type_index.rb
 END
+20091017212457_add_missing_indexes_to_custom_fields_projects.rb
+K 25
+svn:wc:ra_dav:version-url
+V 99
+/svn/!svn/ver/2928/trunk/db/migrate/20091017212457_add_missing_indexes_to_custom_fields_projects.rb
+END
 054_add_changesets_scmid.rb
 K 25
 svn:wc:ra_dav:version-url
 V 62
 /svn/!svn/ver/559/trunk/db/migrate/054_add_changesets_scmid.rb
 END
-20091017212457_add_missing_indexes_to_custom_fields_projects.rb
+097_add_view_wiki_edits_permission.rb
 K 25
 svn:wc:ra_dav:version-url
-V 99
-/svn/!svn/ver/2928/trunk/db/migrate/20091017212457_add_missing_indexes_to_custom_fields_projects.rb
-END
-20091017213716_add_missing_indexes_to_member_roles.rb
-K 25
-svn:wc:ra_dav:version-url
-V 89
-/svn/!svn/ver/2928/trunk/db/migrate/20091017213716_add_missing_indexes_to_member_roles.rb
+V 73
+/svn/!svn/ver/1896/trunk/db/migrate/097_add_view_wiki_edits_permission.rb
 END
 065_add_settings_updated_on.rb
 K 25
@@ -651,11 +681,11 @@
 V 65
 /svn/!svn/ver/685/trunk/db/migrate/065_add_settings_updated_on.rb
 END
-097_add_view_wiki_edits_permission.rb
+20091017213716_add_missing_indexes_to_member_roles.rb
 K 25
 svn:wc:ra_dav:version-url
-V 73
-/svn/!svn/ver/1896/trunk/db/migrate/097_add_view_wiki_edits_permission.rb
+V 89
+/svn/!svn/ver/2928/trunk/db/migrate/20091017213716_add_missing_indexes_to_member_roles.rb
 END
 20091108092559_add_versions_status.rb
 K 25
@@ -669,6 +699,12 @@
 V 85
 /svn/!svn/ver/2928/trunk/db/migrate/20091017213228_add_missing_indexes_to_watchers.rb
 END
+20110228000100_copy_repositories_log_encoding.rb
+K 25
+svn:wc:ra_dav:version-url
+V 84
+/svn/!svn/ver/4981/trunk/db/migrate/20110228000100_copy_repositories_log_encoding.rb
+END
 063_add_roles_permissions.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -681,17 +717,23 @@
 V 73
 /svn/!svn/ver/2869/trunk/db/migrate/20090704172350_populate_users_type.rb
 END
+20090503121505_populate_member_roles.rb
+K 25
+svn:wc:ra_dav:version-url
+V 75
+/svn/!svn/ver/2729/trunk/db/migrate/20090503121505_populate_member_roles.rb
+END
 052_add_changes_revision.rb
 K 25
 svn:wc:ra_dav:version-url
 V 62
 /svn/!svn/ver/559/trunk/db/migrate/052_add_changes_revision.rb
 END
-20090503121505_populate_member_roles.rb
+050_add_wiki_attachments_permissions.rb
 K 25
 svn:wc:ra_dav:version-url
-V 75
-/svn/!svn/ver/2729/trunk/db/migrate/20090503121505_populate_member_roles.rb
+V 74
+/svn/!svn/ver/674/trunk/db/migrate/050_add_wiki_attachments_permissions.rb
 END
 062_insert_builtin_roles.rb
 K 25
@@ -699,11 +741,11 @@
 V 62
 /svn/!svn/ver/674/trunk/db/migrate/062_insert_builtin_roles.rb
 END
-050_add_wiki_attachments_permissions.rb
+104_add_projects_lft_and_rgt.rb
 K 25
 svn:wc:ra_dav:version-url
-V 74
-/svn/!svn/ver/674/trunk/db/migrate/050_add_wiki_attachments_permissions.rb
+V 67
+/svn/!svn/ver/2304/trunk/db/migrate/104_add_projects_lft_and_rgt.rb
 END
 074_add_auth_sources_tls.rb
 K 25
@@ -711,12 +753,6 @@
 V 62
 /svn/!svn/ver/845/trunk/db/migrate/074_add_auth_sources_tls.rb
 END
-104_add_projects_lft_and_rgt.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/2304/trunk/db/migrate/104_add_projects_lft_and_rgt.rb
-END
 20091114105931_add_view_issues_permission.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -729,18 +765,18 @@
 V 82
 /svn/!svn/ver/2928/trunk/db/migrate/20091017214336_add_missing_indexes_to_users.rb
 END
+082_add_messages_locked.rb
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/!svn/ver/926/trunk/db/migrate/082_add_messages_locked.rb
+END
 20091017213113_add_missing_indexes_to_enumerations.rb
 K 25
 svn:wc:ra_dav:version-url
 V 89
 /svn/!svn/ver/2928/trunk/db/migrate/20091017213113_add_missing_indexes_to_enumerations.rb
 END
-082_add_messages_locked.rb
-K 25
-svn:wc:ra_dav:version-url
-V 61
-/svn/!svn/ver/926/trunk/db/migrate/082_add_messages_locked.rb
-END
 20091017213444_add_missing_indexes_to_tokens.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -879,12 +915,24 @@
 V 77
 /svn/!svn/ver/674/trunk/db/migrate/056_add_repositories_changes_permission.rb
 END
+20110224000000_add_repositories_path_encoding.rb
+K 25
+svn:wc:ra_dav:version-url
+V 84
+/svn/!svn/ver/4940/trunk/db/migrate/20110224000000_add_repositories_path_encoding.rb
+END
 032_create_time_entries.rb
 K 25
 svn:wc:ra_dav:version-url
 V 61
 /svn/!svn/ver/479/trunk/db/migrate/032_create_time_entries.rb
 END
+20110226120112_change_repositories_password_limit.rb
+K 25
+svn:wc:ra_dav:version-url
+V 88
+/svn/!svn/ver/4950/trunk/db/migrate/20110226120112_change_repositories_password_limit.rb
+END
 068_create_enabled_modules.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -1059,6 +1107,12 @@
 V 57
 /svn/!svn/ver/167/trunk/db/migrate/017_create_settings.rb
 END
+20110227125750_change_journal_details_values_to_text.rb
+K 25
+svn:wc:ra_dav:version-url
+V 91
+/svn/!svn/ver/4954/trunk/db/migrate/20110227125750_change_journal_details_values_to_text.rb
+END
 095_add_wiki_pages_parent_id.rb
 K 25
 svn:wc:ra_dav:version-url
--- a/db/migrate/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/db/migrate/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/db/migrate
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-01T23:08:49.766359Z
-4610
-jbbarth
+2011-03-01T10:14:47.182368Z
+4981
+tmaruyama
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-19T13:04:50.884918Z
+2011-03-03T11:05:12.000000Z
 21dc29619a0cfd0f3aa12d77cc5cb132
 2010-11-07T14:17:35.749175Z
 4383
@@ -66,7 +66,7 @@
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 e1234fbaef167ddc0013ffe1d3bc67b9
 2007-11-04T11:40:17.595469Z
 881
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:44.891758Z
+2011-03-03T11:05:12.000000Z
 0b2c38434ec4b25c41f50963a46a3bc6
 2007-06-12T20:12:05.590809Z
 559
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:44.927757Z
+2011-03-03T11:05:12.000000Z
 dba48c03009eb5bcbd2f686a37c42147
 2009-10-17T22:23:29.892475Z
 2928
@@ -168,7 +168,7 @@
 
 
 
-2010-09-23T14:37:44.911755Z
+2011-03-03T11:05:12.000000Z
 b17611805f3b447ec0f0b703ea8b6d10
 2008-11-10T18:59:06.897210Z
 2006
@@ -202,7 +202,7 @@
 
 
 
-2010-09-23T14:37:44.883725Z
+2011-03-03T11:05:12.000000Z
 23ebbc94eb59590d0f0b200b4b38289b
 2007-08-29T16:52:35.680643Z
 674
@@ -236,7 +236,7 @@
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 ffabca1301a0ade41918ec9d6618fda0
 2008-07-04T17:58:14.743502Z
 1623
@@ -270,7 +270,7 @@
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 e6ff0ff9c004d9688e79b550991ec109
 2007-08-29T16:52:35.680643Z
 674
@@ -304,7 +304,7 @@
 
 
 
-2010-09-23T14:37:44.883725Z
+2011-03-03T11:05:12.000000Z
 39c994e2469a6dfb97fa50cf595439e8
 2007-04-25T15:06:20.062636Z
 479
@@ -338,7 +338,7 @@
 
 
 
-2010-09-23T14:37:44.883725Z
+2011-03-03T11:05:12.000000Z
 828df977f9e16943bc74595c65774c62
 2007-03-10T15:09:49.115269Z
 323
@@ -372,7 +372,7 @@
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 eea8e3f0a1fe28e8c686af190259a3d6
 2009-09-12T08:36:46.650954Z
 2869
@@ -406,7 +406,7 @@
 
 
 
-2010-11-19T13:04:50.884918Z
+2011-03-03T11:05:12.000000Z
 be338f41292d95bb7ba3caa125999de0
 2010-11-14T12:33:14.198318Z
 4402
@@ -440,7 +440,7 @@
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 06c8b504bcdd08c2f5dcf14a0b927420
 2007-11-20T15:40:16.305800Z
 919
@@ -474,7 +474,7 @@
 
 
 
-2010-09-23T14:37:44.927757Z
+2011-03-03T11:05:12.000000Z
 283fb200008f4dae98e0b3d46f0b97aa
 2009-10-17T22:23:29.892475Z
 2928
@@ -508,7 +508,7 @@
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 da329a16de705c673418c18119f788d8
 2007-08-29T16:52:35.680643Z
 674
@@ -542,7 +542,7 @@
 
 
 
-2011-01-13T14:09:38.000000Z
+2011-03-03T11:05:12.000000Z
 627e34913535f16f767133cbdc5b57f0
 2010-11-20T09:55:06.580420Z
 4413
@@ -576,7 +576,7 @@
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 5bb1427a275abe1f2ec4b6b03a087cd8
 2006-12-03T19:55:45.161980Z
 62
@@ -604,13 +604,47 @@
 
 281
 
+025_add_search_permission.rb
+file
+
+
+
+
+2011-03-03T11:05:12.000000Z
+42937036f9c414f7d9b028f629b1ce20
+2007-08-29T16:52:35.680643Z
+674
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+412
+
 023_add_tracker_is_in_roadmap.rb
 file
 
 
 
 
-2010-09-23T14:37:44.883725Z
+2011-03-03T11:05:12.000000Z
 f4c10807bb47b69af35e9402966089f1
 2007-02-04T09:18:40.598564Z
 228
@@ -638,47 +672,13 @@
 
 230
 
-025_add_search_permission.rb
-file
-
-
-
-
-2010-09-23T14:37:44.883725Z
-42937036f9c414f7d9b028f629b1ce20
-2007-08-29T16:52:35.680643Z
-674
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-412
-
 20091220183727_add_index_to_settings_name.rb
 file
 
 
 
 
-2010-09-23T14:37:44.927757Z
+2011-03-03T11:05:12.000000Z
 c5d86ec3cda95998a3fb590c6f492b6b
 2009-12-20T19:13:22.787652Z
 3206
@@ -712,7 +712,7 @@
 
 
 
-2010-09-23T14:37:44.923753Z
+2011-03-03T11:05:12.000000Z
 b2f88560d10a9676bdb65e18f9a13d65
 2009-10-17T22:23:29.892475Z
 2928
@@ -746,7 +746,7 @@
 
 
 
-2010-09-23T14:37:44.883725Z
+2011-03-03T11:05:12.000000Z
 a269e98b11a4d0d865c82328d7af5663
 2007-03-25T12:12:15.060977Z
 377
@@ -780,7 +780,7 @@
 
 
 
-2010-09-23T14:37:44.911755Z
+2011-03-03T11:05:12.000000Z
 69a42a62536b1f435ce1080ceccb4c75
 2009-01-17T11:18:04.652409Z
 2276
@@ -814,7 +814,7 @@
 
 
 
-2010-09-23T14:37:44.923753Z
+2011-03-03T11:05:12.000000Z
 84bec26b6eaebc64c437c5a3b4784a94
 2009-10-17T22:23:29.892475Z
 2928
@@ -848,7 +848,7 @@
 
 
 
-2010-09-23T14:37:44.899726Z
+2011-03-03T11:05:12.000000Z
 53ee6af48c18534db0ffdd4fa5c5df7f
 2008-09-13T16:31:11.005265Z
 1814
@@ -882,7 +882,7 @@
 
 
 
-2010-09-23T14:37:44.915753Z
+2011-03-03T11:05:12.000000Z
 d343c3ba8f04d1cc71f20c9860d5907b
 2009-05-30T23:30:36.923541Z
 2777
@@ -916,7 +916,7 @@
 
 
 
-2010-09-23T14:37:44.899726Z
+2011-03-03T11:05:12.000000Z
 611baff063a1d909ba581aa98018cae7
 2008-03-12T20:28:49.748698Z
 1236
@@ -950,7 +950,7 @@
 
 
 
-2010-09-23T14:37:44.883725Z
+2011-03-03T11:05:12.000000Z
 f1b96e04888c0a48bf29dd0556ba8027
 2007-08-29T16:52:35.680643Z
 674
@@ -984,7 +984,7 @@
 
 
 
-2010-09-23T14:37:44.927757Z
+2011-03-03T11:05:12.000000Z
 72e8d36a80b63657037f175b368f2e2c
 2009-10-17T22:23:29.892475Z
 2928
@@ -1018,7 +1018,7 @@
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 891f793e4f2ab50f57b8488c764ceff1
 2008-07-04T17:58:14.743502Z
 1623
@@ -1052,7 +1052,7 @@
 
 
 
-2010-09-23T14:37:44.883725Z
+2011-03-03T11:05:12.000000Z
 82595f307b6fe5053151a681b737f063
 2007-04-25T15:06:20.062636Z
 479
@@ -1080,47 +1080,13 @@
 
 515
 
-108_add_identity_url_to_users.rb
-file
-
-
-
-
-2010-09-23T14:37:44.915753Z
-b175e6c85c5faf4b5d2f092f65338b10
-2009-02-11T19:06:55.627694Z
-2440
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-187
-
 20090614091200_fix_messages_sticky_null.rb
 file
 
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 c460bb38faa03667fc34a3b131ec40df
 2009-06-14T09:19:20.900273Z
 2787
@@ -1148,13 +1114,47 @@
 
 176
 
+108_add_identity_url_to_users.rb
+file
+
+
+
+
+2011-03-03T11:05:12.000000Z
+b175e6c85c5faf4b5d2f092f65338b10
+2009-02-11T19:06:55.627694Z
+2440
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+187
+
 20091220184736_add_indexes_to_issue_status.rb
 file
 
 
 
 
-2010-09-23T14:37:44.927757Z
+2011-03-03T11:05:12.000000Z
 7aa35de55587b897fea800e8044039a8
 2009-12-20T19:13:22.787652Z
 3206
@@ -1188,7 +1188,7 @@
 
 
 
-2010-09-23T14:37:44.931783Z
+2011-03-03T11:05:12.000000Z
 e4eff12465b879f063cac04a709438b9
 2010-08-22T18:42:00.112555Z
 4013
@@ -1222,7 +1222,7 @@
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 0492f13cf6f16f90603fdd82c388bace
 2007-05-08T09:26:57.307537Z
 518
@@ -1256,7 +1256,7 @@
 
 
 
-2010-09-23T14:37:44.931783Z
+2011-03-03T11:05:12.000000Z
 9a69054334fcbc6b72eb8b5ae9957129
 2009-12-27T11:57:13.519273Z
 3254
@@ -1290,7 +1290,7 @@
 
 
 
-2010-09-23T14:37:44.899726Z
+2011-03-03T11:05:12.000000Z
 b17259dfa6f46844e0f86b110577fbc6
 2008-03-09T15:36:47.697904Z
 1220
@@ -1324,7 +1324,7 @@
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 e00a737604d0be6b94c92236e4f378eb
 2009-05-10T10:54:31.775505Z
 2726
@@ -1358,7 +1358,7 @@
 
 
 
-2010-09-23T14:37:44.883725Z
+2011-03-03T11:05:12.000000Z
 2fb7c5a95c8ed07756c3fbb917c98230
 2007-10-22T21:07:13.432482Z
 864
@@ -1392,7 +1392,7 @@
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 1702102b56ee973066c86d659252a366
 2007-08-29T16:52:35.680643Z
 674
@@ -1420,13 +1420,47 @@
 
 751
 
+20110223180953_salt_user_passwords.rb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+f72892b525076a1ffaf1f2548822d560
+2011-02-23T17:27:31.762248Z
+4936
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+384
+
 038_add_custom_field_is_filter.rb
 file
 
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 0c630c7ad4fbe9ccbb897363a422efa6
 2007-04-17T10:53:20.697217Z
 447
@@ -1460,7 +1494,7 @@
 
 
 
-2010-09-23T14:37:44.931783Z
+2011-03-03T11:05:12.000000Z
 6e9fdd6731ba51e864563938c05ed9da
 2010-02-21T14:40:00.085842Z
 3471
@@ -1494,7 +1528,7 @@
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 8e58d8ec43e40266d62fd64b4b6a9a09
 2007-05-13T17:09:56.765659Z
 529
@@ -1528,7 +1562,7 @@
 
 
 
-2010-09-23T14:37:44.931783Z
+2011-03-03T11:05:12.000000Z
 6350cf7f18c7d61d54bf2bfa55e108d3
 2009-12-25T17:13:58.090736Z
 3240
@@ -1556,13 +1590,47 @@
 
 442
 
+20110220160626_add_workflows_assignee_and_author.rb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+8e7a8d0f81e207e3d673703de33fdb69
+2011-02-20T15:38:07.840581Z
+4895
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+495
+
 030_add_projects_feeds_permissions.rb
 file
 
 
 
 
-2010-09-23T14:37:44.883725Z
+2011-03-03T11:05:12.000000Z
 3216f04b6b84aaa6d29bc0f3e5d8c462
 2007-08-29T16:52:35.680643Z
 674
@@ -1596,7 +1664,7 @@
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 fb852fdf1ab4266ab05a36ff105b7ceb
 2007-10-22T21:07:13.432482Z
 864
@@ -1624,13 +1692,47 @@
 
 607
 
+20110228000000_add_repositories_log_encoding.rb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+dbe736040dcb44e3db78219ecfdb3d62
+2011-03-01T09:47:06.578325Z
+4980
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+237
+
 076_allow_null_position.rb
 file
 
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 9f0c1dd813015fc37cd47062fe15ef91
 2008-02-12T21:11:16.312726Z
 1140
@@ -1664,7 +1766,7 @@
 
 
 
-2010-09-23T14:37:44.923753Z
+2011-03-03T11:05:12.000000Z
 e08dfbd6aca488a1513bfe7c59e2da90
 2009-10-17T22:23:29.892475Z
 2928
@@ -1698,7 +1800,7 @@
 
 
 
-2010-09-23T14:37:44.927757Z
+2011-03-03T11:05:12.000000Z
 767d76b65ff41dd9860747d14bb24ee1
 2009-12-20T19:13:22.787652Z
 3206
@@ -1732,7 +1834,7 @@
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 93159e216a0265b8f239566bfb91fd8e
 2009-10-17T22:23:29.892475Z
 2928
@@ -1766,7 +1868,7 @@
 
 
 
-2010-09-23T14:37:44.931783Z
+2011-03-03T11:05:12.000000Z
 5fa98acba6010a7450722133bfb66962
 2010-07-24T00:19:32.307471Z
 3860
@@ -1800,7 +1902,7 @@
 
 
 
-2010-09-23T14:37:44.923753Z
+2011-03-03T11:05:12.000000Z
 eeff80bd1cee52d49f1eb78fab035adf
 2009-10-17T22:23:29.892475Z
 2928
@@ -1834,7 +1936,7 @@
 
 
 
-2010-09-23T14:37:44.927757Z
+2011-03-03T11:05:12.000000Z
 09b6720db5ea81c8e22aff9dd89fc0bd
 2009-10-17T22:23:29.892475Z
 2928
@@ -1868,7 +1970,7 @@
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 b392b3c84d6d7b8bba99011778f5b54e
 2007-11-20T20:29:03.757553Z
 920
@@ -1902,7 +2004,7 @@
 
 
 
-2010-09-23T14:37:44.923753Z
+2011-03-03T11:05:12.000000Z
 2ae2d679057fe2db7b7a8bdabc2cbf6d
 2009-10-17T22:23:29.892475Z
 2928
@@ -1936,7 +2038,7 @@
 
 
 
-2010-09-23T14:37:44.915753Z
+2011-03-03T11:05:12.000000Z
 01a97aa31f8b9917a84790f23e0e90d1
 2009-10-21T22:34:34.183882Z
 2947
@@ -1970,7 +2072,7 @@
 
 
 
-2010-09-23T14:37:44.915753Z
+2011-03-03T11:05:12.000000Z
 af4786659f25d96a43468cdc4bcfae44
 2009-02-11T19:06:50.454280Z
 2439
@@ -2004,7 +2106,7 @@
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 82e35d32f60c71db17de62592693c737
 2007-10-20T12:47:05.860183Z
 855
@@ -2038,7 +2140,7 @@
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 3ac5fb29973ffa0ca94ac90387c73b78
 2007-08-29T16:52:35.680643Z
 674
@@ -2066,13 +2168,47 @@
 
 895
 
+037_add_project_identifier.rb
+file
+
+
+
+
+2011-03-03T11:05:12.000000Z
+e61809aaf1ac8a2a290c4574ed598ff0
+2007-04-02T06:29:09.277122Z
+397
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+202
+
 073_add_enumerations_is_default.rb
 file
 
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 db7f5c6597e13933c96cb58cbbd1f0bd
 2007-10-05T17:44:15.414646Z
 803
@@ -2100,47 +2236,13 @@
 
 236
 
-037_add_project_identifier.rb
-file
-
-
-
-
-2010-09-23T14:37:44.887754Z
-e61809aaf1ac8a2a290c4574ed598ff0
-2007-04-02T06:29:09.277122Z
-397
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-202
-
 20100313171051_add_index_on_issues_nested_set.rb
 file
 
 
 
 
-2010-09-23T14:37:44.931783Z
+2011-03-03T11:05:12.000000Z
 243f136f05a508fff7ca52423f65c959
 2010-03-13T17:17:10.453825Z
 3578
@@ -2174,7 +2276,7 @@
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 e5f0fe89be9a00fe1f8b246bde88fca1
 2007-10-01T08:44:17.920088Z
 782
@@ -2208,7 +2310,7 @@
 
 
 
-2010-09-23T14:37:44.927757Z
+2011-03-03T11:05:12.000000Z
 bb79c723b9d9fdabe49ed18ebb8a6caf
 2009-12-11T18:48:34.197724Z
 3151
@@ -2242,7 +2344,7 @@
 
 
 
-2010-09-23T14:37:44.883725Z
+2011-03-03T11:05:12.000000Z
 b8b7c422c3d666340afaec3a52c5d6a4
 2007-10-22T21:07:13.432482Z
 864
@@ -2270,81 +2372,13 @@
 
 275
 
-20100129193813_update_mail_notification_values.rb
-file
-
-
-
-
-2011-01-13T14:09:38.000000Z
-d2251c92048ec4169e2c220f1510d803
-2010-11-20T09:55:06.580420Z
-4413
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-241
-
-001_setup.rb
-file
-
-
-
-
-2010-09-23T14:37:44.875728Z
-b740a77ff87e6390f7ad86eaf0710040
-2008-08-25T16:35:20.899166Z
-1764
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-18072
-
 20091010093521_fix_users_custom_values.rb
 file
 
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 55350d451c622488f9358f7bbe12d4de
 2009-10-10T10:16:00.250819Z
 2905
@@ -2372,13 +2406,47 @@
 
 276
 
+001_setup.rb
+file
+
+
+
+
+2011-03-03T11:05:12.000000Z
+b740a77ff87e6390f7ad86eaf0710040
+2008-08-25T16:35:20.899166Z
+1764
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+18072
+
 016_add_repositories_permissions.rb
 file
 
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 e770aa6387bb4737804d5024e743cd25
 2007-08-29T16:52:35.680643Z
 674
@@ -2406,13 +2474,47 @@
 
 1658
 
+20100129193813_update_mail_notification_values.rb
+file
+
+
+
+
+2011-03-03T11:05:12.000000Z
+d2251c92048ec4169e2c220f1510d803
+2010-11-20T09:55:06.580420Z
+4413
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+241
+
 20091017214611_add_missing_indexes_to_journals.rb
 file
 
 
 
 
-2010-09-23T14:37:44.927757Z
+2011-03-03T11:05:12.000000Z
 4cedb1faff3054d9be6250b589882b50
 2009-10-17T22:23:29.892475Z
 2928
@@ -2446,7 +2548,7 @@
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 4901b560613f6a0ae3e5df5bcf2dd11c
 2007-04-25T16:48:01.299251Z
 482
@@ -2480,7 +2582,7 @@
 
 
 
-2010-09-23T14:37:44.923753Z
+2011-03-03T11:05:12.000000Z
 0e1e45e51997617f8672e6d0d5ed8e51
 2009-10-17T22:23:29.892475Z
 2928
@@ -2514,7 +2616,7 @@
 
 
 
-2010-09-23T14:37:44.899726Z
+2011-03-03T11:05:12.000000Z
 f60a0c1f633a6ff65fb2734173b57fe4
 2008-02-29T19:46:58.834023Z
 1180
@@ -2548,7 +2650,7 @@
 
 
 
-2010-09-23T14:37:44.891758Z
+2011-03-03T11:05:12.000000Z
 31acec69fd7efa0c26dec61f860b0c85
 2007-09-09T17:05:38.846724Z
 720
@@ -2582,7 +2684,7 @@
 
 
 
-2010-09-23T14:37:44.927757Z
+2011-03-03T11:05:12.000000Z
 871a600c06a6965f52c63177a82fbe15
 2009-10-17T22:23:29.892475Z
 2928
@@ -2616,7 +2718,7 @@
 
 
 
-2010-09-23T14:37:44.911755Z
+2011-03-03T11:05:12.000000Z
 320b459ced6ed78d09a3743ad60b3200
 2009-01-18T10:54:08.545108Z
 2279
@@ -2644,13 +2746,47 @@
 
 270
 
+20110226120132_change_auth_sources_account_password_limit.rb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+fccbbb0aadf883abb7a337961c2199e4
+2011-02-26T13:09:25.657748Z
+4950
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+298
+
 094_change_projects_homepage_limit.rb
 file
 
 
 
 
-2010-09-23T14:37:44.899726Z
+2011-03-03T11:05:12.000000Z
 cf04e90903f0d068e4503cb465026ef7
 2008-05-25T13:37:29.456358Z
 1457
@@ -2684,7 +2820,7 @@
 
 
 
-2010-09-23T14:37:44.899726Z
+2011-03-03T11:05:12.000000Z
 5be8fe0eee7c90901f9ba49030412f40
 2008-05-04T15:05:38.117137Z
 1415
@@ -2718,7 +2854,7 @@
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 07bf6636d0acf3ec84b38648bbe2c07a
 2007-04-21T12:09:07.794422Z
 454
@@ -2752,7 +2888,7 @@
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 be494b64b18017ebe3ccdff9a34abdbd
 2007-11-24T12:25:07.449637Z
 926
@@ -2786,7 +2922,7 @@
 
 
 
-2010-09-23T14:37:44.891758Z
+2011-03-03T11:05:12.000000Z
 0abbef63f1f391688df012906a94877b
 2008-03-09T18:25:37.323226Z
 1222
@@ -2820,7 +2956,7 @@
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 a574e8a4f8f80a464ca2b8bcbd43287f
 2007-09-15T14:54:15.583528Z
 731
@@ -2854,7 +2990,7 @@
 
 
 
-2010-09-23T14:37:44.883725Z
+2011-03-03T11:05:12.000000Z
 cd7530e8030bf9e675ca5922c2494d83
 2007-03-10T15:09:49.115269Z
 323
@@ -2888,7 +3024,7 @@
 
 
 
-2011-01-13T14:09:38.000000Z
+2011-03-03T11:05:12.000000Z
 7a04693ea608e342b463c73c461b2da0
 2011-01-01T23:08:49.766359Z
 4610
@@ -2922,7 +3058,7 @@
 
 
 
-2010-09-23T14:37:44.931783Z
+2011-03-03T11:05:12.000000Z
 d1a11dec6b93af060f84f9b2a1e36421
 2010-03-13T14:56:49.379682Z
 3573
@@ -2956,7 +3092,7 @@
 
 
 
-2010-09-23T14:37:44.891758Z
+2011-03-03T11:05:12.000000Z
 f1661157bd19c5fd4f7a4244745571bf
 2007-08-29T16:52:35.680643Z
 674
@@ -2990,7 +3126,7 @@
 
 
 
-2010-09-23T14:37:44.883725Z
+2011-03-03T11:05:12.000000Z
 8381c8e67d31387ec86e821025f5ae8b
 2007-03-09T18:03:31.183366Z
 319
@@ -3024,7 +3160,7 @@
 
 
 
-2010-09-23T14:37:44.883725Z
+2011-03-03T11:05:12.000000Z
 f8359b001e33e9508d158589c81f7bee
 2007-02-03T12:57:33.179243Z
 223
@@ -3058,7 +3194,7 @@
 
 
 
-2010-09-23T14:37:44.915753Z
+2011-03-03T11:05:12.000000Z
 63b0f6e295adf5f1d1eee803e4cc6287
 2009-01-24T11:48:38.049684Z
 2305
@@ -3092,7 +3228,7 @@
 
 
 
-2010-09-23T14:37:44.915753Z
+2011-03-03T11:05:12.000000Z
 668305a363cf6997eb9f2259d00cc26d
 2009-03-19T00:01:24.358528Z
 2599
@@ -3126,7 +3262,7 @@
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 c8a6c8715446f22f6a3f4e2040dd873d
 2007-11-19T22:28:43.818228Z
 917
@@ -3160,7 +3296,7 @@
 
 
 
-2010-09-23T14:37:44.911755Z
+2011-03-03T11:05:12.000000Z
 7f2d97409681d462705d00de37e78476
 2008-10-18T10:07:49.851665Z
 1938
@@ -3194,7 +3330,7 @@
 
 
 
-2010-09-23T14:37:44.911755Z
+2011-03-03T11:05:12.000000Z
 d885a13afc268875b79c4cbf9524f3e8
 2009-02-08T17:24:39.400993Z
 2415
@@ -3228,7 +3364,7 @@
 
 
 
-2010-09-23T14:37:44.891758Z
+2011-03-03T11:05:12.000000Z
 aa67262417630fc088eb57df8d2dd9d3
 2007-08-16T17:47:41.639068Z
 649
@@ -3262,7 +3398,7 @@
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 528b6095ca0376cecdd966ddd0b345c4
 2006-12-16T13:37:32.633739Z
 95
@@ -3296,7 +3432,7 @@
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 2d559ef99ec458f472f5c22c0a8bf5f4
 2007-08-29T16:52:35.680643Z
 674
@@ -3330,7 +3466,7 @@
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 dc28d8674409819b866f6d878b33d288
 2007-04-24T13:57:27.960164Z
 473
@@ -3364,7 +3500,7 @@
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 a7d8c7f023a76a8dbb0d0950797c08f8
 2008-02-12T21:11:16.312726Z
 1140
@@ -3398,7 +3534,7 @@
 
 
 
-2010-09-23T14:37:44.899726Z
+2011-03-03T11:05:12.000000Z
 ba997a6179b5ab0f421b149c54725357
 2008-01-15T20:40:59.035860Z
 1069
@@ -3432,7 +3568,7 @@
 
 
 
-2010-09-23T14:37:44.923753Z
+2011-03-03T11:05:12.000000Z
 e256cf4a148fd48c409ea6983d569e7d
 2009-10-17T22:23:29.892475Z
 2928
@@ -3466,7 +3602,7 @@
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 02bfb0be1b161bd757a75f69bfe79bc7
 2008-03-09T18:25:37.323226Z
 1222
@@ -3500,7 +3636,7 @@
 
 
 
-2010-09-23T14:37:44.899726Z
+2011-03-03T11:05:12.000000Z
 f77d77e81db6f6ac5bb3844255f8ab33
 2008-03-12T20:28:49.748698Z
 1236
@@ -3528,13 +3664,47 @@
 
 218
 
+20110223180944_add_users_salt.rb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+6dd75e3da92087226c787a4edc76032e
+2011-02-23T17:27:31.762248Z
+4936
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+176
+
 20090214190337_add_watchers_user_id_type_index.rb
 file
 
 
 
 
-2010-09-23T14:37:44.915753Z
+2011-03-03T11:05:12.000000Z
 5d4b3c5646cc6c136e706ac5d7e0b377
 2009-02-14T19:06:44.812480Z
 2466
@@ -3568,7 +3738,7 @@
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 90bb42121a57db140491ecb2a0763d00
 2009-10-17T22:23:29.892475Z
 2928
@@ -3602,7 +3772,7 @@
 
 
 
-2010-09-23T14:37:44.891758Z
+2011-03-03T11:05:12.000000Z
 b61285ac64245c1571e536a8c7e05a94
 2007-06-12T20:12:05.590809Z
 559
@@ -3636,7 +3806,7 @@
 
 
 
-2010-09-23T14:37:44.911755Z
+2011-03-03T11:05:12.000000Z
 e00f8e7739afbb2d07a21decd1422a0a
 2008-09-21T20:38:36.877257Z
 1896
@@ -3670,7 +3840,7 @@
 
 
 
-2010-09-23T14:37:44.891758Z
+2011-03-03T11:05:12.000000Z
 708c039fe82ad86e9930122cac4757b1
 2007-08-31T17:45:32.784580Z
 685
@@ -3704,7 +3874,7 @@
 
 
 
-2010-09-23T14:37:44.923753Z
+2011-03-03T11:05:12.000000Z
 4bfd0623186217eee4346313f148ea7a
 2009-10-17T22:23:29.892475Z
 2928
@@ -3738,7 +3908,7 @@
 
 
 
-2010-09-23T14:37:44.927757Z
+2011-03-03T11:05:12.000000Z
 71d997c1a32c4ba3dd4b31a34885fc7a
 2009-12-29T14:53:29.047095Z
 3259
@@ -3772,7 +3942,7 @@
 
 
 
-2010-09-23T14:37:44.923753Z
+2011-03-03T11:05:12.000000Z
 e8d897645c7176e7fd23f1578b882b5f
 2009-10-17T22:23:29.892475Z
 2928
@@ -3800,13 +3970,47 @@
 
 308
 
+20110228000100_copy_repositories_log_encoding.rb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+22941cc81d233c2602be827d70670c10
+2011-03-01T10:14:47.182368Z
+4981
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+497
+
 063_add_roles_permissions.rb
 file
 
 
 
 
-2010-09-23T14:37:44.891758Z
+2011-03-03T11:05:12.000000Z
 9ddb69b602d6d3ee5da01f8a9e9f78db
 2007-08-29T16:52:35.680643Z
 674
@@ -3840,7 +4044,7 @@
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 055f00efdb87ff8934c36d5eb99b741f
 2009-09-12T08:36:46.650954Z
 2869
@@ -3874,7 +4078,7 @@
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 27279bf98b3155975ce59a359d0a29aa
 2009-05-10T11:18:09.335765Z
 2729
@@ -3908,7 +4112,7 @@
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 3af07746c4eab3a1716744971ac26ffc
 2007-06-12T20:12:05.590809Z
 559
@@ -3942,7 +4146,7 @@
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 67d6e1898c150c8df560cb2ce8a2f2d7
 2007-08-29T16:52:35.680643Z
 674
@@ -3976,7 +4180,7 @@
 
 
 
-2010-09-23T14:37:44.891758Z
+2011-03-03T11:05:12.000000Z
 596f1acbdbc340c39d19f19f7b4cb6c6
 2007-08-29T16:52:35.680643Z
 674
@@ -4010,7 +4214,7 @@
 
 
 
-2010-09-23T14:37:44.915753Z
+2011-03-03T11:05:12.000000Z
 46effb13ff7d1a62b7b8c93afc7da9c8
 2009-01-24T11:31:15.122844Z
 2304
@@ -4044,7 +4248,7 @@
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 e7e163729c56cd9807450574d2beeda8
 2007-10-16T19:19:10.481742Z
 845
@@ -4072,13 +4276,47 @@
 
 215
 
+20091114105931_add_view_issues_permission.rb
+file
+
+
+
+
+2011-03-03T11:05:12.000000Z
+886411cb32a18ec492acc798194210af
+2009-11-14T12:08:47.175978Z
+3039
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+262
+
 082_add_messages_locked.rb
 file
 
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 4ed0fffe6158eeda69a021c362f61157
 2007-11-24T12:25:07.449637Z
 926
@@ -4112,7 +4350,7 @@
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 22e6afc0519b7befbae2c4a4433c20f5
 2009-10-17T22:23:29.892475Z
 2928
@@ -4146,7 +4384,7 @@
 
 
 
-2010-09-23T14:37:44.927757Z
+2011-03-03T11:05:12.000000Z
 8251942eb30b7c709ac6e3dc1ab5eedb
 2009-10-17T22:23:29.892475Z
 2928
@@ -4174,39 +4412,39 @@
 
 267
 
-20091114105931_add_view_issues_permission.rb
-file
-
-
-
-
-2010-09-23T14:37:44.927757Z
-886411cb32a18ec492acc798194210af
-2009-11-14T12:08:47.175978Z
-3039
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-262
+20091017213444_add_missing_indexes_to_tokens.rb
+file
+
+
+
+
+2011-03-03T11:05:12.000000Z
+4c220f0316e1b04fa8350f0309698f24
+2009-10-17T22:23:29.892475Z
+2928
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+172
 
 20090503121501_create_member_roles.rb
 file
@@ -4214,7 +4452,7 @@
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 16792ab92fda3a70516d55a011c01fce
 2009-05-10T10:54:31.775505Z
 2726
@@ -4242,39 +4480,39 @@
 
 274
 
-20091017213444_add_missing_indexes_to_tokens.rb
-file
-
-
-
-
-2010-09-23T14:37:44.923753Z
-4c220f0316e1b04fa8350f0309698f24
-2009-10-17T22:23:29.892475Z
-2928
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-172
+057_add_versions_wiki_page_title.rb
+file
+
+
+
+
+2011-03-03T11:05:12.000000Z
+6a4944f1162c00f2405200fb38773886
+2007-06-14T18:26:27.748707Z
+564
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+202
 
 20090323224724_add_type_to_enumerations.rb
 file
@@ -4282,7 +4520,7 @@
 
 
 
-2010-09-23T14:37:44.915753Z
+2011-03-03T11:05:12.000000Z
 0c0cee6df5f26eb3378c9b22a1162a5a
 2009-05-30T23:30:36.923541Z
 2777
@@ -4310,47 +4548,13 @@
 
 185
 
-057_add_versions_wiki_page_title.rb
-file
-
-
-
-
-2010-09-23T14:37:44.891758Z
-6a4944f1162c00f2405200fb38773886
-2007-06-14T18:26:27.748707Z
-564
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-202
-
 004_export_pdf.rb
 file
 
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 6e59569f25a79a0a75797fa4ebb60936
 2007-08-29T16:52:35.680643Z
 674
@@ -4384,7 +4588,7 @@
 
 
 
-2010-09-23T14:37:44.883725Z
+2011-03-03T11:05:12.000000Z
 00a100c0ca092df63e8542fc6d0bc78c
 2007-03-18T15:48:05.787958Z
 344
@@ -4418,7 +4622,7 @@
 
 
 
-2010-09-23T14:37:44.927757Z
+2011-03-03T11:05:12.000000Z
 ee71a22f869c9dbee6f322ad25f45934
 2009-12-06T10:28:20.099964Z
 3123
@@ -4452,7 +4656,7 @@
 
 
 
-2010-09-23T14:37:44.927757Z
+2011-03-03T11:05:12.000000Z
 21d40b6390e67409bad1d4525c26accb
 2009-10-17T22:23:29.892475Z
 2928
@@ -4486,7 +4690,7 @@
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 1b013e3bbb624874d78eaf3332ccb3d5
 2007-03-26T16:41:54.592250Z
 383
@@ -4520,7 +4724,7 @@
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 e658f4ed3c99264bf4c036b87b8cf39f
 2007-05-27T17:42:04.537618Z
 549
@@ -4554,7 +4758,7 @@
 
 
 
-2010-09-23T14:37:44.915753Z
+2011-03-03T11:05:12.000000Z
 4d0267b0a9d4cb2ec782d10247a4c33f
 2009-01-24T11:31:15.122844Z
 2304
@@ -4588,7 +4792,7 @@
 
 
 
-2010-09-23T14:37:44.923753Z
+2011-03-03T11:05:12.000000Z
 eef7b68156646d86ea515aed9aa525ed
 2009-10-17T22:23:29.892475Z
 2928
@@ -4622,7 +4826,7 @@
 
 
 
-2010-09-23T14:37:44.915753Z
+2011-03-03T11:05:12.000000Z
 1567606924d88ae66474e848de86577a
 2009-10-21T22:34:28.905707Z
 2946
@@ -4656,7 +4860,7 @@
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 ccfd197b34214a0d74d952aa65dcd5a6
 2008-03-09T18:25:37.323226Z
 1222
@@ -4690,7 +4894,7 @@
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 f5ae107f30300b547d535ddc5b1b999c
 2009-09-12T08:36:46.650954Z
 2869
@@ -4724,7 +4928,7 @@
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 9cef93921160d49f5d3aa4968ecc4eb1
 2007-10-22T21:07:13.432482Z
 864
@@ -4758,7 +4962,7 @@
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 6c70abafef3dc834c722ed7135d6a7df
 2009-10-17T22:23:29.892475Z
 2928
@@ -4792,7 +4996,7 @@
 
 
 
-2010-11-19T13:04:50.888959Z
+2011-03-03T11:05:12.000000Z
 0000368c453072e56da62defbc80441e
 2010-11-14T12:33:14.198318Z
 4402
@@ -4826,7 +5030,7 @@
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 cf095d9afbc6429b8d759eb737a0781f
 2009-10-21T22:34:34.183882Z
 2947
@@ -4860,7 +5064,7 @@
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 9aa91971db6c6f14ddd1ae768085b0a8
 2009-10-17T22:23:29.892475Z
 2928
@@ -4894,7 +5098,7 @@
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 3e5f2220de578b306ce323997c495db6
 2006-11-12T18:50:30.642587Z
 44
@@ -4928,7 +5132,7 @@
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 0fb07bc55cf61720437b40e4ae244e05
 2006-12-03T20:51:17.306207Z
 63
@@ -4962,7 +5166,7 @@
 
 
 
-2010-09-23T14:37:44.891758Z
+2011-03-03T11:05:12.000000Z
 417051f45603460a17909e4a5029c779
 2007-08-29T16:52:35.680643Z
 674
@@ -4990,13 +5194,47 @@
 
 443
 
+20110224000000_add_repositories_path_encoding.rb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+7cd80bdf7897357500a46e87ed82b84b
+2011-02-24T05:58:37.876075Z
+4940
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+240
+
 032_create_time_entries.rb
 file
 
 
 
 
-2010-09-23T14:37:44.883725Z
+2011-03-03T11:05:12.000000Z
 a62243f0bc2f1b1b11a47da172d011a5
 2007-04-25T15:06:20.062636Z
 479
@@ -5024,13 +5262,47 @@
 
 966
 
+20110226120112_change_repositories_password_limit.rb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+e809364786bdcce227961318e7428700
+2011-02-26T13:09:25.657748Z
+4950
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+276
+
 068_create_enabled_modules.rb
 file
 
 
 
 
-2010-09-23T14:37:44.895727Z
+2011-03-03T11:05:12.000000Z
 96962340557b9a1f70a215d88b07c2c1
 2007-09-14T11:34:08.234701Z
 725
@@ -5064,7 +5336,7 @@
 
 
 
-2010-09-23T14:37:44.923753Z
+2011-03-03T11:05:12.000000Z
 8ad3f0193d5e3b8d52293bbf2828c2d2
 2009-10-17T22:23:29.892475Z
 2928
@@ -5098,7 +5370,7 @@
 
 
 
-2010-09-23T14:37:44.923753Z
+2011-03-03T11:05:12.000000Z
 fd6ccbccc44ceccab8de7c3c48696ecc
 2009-10-17T22:23:29.892475Z
 2928
@@ -5132,7 +5404,7 @@
 
 
 
-2010-09-23T14:37:44.891758Z
+2011-03-03T11:05:12.000000Z
 1798d606a43c6a29029535c28b49beff
 2007-09-04T22:07:44.613701Z
 702
@@ -5166,7 +5438,7 @@
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 d714e81a7a9c29b60e405233765cbd33
 2007-08-29T16:52:35.680643Z
 674
@@ -5200,7 +5472,7 @@
 
 
 
-2010-09-23T14:37:44.899726Z
+2011-03-03T11:05:12.000000Z
 a27ef00d6ec6b3f4dc63ad004181c10e
 2008-01-20T23:38:55.025648Z
 1091
@@ -5234,7 +5506,7 @@
 
 
 
-2010-09-23T14:37:44.875728Z
+2011-03-03T11:05:12.000000Z
 497529b269185b1833b959c98db3c1d1
 2007-08-29T16:52:35.680643Z
 674
@@ -5268,7 +5540,7 @@
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 d39d0037e4f06dfb7db18d9082608832
 2009-10-17T22:23:29.892475Z
 2928
@@ -5302,7 +5574,7 @@
 
 
 
-2010-09-23T14:37:44.923753Z
+2011-03-03T11:05:12.000000Z
 79d11b147c1061901a888d89c3e5029b
 2009-10-17T22:23:29.892475Z
 2928
@@ -5336,7 +5608,7 @@
 
 
 
-2010-09-23T14:37:44.899726Z
+2011-03-03T11:05:12.000000Z
 1cbe32e981634898d5b0f80b2c63798b
 2007-12-14T18:54:55.323993Z
 994
@@ -5370,7 +5642,7 @@
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 717687210dcbeeebff8337561a427e70
 2007-05-05T13:22:27.245135Z
 506
@@ -5404,7 +5676,7 @@
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 05c7ea8c5dc45498164a324f7db2887a
 2006-12-10T18:35:48.564790Z
 81
@@ -5438,7 +5710,7 @@
 
 
 
-2010-09-23T14:37:44.915753Z
+2011-03-03T11:05:12.000000Z
 ce38342dea044adf8b277f6483f1a742
 2009-03-12T18:06:54.054174Z
 2572
@@ -5472,7 +5744,7 @@
 
 
 
-2010-09-23T14:37:44.923753Z
+2011-03-03T11:05:12.000000Z
 dbeea4ad5a501200711cb4195856597e
 2009-10-17T22:23:29.892475Z
 2928
@@ -5506,7 +5778,7 @@
 
 
 
-2010-09-23T14:37:44.911755Z
+2011-03-03T11:05:12.000000Z
 4c1203f40e8e7b568ddce15af4f3ad9b
 2008-11-10T18:59:06.897210Z
 2006
@@ -5540,7 +5812,7 @@
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 c62ac2ca3e59bb91e5bb4e206abdaed1
 2007-04-25T15:06:20.062636Z
 479
@@ -5574,7 +5846,7 @@
 
 
 
-2010-09-23T14:37:44.891758Z
+2011-03-03T11:05:12.000000Z
 3bb4b5f081354ea7d943f0b7c6f07284
 2007-08-29T16:52:35.680643Z
 674
@@ -5608,7 +5880,7 @@
 
 
 
-2010-09-23T14:37:44.915753Z
+2011-03-03T11:05:12.000000Z
 3460b737f353524921cfd9ac4199fc44
 2009-03-12T19:49:39.983871Z
 2580
@@ -5642,7 +5914,7 @@
 
 
 
-2010-09-23T14:37:44.887754Z
+2011-03-03T11:05:12.000000Z
 560e67e7b88186a0e21a2f614b6d83c7
 2007-08-29T16:52:35.680643Z
 674
@@ -5676,7 +5948,7 @@
 
 
 
-2010-09-23T14:37:44.891758Z
+2011-03-03T11:05:12.000000Z
 c22348c101d1a03b2d808cb89b3175a5
 2007-06-12T20:12:05.590809Z
 559
@@ -5710,7 +5982,7 @@
 
 
 
-2010-09-23T14:37:44.927757Z
+2011-03-03T11:05:12.000000Z
 87d90f2ce2101811b7aaf0031a74e0c1
 2009-10-25T16:56:46.187627Z
 2981
@@ -5744,7 +6016,7 @@
 
 
 
-2010-09-23T14:37:44.891758Z
+2011-03-03T11:05:12.000000Z
 84fe06ac7cefc2eebba29ac872241d88
 2007-06-29T17:21:37.739022Z
 577
@@ -5778,7 +6050,7 @@
 
 
 
-2010-09-23T14:37:44.875728Z
+2011-03-03T11:05:12.000000Z
 d7a9aad3796f37d70ac2ab4af9c80656
 2007-08-29T16:52:35.680643Z
 674
@@ -5812,7 +6084,7 @@
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 defb118deb2deb23648d50da5cf71047
 2006-12-24T13:38:45.881735Z
 106
@@ -5846,7 +6118,7 @@
 
 
 
-2010-09-23T14:37:44.919754Z
+2011-03-03T11:05:12.000000Z
 89cbe3b06f14ba6d9a5cda47f4239f60
 2009-04-26T13:09:14.221938Z
 2696
@@ -5880,7 +6152,7 @@
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 f2e06da76555942fd3017134d618bbac
 2007-08-29T16:52:35.680643Z
 674
@@ -5914,7 +6186,7 @@
 
 
 
-2010-09-23T14:37:44.899726Z
+2011-03-03T11:05:12.000000Z
 5ff56d564f2da50c289c1dfd90053a4b
 2008-03-05T09:16:19.220849Z
 1189
@@ -5948,7 +6220,7 @@
 
 
 
-2010-09-23T14:37:44.923753Z
+2011-03-03T11:05:12.000000Z
 0ae6a6924263cf5317b539c81b952f03
 2009-10-17T22:23:29.892475Z
 2928
@@ -5982,7 +6254,7 @@
 
 
 
-2010-09-23T14:37:44.879727Z
+2011-03-03T11:05:12.000000Z
 121548a48360a22daa537af42ee8902b
 2007-01-21T11:50:22.864544Z
 167
@@ -6010,13 +6282,47 @@
 
 284
 
+20110227125750_change_journal_details_values_to_text.rb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+768603dc014def8d2fc0a0bb8d81ef79
+2011-02-27T13:34:41.060565Z
+4954
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+324
+
 095_add_wiki_pages_parent_id.rb
 file
 
 
 
 
-2010-09-23T14:37:44.899726Z
+2011-03-03T11:05:12.000000Z
 e50cfa8ef5216f0f7d266dac1e38c9da
 2008-07-26T11:46:24.917066Z
 1698
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/prop-base/20110220160626_add_workflows_assignee_and_author.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/prop-base/20110223180944_add_users_salt.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/prop-base/20110223180953_salt_user_passwords.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/prop-base/20110226120112_change_repositories_password_limit.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/prop-base/20110226120132_change_auth_sources_account_password_limit.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/prop-base/20110227125750_change_journal_details_values_to_text.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/text-base/20110220160626_add_workflows_assignee_and_author.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,13 @@
+class AddWorkflowsAssigneeAndAuthor < ActiveRecord::Migration
+  def self.up
+    add_column :workflows, :assignee, :boolean, :null => false, :default => false
+    add_column :workflows, :author, :boolean, :null => false, :default => false
+    Workflow.update_all("assignee = #{Workflow.connection.quoted_false}")
+    Workflow.update_all("author = #{Workflow.connection.quoted_false}")
+  end
+
+  def self.down
+    remove_column :workflows, :assignee
+    remove_column :workflows, :author
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/text-base/20110223180944_add_users_salt.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,9 @@
+class AddUsersSalt < ActiveRecord::Migration
+  def self.up
+    add_column :users, :salt, :string, :limit => 64
+  end
+
+  def self.down
+    remove_column :users, :salt
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/text-base/20110223180953_salt_user_passwords.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,13 @@
+class SaltUserPasswords < ActiveRecord::Migration
+  
+  def self.up
+    say_with_time "Salting user passwords, this may take some time..." do
+      User.salt_unsalted_passwords!
+    end
+  end
+
+  def self.down
+    # Unsalted passwords can not be restored
+    raise ActiveRecord::IrreversibleMigration, "Can't decypher salted passwords. This migration can not be rollback'ed."
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/text-base/20110224000000_add_repositories_path_encoding.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,9 @@
+class AddRepositoriesPathEncoding < ActiveRecord::Migration
+  def self.up
+    add_column :repositories, :path_encoding, :string, :limit => 64, :default => nil
+  end
+
+  def self.down
+    remove_column :repositories, :path_encoding
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/text-base/20110226120112_change_repositories_password_limit.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,9 @@
+class ChangeRepositoriesPasswordLimit < ActiveRecord::Migration
+  def self.up
+    change_column :repositories, :password, :string, :limit => nil, :default => ''
+  end
+
+  def self.down
+    change_column :repositories, :password, :string, :limit => 60, :default => ''
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/text-base/20110226120132_change_auth_sources_account_password_limit.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,9 @@
+class ChangeAuthSourcesAccountPasswordLimit < ActiveRecord::Migration
+  def self.up
+    change_column :auth_sources, :account_password, :string, :limit => nil, :default => ''
+  end
+
+  def self.down
+    change_column :auth_sources, :account_password, :string, :limit => 60, :default => ''
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/text-base/20110227125750_change_journal_details_values_to_text.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,11 @@
+class ChangeJournalDetailsValuesToText < ActiveRecord::Migration
+  def self.up
+    change_column :journal_details, :old_value, :text
+    change_column :journal_details, :value, :text
+  end
+
+  def self.down
+    change_column :journal_details, :old_value, :string
+    change_column :journal_details, :value, :string
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/text-base/20110228000000_add_repositories_log_encoding.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,9 @@
+class AddRepositoriesLogEncoding < ActiveRecord::Migration
+  def self.up
+    add_column :repositories, :log_encoding, :string, :limit => 64, :default => nil
+  end
+
+  def self.down
+    remove_column :repositories, :log_encoding
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/.svn/text-base/20110228000100_copy_repositories_log_encoding.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,18 @@
+class CopyRepositoriesLogEncoding < ActiveRecord::Migration
+  def self.up
+    encoding = Setting.commit_logs_encoding.to_s.strip
+    encoding = encoding.blank? ? 'UTF-8' : encoding
+    Repository.find(:all).each do |repo|
+      scm = repo.scm_name
+      case scm
+        when 'Subversion', 'Mercurial', 'Git', 'Filesystem' 
+          repo.update_attribute(:log_encoding, nil)
+        else
+          repo.update_attribute(:log_encoding, encoding)
+      end
+    end
+  end
+
+  def self.down
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20110220160626_add_workflows_assignee_and_author.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,13 @@
+class AddWorkflowsAssigneeAndAuthor < ActiveRecord::Migration
+  def self.up
+    add_column :workflows, :assignee, :boolean, :null => false, :default => false
+    add_column :workflows, :author, :boolean, :null => false, :default => false
+    Workflow.update_all("assignee = #{Workflow.connection.quoted_false}")
+    Workflow.update_all("author = #{Workflow.connection.quoted_false}")
+  end
+
+  def self.down
+    remove_column :workflows, :assignee
+    remove_column :workflows, :author
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20110223180944_add_users_salt.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,9 @@
+class AddUsersSalt < ActiveRecord::Migration
+  def self.up
+    add_column :users, :salt, :string, :limit => 64
+  end
+
+  def self.down
+    remove_column :users, :salt
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20110223180953_salt_user_passwords.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,13 @@
+class SaltUserPasswords < ActiveRecord::Migration
+  
+  def self.up
+    say_with_time "Salting user passwords, this may take some time..." do
+      User.salt_unsalted_passwords!
+    end
+  end
+
+  def self.down
+    # Unsalted passwords can not be restored
+    raise ActiveRecord::IrreversibleMigration, "Can't decypher salted passwords. This migration can not be rollback'ed."
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20110224000000_add_repositories_path_encoding.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,9 @@
+class AddRepositoriesPathEncoding < ActiveRecord::Migration
+  def self.up
+    add_column :repositories, :path_encoding, :string, :limit => 64, :default => nil
+  end
+
+  def self.down
+    remove_column :repositories, :path_encoding
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20110226120112_change_repositories_password_limit.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,9 @@
+class ChangeRepositoriesPasswordLimit < ActiveRecord::Migration
+  def self.up
+    change_column :repositories, :password, :string, :limit => nil, :default => ''
+  end
+
+  def self.down
+    change_column :repositories, :password, :string, :limit => 60, :default => ''
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20110226120132_change_auth_sources_account_password_limit.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,9 @@
+class ChangeAuthSourcesAccountPasswordLimit < ActiveRecord::Migration
+  def self.up
+    change_column :auth_sources, :account_password, :string, :limit => nil, :default => ''
+  end
+
+  def self.down
+    change_column :auth_sources, :account_password, :string, :limit => 60, :default => ''
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20110227125750_change_journal_details_values_to_text.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,11 @@
+class ChangeJournalDetailsValuesToText < ActiveRecord::Migration
+  def self.up
+    change_column :journal_details, :old_value, :text
+    change_column :journal_details, :value, :text
+  end
+
+  def self.down
+    change_column :journal_details, :old_value, :string
+    change_column :journal_details, :value, :string
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20110228000000_add_repositories_log_encoding.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,9 @@
+class AddRepositoriesLogEncoding < ActiveRecord::Migration
+  def self.up
+    add_column :repositories, :log_encoding, :string, :limit => 64, :default => nil
+  end
+
+  def self.down
+    remove_column :repositories, :log_encoding
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/migrate/20110228000100_copy_repositories_log_encoding.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,18 @@
+class CopyRepositoriesLogEncoding < ActiveRecord::Migration
+  def self.up
+    encoding = Setting.commit_logs_encoding.to_s.strip
+    encoding = encoding.blank? ? 'UTF-8' : encoding
+    Repository.find(:all).each do |repo|
+      scm = repo.scm_name
+      case scm
+        when 'Subversion', 'Mercurial', 'Git', 'Filesystem' 
+          repo.update_attribute(:log_encoding, nil)
+        else
+          repo.update_attribute(:log_encoding, encoding)
+      end
+    end
+  end
+
+  def self.down
+  end
+end
--- a/doc/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/doc/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,13 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 28
-/svn/!svn/ver/4670/trunk/doc
+/svn/!svn/ver/4784/trunk/doc
 END
 UPGRADING
 K 25
 svn:wc:ra_dav:version-url
 V 38
-/svn/!svn/ver/3848/trunk/doc/UPGRADING
+/svn/!svn/ver/4752/trunk/doc/UPGRADING
 END
 RUNNING_TESTS
 K 25
@@ -25,13 +25,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 36
-/svn/!svn/ver/4567/trunk/doc/INSTALL
+/svn/!svn/ver/4752/trunk/doc/INSTALL
 END
 CHANGELOG
 K 25
 svn:wc:ra_dav:version-url
 V 38
-/svn/!svn/ver/4670/trunk/doc/CHANGELOG
+/svn/!svn/ver/4784/trunk/doc/CHANGELOG
 END
 COPYING
 K 25
--- a/doc/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/doc/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/doc
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-09T15:57:44.051951Z
-4670
+2011-01-30T14:37:23.564601Z
+4784
 jplang
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-09-23T14:37:44.939791Z
-b728be27d68a5bc46292d5e9d2ae5260
-2010-07-18T15:19:04.080578Z
-3848
-edavis10
+2011-03-03T11:05:14.000000Z
+c87e4b9ee82c334658b1c76106dfd469
+2011-01-23T10:22:00.456857Z
+4752
+jplang
 has-props
 
 
@@ -58,7 +58,7 @@
 
 
 
-1794
+1949
 
 RUNNING_TESTS
 file
@@ -66,7 +66,7 @@
 
 
 
-2010-09-23T14:37:44.939791Z
+2011-03-03T11:05:14.000000Z
 cc987c3ab1bf29e6ebe5313bef953b5b
 2010-02-16T16:40:50.914879Z
 3438
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:44.939791Z
+2011-03-03T11:05:14.000000Z
 ba2ffee528eae310e20bf761619bc85f
 2008-08-11T20:49:52.309238Z
 1732
@@ -134,10 +134,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-1e44cb9fd6df3d50661a812598996dcb
-2010-12-23T10:03:32.666117Z
-4567
+2011-03-03T11:05:14.000000Z
+daf24adc36bb93a3d0e1c5a7e4b14fc5
+2011-01-23T10:22:00.456857Z
+4752
 jplang
 has-props
 
@@ -160,7 +160,7 @@
 
 
 
-2987
+3003
 
 CHANGELOG
 file
@@ -168,10 +168,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-dd376ebfe28816365c8c71db0212c730
-2011-01-09T15:57:44.051951Z
-4670
+2011-03-03T11:05:14.000000Z
+a6dd03cb1256e4bf125b81d353206416
+2011-01-30T14:37:23.564601Z
+4784
 jplang
 has-props
 
@@ -194,7 +194,7 @@
 
 
 
-84248
+85714
 
 COPYING
 file
@@ -202,7 +202,7 @@
 
 
 
-2010-09-23T14:37:44.935786Z
+2011-03-03T11:05:14.000000Z
 751419260aa954499f7abaabaa882bbe
 2007-11-04T13:19:42.552822Z
 883
@@ -236,7 +236,7 @@
 
 
 
-2010-11-19T14:03:48.248927Z
+2011-03-03T11:05:14.000000Z
 cc77650493d11d18eabb058fbdf7ac24
 2010-10-22T17:18:11.628381Z
 4273
--- a/doc/.svn/text-base/CHANGELOG.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/doc/.svn/text-base/CHANGELOG.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -4,6 +4,29 @@
 Copyright (C) 2006-2011  Jean-Philippe Lang
 http://www.redmine.org/
 
+== 2011-01-30 v1.1.1
+
+* Defect #4899: Redmine fails to list files for darcs repository
+* Defect #7245: Wiki fails to find pages with cyrillic characters using postgresql
+* Defect #7256: redmine/public/.htaccess must be moved for non-fastcgi installs/upgrades
+* Defect #7258: Automatic spent time logging does not work properly with SQLite3
+* Defect #7259: Released 1.1.0 uses "devel" label inside admin information
+* Defect #7265: "Loading..." icon does not disappear after add project member
+* Defect #7266: Test test_due_date_distance_in_words fail due to undefined locale
+* Defect #7274: CSV value separator in dutch locale
+* Defect #7277: Enabling gravatas causes usernames to overlap first name field in user list
+* Defect #7294: "Notifiy for only project I select" is not available anymore in 1.1.0
+* Defect #7307: HTTP 500 error on query for empty revision
+* Defect #7313: Label not translated in french in Settings/Email Notification tab
+* Defect #7329: <code class="javascript"> with long strings may hang server
+* Defect #7337: My page french translation
+* Defect #7348: French Translation of "Connection"
+* Defect #7385: Error when viewing an issue which was related to a deleted subtask
+* Defect #7386: NoMethodError on pdf export
+* Defect #7415: Darcs adapter recognizes new files as modified files above Darcs 2.4
+* Defect #7421: no email sent with 'Notifiy for any event on the selected projects only'
+* Feature #5344: Update to latest CodeRay 0.9.x
+
 == 2011-01-09 v1.1.0
 
 * Defect #2038: Italics in wiki headers show-up wrong in the toc
--- a/doc/.svn/text-base/INSTALL.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/doc/.svn/text-base/INSTALL.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -80,8 +80,8 @@
 
 == SMTP server Configuration
 
-Copy config/email.yml.example to config/email.yml and edit this file
-to adjust your SMTP settings.
+Copy config/configuration.yml.example to config/configuration.yml and
+edit this file to adjust your SMTP settings.
 Do not forget to restart the application after any change to this file.
 
 Please do not enter your SMTP settings in environment.rb.
--- a/doc/.svn/text-base/UPGRADING.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/doc/.svn/text-base/UPGRADING.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -10,8 +10,10 @@
 1. Uncompress the program archive in a new directory
 
 2. Copy your database settings (RAILS_ROOT/config/database.yml)
-   and SMTP settings (RAILS_ROOT/config/email.yml) into the new
-   config directory
+   and your configuration file (RAILS_ROOT/config/configuration.yml)
+   into the new config directory
+   Note: before Redmine 1.2, SMTP configuration was stored in
+   config/email.yml. It should now be stored in config/configuration.yml. 
 
 3. Copy the RAILS_ROOT/files directory content into your new installation
    This directory contains all the attached files.
--- a/doc/CHANGELOG	Thu Jan 20 09:59:02 2011 +0000
+++ b/doc/CHANGELOG	Thu Mar 03 12:02:03 2011 +0000
@@ -4,6 +4,29 @@
 Copyright (C) 2006-2011  Jean-Philippe Lang
 http://www.redmine.org/
 
+== 2011-01-30 v1.1.1
+
+* Defect #4899: Redmine fails to list files for darcs repository
+* Defect #7245: Wiki fails to find pages with cyrillic characters using postgresql
+* Defect #7256: redmine/public/.htaccess must be moved for non-fastcgi installs/upgrades
+* Defect #7258: Automatic spent time logging does not work properly with SQLite3
+* Defect #7259: Released 1.1.0 uses "devel" label inside admin information
+* Defect #7265: "Loading..." icon does not disappear after add project member
+* Defect #7266: Test test_due_date_distance_in_words fail due to undefined locale
+* Defect #7274: CSV value separator in dutch locale
+* Defect #7277: Enabling gravatas causes usernames to overlap first name field in user list
+* Defect #7294: "Notifiy for only project I select" is not available anymore in 1.1.0
+* Defect #7307: HTTP 500 error on query for empty revision
+* Defect #7313: Label not translated in french in Settings/Email Notification tab
+* Defect #7329: <code class="javascript"> with long strings may hang server
+* Defect #7337: My page french translation
+* Defect #7348: French Translation of "Connection"
+* Defect #7385: Error when viewing an issue which was related to a deleted subtask
+* Defect #7386: NoMethodError on pdf export
+* Defect #7415: Darcs adapter recognizes new files as modified files above Darcs 2.4
+* Defect #7421: no email sent with 'Notifiy for any event on the selected projects only'
+* Feature #5344: Update to latest CodeRay 0.9.x
+
 == 2011-01-09 v1.1.0
 
 * Defect #2038: Italics in wiki headers show-up wrong in the toc
--- a/doc/INSTALL	Thu Jan 20 09:59:02 2011 +0000
+++ b/doc/INSTALL	Thu Mar 03 12:02:03 2011 +0000
@@ -80,8 +80,8 @@
 
 == SMTP server Configuration
 
-Copy config/email.yml.example to config/email.yml and edit this file
-to adjust your SMTP settings.
+Copy config/configuration.yml.example to config/configuration.yml and
+edit this file to adjust your SMTP settings.
 Do not forget to restart the application after any change to this file.
 
 Please do not enter your SMTP settings in environment.rb.
--- a/doc/UPGRADING	Thu Jan 20 09:59:02 2011 +0000
+++ b/doc/UPGRADING	Thu Mar 03 12:02:03 2011 +0000
@@ -10,8 +10,10 @@
 1. Uncompress the program archive in a new directory
 
 2. Copy your database settings (RAILS_ROOT/config/database.yml)
-   and SMTP settings (RAILS_ROOT/config/email.yml) into the new
-   config directory
+   and your configuration file (RAILS_ROOT/config/configuration.yml)
+   into the new config directory
+   Note: before Redmine 1.2, SMTP configuration was stored in
+   config/email.yml. It should now be stored in config/configuration.yml. 
 
 3. Copy the RAILS_ROOT/files directory content into your new installation
    This directory contains all the attached files.
--- a/extra/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 30
-/svn/!svn/ver/4725/trunk/extra
+/svn/!svn/ver/4936/trunk/extra
 END
--- a/extra/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra
+4993
+http://redmine.rubyforge.org/svn/trunk/extra
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-15T14:48:33.715032Z
-4725
+2011-02-23T17:27:31.762248Z
+4936
 jplang
 
 
--- a/extra/mail_handler/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/mail_handler/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/extra/mail_handler
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-19T15:03:32.000000Z
+2011-03-03T11:05:11.000000Z
 f3a0f406bd2e6d3caacb7e7c22079df0
 2011-01-15T14:48:33.715032Z
 4725
--- a/extra/sample_plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -44,7 +44,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:12.000000Z
 cb8636f8b6659a091f3e1f018a64a2f5
 2009-07-02T18:40:06.298867Z
 2798
@@ -78,7 +78,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:12.000000Z
 4d87ae4412bda3ec3b4c9a8bc17fafb6
 2009-02-26T16:37:48.671184Z
 2530
--- a/extra/sample_plugin/app/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/app/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin/app
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app
 http://redmine.rubyforge.org/svn
 
 
--- a/extra/sample_plugin/app/controllers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/app/controllers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin/app/controllers
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/controllers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 9e3b32d475f8b06df8d45b28a2732d76
 2009-02-21T11:04:50.579477Z
 2493
--- a/extra/sample_plugin/app/models/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/app/models/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin/app/models
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/models
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 5161ccc668c61730638ef23bec50232f
 2008-07-27T19:18:35.954247Z
 1704
--- a/extra/sample_plugin/app/views/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/app/views/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin/app/views
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views
 http://redmine.rubyforge.org/svn
 
 
--- a/extra/sample_plugin/app/views/example/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/app/views/example/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin/app/views/example
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/example
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 674cc3fb92754e41d7e7d5fb7ed0eda7
 2007-09-23T18:50:53.732551Z
 753
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 cf9e02439886339b70ee199313902c96
 2007-09-23T18:50:53.732551Z
 753
--- a/extra/sample_plugin/app/views/my/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/app/views/my/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin/app/views/my
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/my
 http://redmine.rubyforge.org/svn
 
 
--- a/extra/sample_plugin/app/views/my/blocks/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/app/views/my/blocks/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin/app/views/my/blocks
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/my/blocks
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 e2d729cf488b7b7411cffb259c10559a
 2009-02-26T16:36:56.835799Z
 2529
--- a/extra/sample_plugin/app/views/settings/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/app/views/settings/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin/app/views/settings
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/app/views/settings
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 065925dde040b66230ae06437114c77f
 2009-07-02T18:40:06.298867Z
 2798
--- a/extra/sample_plugin/assets/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/assets/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin/assets
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/assets
 http://redmine.rubyforge.org/svn
 
 
--- a/extra/sample_plugin/assets/images/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/assets/images/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin/assets/images
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/assets/images
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 81bcc262c08473fa7cb05cc78176652f
 2007-09-23T18:50:53.732551Z
 753
--- a/extra/sample_plugin/assets/stylesheets/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/assets/stylesheets/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin/assets/stylesheets
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/assets/stylesheets
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 ced97da84497db69b30e6e17a55c3fb9
 2007-09-23T18:50:53.732551Z
 753
--- a/extra/sample_plugin/config/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/config/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin/config
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/config
 http://redmine.rubyforge.org/svn
 
 
--- a/extra/sample_plugin/config/locales/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/config/locales/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin/config/locales
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/config/locales
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 c1dc7060239e61ce13e8840b305000c5
 2009-02-08T16:13:02.919112Z
 2413
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 989492284a42bf9777e2bd0d39b40254
 2009-02-08T16:13:02.919112Z
 2413
--- a/extra/sample_plugin/db/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/db/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin/db
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/db
 http://redmine.rubyforge.org/svn
 
 
--- a/extra/sample_plugin/db/migrate/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/sample_plugin/db/migrate/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/sample_plugin/db/migrate
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/sample_plugin/db/migrate
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 2316ab57f3d60b7f04b4bdfdebf6fd8e
 2008-07-27T19:10:56.352148Z
 1703
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/extra/svn/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,29 @@
+K 25
+svn:wc:ra_dav:version-url
+V 34
+/svn/!svn/ver/4936/trunk/extra/svn
+END
+reposman.rb
+K 25
+svn:wc:ra_dav:version-url
+V 46
+/svn/!svn/ver/4288/trunk/extra/svn/reposman.rb
+END
+svnserve.wrapper
+K 25
+svn:wc:ra_dav:version-url
+V 50
+/svn/!svn/ver/402/trunk/extra/svn/svnserve.wrapper
+END
+Redmine.pm
+K 25
+svn:wc:ra_dav:version-url
+V 45
+/svn/!svn/ver/4936/trunk/extra/svn/Redmine.pm
+END
+create_views.sql
+K 25
+svn:wc:ra_dav:version-url
+V 50
+/svn/!svn/ver/396/trunk/extra/svn/create_views.sql
+END
--- a/extra/svn/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/svn/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/extra/svn
+4993
+http://redmine.rubyforge.org/svn/trunk/extra/svn
 http://redmine.rubyforge.org/svn
 
 
 
-2010-10-29T22:55:50.222644Z
-4309
-jbbarth
+2011-02-23T17:27:31.762248Z
+4936
+jplang
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T12:46:09.000000Z
+2011-03-03T11:05:12.000000Z
 a0d169b0fc20459335e531e4f3921ede
 2010-10-24T21:00:05.611798Z
 4288
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:12.000000Z
 f41d78e45e03554626edf5e4e6663d80
 2007-04-02T19:01:31.084001Z
 402
@@ -100,11 +100,11 @@
 
 
 
-2010-11-30T13:11:53.000000Z
-5ed4546a59c9729cbd9b407ad0996b9b
-2010-10-29T22:55:50.222644Z
-4309
-jbbarth
+2011-03-03T11:40:18.000000Z
+c3d331d6024a3d0f0c250fda387ce052
+2011-02-23T17:27:31.762248Z
+4936
+jplang
 has-props
 
 
@@ -126,7 +126,7 @@
 
 
 
-10752
+10843
 
 create_views.sql
 file
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:12.000000Z
 96fdfe0a7a4913dbbfc1b871d7abab02
 2007-04-01T19:43:59.029417Z
 396
--- a/extra/svn/.svn/text-base/Redmine.pm.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/svn/.svn/text-base/Redmine.pm.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -148,7 +148,7 @@
   my ($self, $parms, $arg) = @_;
   $self->{RedmineDSN} = $arg;
   my $query = "SELECT 
-                 hashed_password, auth_source_id, permissions
+                 hashed_password, salt, auth_source_id, permissions
               FROM members, projects, users, roles, member_roles
               WHERE 
                 projects.id=members.project_id
@@ -316,11 +316,12 @@
   $sth->execute($redmine_user, $project_id);
 
   my $ret;
-  while (my ($hashed_password, $auth_source_id, $permissions) = $sth->fetchrow_array) {
+  while (my ($hashed_password, $salt, $auth_source_id, $permissions) = $sth->fetchrow_array) {
 
       unless ($auth_source_id) {
-	  my $method = $r->method;
-          if ($hashed_password eq $pass_digest && ((defined $read_only_methods{$method} && $permissions =~ /:browse_repository/) || $permissions =~ /:commit_access/) ) {
+	  			my $method = $r->method;
+          my $salted_password = Digest::SHA1::sha1_hex($salt.$pass_digest);
+					if ($hashed_password eq $salted_password && ((defined $read_only_methods{$method} && $permissions =~ /:browse_repository/) || $permissions =~ /:commit_access/) ) {
               $ret = 1;
               last;
           }
--- a/extra/svn/Redmine.pm	Thu Jan 20 09:59:02 2011 +0000
+++ b/extra/svn/Redmine.pm	Thu Mar 03 12:02:03 2011 +0000
@@ -148,7 +148,7 @@
   my ($self, $parms, $arg) = @_;
   $self->{RedmineDSN} = $arg;
   my $query = "SELECT 
-                 hashed_password, auth_source_id, permissions
+                 hashed_password, salt, auth_source_id, permissions
               FROM members, projects, users, roles, member_roles
               WHERE 
                 projects.id=members.project_id
@@ -316,11 +316,12 @@
   $sth->execute($redmine_user, $project_id);
 
   my $ret;
-  while (my ($hashed_password, $auth_source_id, $permissions) = $sth->fetchrow_array) {
+  while (my ($hashed_password, $salt, $auth_source_id, $permissions) = $sth->fetchrow_array) {
 
       unless ($auth_source_id) {
-	  my $method = $r->method;
-          if ($hashed_password eq $pass_digest && ((defined $read_only_methods{$method} && $permissions =~ /:browse_repository/) || $permissions =~ /:commit_access/) ) {
+	  			my $method = $r->method;
+          my $salted_password = Digest::SHA1::sha1_hex($salt.$pass_digest);
+					if ($hashed_password eq $salted_password && ((defined $read_only_methods{$method} && $permissions =~ /:browse_repository/) || $permissions =~ /:commit_access/) ) {
               $ret = 1;
               last;
           }
--- a/files/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/files/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/files
+4993
+http://redmine.rubyforge.org/svn/trunk/files
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:13.000000Z
 ae0415159f2c4dba3fc1a559d4c0f9f5
 2006-06-28T18:11:03.549769Z
 4
--- a/lib/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 28
-/svn/!svn/ver/4688/trunk/lib
+/svn/!svn/ver/4993/trunk/lib
 END
 faster_csv.rb
 K 25
@@ -13,7 +13,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 39
-/svn/!svn/ver/4466/trunk/lib/redmine.rb
+/svn/!svn/ver/4954/trunk/lib/redmine.rb
 END
 tabular_form_builder.rb
 K 25
--- a/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-11T08:41:35.993532Z
-4688
+2011-03-03T05:51:46.224821Z
+4993
 tmaruyama
 
 
@@ -38,7 +38,7 @@
 
 
 
-2010-09-23T14:37:44.983792Z
+2011-03-03T11:05:14.000000Z
 1657561b457dadfa5d004a393bdd1a2e
 2009-11-04T13:22:26.440808Z
 3007
@@ -78,10 +78,10 @@
 
 
 
-2011-01-13T14:11:09.000000Z
-a25bf842b86584d0d77844d95b6ab907
-2010-12-04T17:43:39.823144Z
-4466
+2011-03-03T11:40:18.000000Z
+931d36182ff7c72cf9e133581a6e1822
+2011-02-27T13:34:41.060565Z
+4954
 jplang
 has-props
 
@@ -104,7 +104,7 @@
 
 
 
-12841
+12850
 
 tabular_form_builder.rb
 file
@@ -112,7 +112,7 @@
 
 
 
-2010-09-23T14:37:45.055767Z
+2011-03-03T11:05:14.000000Z
 9d8fb5ede85fd780f018b74b36a83034
 2010-06-20T19:03:09.888571Z
 3804
@@ -149,7 +149,7 @@
 
 
 
-2011-01-13T14:11:09.000000Z
+2011-03-03T11:05:14.000000Z
 d76edcf3565b73d5e63e37d3e1c72512
 2010-12-05T10:09:18.457497Z
 4468
@@ -183,7 +183,7 @@
 
 
 
-2010-09-23T14:37:44.983792Z
+2011-03-03T11:05:14.000000Z
 55e7cfa4fcb3619e9939d29336ecdf02
 2008-03-11T19:33:38.611682Z
 1227
@@ -217,7 +217,7 @@
 
 
 
-2010-09-23T14:37:44.983792Z
+2011-03-03T11:05:14.000000Z
 1ecc6c4c4ae6aa3e75600673b4b78add
 2009-08-15T22:41:40.505056Z
 2840
--- a/lib/.svn/text-base/redmine.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/.svn/text-base/redmine.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -62,7 +62,7 @@
                                   :auto_complete => [:issues],
                                   :context_menus => [:issues],
                                   :versions => [:index, :show, :status_by],
-                                  :journals => :index,
+                                  :journals => [:index, :diff],
                                   :queries => :index,
                                   :reports => [:issue_report, :issue_report_details]}
     map.permission :add_issues, {:issues => [:new, :create, :update_form]}
--- a/lib/SVG/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/SVG/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/SVG
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/SVG
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 393a5ca445f6965873eca0259a17f833
 2007-03-25T17:11:46.804742Z
 380
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 072cf60873854a186c6eba9b74dbe389
 2007-03-25T17:11:46.804742Z
 380
--- a/lib/SVG/Graph/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/SVG/Graph/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/SVG/Graph
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/SVG/Graph
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 0a49ed37717b08c6bccdc843a03a333d
 2009-03-30T19:58:17.407192Z
 2642
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 55ff835de5a0fb0fd2d6a236b1c5c436
 2009-03-30T19:58:17.407192Z
 2642
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 a39e9963eaae7bb913b6d8d2dfe0506f
 2009-03-30T19:58:17.407192Z
 2642
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 184772c0f1732eadf12b0e8bc9e172f7
 2009-03-30T19:58:17.407192Z
 2642
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 fad5865539cbd7ba3433fd6d47b9d3f2
 2009-11-07T10:40:54.677820Z
 3017
@@ -202,7 +202,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 cc9051d7617dfe6dd6cc47fe83fd6ec4
 2009-03-30T19:58:17.407192Z
 2642
@@ -236,7 +236,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 f092a4b0f16876381bc9283058eeb48c
 2007-03-25T17:11:46.804742Z
 380
@@ -270,7 +270,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 73dbcb4a1cba46b4e46a81881d24ff1a
 2009-03-30T19:58:17.407192Z
 2642
@@ -304,7 +304,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 d8e95d0e507a02a74a5ac3435560d3bd
 2007-03-25T17:11:46.804742Z
 380
--- a/lib/generators/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/generators/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/generators
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/generators
 http://redmine.rubyforge.org/svn
 
 
--- a/lib/generators/redmine_plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/generators/redmine_plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/generators/redmine_plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 334056a407de9091bb8774ba986c53f9
 2009-06-10T03:39:02.884087Z
 2785
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 be5d60ef31ac822cd5650ab976dcc543
 2009-06-10T03:39:02.884087Z
 2785
--- a/lib/generators/redmine_plugin/templates/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/generators/redmine_plugin/templates/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/generators/redmine_plugin/templates
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin/templates
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 2d39c559d341be440cb60911ef125dd9
 2008-09-05T10:31:06.632668Z
 1786
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 d97a21936cfb77543031f7d9a5d5131a
 2008-10-25T04:37:31.779636Z
 1949
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 d14592489e5b7d34b33d2487f4770b7d
 2008-10-25T04:37:31.779636Z
 1949
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 ab791ada26df5c9c1a13b771e988a36f
 2009-06-10T03:39:02.884087Z
 2785
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 39cb16a49db6c72cdd7a63447d5b188f
 2010-06-17T19:02:13.409991Z
 3771
--- a/lib/generators/redmine_plugin_controller/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/generators/redmine_plugin_controller/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/generators/redmine_plugin_controller
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_controller
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 60c1792566a450d246dd66ff274ae06c
 2008-09-05T10:31:06.632668Z
 1786
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 23b15404071adb39cb140a6113057f15
 2010-02-28T12:15:47.320153Z
 3514
--- a/lib/generators/redmine_plugin_controller/templates/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/generators/redmine_plugin_controller/templates/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/generators/redmine_plugin_controller/templates
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_controller/templates
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 0ae9d2e8e624fef815f60164d47b6464
 2008-09-05T10:31:06.632668Z
 1786
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 e8491aac2379dbba3d3ddadc30f6db07
 2008-10-25T09:35:51.426668Z
 1951
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 2fdd792e6b6825b4f1802ba4767e0435
 2008-10-25T09:35:51.426668Z
 1951
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 22e765f47aacc324789509219797d087
 2010-06-17T19:02:07.893033Z
 3770
--- a/lib/generators/redmine_plugin_model/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/generators/redmine_plugin_model/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/generators/redmine_plugin_model
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_model
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 ca5ffbd9dfb099b2f38ca21c030ffea0
 2008-09-05T10:31:06.632668Z
 1786
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 ba0c0092c69cca4c21b1b26027f7472b
 2010-02-28T12:15:47.320153Z
 3514
--- a/lib/generators/redmine_plugin_model/templates/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/generators/redmine_plugin_model/templates/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/generators/redmine_plugin_model/templates
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/generators/redmine_plugin_model/templates
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 ce0817700ec27f10f7d07f998bff6991
 2008-10-25T09:35:51.426668Z
 1951
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 a4081d31f6d22e7655b4f6e9fb894a03
 2009-10-17T21:08:33.644420Z
 2926
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 115e77dae670747c95b5ff22c01d4174
 2008-09-05T10:31:06.632668Z
 1786
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 3a783571ccc96a2f639329700dda677b
 2010-06-17T19:02:07.893033Z
 3770
--- a/lib/plugins/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/plugins/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/plugins
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/plugins
 http://redmine.rubyforge.org/svn
 
 
--- a/lib/redmine.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -62,7 +62,7 @@
                                   :auto_complete => [:issues],
                                   :context_menus => [:issues],
                                   :versions => [:index, :show, :status_by],
-                                  :journals => :index,
+                                  :journals => [:index, :diff],
                                   :queries => :index,
                                   :reports => [:issue_report, :issue_report_details]}
     map.permission :add_issues, {:issues => [:new, :create, :update_form]}
--- a/lib/redmine/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,19 +1,19 @@
 K 25
 svn:wc:ra_dav:version-url
 V 36
-/svn/!svn/ver/4688/trunk/lib/redmine
+/svn/!svn/ver/4993/trunk/lib/redmine
 END
 i18n.rb
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/4516/trunk/lib/redmine/i18n.rb
+/svn/!svn/ver/4894/trunk/lib/redmine/i18n.rb
 END
 pop3.rb
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/3330/trunk/lib/redmine/pop3.rb
+/svn/!svn/ver/4737/trunk/lib/redmine/pop3.rb
 END
 safe_attributes.rb
 K 25
@@ -43,7 +43,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 47
-/svn/!svn/ver/4619/trunk/lib/redmine/version.rb
+/svn/!svn/ver/4784/trunk/lib/redmine/version.rb
 END
 imap.rb
 K 25
@@ -63,36 +63,36 @@
 V 44
 /svn/!svn/ver/2776/trunk/lib/redmine/info.rb
 END
+access_keys.rb
+K 25
+svn:wc:ra_dav:version-url
+V 51
+/svn/!svn/ver/1081/trunk/lib/redmine/access_keys.rb
+END
 activity.rb
 K 25
 svn:wc:ra_dav:version-url
 V 48
 /svn/!svn/ver/1702/trunk/lib/redmine/activity.rb
 END
-access_keys.rb
-K 25
-svn:wc:ra_dav:version-url
-V 51
-/svn/!svn/ver/1081/trunk/lib/redmine/access_keys.rb
-END
 wiki_formatting.rb
 K 25
 svn:wc:ra_dav:version-url
 V 55
 /svn/!svn/ver/3446/trunk/lib/redmine/wiki_formatting.rb
 END
+menu_manager.rb
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/4406/trunk/lib/redmine/menu_manager.rb
+END
 plugin.rb
 K 25
 svn:wc:ra_dav:version-url
 V 46
 /svn/!svn/ver/4293/trunk/lib/redmine/plugin.rb
 END
-menu_manager.rb
-K 25
-svn:wc:ra_dav:version-url
-V 52
-/svn/!svn/ver/4406/trunk/lib/redmine/menu_manager.rb
-END
 utils.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -117,12 +117,24 @@
 V 46
 /svn/!svn/ver/3444/trunk/lib/redmine/search.rb
 END
+configuration.rb
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/4949/trunk/lib/redmine/configuration.rb
+END
 core_ext.rb
 K 25
 svn:wc:ra_dav:version-url
 V 48
 /svn/!svn/ver/1361/trunk/lib/redmine/core_ext.rb
 END
+ciphering.rb
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/4950/trunk/lib/redmine/ciphering.rb
+END
 about.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -139,7 +151,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 52
-/svn/!svn/ver/3028/trunk/lib/redmine/unified_diff.rb
+/svn/!svn/ver/4929/trunk/lib/redmine/unified_diff.rb
 END
 notifiable.rb
 K 25
--- a/lib/redmine/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/lib/redmine
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-11T08:41:35.993532Z
-4688
+2011-03-03T05:51:46.224821Z
+4993
 tmaruyama
 
 
@@ -35,10 +35,10 @@
 
 
 
-2010-09-23T14:37:45.031809Z
-7905a0773e7d2f6b468fc5b9e107db4d
-2010-01-17T13:53:13.544777Z
-3330
+2011-03-03T11:05:14.000000Z
+85ff863202dfbf2a6e9447a3bcf7cc06
+2011-01-22T12:09:07.652831Z
+4737
 jplang
 has-props
 
@@ -61,7 +61,7 @@
 
 
 
-2173
+2461
 
 themes.rb
 file
@@ -69,7 +69,7 @@
 
 
 
-2011-01-13T14:09:39.000000Z
+2011-03-03T11:05:14.000000Z
 23fd3a13b8bcd6b3e2547e913d5fae18
 2010-12-22T21:41:08.746858Z
 4559
@@ -103,7 +103,7 @@
 
 
 
-2010-09-23T14:37:45.031809Z
+2011-03-03T11:05:14.000000Z
 caeedebd5c05aede1d232510d03ad136
 2008-12-31T14:56:30.439880Z
 2220
@@ -140,7 +140,7 @@
 
 
 
-2010-09-23T14:37:45.031809Z
+2011-03-03T11:05:14.000000Z
 ddadcd03b97455adae2451a2140afbf6
 2009-05-30T23:00:22.602473Z
 2776
@@ -174,7 +174,7 @@
 
 
 
-2010-09-23T14:37:45.015759Z
+2011-03-03T11:05:14.000000Z
 41c2852d003d94cb23c231f06be62d12
 2008-01-20T13:07:19.003764Z
 1081
@@ -202,13 +202,16 @@
 
 1160
 
+helpers
+dir
+
 utils.rb
 file
 
 
 
 
-2010-09-23T14:37:45.047759Z
+2011-03-03T11:05:14.000000Z
 d04b071ce8f05b44ca6993c56fea9b1f
 2009-01-04T17:09:25.896068Z
 2234
@@ -236,16 +239,13 @@
 
 1466
 
-helpers
-dir
-
 access_control.rb
 file
 
 
 
 
-2010-09-23T14:37:45.015759Z
+2011-03-03T11:05:14.000000Z
 e7e4c44515553e36bffa6e8f8960080b
 2008-09-25T18:51:03.022592Z
 1907
@@ -279,7 +279,7 @@
 
 
 
-2010-09-23T14:37:45.043748Z
+2011-03-03T11:05:14.000000Z
 6f968bcc4f81562e9cbddb02ebc62601
 2010-02-17T20:05:51.124365Z
 3444
@@ -310,13 +310,47 @@
 core_ext
 dir
 
+configuration.rb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+2f47dda69333c012a55496a3792c369e
+2011-02-25T14:30:05.998365Z
+4949
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3639
+
 about.rb
 file
 
 
 
 
-2010-09-23T14:37:45.015759Z
+2011-03-03T11:05:14.000000Z
 91ed592a8419f1bec48ba880c7a86e29
 2009-05-25T19:10:26.065563Z
 2766
@@ -350,7 +384,7 @@
 
 
 
-2010-09-23T14:37:45.043748Z
+2011-03-03T11:05:14.000000Z
 4a40844a6cd11aa7409bc8f4e9a2c74e
 2010-03-28T11:30:48.135356Z
 3619
@@ -384,7 +418,7 @@
 
 
 
-2010-11-19T13:04:51.416932Z
+2011-03-03T11:05:14.000000Z
 cfdd5556d40422dd9610d2124a2fefac
 2010-09-28T21:09:06.467392Z
 4222
@@ -418,10 +452,10 @@
 
 
 
-2011-01-13T14:09:39.000000Z
-009b7a9ada5c3e83d6a7a26256c34951
-2010-12-17T08:34:29.830642Z
-4516
+2011-03-03T11:40:18.000000Z
+cc684405103aabd5f4aea0c21fd7c732
+2011-02-20T14:56:37.399906Z
+4894
 jplang
 has-props
 
@@ -444,18 +478,52 @@
 
 
 
-2315
+2255
 
 scm
 dir
 
+safe_attributes.rb
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+7f659c02de1ea89806beda1772dc4d36
+2010-12-12T13:11:53.259618Z
+4491
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2579
+
 platform.rb
 file
 
 
 
 
-2010-09-23T14:37:45.031809Z
+2011-03-03T11:05:14.000000Z
 68165c83be56d3204c582958d933ff0a
 2008-08-25T11:01:37.715099Z
 1753
@@ -483,50 +551,16 @@
 
 1009
 
-safe_attributes.rb
-file
-
-
-
-
-2011-01-13T14:09:39.000000Z
-7f659c02de1ea89806beda1772dc4d36
-2010-12-12T13:11:53.259618Z
-4491
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2579
-
 version.rb
 file
 
 
 
 
-2011-01-13T14:09:39.000000Z
-599c6a070c34c23117d1176bf811988d
-2011-01-02T12:16:40.859443Z
-4619
+2011-03-03T11:05:14.000000Z
+c6c19bce5ff3b4298316ffb112478868
+2011-01-30T14:37:23.564601Z
+4784
 jplang
 has-props
 
@@ -557,7 +591,7 @@
 
 
 
-2010-09-23T14:37:45.023772Z
+2011-03-03T11:05:14.000000Z
 7fd1fcfb204480b0e9903fd03c53a563
 2010-04-16T15:34:05.970144Z
 3675
@@ -591,7 +625,7 @@
 
 
 
-2010-09-23T14:37:45.031809Z
+2011-03-03T11:05:14.000000Z
 dbfad515b1d5c277d2f8e9d67233185e
 2009-12-29T13:28:30.604471Z
 3258
@@ -631,7 +665,7 @@
 
 
 
-2010-09-23T14:37:45.015759Z
+2011-03-03T11:05:14.000000Z
 88435997a6d77548eab82526df38caf1
 2008-07-27T18:38:31.746909Z
 1702
@@ -665,7 +699,7 @@
 
 
 
-2010-09-23T14:37:45.047759Z
+2011-03-03T11:05:14.000000Z
 648c40cc515e97d063d2c2f218cbbc23
 2010-02-17T20:47:50.603139Z
 3446
@@ -693,13 +727,47 @@
 
 4431
 
+plugin.rb
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+81bc46012d5a0067e18e08bada197d8c
+2010-10-25T23:32:01.793182Z
+4293
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+11219
+
 menu_manager.rb
 file
 
 
 
 
-2010-11-19T13:04:51.412966Z
+2011-03-03T11:05:14.000000Z
 7f3739a749929e1f65efb292620d361b
 2010-11-14T16:24:21.989522Z
 4406
@@ -727,47 +795,13 @@
 
 15303
 
-plugin.rb
-file
-
-
-
-
-2010-11-19T13:04:51.412966Z
-81bc46012d5a0067e18e08bada197d8c
-2010-10-25T23:32:01.793182Z
-4293
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-11219
-
 hook.rb
 file
 
 
 
 
-2010-11-19T13:04:51.416932Z
+2011-03-03T11:05:14.000000Z
 dfacee092edce74d74e8ea7d7a54aeba
 2010-11-14T16:24:21.989522Z
 4406
@@ -801,7 +835,7 @@
 
 
 
-2010-09-23T14:37:45.019747Z
+2011-03-03T11:05:14.000000Z
 7632bcee464a923f5aa7c9eba29f8081
 2008-04-26T11:59:51.889210Z
 1361
@@ -829,6 +863,40 @@
 
 77
 
+ciphering.rb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+763ba2f765c62f378371f2472679c464
+2011-02-26T13:09:25.657748Z
+4950
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2933
+
 default_data
 dir
 
@@ -838,11 +906,11 @@
 
 
 
-2010-09-23T14:37:45.047759Z
-69c22a4064f90e2ce460a0c9013c7cd0
-2009-11-11T13:25:53.648186Z
-3028
-jplang
+2011-03-03T11:40:18.000000Z
+561d23da6665fb790120f9d59962fb78
+2011-02-23T07:03:45.049119Z
+4929
+tmaruyama
 has-props
 
 
@@ -864,5 +932,5 @@
 
 
 
-5259
+5678
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/.svn/prop-base/ciphering.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/.svn/prop-base/configuration.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/.svn/text-base/ciphering.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,95 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+module Redmine
+  module Ciphering
+    def self.included(base) 
+      base.extend ClassMethods
+    end
+    
+    class << self
+      def encrypt_text(text)
+        if cipher_key.blank?
+          text
+        else
+          c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
+          iv = c.random_iv
+          c.encrypt
+          c.key = cipher_key
+          c.iv = iv
+          e = c.update(text.to_s)
+          e << c.final
+          "aes-256-cbc:" + [e, iv].map {|v| Base64.encode64(v).strip}.join('--')
+        end
+      end
+      
+      def decrypt_text(text)
+        if text && match = text.match(/\Aaes-256-cbc:(.+)\Z/)
+          text = match[1]
+          c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
+          e, iv = text.split("--").map {|s| Base64.decode64(s)}
+          c.decrypt
+          c.key = cipher_key
+          c.iv = iv
+          d = c.update(e)
+          d << c.final
+        else
+          text
+        end
+      end
+      
+      def cipher_key
+        key = Redmine::Configuration['database_cipher_key'].to_s
+        key.blank? ? nil : Digest::SHA256.hexdigest(key)
+      end
+    end
+  
+    module ClassMethods
+      def encrypt_all(attribute)
+        transaction do
+          all.each do |object|
+            clear = object.send(attribute)
+            object.send "#{attribute}=", clear
+            raise(ActiveRecord::Rollback) unless object.save(false)
+          end
+        end ? true : false
+      end
+      
+      def decrypt_all(attribute)
+        transaction do
+          all.each do |object|
+            clear = object.send(attribute)
+            object.write_attribute attribute, clear
+            raise(ActiveRecord::Rollback) unless object.save(false)
+          end
+        end
+      end ? true : false
+    end
+    
+    private
+    
+    # Returns the value of the given ciphered attribute
+    def read_ciphered_attribute(attribute)
+      Redmine::Ciphering.decrypt_text(read_attribute(attribute))
+    end
+    
+    # Sets the value of the given ciphered attribute
+    def write_ciphered_attribute(attribute, value)
+      write_attribute(attribute, Redmine::Ciphering.encrypt_text(value))
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/.svn/text-base/configuration.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,107 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+module Redmine
+  module Configuration
+    
+    # Configuration default values
+    @defaults = {
+      'email_delivery' => nil
+    }
+    
+    @config = nil
+    
+    class << self
+      # Loads the Redmine configuration file
+      # Valid options:
+      # * <tt>:file</tt>: the configuration file to load (default: config/configuration.yml)
+      # * <tt>:env</tt>: the environment to load the configuration for (default: Rails.env) 
+      def load(options={})
+        filename = options[:file] || File.join(Rails.root, 'config', 'configuration.yml')
+        env = options[:env] || Rails.env
+        
+        @config = @defaults.dup
+        
+        load_deprecated_email_configuration(env)
+        if File.file?(filename)
+          @config.merge!(load_from_yaml(filename, env))
+        end
+        
+        # Compatibility mode for those who copy email.yml over configuration.yml
+        %w(delivery_method smtp_settings sendmail_settings).each do |key|
+          if value = @config.delete(key)
+            @config['email_delivery'] ||= {}
+            @config['email_delivery'][key] = value
+          end
+        end
+        
+        if @config['email_delivery']
+          ActionMailer::Base.perform_deliveries = true
+          @config['email_delivery'].each do |k, v|
+            v.symbolize_keys! if v.respond_to?(:symbolize_keys!)
+            ActionMailer::Base.send("#{k}=", v)
+          end
+        end
+          
+        @config
+      end
+      
+      # Returns a configuration setting
+      def [](name)
+        load unless @config
+        @config[name]
+      end
+      
+      # Yields a block with the specified hash configuration settings
+      def with(settings)
+        settings.stringify_keys!
+        load unless @config
+        was = settings.keys.inject({}) {|h,v| h[v] = @config[v]; h}
+        @config.merge! settings
+        yield if block_given?
+        @config.merge! was
+      end
+      
+      private
+      
+      def load_from_yaml(filename, env)
+        yaml = YAML::load_file(filename)
+        conf = {}
+        if yaml.is_a?(Hash)
+          if yaml['default']
+            conf.merge!(yaml['default'])
+          end
+          if yaml[env]
+            conf.merge!(yaml[env])
+          end
+        else
+          $stderr.puts "#{filename} is not a valid Redmine configuration file"
+          exit 1
+        end
+        conf
+      end
+      
+      def load_deprecated_email_configuration(env)
+        deprecated_email_conf = File.join(Rails.root, 'config', 'email.yml')
+        if File.file?(deprecated_email_conf)
+          warn "Storing outgoing emails configuration in config/email.yml is deprecated. You should now store it in config/configuration.yml using the email_delivery setting."
+          @config.merge!({'email_delivery' => load_from_yaml(deprecated_email_conf, env)})
+        end
+      end
+    end
+  end
+end
--- a/lib/redmine/.svn/text-base/i18n.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/.svn/text-base/i18n.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -45,8 +45,8 @@
       time = time.to_time if time.is_a?(String)
       zone = User.current.time_zone
       local = zone ? time.in_time_zone(zone) : (time.utc? ? time.localtime : time)
-      Setting.time_format.blank? ? ::I18n.l(local, :format => (include_date ? :default : :time)) : 
-                                   ((include_date ? "#{format_date(time)} " : "") + "#{local.strftime(Setting.time_format)}")
+      (include_date ? "#{format_date(local)} " : "") +
+        (Setting.time_format.blank? ? ::I18n.l(local, :format => :time) : local.strftime(Setting.time_format))
     end
 
     def day_name(day)
--- a/lib/redmine/.svn/text-base/pop3.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/.svn/text-base/pop3.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -27,30 +27,36 @@
         delete_unprocessed = (pop_options[:delete_unprocessed].to_s == '1')
 
         pop = Net::POP3.APOP(apop).new(host,port)
-        puts "Connecting to #{host}..."
+        logger.debug "Connecting to #{host}..." if logger && logger.debug?
         pop.start(pop_options[:username], pop_options[:password]) do |pop_session|
           if pop_session.mails.empty?
-            puts "No email to process"
+            logger.debug "No email to process" if logger && logger.debug?
           else
-            puts "#{pop_session.mails.size} email(s) to process..."
+            logger.debug "#{pop_session.mails.size} email(s) to process..." if logger && logger.debug?
             pop_session.each_mail do |msg|
               message = msg.pop
               message_id = (message =~ /^Message-ID: (.*)/ ? $1 : '').strip
               if MailHandler.receive(message, options)
                 msg.delete
-                puts "--> Message #{message_id} processed and deleted from the server"
+                logger.debug "--> Message #{message_id} processed and deleted from the server" if logger && logger.debug?
               else
                 if delete_unprocessed
                   msg.delete
-                  puts "--> Message #{message_id} NOT processed and deleted from the server"
+                  logger.debug "--> Message #{message_id} NOT processed and deleted from the server" if logger && logger.debug?
                 else
-                  puts "--> Message #{message_id} NOT processed and left on the server"
+                  logger.debug "--> Message #{message_id} NOT processed and left on the server" if logger && logger.debug?
                 end
               end
             end
           end
         end
       end
+      
+      private
+
+      def logger
+        RAILS_DEFAULT_LOGGER
+      end
     end
   end
 end
--- a/lib/redmine/.svn/text-base/unified_diff.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/.svn/text-base/unified_diff.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -22,13 +22,21 @@
       options.assert_valid_keys(:type, :max_lines)
       diff = diff.split("\n") if diff.is_a?(String)
       diff_type = options[:type] || 'inline'
-      
       lines = 0
       @truncated = false
       diff_table = DiffTable.new(diff_type)
       diff.each do |line|
+        line_encoding = nil
+        if line.respond_to?(:force_encoding)
+          line_encoding = line.encoding
+          # TODO: UTF-16 and Japanese CP932 which is imcompatible with ASCII
+          #       In Japan, diffrence between file path encoding
+          #       and file contents encoding is popular.
+          line.force_encoding('ASCII-8BIT')
+        end
         unless diff_table.add_line line
-          self << diff_table if diff_table.length > 1
+          line.force_encoding(line_encoding) if line_encoding
+          self << diff_table if diff_table.length > 0
           diff_table = DiffTable.new(diff_type)
         end
         lines += 1
@@ -40,7 +48,7 @@
       self << diff_table unless diff_table.empty?
       self
     end
-    
+
     def truncated?; @truncated; end
   end
 
--- a/lib/redmine/.svn/text-base/version.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/.svn/text-base/version.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -4,7 +4,7 @@
   module VERSION #:nodoc:
     MAJOR = 1
     MINOR = 1
-    TINY  = 0
+    TINY  = 1
     
     # Branch values:
     # * official release: nil
--- a/lib/redmine/activity/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/activity/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/redmine/activity
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/redmine/activity
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 20597949bb74e98a3ffc97bc8a3ead7d
 2010-07-06T02:22:03.226147Z
 3829
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/ciphering.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,95 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+module Redmine
+  module Ciphering
+    def self.included(base) 
+      base.extend ClassMethods
+    end
+    
+    class << self
+      def encrypt_text(text)
+        if cipher_key.blank?
+          text
+        else
+          c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
+          iv = c.random_iv
+          c.encrypt
+          c.key = cipher_key
+          c.iv = iv
+          e = c.update(text.to_s)
+          e << c.final
+          "aes-256-cbc:" + [e, iv].map {|v| Base64.encode64(v).strip}.join('--')
+        end
+      end
+      
+      def decrypt_text(text)
+        if text && match = text.match(/\Aaes-256-cbc:(.+)\Z/)
+          text = match[1]
+          c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
+          e, iv = text.split("--").map {|s| Base64.decode64(s)}
+          c.decrypt
+          c.key = cipher_key
+          c.iv = iv
+          d = c.update(e)
+          d << c.final
+        else
+          text
+        end
+      end
+      
+      def cipher_key
+        key = Redmine::Configuration['database_cipher_key'].to_s
+        key.blank? ? nil : Digest::SHA256.hexdigest(key)
+      end
+    end
+  
+    module ClassMethods
+      def encrypt_all(attribute)
+        transaction do
+          all.each do |object|
+            clear = object.send(attribute)
+            object.send "#{attribute}=", clear
+            raise(ActiveRecord::Rollback) unless object.save(false)
+          end
+        end ? true : false
+      end
+      
+      def decrypt_all(attribute)
+        transaction do
+          all.each do |object|
+            clear = object.send(attribute)
+            object.write_attribute attribute, clear
+            raise(ActiveRecord::Rollback) unless object.save(false)
+          end
+        end
+      end ? true : false
+    end
+    
+    private
+    
+    # Returns the value of the given ciphered attribute
+    def read_ciphered_attribute(attribute)
+      Redmine::Ciphering.decrypt_text(read_attribute(attribute))
+    end
+    
+    # Sets the value of the given ciphered attribute
+    def write_ciphered_attribute(attribute, value)
+      write_attribute(attribute, Redmine::Ciphering.encrypt_text(value))
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/configuration.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,107 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+module Redmine
+  module Configuration
+    
+    # Configuration default values
+    @defaults = {
+      'email_delivery' => nil
+    }
+    
+    @config = nil
+    
+    class << self
+      # Loads the Redmine configuration file
+      # Valid options:
+      # * <tt>:file</tt>: the configuration file to load (default: config/configuration.yml)
+      # * <tt>:env</tt>: the environment to load the configuration for (default: Rails.env) 
+      def load(options={})
+        filename = options[:file] || File.join(Rails.root, 'config', 'configuration.yml')
+        env = options[:env] || Rails.env
+        
+        @config = @defaults.dup
+        
+        load_deprecated_email_configuration(env)
+        if File.file?(filename)
+          @config.merge!(load_from_yaml(filename, env))
+        end
+        
+        # Compatibility mode for those who copy email.yml over configuration.yml
+        %w(delivery_method smtp_settings sendmail_settings).each do |key|
+          if value = @config.delete(key)
+            @config['email_delivery'] ||= {}
+            @config['email_delivery'][key] = value
+          end
+        end
+        
+        if @config['email_delivery']
+          ActionMailer::Base.perform_deliveries = true
+          @config['email_delivery'].each do |k, v|
+            v.symbolize_keys! if v.respond_to?(:symbolize_keys!)
+            ActionMailer::Base.send("#{k}=", v)
+          end
+        end
+          
+        @config
+      end
+      
+      # Returns a configuration setting
+      def [](name)
+        load unless @config
+        @config[name]
+      end
+      
+      # Yields a block with the specified hash configuration settings
+      def with(settings)
+        settings.stringify_keys!
+        load unless @config
+        was = settings.keys.inject({}) {|h,v| h[v] = @config[v]; h}
+        @config.merge! settings
+        yield if block_given?
+        @config.merge! was
+      end
+      
+      private
+      
+      def load_from_yaml(filename, env)
+        yaml = YAML::load_file(filename)
+        conf = {}
+        if yaml.is_a?(Hash)
+          if yaml['default']
+            conf.merge!(yaml['default'])
+          end
+          if yaml[env]
+            conf.merge!(yaml[env])
+          end
+        else
+          $stderr.puts "#{filename} is not a valid Redmine configuration file"
+          exit 1
+        end
+        conf
+      end
+      
+      def load_deprecated_email_configuration(env)
+        deprecated_email_conf = File.join(Rails.root, 'config', 'email.yml')
+        if File.file?(deprecated_email_conf)
+          warn "Storing outgoing emails configuration in config/email.yml is deprecated. You should now store it in config/configuration.yml using the email_delivery setting."
+          @config.merge!({'email_delivery' => load_from_yaml(deprecated_email_conf, env)})
+        end
+      end
+    end
+  end
+end
--- a/lib/redmine/core_ext/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/core_ext/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/redmine/core_ext
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/redmine/core_ext
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 fcafa1cc4149d3a5de82816c61b7fa02
 2009-08-17T16:32:24.020380Z
 2844
--- a/lib/redmine/core_ext/string/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/core_ext/string/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/redmine/core_ext/string
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/redmine/core_ext/string
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 e614ecdb2fac85cd9f8808e7cff7f9de
 2009-08-17T16:32:24.020380Z
 2844
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 1cc26c5de967944da3a6b07331512637
 2009-10-10T15:09:19.510095Z
 2912
--- a/lib/redmine/default_data/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/default_data/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/redmine/default_data
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/redmine/default_data
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 41958e843a8ba03548eed089e8002549
 2010-06-30T01:55:44.694582Z
 3820
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/export/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 43
+/svn/!svn/ver/4736/trunk/lib/redmine/export
+END
+pdf.rb
+K 25
+svn:wc:ra_dav:version-url
+V 50
+/svn/!svn/ver/4736/trunk/lib/redmine/export/pdf.rb
+END
--- a/lib/redmine/export/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/export/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/redmine/export
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/redmine/export
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-20T02:55:20.180218Z
-4104
-edavis10
+2011-01-22T11:57:02.732751Z
+4736
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-10-01T15:15:02.000000Z
-aa6093490555bdd119ba8f1d34cab080
-2010-09-20T02:55:20.180218Z
-4104
-edavis10
+2011-03-03T11:05:14.000000Z
+b8bd24e9575d51f0c49f8245a5d593a2
+2011-01-22T11:57:02.732751Z
+4736
+jplang
 has-props
 
 
@@ -58,5 +58,5 @@
 
 
 
-10771
+10786
 
--- a/lib/redmine/export/.svn/text-base/pdf.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/export/.svn/text-base/pdf.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -255,7 +255,7 @@
         pdf.SetFontStyle('B',9)
         pdf.Cell(35,5, l(:field_description) + ":")
         pdf.SetFontStyle('',9)
-        pdf.MultiCell(155,5, issue.description,"BR")
+        pdf.MultiCell(155,5, issue.description.to_s,"BR")
         
         pdf.Line(pdf.GetX, y0, pdf.GetX, pdf.GetY)
         pdf.Line(pdf.GetX, pdf.GetY, 170, pdf.GetY)
@@ -271,7 +271,7 @@
             pdf.Ln
             unless changeset.comments.blank?
               pdf.SetFontStyle('',8)
-              pdf.MultiCell(190,5, changeset.comments)
+              pdf.MultiCell(190,5, changeset.comments.to_s)
             end   
             pdf.Ln
           end
@@ -291,7 +291,7 @@
           end
           if journal.notes?
             pdf.SetFontStyle('',8)
-            pdf.MultiCell(190,5, journal.notes)
+            pdf.MultiCell(190,5, journal.notes.to_s)
           end   
           pdf.Ln
         end
--- a/lib/redmine/export/pdf.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/export/pdf.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -255,7 +255,7 @@
         pdf.SetFontStyle('B',9)
         pdf.Cell(35,5, l(:field_description) + ":")
         pdf.SetFontStyle('',9)
-        pdf.MultiCell(155,5, issue.description,"BR")
+        pdf.MultiCell(155,5, issue.description.to_s,"BR")
         
         pdf.Line(pdf.GetX, y0, pdf.GetX, pdf.GetY)
         pdf.Line(pdf.GetX, pdf.GetY, 170, pdf.GetY)
@@ -271,7 +271,7 @@
             pdf.Ln
             unless changeset.comments.blank?
               pdf.SetFontStyle('',8)
-              pdf.MultiCell(190,5, changeset.comments)
+              pdf.MultiCell(190,5, changeset.comments.to_s)
             end   
             pdf.Ln
           end
@@ -291,7 +291,7 @@
           end
           if journal.notes?
             pdf.SetFontStyle('',8)
-            pdf.MultiCell(190,5, journal.notes)
+            pdf.MultiCell(190,5, journal.notes.to_s)
           end   
           pdf.Ln
         end
--- a/lib/redmine/helpers/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/helpers/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,13 +1,19 @@
 K 25
 svn:wc:ra_dav:version-url
 V 44
-/svn/!svn/ver/4584/trunk/lib/redmine/helpers
+/svn/!svn/ver/4968/trunk/lib/redmine/helpers
 END
 gantt.rb
 K 25
 svn:wc:ra_dav:version-url
 V 53
-/svn/!svn/ver/4584/trunk/lib/redmine/helpers/gantt.rb
+/svn/!svn/ver/4968/trunk/lib/redmine/helpers/gantt.rb
+END
+diff.rb
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/4953/trunk/lib/redmine/helpers/diff.rb
 END
 calendar.rb
 K 25
--- a/lib/redmine/helpers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/helpers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/helpers
 http://redmine.rubyforge.org/svn
 
 
 
-2010-12-30T15:04:08.033097Z
-4584
+2011-02-28T20:23:28.847227Z
+4968
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-2c61985f04e8f13965fd9880ff9ad5dc
-2010-12-30T15:04:08.033097Z
-4584
+2011-03-03T11:40:18.000000Z
+b06b1d003a56093679e3004b619b0e04
+2011-02-28T20:23:28.847227Z
+4968
 jplang
 has-props
 
@@ -58,7 +58,41 @@
 
 
 
-32266
+32380
+
+diff.rb
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+a3487dfca2baab10aacea141b7c0fc5f
+2011-02-27T12:50:47.369941Z
+4953
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2408
 
 calendar.rb
 file
@@ -66,7 +100,7 @@
 
 
 
-2010-09-23T14:37:45.027790Z
+2011-03-03T11:05:14.000000Z
 0a7d81755cf7c1519d4b4c1d84712139
 2009-12-13T04:06:55.726600Z
 3166
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/helpers/.svn/prop-base/diff.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/helpers/.svn/text-base/diff.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,72 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+module Redmine
+  module Helpers
+    class Diff
+      include ERB::Util
+      include ActionView::Helpers::TagHelper
+      include ActionView::Helpers::TextHelper
+      attr_reader :diff, :words
+      
+      def initialize(content_to, content_from)
+        @words = content_to.to_s.split(/(\s+)/)
+        @words = @words.select {|word| word != ' '}
+        words_from = content_from.to_s.split(/(\s+)/)
+        words_from = words_from.select {|word| word != ' '}    
+        @diff = words_from.diff @words
+      end
+  
+      def to_html
+        words = self.words.collect{|word| h(word)}
+        words_add = 0
+        words_del = 0
+        dels = 0
+        del_off = 0
+        diff.diffs.each do |diff|
+          add_at = nil
+          add_to = nil
+          del_at = nil
+          deleted = ""      
+          diff.each do |change|
+            pos = change[1]
+            if change[0] == "+"
+              add_at = pos + dels unless add_at
+              add_to = pos + dels
+              words_add += 1
+            else
+              del_at = pos unless del_at
+              deleted << ' ' + h(change[2])
+              words_del  += 1
+            end
+          end
+          if add_at
+            words[add_at] = '<span class="diff_in">' + words[add_at]
+            words[add_to] = words[add_to] + '</span>'
+          end
+          if del_at
+            words.insert del_at - del_off + dels + words_add, '<span class="diff_out">' + deleted + '</span>'
+            dels += 1
+            del_off += words_del
+            words_del = 0
+          end
+        end
+        words.join(' ')
+      end
+    end
+  end
+end
--- a/lib/redmine/helpers/.svn/text-base/gantt.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/helpers/.svn/text-base/gantt.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -353,11 +353,11 @@
           subject = "<span class='#{css_classes}'>"
           if issue.assigned_to.present?
             assigned_string = l(:field_assigned_to) + ": " + issue.assigned_to.name
-            subject << view.avatar(issue.assigned_to, :class => 'gravatar icon-gravatar', :size => 10, :title => assigned_string)
+            subject << view.avatar(issue.assigned_to, :class => 'gravatar icon-gravatar', :size => 10, :title => assigned_string).to_s
           end
           subject << view.link_to_issue(issue)
           subject << '</span>'
-          html_subject(options, subject, :css => "issue-subject") + "\n"
+          html_subject(options, subject, :css => "issue-subject", :title => issue.subject) + "\n"
         when :image
           image_subject(options, issue.subject)
         when :pdf
@@ -709,9 +709,10 @@
       end
       
       def html_subject(params, subject, options={})
-        output = "<div class=' #{options[:css] }' style='position: absolute;line-height:1.2em;height:16px;top:#{params[:top]}px;left:#{params[:indent]}px;overflow:hidden;'>"
-        output << subject
-        output << "</div>"
+        style = "position: absolute;top:#{params[:top]}px;left:#{params[:indent]}px;"
+        style << "width:#{params[:subject_width] - params[:indent]}px;" if params[:subject_width]
+        
+        output = view.content_tag 'div', subject, :class => options[:css], :style => style, :title => options[:title]
         @subjects << output
         output
       end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/helpers/diff.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,72 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+module Redmine
+  module Helpers
+    class Diff
+      include ERB::Util
+      include ActionView::Helpers::TagHelper
+      include ActionView::Helpers::TextHelper
+      attr_reader :diff, :words
+      
+      def initialize(content_to, content_from)
+        @words = content_to.to_s.split(/(\s+)/)
+        @words = @words.select {|word| word != ' '}
+        words_from = content_from.to_s.split(/(\s+)/)
+        words_from = words_from.select {|word| word != ' '}    
+        @diff = words_from.diff @words
+      end
+  
+      def to_html
+        words = self.words.collect{|word| h(word)}
+        words_add = 0
+        words_del = 0
+        dels = 0
+        del_off = 0
+        diff.diffs.each do |diff|
+          add_at = nil
+          add_to = nil
+          del_at = nil
+          deleted = ""      
+          diff.each do |change|
+            pos = change[1]
+            if change[0] == "+"
+              add_at = pos + dels unless add_at
+              add_to = pos + dels
+              words_add += 1
+            else
+              del_at = pos unless del_at
+              deleted << ' ' + h(change[2])
+              words_del  += 1
+            end
+          end
+          if add_at
+            words[add_at] = '<span class="diff_in">' + words[add_at]
+            words[add_to] = words[add_to] + '</span>'
+          end
+          if del_at
+            words.insert del_at - del_off + dels + words_add, '<span class="diff_out">' + deleted + '</span>'
+            dels += 1
+            del_off += words_del
+            words_del = 0
+          end
+        end
+        words.join(' ')
+      end
+    end
+  end
+end
--- a/lib/redmine/helpers/gantt.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/helpers/gantt.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -353,11 +353,11 @@
           subject = "<span class='#{css_classes}'>"
           if issue.assigned_to.present?
             assigned_string = l(:field_assigned_to) + ": " + issue.assigned_to.name
-            subject << view.avatar(issue.assigned_to, :class => 'gravatar icon-gravatar', :size => 10, :title => assigned_string)
+            subject << view.avatar(issue.assigned_to, :class => 'gravatar icon-gravatar', :size => 10, :title => assigned_string).to_s
           end
           subject << view.link_to_issue(issue)
           subject << '</span>'
-          html_subject(options, subject, :css => "issue-subject") + "\n"
+          html_subject(options, subject, :css => "issue-subject", :title => issue.subject) + "\n"
         when :image
           image_subject(options, issue.subject)
         when :pdf
@@ -709,9 +709,10 @@
       end
       
       def html_subject(params, subject, options={})
-        output = "<div class=' #{options[:css] }' style='position: absolute;line-height:1.2em;height:16px;top:#{params[:top]}px;left:#{params[:indent]}px;overflow:hidden;'>"
-        output << subject
-        output << "</div>"
+        style = "position: absolute;top:#{params[:top]}px;left:#{params[:indent]}px;"
+        style << "width:#{params[:subject_width] - params[:indent]}px;" if params[:subject_width]
+        
+        output = view.content_tag 'div', subject, :class => options[:css], :style => style, :title => options[:title]
         @subjects << output
         output
       end
--- a/lib/redmine/i18n.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/i18n.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -45,8 +45,8 @@
       time = time.to_time if time.is_a?(String)
       zone = User.current.time_zone
       local = zone ? time.in_time_zone(zone) : (time.utc? ? time.localtime : time)
-      Setting.time_format.blank? ? ::I18n.l(local, :format => (include_date ? :default : :time)) : 
-                                   ((include_date ? "#{format_date(time)} " : "") + "#{local.strftime(Setting.time_format)}")
+      (include_date ? "#{format_date(local)} " : "") +
+        (Setting.time_format.blank? ? ::I18n.l(local, :format => :time) : local.strftime(Setting.time_format))
     end
 
     def day_name(day)
--- a/lib/redmine/pop3.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/pop3.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -27,30 +27,36 @@
         delete_unprocessed = (pop_options[:delete_unprocessed].to_s == '1')
 
         pop = Net::POP3.APOP(apop).new(host,port)
-        puts "Connecting to #{host}..."
+        logger.debug "Connecting to #{host}..." if logger && logger.debug?
         pop.start(pop_options[:username], pop_options[:password]) do |pop_session|
           if pop_session.mails.empty?
-            puts "No email to process"
+            logger.debug "No email to process" if logger && logger.debug?
           else
-            puts "#{pop_session.mails.size} email(s) to process..."
+            logger.debug "#{pop_session.mails.size} email(s) to process..." if logger && logger.debug?
             pop_session.each_mail do |msg|
               message = msg.pop
               message_id = (message =~ /^Message-ID: (.*)/ ? $1 : '').strip
               if MailHandler.receive(message, options)
                 msg.delete
-                puts "--> Message #{message_id} processed and deleted from the server"
+                logger.debug "--> Message #{message_id} processed and deleted from the server" if logger && logger.debug?
               else
                 if delete_unprocessed
                   msg.delete
-                  puts "--> Message #{message_id} NOT processed and deleted from the server"
+                  logger.debug "--> Message #{message_id} NOT processed and deleted from the server" if logger && logger.debug?
                 else
-                  puts "--> Message #{message_id} NOT processed and left on the server"
+                  logger.debug "--> Message #{message_id} NOT processed and left on the server" if logger && logger.debug?
                 end
               end
             end
           end
         end
       end
+      
+      private
+
+      def logger
+        RAILS_DEFAULT_LOGGER
+      end
     end
   end
 end
--- a/lib/redmine/scm/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 40
-/svn/!svn/ver/4688/trunk/lib/redmine/scm
+/svn/!svn/ver/4993/trunk/lib/redmine/scm
 END
 base.rb
 K 25
--- a/lib/redmine/scm/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/scm
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-11T08:41:35.993532Z
-4688
+2011-03-03T05:51:46.224821Z
+4993
 tmaruyama
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-09-23T14:37:45.043748Z
+2011-03-03T11:05:14.000000Z
 3a053c03d210decd9105a24ff5e1aa8f
 2010-02-16T22:41:59.625572Z
 3440
--- a/lib/redmine/scm/adapters/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,53 +1,53 @@
 K 25
 svn:wc:ra_dav:version-url
 V 49
-/svn/!svn/ver/4688/trunk/lib/redmine/scm/adapters
+/svn/!svn/ver/4993/trunk/lib/redmine/scm/adapters
 END
 subversion_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
 V 71
-/svn/!svn/ver/4539/trunk/lib/redmine/scm/adapters/subversion_adapter.rb
+/svn/!svn/ver/4993/trunk/lib/redmine/scm/adapters/subversion_adapter.rb
 END
 bazaar_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
 V 67
-/svn/!svn/ver/4539/trunk/lib/redmine/scm/adapters/bazaar_adapter.rb
+/svn/!svn/ver/4992/trunk/lib/redmine/scm/adapters/bazaar_adapter.rb
 END
 abstract_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
 V 69
-/svn/!svn/ver/4613/trunk/lib/redmine/scm/adapters/abstract_adapter.rb
+/svn/!svn/ver/4959/trunk/lib/redmine/scm/adapters/abstract_adapter.rb
 END
 git_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
 V 64
-/svn/!svn/ver/4624/trunk/lib/redmine/scm/adapters/git_adapter.rb
+/svn/!svn/ver/4992/trunk/lib/redmine/scm/adapters/git_adapter.rb
 END
 mercurial_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
 V 70
-/svn/!svn/ver/4688/trunk/lib/redmine/scm/adapters/mercurial_adapter.rb
+/svn/!svn/ver/4993/trunk/lib/redmine/scm/adapters/mercurial_adapter.rb
 END
 filesystem_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
 V 71
-/svn/!svn/ver/1510/trunk/lib/redmine/scm/adapters/filesystem_adapter.rb
+/svn/!svn/ver/4941/trunk/lib/redmine/scm/adapters/filesystem_adapter.rb
 END
 cvs_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
 V 64
-/svn/!svn/ver/4601/trunk/lib/redmine/scm/adapters/cvs_adapter.rb
+/svn/!svn/ver/4992/trunk/lib/redmine/scm/adapters/cvs_adapter.rb
 END
 darcs_adapter.rb
 K 25
 svn:wc:ra_dav:version-url
 V 66
-/svn/!svn/ver/4539/trunk/lib/redmine/scm/adapters/darcs_adapter.rb
+/svn/!svn/ver/4992/trunk/lib/redmine/scm/adapters/darcs_adapter.rb
 END
--- a/lib/redmine/scm/adapters/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/scm/adapters
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-11T08:41:35.993532Z
-4688
+2011-03-03T05:51:46.224821Z
+4993
 tmaruyama
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-a388eb02c3afb298abad571f6f059c6b
-2010-12-18T18:12:12.584764Z
-4539
-jplang
+2011-03-03T11:40:18.000000Z
+7e0b7e8a12996f271854b48e2d7611e4
+2011-03-03T05:51:46.224821Z
+4993
+tmaruyama
 
 
 
@@ -58,7 +58,7 @@
 
 
 
-10741
+11535
 
 bazaar_adapter.rb
 file
@@ -66,11 +66,11 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-a8512f631e43683c18d08d5ff0c8f2a3
-2010-12-18T18:12:12.584764Z
-4539
-jplang
+2011-03-03T11:40:18.000000Z
+2614557fb37905301939071ec226fe16
+2011-03-03T05:32:33.802461Z
+4992
+tmaruyama
 has-props
 
 
@@ -92,7 +92,7 @@
 
 
 
-7352
+8274
 
 mercurial
 dir
@@ -103,10 +103,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-b63a1e9ae95a7fb7c053bc363cf6672b
-2011-01-02T09:45:05.291687Z
-4613
+2011-03-03T11:40:18.000000Z
+5cc0323dd42df9a3377099b0fdf9e95f
+2011-02-28T04:46:42.639929Z
+4959
 tmaruyama
 has-props
 
@@ -129,7 +129,7 @@
 
 
 
-9889
+9832
 
 git_adapter.rb
 file
@@ -137,10 +137,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-eb7d9805e215f174c53d2806a94ce1ea
-2011-01-03T10:45:00.658370Z
-4624
+2011-03-03T11:40:18.000000Z
+ba10ae64fed2363f2533aa558752be37
+2011-03-03T05:32:33.802461Z
+4992
 tmaruyama
 has-props
 
@@ -163,7 +163,7 @@
 
 
 
-10102
+11905
 
 mercurial_adapter.rb
 file
@@ -171,10 +171,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-c084fab581021c9e215c54af6815d6c9
-2011-01-11T08:41:35.993532Z
-4688
+2011-03-03T11:40:18.000000Z
+fe99380d7b29fe936554e10293751813
+2011-03-03T05:51:46.224821Z
+4993
 tmaruyama
 has-props
 
@@ -197,7 +197,7 @@
 
 
 
-8611
+11159
 
 filesystem_adapter.rb
 file
@@ -205,11 +205,11 @@
 
 
 
-2010-09-23T14:37:45.039790Z
-5f311f051bcb17a87475757807f8a63e
-2008-06-08T15:44:23.440995Z
-1510
-jplang
+2011-03-03T11:40:18.000000Z
+4acd04cfa5dac0e54a35b8ef4a565217
+2011-02-24T05:58:59.661399Z
+4941
+tmaruyama
 has-props
 
 
@@ -231,7 +231,7 @@
 
 
 
-3509
+4266
 
 cvs_adapter.rb
 file
@@ -239,11 +239,11 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-f7675b9449831276c8816fc5669245a1
-2011-01-01T11:13:33.540439Z
-4601
-jplang
+2011-03-03T11:40:18.000000Z
+a3914eff33df4b5a05a108945137360b
+2011-03-03T05:32:33.802461Z
+4992
+tmaruyama
 has-props
 
 
@@ -265,7 +265,7 @@
 
 
 
-13521
+14573
 
 darcs_adapter.rb
 file
@@ -273,11 +273,11 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-39ef0c99d6e5d7839059713e93624e2c
-2010-12-18T18:12:12.584764Z
-4539
-jplang
+2011-03-03T11:40:18.000000Z
+23725596dd2797f4dcdd5336e715c59a
+2011-03-03T05:32:33.802461Z
+4992
+tmaruyama
 has-props
 
 
@@ -299,5 +299,5 @@
 
 
 
-7575
+8925
 
--- a/lib/redmine/scm/adapters/.svn/text-base/abstract_adapter.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/abstract_adapter.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -19,25 +19,29 @@
 
 module Redmine
   module Scm
-    module Adapters    
+    module Adapters
       class CommandFailed < StandardError #:nodoc:
       end
-      
+
       class AbstractAdapter #:nodoc:
         class << self
+          def client_command
+            ""
+          end
+
           # Returns the version of the scm client
           # Eg: [1, 5, 0] or [] if unknown
           def client_version
             []
           end
-          
+
           # Returns the version string of the scm client
           # Eg: '1.5.0' or 'Unknown version' if unknown
           def client_version_string
             v = client_version || 'Unknown version'
             v.is_a?(Array) ? v.join('.') : v.to_s
           end
-          
+
           # Returns true if the current client version is above
           # or equals the given one
           # If option is :unknown is set to true, it will return
@@ -45,19 +49,32 @@
           def client_version_above?(v, options={})
             ((client_version <=> v) >= 0) || (client_version.empty? && options[:unknown])
           end
+
+          def client_available
+            true
+          end
+
+          def shell_quote(str)
+            if Redmine::Platform.mswin?
+              '"' + str.gsub(/"/, '\\"') + '"'
+            else
+              "'" + str.gsub(/'/, "'\"'\"'") + "'"
+            end
+          end
         end
-                
-        def initialize(url, root_url=nil, login=nil, password=nil)
+
+        def initialize(url, root_url=nil, login=nil, password=nil,
+                       path_encoding=nil)
           @url = url
           @login = login if login && !login.empty?
           @password = (password || "") if @login
           @root_url = root_url.blank? ? retrieve_root_url : root_url
         end
-        
+
         def adapter_name
           'Abstract'
         end
-        
+
         def supports_cat?
           true
         end
@@ -65,11 +82,11 @@
         def supports_annotate?
           respond_to?('annotate')
         end
-        
+
         def root_url
           @root_url
         end
-      
+
         def url
           @url
         end
@@ -138,7 +155,7 @@
           path ||= ''
           (path[-1,1] == "/") ? path : "#{path}/"
         end
-        
+
         def without_leading_slash(path)
           path ||= ''
           path.gsub(%r{^/+}, '')
@@ -148,13 +165,9 @@
           path ||= ''
           (path[-1,1] == "/") ? path[0..-2] : path
          end
-        
+
         def shell_quote(str)
-          if Redmine::Platform.mswin?
-            '"' + str.gsub(/"/, '\\"') + '"'
-          else
-            "'" + str.gsub(/'/, "'\"'\"'") + "'"
-          end
+          self.class.shell_quote(str)
         end
 
       private
@@ -168,19 +181,19 @@
           base = path.match(/^\//) ? root_url : url
           shell_quote("#{base}/#{path}".gsub(/[?<>\*]/, ''))
         end
-            
+
         def logger
           self.class.logger
         end
-        
+
         def shellout(cmd, &block)
           self.class.shellout(cmd, &block)
         end
-        
+
         def self.logger
           RAILS_DEFAULT_LOGGER
         end
-        
+
         def self.shellout(cmd, &block)
           logger.debug "Shelling out: #{strip_credential(cmd)}" if logger && logger.debug?
           if Rails.env == 'development'
@@ -188,7 +201,12 @@
             cmd = "#{cmd} 2>>#{RAILS_ROOT}/log/scm.stderr.log"
           end
           begin
-            IO.popen(cmd, "r+") do |io|
+            if RUBY_VERSION < '1.9'
+              mode = "r+"
+            else
+              mode = "r+:ASCII-8BIT"
+            end
+            IO.popen(cmd, mode) do |io|
               io.close_write
               block.call(io) if block_given?
             end
@@ -198,8 +216,8 @@
             logger.error("SCM command failed, make sure that your SCM binary (eg. svn) is in PATH (#{ENV['PATH']}): #{strip_credential(cmd)}\n  with: #{msg}")
             raise CommandFailed.new(msg)
           end
-        end  
-        
+        end
+
         # Hides username/password in a given command
         def self.strip_credential(cmd)
           q = (Redmine::Platform.mswin? ? '"' : "'")
@@ -209,8 +227,19 @@
         def strip_credential(cmd)
           self.class.strip_credential(cmd)
         end
+
+        def scm_iconv(to, from, str)
+          return nil if str.nil?
+          return str if to == from
+          begin
+            Iconv.conv(to, from, str)
+          rescue Iconv::Failure => err
+            logger.error("failed to convert from #{from} to #{to}. #{err}")
+            nil
+          end
+        end
       end
-      
+
       class Entries < Array
         def sort_by_name
           sort {|x,y| 
@@ -219,7 +248,7 @@
             else
               x.kind <=> y.kind
             end
-          }   
+          }
         end
         
         def revisions
@@ -295,29 +324,8 @@
         def format_identifier
           identifier
         end
+      end
 
-        def save(repo)
-          Changeset.transaction do
-            changeset = Changeset.new(
-              :repository => repo,
-              :revision => identifier,
-              :scmid => scmid,
-              :committer => author, 
-              :committed_on => time,
-              :comments => message)
-            
-            if changeset.save
-              paths.each do |file|
-                Change.create(
-                  :changeset => changeset,
-                  :action => file[:action],
-                  :path => file[:path])
-              end
-            end
-          end
-        end
-      end
-        
       class Annotate
         attr_reader :lines, :revisions
         
--- a/lib/redmine/scm/adapters/.svn/text-base/bazaar_adapter.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/bazaar_adapter.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -19,15 +19,47 @@
 
 module Redmine
   module Scm
-    module Adapters    
+    module Adapters
       class BazaarAdapter < AbstractAdapter
-      
+
         # Bazaar executable name
-        BZR_BIN = "bzr"
-        
+        BZR_BIN = Redmine::Configuration['scm_bazaar_command'] || "bzr"
+
+        class << self
+          def client_command
+            @@bin    ||= BZR_BIN
+          end
+
+          def sq_bin
+            @@sq_bin ||= shell_quote(BZR_BIN)
+          end
+
+          def client_version
+            @@client_version ||= (scm_command_version || [])
+          end
+
+          def client_available
+            !client_version.empty?
+          end
+
+          def scm_command_version
+            scm_version = scm_version_from_command_line.dup
+            if scm_version.respond_to?(:force_encoding)
+              scm_version.force_encoding('ASCII-8BIT')
+            end
+            if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)})
+              m[2].scan(%r{\d+}).collect(&:to_i)
+            end
+          end
+
+          def scm_version_from_command_line
+            shellout("#{sq_bin} --version") { |io| io.read }.to_s
+          end
+        end
+
         # Get info about the repository
         def info
-          cmd = "#{BZR_BIN} revno #{target('')}"
+          cmd = "#{self.class.sq_bin} revno #{target('')}"
           info = nil
           shellout(cmd) do |io|
             if io.read =~ %r{^(\d+)\r?$}
@@ -43,13 +75,13 @@
         rescue CommandFailed
           return nil
         end
-        
+
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
         def entries(path=nil, identifier=nil)
           path ||= ''
           entries = Entries.new
-          cmd = "#{BZR_BIN} ls -v --show-ids"
+          cmd = "#{self.class.sq_bin} ls -v --show-ids"
           identifier = -1 unless identifier && identifier.to_i > 0 
           cmd << " -r#{identifier.to_i}" 
           cmd << " #{target(path)}"
@@ -71,13 +103,13 @@
           logger.debug("Found #{entries.size} entries in the repository for #{target(path)}") if logger && logger.debug?
           entries.sort_by_name
         end
-    
+
         def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
           path ||= ''
           identifier_from = (identifier_from and identifier_from.to_i > 0) ? identifier_from.to_i : 'last:1'
           identifier_to = (identifier_to and identifier_to.to_i > 0) ? identifier_to.to_i : 1
           revisions = Revisions.new
-          cmd = "#{BZR_BIN} log -v --show-ids -r#{identifier_to}..#{identifier_from} #{target(path)}"
+          cmd = "#{self.class.sq_bin} log -v --show-ids -r#{identifier_to}..#{identifier_from} #{target(path)}"
           shellout(cmd) do |io|
             revision = nil
             parsing = nil
@@ -132,7 +164,7 @@
           return nil if $? && $?.exitstatus != 0
           revisions
         end
-        
+
         def diff(path, identifier_from, identifier_to=nil)
           path ||= ''
           if identifier_to
@@ -143,7 +175,7 @@
           if identifier_from
             identifier_from = identifier_from.to_i
           end
-          cmd = "#{BZR_BIN} diff -r#{identifier_to}..#{identifier_from} #{target(path)}"
+          cmd = "#{self.class.sq_bin} diff -r#{identifier_to}..#{identifier_from} #{target(path)}"
           diff = []
           shellout(cmd) do |io|
             io.each_line do |line|
@@ -153,9 +185,9 @@
           #return nil if $? && $?.exitstatus != 0
           diff
         end
-        
+
         def cat(path, identifier=nil)
-          cmd = "#{BZR_BIN} cat"
+          cmd = "#{self.class.sq_bin} cat"
           cmd << " -r#{identifier.to_i}" if identifier && identifier.to_i > 0
           cmd << " #{target(path)}"
           cat = nil
@@ -166,9 +198,9 @@
           return nil if $? && $?.exitstatus != 0
           cat
         end
-        
+
         def annotate(path, identifier=nil)
-          cmd = "#{BZR_BIN} annotate --all"
+          cmd = "#{self.class.sq_bin} annotate --all"
           cmd << " -r#{identifier.to_i}" if identifier && identifier.to_i > 0
           cmd << " #{target(path)}"
           blame = Annotate.new
--- a/lib/redmine/scm/adapters/.svn/text-base/cvs_adapter.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/cvs_adapter.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -23,14 +23,47 @@
       class CvsAdapter < AbstractAdapter
 
         # CVS executable name
-        CVS_BIN = "cvs"
-    
+        CVS_BIN = Redmine::Configuration['scm_cvs_command'] || "cvs"
+
+        class << self
+          def client_command
+            @@bin    ||= CVS_BIN
+          end
+
+          def sq_bin
+            @@sq_bin ||= shell_quote(CVS_BIN)
+          end
+
+          def client_version
+            @@client_version ||= (scm_command_version || [])
+          end
+
+          def client_available
+            client_version_above?([1, 12])
+          end
+
+          def scm_command_version
+            scm_version = scm_version_from_command_line.dup
+            if scm_version.respond_to?(:force_encoding)
+              scm_version.force_encoding('ASCII-8BIT')
+            end
+            if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)}m)
+              m[2].scan(%r{\d+}).collect(&:to_i)
+            end
+          end
+
+          def scm_version_from_command_line
+            shellout("#{sq_bin} --version") { |io| io.read }.to_s
+          end
+        end
+
         # Guidelines for the input:
         #  url -> the project-path, relative to the cvsroot (eg. module name)
         #  root_url -> the good old, sometimes damned, CVSROOT
         #  login -> unnecessary
         #  password -> unnecessary too
-        def initialize(url, root_url=nil, login=nil, password=nil)
+        def initialize(url, root_url=nil, login=nil, password=nil,
+                       path_encoding=nil)
           @url = url
           @login = login if login && !login.empty?
           @password = (password || "") if @login
@@ -38,24 +71,24 @@
           raise CommandFailed if root_url.blank?
           @root_url = root_url
         end
-        
+
         def root_url
           @root_url
         end
-        
+
         def url
           @url
         end
-        
+
         def info
           logger.debug "<cvs> info"
           Info.new({:root_url => @root_url, :lastrev => nil})
         end
-        
+
         def get_previous_revision(revision)
           CvsRevisionHelper.new(revision).prevRev
         end
-    
+
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
         # this method is used by the repository-browser (aka LIST)
@@ -63,14 +96,14 @@
           logger.debug "<cvs> entries '#{path}' with identifier '#{identifier}'"
           path_with_project="#{url}#{with_leading_slash(path)}"
           entries = Entries.new
-          cmd = "#{CVS_BIN} -d #{shell_quote root_url} rls -e"
+          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rls -e"
           cmd << " -D \"#{time_to_cvstime(identifier)}\"" if identifier
           cmd << " #{shell_quote path_with_project}"
           shellout(cmd) do |io|
             io.each_line(){|line|
               fields=line.chop.split('/',-1)
               logger.debug(">>InspectLine #{fields.inspect}")
-              
+
               if fields[0]!="D"
                 entries << Entry.new({:name => fields[-5],
                   #:path => fields[-4].include?(path)?fields[-4]:(path + "/"+ fields[-4]),
@@ -96,20 +129,20 @@
           end
           return nil if $? && $?.exitstatus != 0
           entries.sort_by_name
-        end  
+        end
 
         STARTLOG="----------------------------"
         ENDLOG  ="============================================================================="
-        
+
         # Returns all revisions found between identifier_from and identifier_to
         # in the repository. both identifier have to be dates or nil.
         # these method returns nothing but yield every result in block
         def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={}, &block)
           logger.debug "<cvs> revisions path:'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}"
-          
+
           path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{CVS_BIN} -d #{shell_quote root_url} rlog"
-          cmd << " -d\">#{time_to_cvstime(identifier_from)}\"" if identifier_from
+          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rlog"
+          cmd << " -d\">#{time_to_cvstime_rlog(identifier_from)}\"" if identifier_from
           cmd << " #{shell_quote path_with_project}"
           shellout(cmd) do |io|
             state="entry_start"
@@ -123,7 +156,7 @@
             file_state=nil
             branch_map=nil
             
-            io.each_line() do |line|            
+            io.each_line() do |line|
               
               if state!="revision" && /^#{ENDLOG}/ =~ line
                 commit_log=String.new
@@ -162,9 +195,9 @@
                 end
                 next
               elsif state=="revision"
-                if /^#{ENDLOG}/ =~ line || /^#{STARTLOG}/ =~ line               
+                if /^#{ENDLOG}/ =~ line || /^#{STARTLOG}/ =~ line
                   if revision
-                    
+
                     revHelper=CvsRevisionHelper.new(revision)
                     revBranch="HEAD"
                     
@@ -176,7 +209,7 @@
                     
                     logger.debug("********** YIELD Revision #{revision}::#{revBranch}")
                     
-                    yield Revision.new({                    
+                    yield Revision.new({
                       :time => date,
                       :author => author,
                       :message=>commit_log.chomp,
@@ -188,9 +221,9 @@
                         :kind=>'file',
                         :action=>file_state
                       }]
-                    })                 
+                    })
                   end
-    
+
                   commit_log=String.new
                   revision=nil
                   
@@ -199,7 +232,7 @@
                   end
                   next
                 end
-                  
+
                 if /^branches: (.+)$/ =~ line
                   #TODO: version.branch = $1
                 elsif /^revision (\d+(?:\.\d+)+).*$/ =~ line
@@ -216,20 +249,20 @@
                   #                  version.line_minus = linechanges[2]
                   #                else
                   #                  version.line_plus  = 0
-                  #                  version.line_minus = 0     
-                  #                end              
-                else            
+                  #                  version.line_minus = 0
+                  #                end
+                else
                   commit_log << line unless line =~ /^\*\*\* empty log message \*\*\*/
-                end 
-              end 
+                end
+              end
             end
           end
-        end  
-        
+        end
+
         def diff(path, identifier_from, identifier_to=nil)
           logger.debug "<cvs> diff path:'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}"
           path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{CVS_BIN} -d #{shell_quote root_url} rdiff -u -r#{identifier_to} -r#{identifier_from} #{shell_quote path_with_project}"
+          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rdiff -u -r#{identifier_to} -r#{identifier_from} #{shell_quote path_with_project}"
           diff = []
           shellout(cmd) do |io|
             io.each_line do |line|
@@ -238,28 +271,29 @@
           end
           return nil if $? && $?.exitstatus != 0
           diff
-        end  
-        
+        end
+
         def cat(path, identifier=nil)
           identifier = (identifier) ? identifier : "HEAD"
           logger.debug "<cvs> cat path:'#{path}',identifier #{identifier}"
           path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{CVS_BIN} -d #{shell_quote root_url} co"
+          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} co"
           cmd << " -D \"#{time_to_cvstime(identifier)}\"" if identifier
           cmd << " -p #{shell_quote path_with_project}"
           cat = nil
           shellout(cmd) do |io|
+            io.binmode
             cat = io.read
           end
           return nil if $? && $?.exitstatus != 0
           cat
-        end  
+        end
 
         def annotate(path, identifier=nil)
           identifier = (identifier) ? identifier.to_i : "HEAD"
           logger.debug "<cvs> annotate path:'#{path}',identifier #{identifier}"
           path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{CVS_BIN} -d #{shell_quote root_url} rannotate -r#{identifier} #{shell_quote path_with_project}"
+          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rannotate -r#{identifier} #{shell_quote path_with_project}"
           blame = Annotate.new
           shellout(cmd) do |io|
             io.each_line do |line|
@@ -270,9 +304,9 @@
           return nil if $? && $?.exitstatus != 0
           blame
         end
-         
+
         private
-        
+
         # Returns the root url without the connexion string
         # :pserver:anonymous@foo.bar:/path => /path
         # :ext:cvsservername:/path => /path
@@ -290,6 +324,12 @@
           end
           return time.strftime("%Y-%m-%d %H:%M:%S")
         end
+
+        def time_to_cvstime_rlog(time)
+          return nil if time.nil?
+          t1 = time.clone.localtime
+          return t1.strftime("%Y-%m-%d %H:%M:%S")
+        end
           
         def normalize_cvs_path(path)
           normalize_path(path.gsub(/Attic\//,''))
@@ -339,7 +379,11 @@
         private
         def buildRevision(rev)
           if rev== 0
-            @base
+            if @branchid.nil?
+              @base+".0"
+            else
+              @base
+            end
           elsif @branchid.nil? 
             @base+"."+rev.to_s
           else
--- a/lib/redmine/scm/adapters/.svn/text-base/darcs_adapter.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/darcs_adapter.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -20,31 +20,45 @@
 
 module Redmine
   module Scm
-    module Adapters    
-      class DarcsAdapter < AbstractAdapter      
+    module Adapters
+      class DarcsAdapter < AbstractAdapter
         # Darcs executable name
-        DARCS_BIN = "darcs"
-        
+        DARCS_BIN = Redmine::Configuration['scm_darcs_command'] || "darcs"
+
         class << self
+          def client_command
+            @@bin    ||= DARCS_BIN
+          end
+
+          def sq_bin
+            @@sq_bin ||= shell_quote(DARCS_BIN)
+          end
+
           def client_version
             @@client_version ||= (darcs_binary_version || [])
           end
-  	  
+
+          def client_available
+            !client_version.empty?
+          end
+
           def darcs_binary_version
-            cmd = "#{DARCS_BIN} --version"
-            version = nil
-            shellout(cmd) do |io|
-              # Read darcs version in first returned line
-              if m = io.gets.match(%r{((\d+\.)+\d+)})
-                version = m[0].scan(%r{\d+}).collect(&:to_i)
-              end
+            darcsversion = darcs_binary_version_from_command_line.dup
+            if darcsversion.respond_to?(:force_encoding)
+              darcsversion.force_encoding('ASCII-8BIT')
             end
-            return nil if $? && $?.exitstatus != 0
-            version
+            if m = darcsversion.match(%r{\A(.*?)((\d+\.)+\d+)})
+              m[2].scan(%r{\d+}).collect(&:to_i)
+            end
+          end
+
+          def darcs_binary_version_from_command_line
+            shellout("#{sq_bin} --version") { |io| io.read }.to_s
           end
         end
 
-        def initialize(url, root_url=nil, login=nil, password=nil)
+        def initialize(url, root_url=nil, login=nil, password=nil,
+                       path_encoding=nil)
           @url = url
           @root_url = url
         end
@@ -59,14 +73,16 @@
           rev = revisions(nil,nil,nil,{:limit => 1})
           rev ? Info.new({:root_url => @url, :lastrev => rev.last}) : nil
         end
-        
+
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
         def entries(path=nil, identifier=nil)
           path_prefix = (path.blank? ? '' : "#{path}/")
-          path = '.' if path.blank?
-          entries = Entries.new          
-          cmd = "#{DARCS_BIN} annotate --repodir #{shell_quote @url} --xml-output"
+          if path.blank?
+            path = ( self.class.client_version_above?([2, 2, 0]) ? @url : '.' )
+          end
+          entries = Entries.new
+          cmd = "#{self.class.sq_bin} annotate --repodir #{shell_quote @url} --xml-output"
           cmd << " --match #{shell_quote("hash #{identifier}")}" if identifier
           cmd << " #{shell_quote path}"
           shellout(cmd) do |io|
@@ -86,11 +102,11 @@
           return nil if $? && $?.exitstatus != 0
           entries.compact.sort_by_name
         end
-    
+
         def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
           path = '.' if path.blank?
           revisions = Revisions.new
-          cmd = "#{DARCS_BIN} changes --repodir #{shell_quote @url} --xml-output"
+          cmd = "#{self.class.sq_bin} changes --repodir #{shell_quote @url} --xml-output"
           cmd << " --from-match #{shell_quote("hash #{identifier_from}")}" if identifier_from
           cmd << " --last #{options[:limit].to_i}" if options[:limit]
           shellout(cmd) do |io|
@@ -113,10 +129,10 @@
           return nil if $? && $?.exitstatus != 0
           revisions
         end
-        
+
         def diff(path, identifier_from, identifier_to=nil)
           path = '*' if path.blank?
-          cmd = "#{DARCS_BIN} diff --repodir #{shell_quote @url}"
+          cmd = "#{self.class.sq_bin} diff --repodir #{shell_quote @url}"
           if identifier_to.nil?
             cmd << " --match #{shell_quote("hash #{identifier_from}")}"
           else
@@ -133,9 +149,9 @@
           return nil if $? && $?.exitstatus != 0
           diff
         end
-        
+
         def cat(path, identifier=nil)
-          cmd = "#{DARCS_BIN} show content --repodir #{shell_quote @url}"
+          cmd = "#{self.class.sq_bin} show content --repodir #{shell_quote @url}"
           cmd << " --match #{shell_quote("hash #{identifier}")}" if identifier
           cmd << " #{shell_quote path}"
           cat = nil
@@ -148,7 +164,7 @@
         end
 
         private
-        
+
         # Returns an Entry from the given XML element
         # or nil if the entry was deleted
         def entry_from_xml(element, path_prefix)
@@ -156,7 +172,7 @@
           if modified_element.elements['modified_how'].text.match(/removed/)
             return nil
           end
-          
+
           Entry.new({:name => element.attributes['name'],
                      :path => path_prefix + element.attributes['name'],
                      :kind => element.name == 'file' ? 'file' : 'dir',
@@ -165,12 +181,41 @@
                        :identifier => nil,
                        :scmid => modified_element.elements['patch'].attributes['hash']
                        })
-                     })        
+                     })
         end
-        
+
+        def get_paths_for_patch(hash)
+          paths = get_paths_for_patch_raw(hash)
+          if self.class.client_version_above?([2, 4])
+            orig_paths = paths
+            paths = []
+            add_paths = []
+            add_paths_name = []
+            mod_paths = []
+            other_paths = []
+            orig_paths.each do |path|
+              if path[:action] == 'A'
+                add_paths << path
+                add_paths_name << path[:path]
+              elsif path[:action] == 'M'
+                mod_paths << path
+              else
+                other_paths << path
+              end
+            end
+            add_paths_name.each do |add_path|
+              mod_paths.delete_if { |m| m[:path] == add_path }
+            end
+            paths.concat add_paths
+            paths.concat mod_paths
+            paths.concat other_paths
+          end
+          paths
+        end
+
         # Retrieve changed paths for a single patch
-        def get_paths_for_patch(hash)
-          cmd = "#{DARCS_BIN} annotate --repodir #{shell_quote @url} --summary --xml-output"
+        def get_paths_for_patch_raw(hash)
+          cmd = "#{self.class.sq_bin} annotate --repodir #{shell_quote @url} --summary --xml-output"
           cmd << " --match #{shell_quote("hash #{hash}")} "
           paths = []
           shellout(cmd) do |io|
--- a/lib/redmine/scm/adapters/.svn/text-base/filesystem_adapter.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/filesystem_adapter.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -23,12 +23,19 @@
 
 module Redmine
   module Scm
-    module Adapters    
+    module Adapters
       class FilesystemAdapter < AbstractAdapter
-        
 
-        def initialize(url, root_url=nil, login=nil, password=nil)
+        class << self
+          def client_available
+            true
+          end
+        end
+
+        def initialize(url, root_url=nil, login=nil, password=nil,
+                       path_encoding=nil)
           @url = with_trailling_slash(url)
+          @path_encoding = path_encoding || 'UTF-8'
         end
 
         def format_path_ends(path, leading=true, trailling=true)
@@ -46,47 +53,59 @@
         rescue CommandFailed
           return nil
         end
-        
+
         def entries(path="", identifier=nil)
           entries = Entries.new
-          Dir.new(target(path)).each do |e|
-            relative_path = format_path_ends((format_path_ends(path,
-                                                               false,
-                                                               true) + e),
-                                             false,false)
-            target = target(relative_path)
-            entries << 
-              Entry.new({ :name => File.basename(e),
+          trgt_utf8 = target(path)
+          trgt = scm_iconv(@path_encoding, 'UTF-8', trgt_utf8)
+          Dir.new(trgt).each do |e1|
+            e_utf8 = scm_iconv('UTF-8', @path_encoding, e1)
+            relative_path_utf8 = format_path_ends((format_path_ends(path,false,true) + e_utf8),false,false)
+            t1_utf8 = target(relative_path_utf8)
+            t1 = scm_iconv(@path_encoding, 'UTF-8', t1_utf8)
+            relative_path = scm_iconv(@path_encoding, 'UTF-8', relative_path_utf8)
+            e1 = scm_iconv(@path_encoding, 'UTF-8', e_utf8)
+            if File.exist?(t1) and # paranoid test
+                  %w{file directory}.include?(File.ftype(t1)) and # avoid special types
+                  not File.basename(e1).match(/^\.+$/) # avoid . and ..
+              p1         = File.readable?(t1) ? relative_path : ""
+              utf_8_path = scm_iconv('UTF-8', @path_encoding, p1)
+              entries <<
+                Entry.new({ :name => scm_iconv('UTF-8', @path_encoding, File.basename(e1)),
                           # below : list unreadable files, but dont link them.
-                          :path => File.readable?(target) ? relative_path : "",
-                          :kind => (File.directory?(target) ? 'dir' : 'file'),
-                          :size => (File.directory?(target) ? nil : [File.size(target)].pack('l').unpack('L').first),
+                          :path => utf_8_path,
+                          :kind => (File.directory?(t1) ? 'dir' : 'file'),
+                          :size => (File.directory?(t1) ? nil : [File.size(t1)].pack('l').unpack('L').first),
                           :lastrev => 
-                          Revision.new({:time => (File.mtime(target)).localtime,
-                                       })
-                        }) if File.exist?(target) and # paranoid test
-              %w{file directory}.include?(File.ftype(target)) and # avoid special types
-              not File.basename(e).match(/^\.+$/) # avoid . and ..             
+                              Revision.new({:time => (File.mtime(t1)) })
+                        })
+            end
           end
           entries.sort_by_name
+        rescue  => err
+          logger.error "scm: filesystem: error: #{err.message}"
+          raise CommandFailed.new(err.message)
         end
-        
+
         def cat(path, identifier=nil)
-          File.new(target(path), "rb").read
+          p = scm_iconv(@path_encoding, 'UTF-8', target(path))
+          File.new(p, "rb").read
+        rescue  => err
+          logger.error "scm: filesystem: error: #{err.message}"
+          raise CommandFailed.new(err.message)
         end
 
         private
-        
+
         # AbstractAdapter::target is implicitly made to quote paths.
         # Here we do not shell-out, so we do not want quotes.
         def target(path=nil)
-          #Prevent the use of ..
+          # Prevent the use of ..
           if path and !path.match(/(^|\/)\.\.(\/|$)/)
             return "#{self.url}#{without_leading_slash(path)}"
           end
           return self.url
         end
-        
       end
     end
   end
--- a/lib/redmine/scm/adapters/.svn/text-base/git_adapter.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/git_adapter.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -19,10 +19,53 @@
 
 module Redmine
   module Scm
-    module Adapters    
+    module Adapters
       class GitAdapter < AbstractAdapter
+
+        SCM_GIT_REPORT_LAST_COMMIT = true
+
         # Git executable name
-        GIT_BIN = "git"
+        GIT_BIN = Redmine::Configuration['scm_git_command'] || "git"
+
+        # raised if scm command exited with error, e.g. unknown revision.
+        class ScmCommandAborted < CommandFailed; end
+
+        class << self
+          def client_command
+            @@bin    ||= GIT_BIN
+          end
+
+          def sq_bin
+            @@sq_bin ||= shell_quote(GIT_BIN)
+          end
+
+          def client_version
+            @@client_version ||= (scm_command_version || [])
+          end
+
+          def client_available
+            !client_version.empty?
+          end
+
+          def scm_command_version
+            scm_version = scm_version_from_command_line.dup
+            if scm_version.respond_to?(:force_encoding)
+              scm_version.force_encoding('ASCII-8BIT')
+            end
+            if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)})
+              m[2].scan(%r{\d+}).collect(&:to_i)
+            end
+          end
+
+          def scm_version_from_command_line
+            shellout("#{sq_bin} --version --no-color") { |io| io.read }.to_s
+          end
+        end
+
+        def initialize(url, root_url=nil, login=nil, password=nil, path_encoding=nil)
+          super
+          @flag_report_last_commit = SCM_GIT_REPORT_LAST_COMMIT
+        end
 
         def info
           begin
@@ -35,7 +78,7 @@
         def branches
           return @branches if @branches
           @branches = []
-          cmd = "#{GIT_BIN} --git-dir #{target('')} branch --no-color"
+          cmd = "#{self.class.sq_bin} --git-dir #{target('')} branch --no-color"
           shellout(cmd) do |io|
             io.each_line do |line|
               @branches << line.match('\s*\*?\s*(.*)$')[1]
@@ -46,20 +89,20 @@
 
         def tags
           return @tags if @tags
-          cmd = "#{GIT_BIN} --git-dir #{target('')} tag"
+          cmd = "#{self.class.sq_bin} --git-dir #{target('')} tag"
           shellout(cmd) do |io|
             @tags = io.readlines.sort!.map{|t| t.strip}
           end
         end
 
         def default_branch
-          branches.include?('master') ? 'master' : branches.first 
+          branches.include?('master') ? 'master' : branches.first
         end
-        
+
         def entries(path=nil, identifier=nil)
           path ||= ''
           entries = Entries.new
-          cmd = "#{GIT_BIN} --git-dir #{target('')} ls-tree -l "
+          cmd = "#{self.class.sq_bin} --git-dir #{target('')} ls-tree -l "
           cmd << shell_quote("HEAD:" + path) if identifier.nil?
           cmd << shell_quote(identifier + ":" + path) if identifier
           shellout(cmd)  do |io|
@@ -75,7 +118,7 @@
                  :path => full_path,
                  :kind => (type == "tree") ? 'dir' : 'file',
                  :size => (type == "tree") ? nil : size,
-                 :lastrev => lastrev(full_path,identifier)
+                 :lastrev => @flag_report_last_commit ? lastrev(full_path,identifier) : Revision.new
                 }) unless entries.detect{|entry| entry.name == name}
               end
             end
@@ -84,18 +127,17 @@
           entries.sort_by_name
         end
 
-        def lastrev(path,rev)
+        def lastrev(path, rev)
           return nil if path.nil?
-          cmd = "#{GIT_BIN} --git-dir #{target('')} log --no-color --date=iso --pretty=fuller --no-merges -n 1 "
-          cmd << " #{shell_quote rev} " if rev 
-          cmd <<  "-- #{shell_quote path} " unless path.empty?
+          cmd_args = %w|log --no-color --encoding=UTF-8 --date=iso --pretty=fuller --no-merges -n 1|
+          cmd_args << rev if rev 
+          cmd_args << "--" << path unless path.empty?
           lines = []
-          shellout(cmd) { |io| lines = io.readlines }
-          return nil if $? && $?.exitstatus != 0
+          scm_cmd(*cmd_args) { |io| lines = io.readlines }
           begin
               id = lines[0].split[1]
               author = lines[1].match('Author:\s+(.*)$')[1]
-              time = Time.parse(lines[4].match('CommitDate:\s+(.*)$')[1]).localtime
+              time = Time.parse(lines[4].match('CommitDate:\s+(.*)$')[1])
 
               Revision.new({
                 :identifier => id,
@@ -104,26 +146,29 @@
                 :time => time,
                 :message => nil, 
                 :paths => nil 
-              })
+                })
           rescue NoMethodError => e
               logger.error("The revision '#{path}' has a wrong format")
               return nil
           end
+        rescue ScmCommandAborted
+          nil
         end
 
         def revisions(path, identifier_from, identifier_to, options={})
           revisions = Revisions.new
+          cmd_args = %w|log --no-color --encoding=UTF-8 --raw --date=iso --pretty=fuller|
+          cmd_args << "--reverse" if options[:reverse]
+          cmd_args << "--all" if options[:all]
+          cmd_args << "-n" << "#{options[:limit].to_i}" if options[:limit]
+          from_to = ""
+          from_to << "#{identifier_from}.." if identifier_from
+          from_to << "#{identifier_to}" if identifier_to
+          cmd_args << from_to if !from_to.empty?
+          cmd_args << "--since=#{options[:since].strftime("%Y-%m-%d %H:%M:%S")}" if options[:since]
+          cmd_args << "--" << path if path && !path.empty?
 
-          cmd = "#{GIT_BIN} --git-dir #{target('')} log --no-color --raw --date=iso --pretty=fuller "
-          cmd << " --reverse " if options[:reverse]
-          cmd << " --all " if options[:all]
-          cmd << " -n #{options[:limit].to_i} " if options[:limit]
-          cmd << "#{shell_quote(identifier_from + '..')}" if identifier_from
-          cmd << "#{shell_quote identifier_to}" if identifier_to
-          cmd << " --since=#{shell_quote(options[:since].strftime("%Y-%m-%d %H:%M:%S"))}" if options[:since]
-          cmd << " -- #{shell_quote path}" if path && !path.empty?
-
-          shellout(cmd) do |io|
+          scm_cmd *cmd_args do |io|
             files=[]
             changeset = {}
             parsing_descr = 0  #0: not parsing desc or files, 1: parsing desc, 2: parsing files
@@ -200,8 +245,8 @@
               end
             end
           end
-
-          return nil if $? && $?.exitstatus != 0
+          revisions
+        rescue ScmCommandAborted
           revisions
         end
 
@@ -209,9 +254,9 @@
           path ||= ''
 
           if identifier_to
-            cmd = "#{GIT_BIN} --git-dir #{target('')} diff --no-color #{shell_quote identifier_to} #{shell_quote identifier_from}" 
+            cmd = "#{self.class.sq_bin} --git-dir #{target('')} diff --no-color #{shell_quote identifier_to} #{shell_quote identifier_from}" 
           else
-            cmd = "#{GIT_BIN} --git-dir #{target('')} show --no-color #{shell_quote identifier_from}"
+            cmd = "#{self.class.sq_bin} --git-dir #{target('')} show --no-color #{shell_quote identifier_from}"
           end
 
           cmd << " -- #{shell_quote path}" unless path.empty?
@@ -227,7 +272,7 @@
         
         def annotate(path, identifier=nil)
           identifier = 'HEAD' if identifier.blank?
-          cmd = "#{GIT_BIN} --git-dir #{target('')} blame -p #{shell_quote identifier} -- #{shell_quote path}"
+          cmd = "#{self.class.sq_bin} --git-dir #{target('')} blame -p #{shell_quote identifier} -- #{shell_quote path}"
           blame = Annotate.new
           content = nil
           shellout(cmd) { |io| io.binmode; content = io.read }
@@ -250,12 +295,12 @@
           end
           blame
         end
-        
+
         def cat(path, identifier=nil)
           if identifier.nil?
             identifier = 'HEAD'
           end
-          cmd = "#{GIT_BIN} --git-dir #{target('')} show --no-color #{shell_quote(identifier + ':' + path)}"
+          cmd = "#{self.class.sq_bin} --git-dir #{target('')} show --no-color #{shell_quote(identifier + ':' + path)}"
           cat = nil
           shellout(cmd) do |io|
             io.binmode
@@ -271,6 +316,18 @@
             identifier[0,8]
           end
         end
+
+        def scm_cmd(*args, &block)
+          repo_path = root_url || url
+          full_args = [GIT_BIN, '--git-dir', repo_path]
+          full_args += args
+          ret = shellout(full_args.map { |e| shell_quote e.to_s }.join(' '), &block)
+          if $? && $?.exitstatus != 0
+            raise ScmCommandAborted, "git exited with non-zero status: #{$?.exitstatus}"
+          end
+          ret
+        end
+        private :scm_cmd
       end
     end
   end
--- a/lib/redmine/scm/adapters/.svn/text-base/mercurial_adapter.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/mercurial_adapter.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -20,32 +20,51 @@
 
 module Redmine
   module Scm
-    module Adapters    
+    module Adapters
       class MercurialAdapter < AbstractAdapter
 
         # Mercurial executable name
-        HG_BIN = "hg"
-        TEMPLATES_DIR = File.dirname(__FILE__) + "/mercurial"
+        HG_BIN = Redmine::Configuration['scm_mercurial_command'] || "hg"
+        HELPERS_DIR = File.dirname(__FILE__) + "/mercurial"
+        HG_HELPER_EXT = "#{HELPERS_DIR}/redminehelper.py"
         TEMPLATE_NAME = "hg-template"
         TEMPLATE_EXTENSION = "tmpl"
 
+        # raised if hg command exited with error, e.g. unknown revision.
+        class HgCommandAborted < CommandFailed; end
+
         class << self
+          def client_command
+            @@bin    ||= HG_BIN
+          end
+
+          def sq_bin
+            @@sq_bin ||= shell_quote(HG_BIN)
+          end
+
           def client_version
             @@client_version ||= (hgversion || [])
           end
 
-          def hgversion  
+          def client_available
+            !client_version.empty?
+          end
+
+          def hgversion
             # The hg version is expressed either as a
             # release number (eg 0.9.5 or 1.0) or as a revision
             # id composed of 12 hexa characters.
-            theversion = hgversion_from_command_line
+            theversion = hgversion_from_command_line.dup
+            if theversion.respond_to?(:force_encoding)
+              theversion.force_encoding('ASCII-8BIT')
+            end
             if m = theversion.match(%r{\A(.*?)((\d+\.)+\d+)})
               m[2].scan(%r{\d+}).collect(&:to_i)
             end
           end
 
           def hgversion_from_command_line
-            shellout("#{HG_BIN} --version") { |io| io.read }.to_s
+            shellout("#{sq_bin} --version") { |io| io.read }.to_s
           end
 
           def template_path
@@ -58,153 +77,193 @@
             else
               ver = "0.9.5"
             end
-            "#{TEMPLATES_DIR}/#{TEMPLATE_NAME}-#{ver}.#{TEMPLATE_EXTENSION}"
+            "#{HELPERS_DIR}/#{TEMPLATE_NAME}-#{ver}.#{TEMPLATE_EXTENSION}"
           end
         end
 
-        def info
-          cmd = "#{HG_BIN} -R #{target('')} root"
-          root_url = nil
-          shellout(cmd) do |io|
-            root_url = io.read
-          end
-          return nil if $? && $?.exitstatus != 0
-          info = Info.new({:root_url => root_url.chomp,
-                            :lastrev => revisions(nil,nil,nil,{:limit => 1}).last
-                          })
-          info
-        rescue CommandFailed
-          return nil
+        def initialize(url, root_url=nil, login=nil, password=nil, path_encoding=nil)
+          super
+          @path_encoding = path_encoding || 'UTF-8'
         end
 
-        def entries(path=nil, identifier=nil)
-          path ||= ''
-          entries = Entries.new
-          cmd = "#{HG_BIN} -R #{target('')} --cwd #{target('')} locate"
-          cmd << " -r #{hgrev(identifier)}"
-          cmd << " " + shell_quote("path:#{path}") unless path.empty?
-          shellout(cmd) do |io|
-            io.each_line do |line|
-              # HG uses antislashs as separator on Windows
-              line = line.gsub(/\\/, "/")
-              if path.empty? or e = line.gsub!(%r{^#{with_trailling_slash(path)}},'')
-                e ||= line
-                e = e.chomp.split(%r{[\/\\]})
-                entries << Entry.new({:name => e.first,
-                                       :path => (path.nil? or path.empty? ? e.first : "#{with_trailling_slash(path)}#{e.first}"),
-                                       :kind => (e.size > 1 ? 'dir' : 'file'),
-                                       :lastrev => Revision.new
-                                     }) unless e.empty? || entries.detect{|entry| entry.name == e.first}
-              end
+        def info
+          tip = summary['repository']['tip']
+          Info.new(:root_url => CGI.unescape(summary['repository']['root']),
+                   :lastrev => Revision.new(:revision => tip['revision'],
+                                            :scmid => tip['node']))
+        end
+
+        def tags
+          as_ary(summary['repository']['tag']).map { |e| e['name'] }
+        end
+
+        # Returns map of {'tag' => 'nodeid', ...}
+        def tagmap
+          alist = as_ary(summary['repository']['tag']).map do |e|
+            e.values_at('name', 'node')
+          end
+          Hash[*alist.flatten]
+        end
+
+        def branches
+          as_ary(summary['repository']['branch']).map { |e| e['name'] }
+        end
+
+        # Returns map of {'branch' => 'nodeid', ...}
+        def branchmap
+          alist = as_ary(summary['repository']['branch']).map do |e|
+            e.values_at('name', 'node')
+          end
+          Hash[*alist.flatten]
+        end
+
+        def summary
+          return @summary if @summary 
+          hg 'rhsummary' do |io|
+            output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
+            begin
+              @summary = ActiveSupport::XmlMini.parse(output)['rhsummary']
+            rescue
             end
           end
-          return nil if $? && $?.exitstatus != 0
-          entries.sort_by_name
+        end
+        private :summary
+
+        def entries(path=nil, identifier=nil)
+          p1 = scm_iconv(@path_encoding, 'UTF-8', path)
+          manifest = hg('rhmanifest', '-r', CGI.escape(hgrev(identifier)),
+                        CGI.escape(without_leading_slash(p1.to_s))) do |io|
+            output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
+            begin
+              ActiveSupport::XmlMini.parse(output)['rhmanifest']['repository']['manifest']
+            rescue
+            end
+          end
+          path_prefix = path.blank? ? '' : with_trailling_slash(path)
+
+          entries = Entries.new
+          as_ary(manifest['dir']).each do |e|
+            n = scm_iconv('UTF-8', @path_encoding, CGI.unescape(e['name']))
+            p = "#{path_prefix}#{n}"
+            entries << Entry.new(:name => n, :path => p, :kind => 'dir')
+          end
+
+          as_ary(manifest['file']).each do |e|
+            n = scm_iconv('UTF-8', @path_encoding, CGI.unescape(e['name']))
+            p = "#{path_prefix}#{n}"
+            lr = Revision.new(:revision => e['revision'], :scmid => e['node'],
+                              :identifier => e['node'],
+                              :time => Time.at(e['time'].to_i))
+            entries << Entry.new(:name => n, :path => p, :kind => 'file',
+                                 :size => e['size'].to_i, :lastrev => lr)
+          end
+
+          entries
+        rescue HgCommandAborted
+          nil  # means not found
         end
 
-        # Fetch the revisions by using a template file that 
+        def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
+          revs = Revisions.new
+          each_revision(path, identifier_from, identifier_to, options) { |e| revs << e }
+          revs
+        end
+
+        # Iterates the revisions by using a template file that
         # makes Mercurial produce a xml output.
-        def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})  
-          revisions = Revisions.new
-          cmd = "#{HG_BIN} --debug --encoding utf8 -R #{target('')} log -C --style #{shell_quote self.class.template_path}"
-          if identifier_from && identifier_to
-            cmd << " -r #{hgrev(identifier_from)}:#{hgrev(identifier_to)}"
-          elsif identifier_from
-            cmd << " -r #{hgrev(identifier_from)}:"
-          end
-          cmd << " --limit #{options[:limit].to_i}" if options[:limit]
-          cmd << " #{shell_quote path}" unless path.blank?
-          shellout(cmd) do |io|
+        def each_revision(path=nil, identifier_from=nil, identifier_to=nil, options={})
+          hg_args = ['log', '--debug', '-C', '--style', self.class.template_path]
+          hg_args << '-r' << "#{hgrev(identifier_from)}:#{hgrev(identifier_to)}"
+          hg_args << '--limit' << options[:limit] if options[:limit]
+          hg_args << hgtarget(path) unless path.blank?
+          log = hg(*hg_args) do |io|
+            output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
             begin
-              # HG doesn't close the XML Document...
-              doc = REXML::Document.new(io.read << "</log>")
-              doc.elements.each("log/logentry") do |logentry|
-                paths = []
-                copies = logentry.get_elements('paths/path-copied')
-                logentry.elements.each("paths/path") do |path|
-                  # Detect if the added file is a copy
-                  if path.attributes['action'] == 'A' and c = copies.find{ |e| e.text == path.text }
-                    from_path = c.attributes['copyfrom-path']
-                    from_rev = logentry.attributes['revision']
-                  end
-                  paths << {:action => path.attributes['action'],
-                    :path => "/#{CGI.unescape(path.text)}",
-                    :from_path => from_path ? "/#{CGI.unescape(from_path)}" : nil,
-                    :from_revision => from_rev ? from_rev : nil
-                  }
-                end
-                paths.sort! { |x,y| x[:path] <=> y[:path] }
-
-                revisions << Revision.new({:identifier => logentry.attributes['revision'],
-                                            :scmid => logentry.attributes['node'],
-                                            :author => (logentry.elements['author'] ? logentry.elements['author'].text : ""),
-                                            :time => Time.parse(logentry.elements['date'].text).localtime,
-                                            :message => logentry.elements['msg'].text,
-                                            :paths => paths
-                                          })
-              end
+              # Mercurial < 1.5 does not support footer template for '</log>'
+              ActiveSupport::XmlMini.parse("#{output}</log>")['log']
             rescue
-              logger.debug($!)
             end
           end
-          return nil if $? && $?.exitstatus != 0
-          revisions
+
+          as_ary(log['logentry']).each do |le|
+            cpalist = as_ary(le['paths']['path-copied']).map do |e|
+              [e['__content__'], e['copyfrom-path']].map { |s| CGI.unescape(s) }
+            end
+            cpmap = Hash[*cpalist.flatten]
+
+            paths = as_ary(le['paths']['path']).map do |e|
+              p = scm_iconv('UTF-8', @path_encoding, CGI.unescape(e['__content__']) )
+              {:action => e['action'], :path => with_leading_slash(p),
+               :from_path => (cpmap.member?(p) ? with_leading_slash(cpmap[p]) : nil),
+               :from_revision => (cpmap.member?(p) ? le['revision'] : nil)}
+            end.sort { |a, b| a[:path] <=> b[:path] }
+
+            yield Revision.new(:revision => le['revision'],
+                               :scmid => le['node'],
+                               :author => (le['author']['__content__'] rescue ''),
+                               :time => Time.parse(le['date']['__content__']).localtime,
+                               :message => le['msg']['__content__'],
+                               :paths => paths)
+          end
+          self
         end
 
         def diff(path, identifier_from, identifier_to=nil)
-          path ||= ''
-          diff_args = ''
+          hg_args = %w|rhdiff|
+          if identifier_to
+            hg_args << '-r' << hgrev(identifier_to) << '-r' << hgrev(identifier_from)
+          else
+            hg_args << '-c' << hgrev(identifier_from)
+          end
+          unless path.blank?
+            p = scm_iconv(@path_encoding, 'UTF-8', path)
+            hg_args << CGI.escape(hgtarget(p))
+          end
           diff = []
-          if identifier_to
-            diff_args = "-r #{hgrev(identifier_to)} -r #{hgrev(identifier_from)}"
-          else
-            if self.class.client_version_above?([1, 2])
-              diff_args = "-c #{hgrev(identifier_from)}"
-            else
-              return []
-            end
-          end
-          cmd = "#{HG_BIN} -R #{target('')} --config diff.git=false diff --nodates #{diff_args}"
-          cmd << " -I #{target(path)}" unless path.empty?
-          shellout(cmd) do |io|
+          hg *hg_args do |io|
             io.each_line do |line|
               diff << line
             end
           end
-          return nil if $? && $?.exitstatus != 0
           diff
+        rescue HgCommandAborted
+          nil  # means not found
         end
 
         def cat(path, identifier=nil)
-          cmd = "#{HG_BIN} -R #{target('')} cat"
-          cmd << " -r #{hgrev(identifier)}"
-          cmd << " #{target(path)}"
-          cat = nil
-          shellout(cmd) do |io|
+          p = CGI.escape(scm_iconv(@path_encoding, 'UTF-8', path))
+          hg 'rhcat', '-r', hgrev(identifier), hgtarget(p) do |io|
             io.binmode
-            cat = io.read
+            io.read
           end
-          return nil if $? && $?.exitstatus != 0
-          cat
+        rescue HgCommandAborted
+          nil  # means not found
         end
 
         def annotate(path, identifier=nil)
-          path ||= ''
-          cmd = "#{HG_BIN} -R #{target('')}"
-          cmd << " annotate -ncu"
-          cmd << " -r #{hgrev(identifier)}"
-          cmd << " #{target(path)}"
+          p = CGI.escape(scm_iconv(@path_encoding, 'UTF-8', path))
           blame = Annotate.new
-          shellout(cmd) do |io|
+          hg 'rhannotate', '-ncu', '-r', hgrev(identifier), hgtarget(p) do |io|
             io.each_line do |line|
+              line.force_encoding('ASCII-8BIT') if line.respond_to?(:force_encoding)
               next unless line =~ %r{^([^:]+)\s(\d+)\s([0-9a-f]+):\s(.*)$}
               r = Revision.new(:author => $1.strip, :revision => $2, :scmid => $3,
                                :identifier => $3)
               blame.add_line($4.rstrip, r)
             end
           end
-          return nil if $? && $?.exitstatus != 0
           blame
+        rescue HgCommandAborted
+          nil  # means not found or cannot be annotated
         end
 
         class Revision < Redmine::Scm::Adapters::Revision
@@ -214,11 +273,40 @@
           end
         end
 
+        # Runs 'hg' command with the given args
+        def hg(*args, &block)
+          repo_path = root_url || url
+          full_args = [HG_BIN, '-R', repo_path, '--encoding', 'utf-8']
+          full_args << '--config' << "extensions.redminehelper=#{HG_HELPER_EXT}"
+          full_args << '--config' << 'diff.git=false'
+          full_args += args
+          ret = shellout(full_args.map { |e| shell_quote e.to_s }.join(' '), &block)
+          if $? && $?.exitstatus != 0
+            raise HgCommandAborted, "hg exited with non-zero status: #{$?.exitstatus}"
+          end
+          ret
+        end
+        private :hg
+
         # Returns correct revision identifier
-        def hgrev(identifier)
-          shell_quote(identifier.blank? ? 'tip' : identifier.to_s)
+        def hgrev(identifier, sq=false)
+          rev = identifier.blank? ? 'tip' : identifier.to_s
+          rev = shell_quote(rev) if sq
+          rev
         end
         private :hgrev
+
+        def hgtarget(path)
+          path ||= ''
+          root_url + '/' + without_leading_slash(path)
+        end
+        private :hgtarget
+
+        def as_ary(o)
+          return [] unless o
+          o.is_a?(Array) ? o : Array[o]
+        end
+        private :as_ary
       end
     end
   end
--- a/lib/redmine/scm/adapters/.svn/text-base/subversion_adapter.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/.svn/text-base/subversion_adapter.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -20,38 +20,54 @@
 
 module Redmine
   module Scm
-    module Adapters    
+    module Adapters
       class SubversionAdapter < AbstractAdapter
-      
+
         # SVN executable name
-        SVN_BIN = "svn"
-        
+        SVN_BIN = Redmine::Configuration['scm_subversion_command'] || "svn"
+
         class << self
+          def client_command
+            @@bin    ||= SVN_BIN
+          end
+
+          def sq_bin
+            @@sq_bin ||= shell_quote(SVN_BIN)
+          end
+
           def client_version
             @@client_version ||= (svn_binary_version || [])
           end
-          
+
+          def client_available
+            !client_version.empty?
+          end
+
           def svn_binary_version
-            cmd = "#{SVN_BIN} --version"
-            version = nil
-            shellout(cmd) do |io|
-              # Read svn version in first returned line
-              if m = io.read.to_s.match(%r{\A(.*?)((\d+\.)+\d+)})
-                version = m[2].scan(%r{\d+}).collect(&:to_i)
-              end
+            scm_version = scm_version_from_command_line.dup
+            if scm_version.respond_to?(:force_encoding)
+              scm_version.force_encoding('ASCII-8BIT')
             end
-            return nil if $? && $?.exitstatus != 0
-            version
+            if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)})
+              m[2].scan(%r{\d+}).collect(&:to_i)
+            end
+          end
+
+          def scm_version_from_command_line
+            shellout("#{sq_bin} --version") { |io| io.read }.to_s
           end
         end
-        
+
         # Get info about the svn repository
         def info
-          cmd = "#{SVN_BIN} info --xml #{target}"
+          cmd = "#{self.class.sq_bin} info --xml #{target}"
           cmd << credentials_string
           info = nil
           shellout(cmd) do |io|
             output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
             begin
               doc = ActiveSupport::XmlMini.parse(output)
               #root_url = doc.elements["info/entry/repository/root"].text          
@@ -70,17 +86,20 @@
         rescue CommandFailed
           return nil
         end
-        
+
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
         def entries(path=nil, identifier=nil)
           path ||= ''
           identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
           entries = Entries.new
-          cmd = "#{SVN_BIN} list --xml #{target(path)}@#{identifier}"
+          cmd = "#{self.class.sq_bin} list --xml #{target(path)}@#{identifier}"
           cmd << credentials_string
           shellout(cmd) do |io|
             output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
             begin
               doc = ActiveSupport::XmlMini.parse(output)
               each_xml_element(doc['lists']['list'], 'entry') do |entry|
@@ -110,17 +129,20 @@
           logger.debug("Found #{entries.size} entries in the repository for #{target(path)}") if logger && logger.debug?
           entries.sort_by_name
         end
-        
+
         def properties(path, identifier=nil)
           # proplist xml output supported in svn 1.5.0 and higher
           return nil unless self.class.client_version_above?([1, 5, 0])
           
           identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
-          cmd = "#{SVN_BIN} proplist --verbose --xml #{target(path)}@#{identifier}"
+          cmd = "#{self.class.sq_bin} proplist --verbose --xml #{target(path)}@#{identifier}"
           cmd << credentials_string
           properties = {}
           shellout(cmd) do |io|
             output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
             begin
               doc = ActiveSupport::XmlMini.parse(output)
               each_xml_element(doc['properties']['target'], 'property') do |property|
@@ -132,19 +154,22 @@
           return nil if $? && $?.exitstatus != 0
           properties
         end
-        
+
         def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
           path ||= ''
           identifier_from = (identifier_from && identifier_from.to_i > 0) ? identifier_from.to_i : "HEAD"
           identifier_to = (identifier_to && identifier_to.to_i > 0) ? identifier_to.to_i : 1
           revisions = Revisions.new
-          cmd = "#{SVN_BIN} log --xml -r #{identifier_from}:#{identifier_to}"
+          cmd = "#{self.class.sq_bin} log --xml -r #{identifier_from}:#{identifier_to}"
           cmd << credentials_string
           cmd << " --verbose " if  options[:with_paths]
           cmd << " --limit #{options[:limit].to_i}" if options[:limit]
           cmd << ' ' + target(path)
           shellout(cmd) do |io|
             output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
             begin
               doc = ActiveSupport::XmlMini.parse(output)
               each_xml_element(doc['log'], 'logentry') do |logentry|
@@ -171,13 +196,14 @@
           return nil if $? && $?.exitstatus != 0
           revisions
         end
-        
+
         def diff(path, identifier_from, identifier_to=nil, type="inline")
           path ||= ''
           identifier_from = (identifier_from and identifier_from.to_i > 0) ? identifier_from.to_i : ''
+
           identifier_to = (identifier_to and identifier_to.to_i > 0) ? identifier_to.to_i : (identifier_from.to_i - 1)
-          
-          cmd = "#{SVN_BIN} diff -r "
+
+          cmd = "#{self.class.sq_bin} diff -r "
           cmd << "#{identifier_to}:"
           cmd << "#{identifier_from}"
           cmd << " #{target(path)}@#{identifier_from}"
@@ -191,10 +217,10 @@
           return nil if $? && $?.exitstatus != 0
           diff
         end
-        
+
         def cat(path, identifier=nil)
           identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
-          cmd = "#{SVN_BIN} cat #{target(path)}@#{identifier}"
+          cmd = "#{self.class.sq_bin} cat #{target(path)}@#{identifier}"
           cmd << credentials_string
           cat = nil
           shellout(cmd) do |io|
@@ -204,10 +230,10 @@
           return nil if $? && $?.exitstatus != 0
           cat
         end
-        
+
         def annotate(path, identifier=nil)
           identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
-          cmd = "#{SVN_BIN} blame #{target(path)}@#{identifier}"
+          cmd = "#{self.class.sq_bin} blame #{target(path)}@#{identifier}"
           cmd << credentials_string
           blame = Annotate.new
           shellout(cmd) do |io|
--- a/lib/redmine/scm/adapters/abstract_adapter.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/abstract_adapter.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -19,25 +19,29 @@
 
 module Redmine
   module Scm
-    module Adapters    
+    module Adapters
       class CommandFailed < StandardError #:nodoc:
       end
-      
+
       class AbstractAdapter #:nodoc:
         class << self
+          def client_command
+            ""
+          end
+
           # Returns the version of the scm client
           # Eg: [1, 5, 0] or [] if unknown
           def client_version
             []
           end
-          
+
           # Returns the version string of the scm client
           # Eg: '1.5.0' or 'Unknown version' if unknown
           def client_version_string
             v = client_version || 'Unknown version'
             v.is_a?(Array) ? v.join('.') : v.to_s
           end
-          
+
           # Returns true if the current client version is above
           # or equals the given one
           # If option is :unknown is set to true, it will return
@@ -45,19 +49,32 @@
           def client_version_above?(v, options={})
             ((client_version <=> v) >= 0) || (client_version.empty? && options[:unknown])
           end
+
+          def client_available
+            true
+          end
+
+          def shell_quote(str)
+            if Redmine::Platform.mswin?
+              '"' + str.gsub(/"/, '\\"') + '"'
+            else
+              "'" + str.gsub(/'/, "'\"'\"'") + "'"
+            end
+          end
         end
-                
-        def initialize(url, root_url=nil, login=nil, password=nil)
+
+        def initialize(url, root_url=nil, login=nil, password=nil,
+                       path_encoding=nil)
           @url = url
           @login = login if login && !login.empty?
           @password = (password || "") if @login
           @root_url = root_url.blank? ? retrieve_root_url : root_url
         end
-        
+
         def adapter_name
           'Abstract'
         end
-        
+
         def supports_cat?
           true
         end
@@ -65,11 +82,11 @@
         def supports_annotate?
           respond_to?('annotate')
         end
-        
+
         def root_url
           @root_url
         end
-      
+
         def url
           @url
         end
@@ -138,7 +155,7 @@
           path ||= ''
           (path[-1,1] == "/") ? path : "#{path}/"
         end
-        
+
         def without_leading_slash(path)
           path ||= ''
           path.gsub(%r{^/+}, '')
@@ -148,13 +165,9 @@
           path ||= ''
           (path[-1,1] == "/") ? path[0..-2] : path
          end
-        
+
         def shell_quote(str)
-          if Redmine::Platform.mswin?
-            '"' + str.gsub(/"/, '\\"') + '"'
-          else
-            "'" + str.gsub(/'/, "'\"'\"'") + "'"
-          end
+          self.class.shell_quote(str)
         end
 
       private
@@ -168,19 +181,19 @@
           base = path.match(/^\//) ? root_url : url
           shell_quote("#{base}/#{path}".gsub(/[?<>\*]/, ''))
         end
-            
+
         def logger
           self.class.logger
         end
-        
+
         def shellout(cmd, &block)
           self.class.shellout(cmd, &block)
         end
-        
+
         def self.logger
           RAILS_DEFAULT_LOGGER
         end
-        
+
         def self.shellout(cmd, &block)
           logger.debug "Shelling out: #{strip_credential(cmd)}" if logger && logger.debug?
           if Rails.env == 'development'
@@ -188,7 +201,12 @@
             cmd = "#{cmd} 2>>#{RAILS_ROOT}/log/scm.stderr.log"
           end
           begin
-            IO.popen(cmd, "r+") do |io|
+            if RUBY_VERSION < '1.9'
+              mode = "r+"
+            else
+              mode = "r+:ASCII-8BIT"
+            end
+            IO.popen(cmd, mode) do |io|
               io.close_write
               block.call(io) if block_given?
             end
@@ -198,8 +216,8 @@
             logger.error("SCM command failed, make sure that your SCM binary (eg. svn) is in PATH (#{ENV['PATH']}): #{strip_credential(cmd)}\n  with: #{msg}")
             raise CommandFailed.new(msg)
           end
-        end  
-        
+        end
+
         # Hides username/password in a given command
         def self.strip_credential(cmd)
           q = (Redmine::Platform.mswin? ? '"' : "'")
@@ -209,8 +227,19 @@
         def strip_credential(cmd)
           self.class.strip_credential(cmd)
         end
+
+        def scm_iconv(to, from, str)
+          return nil if str.nil?
+          return str if to == from
+          begin
+            Iconv.conv(to, from, str)
+          rescue Iconv::Failure => err
+            logger.error("failed to convert from #{from} to #{to}. #{err}")
+            nil
+          end
+        end
       end
-      
+
       class Entries < Array
         def sort_by_name
           sort {|x,y| 
@@ -219,7 +248,7 @@
             else
               x.kind <=> y.kind
             end
-          }   
+          }
         end
         
         def revisions
@@ -295,29 +324,8 @@
         def format_identifier
           identifier
         end
+      end
 
-        def save(repo)
-          Changeset.transaction do
-            changeset = Changeset.new(
-              :repository => repo,
-              :revision => identifier,
-              :scmid => scmid,
-              :committer => author, 
-              :committed_on => time,
-              :comments => message)
-            
-            if changeset.save
-              paths.each do |file|
-                Change.create(
-                  :changeset => changeset,
-                  :action => file[:action],
-                  :path => file[:path])
-              end
-            end
-          end
-        end
-      end
-        
       class Annotate
         attr_reader :lines, :revisions
         
--- a/lib/redmine/scm/adapters/bazaar_adapter.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/bazaar_adapter.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -19,15 +19,47 @@
 
 module Redmine
   module Scm
-    module Adapters    
+    module Adapters
       class BazaarAdapter < AbstractAdapter
-      
+
         # Bazaar executable name
-        BZR_BIN = "bzr"
-        
+        BZR_BIN = Redmine::Configuration['scm_bazaar_command'] || "bzr"
+
+        class << self
+          def client_command
+            @@bin    ||= BZR_BIN
+          end
+
+          def sq_bin
+            @@sq_bin ||= shell_quote(BZR_BIN)
+          end
+
+          def client_version
+            @@client_version ||= (scm_command_version || [])
+          end
+
+          def client_available
+            !client_version.empty?
+          end
+
+          def scm_command_version
+            scm_version = scm_version_from_command_line.dup
+            if scm_version.respond_to?(:force_encoding)
+              scm_version.force_encoding('ASCII-8BIT')
+            end
+            if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)})
+              m[2].scan(%r{\d+}).collect(&:to_i)
+            end
+          end
+
+          def scm_version_from_command_line
+            shellout("#{sq_bin} --version") { |io| io.read }.to_s
+          end
+        end
+
         # Get info about the repository
         def info
-          cmd = "#{BZR_BIN} revno #{target('')}"
+          cmd = "#{self.class.sq_bin} revno #{target('')}"
           info = nil
           shellout(cmd) do |io|
             if io.read =~ %r{^(\d+)\r?$}
@@ -43,13 +75,13 @@
         rescue CommandFailed
           return nil
         end
-        
+
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
         def entries(path=nil, identifier=nil)
           path ||= ''
           entries = Entries.new
-          cmd = "#{BZR_BIN} ls -v --show-ids"
+          cmd = "#{self.class.sq_bin} ls -v --show-ids"
           identifier = -1 unless identifier && identifier.to_i > 0 
           cmd << " -r#{identifier.to_i}" 
           cmd << " #{target(path)}"
@@ -71,13 +103,13 @@
           logger.debug("Found #{entries.size} entries in the repository for #{target(path)}") if logger && logger.debug?
           entries.sort_by_name
         end
-    
+
         def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
           path ||= ''
           identifier_from = (identifier_from and identifier_from.to_i > 0) ? identifier_from.to_i : 'last:1'
           identifier_to = (identifier_to and identifier_to.to_i > 0) ? identifier_to.to_i : 1
           revisions = Revisions.new
-          cmd = "#{BZR_BIN} log -v --show-ids -r#{identifier_to}..#{identifier_from} #{target(path)}"
+          cmd = "#{self.class.sq_bin} log -v --show-ids -r#{identifier_to}..#{identifier_from} #{target(path)}"
           shellout(cmd) do |io|
             revision = nil
             parsing = nil
@@ -132,7 +164,7 @@
           return nil if $? && $?.exitstatus != 0
           revisions
         end
-        
+
         def diff(path, identifier_from, identifier_to=nil)
           path ||= ''
           if identifier_to
@@ -143,7 +175,7 @@
           if identifier_from
             identifier_from = identifier_from.to_i
           end
-          cmd = "#{BZR_BIN} diff -r#{identifier_to}..#{identifier_from} #{target(path)}"
+          cmd = "#{self.class.sq_bin} diff -r#{identifier_to}..#{identifier_from} #{target(path)}"
           diff = []
           shellout(cmd) do |io|
             io.each_line do |line|
@@ -153,9 +185,9 @@
           #return nil if $? && $?.exitstatus != 0
           diff
         end
-        
+
         def cat(path, identifier=nil)
-          cmd = "#{BZR_BIN} cat"
+          cmd = "#{self.class.sq_bin} cat"
           cmd << " -r#{identifier.to_i}" if identifier && identifier.to_i > 0
           cmd << " #{target(path)}"
           cat = nil
@@ -166,9 +198,9 @@
           return nil if $? && $?.exitstatus != 0
           cat
         end
-        
+
         def annotate(path, identifier=nil)
-          cmd = "#{BZR_BIN} annotate --all"
+          cmd = "#{self.class.sq_bin} annotate --all"
           cmd << " -r#{identifier.to_i}" if identifier && identifier.to_i > 0
           cmd << " #{target(path)}"
           blame = Annotate.new
--- a/lib/redmine/scm/adapters/cvs_adapter.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/cvs_adapter.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -23,14 +23,47 @@
       class CvsAdapter < AbstractAdapter
 
         # CVS executable name
-        CVS_BIN = "cvs"
-    
+        CVS_BIN = Redmine::Configuration['scm_cvs_command'] || "cvs"
+
+        class << self
+          def client_command
+            @@bin    ||= CVS_BIN
+          end
+
+          def sq_bin
+            @@sq_bin ||= shell_quote(CVS_BIN)
+          end
+
+          def client_version
+            @@client_version ||= (scm_command_version || [])
+          end
+
+          def client_available
+            client_version_above?([1, 12])
+          end
+
+          def scm_command_version
+            scm_version = scm_version_from_command_line.dup
+            if scm_version.respond_to?(:force_encoding)
+              scm_version.force_encoding('ASCII-8BIT')
+            end
+            if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)}m)
+              m[2].scan(%r{\d+}).collect(&:to_i)
+            end
+          end
+
+          def scm_version_from_command_line
+            shellout("#{sq_bin} --version") { |io| io.read }.to_s
+          end
+        end
+
         # Guidelines for the input:
         #  url -> the project-path, relative to the cvsroot (eg. module name)
         #  root_url -> the good old, sometimes damned, CVSROOT
         #  login -> unnecessary
         #  password -> unnecessary too
-        def initialize(url, root_url=nil, login=nil, password=nil)
+        def initialize(url, root_url=nil, login=nil, password=nil,
+                       path_encoding=nil)
           @url = url
           @login = login if login && !login.empty?
           @password = (password || "") if @login
@@ -38,24 +71,24 @@
           raise CommandFailed if root_url.blank?
           @root_url = root_url
         end
-        
+
         def root_url
           @root_url
         end
-        
+
         def url
           @url
         end
-        
+
         def info
           logger.debug "<cvs> info"
           Info.new({:root_url => @root_url, :lastrev => nil})
         end
-        
+
         def get_previous_revision(revision)
           CvsRevisionHelper.new(revision).prevRev
         end
-    
+
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
         # this method is used by the repository-browser (aka LIST)
@@ -63,14 +96,14 @@
           logger.debug "<cvs> entries '#{path}' with identifier '#{identifier}'"
           path_with_project="#{url}#{with_leading_slash(path)}"
           entries = Entries.new
-          cmd = "#{CVS_BIN} -d #{shell_quote root_url} rls -e"
+          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rls -e"
           cmd << " -D \"#{time_to_cvstime(identifier)}\"" if identifier
           cmd << " #{shell_quote path_with_project}"
           shellout(cmd) do |io|
             io.each_line(){|line|
               fields=line.chop.split('/',-1)
               logger.debug(">>InspectLine #{fields.inspect}")
-              
+
               if fields[0]!="D"
                 entries << Entry.new({:name => fields[-5],
                   #:path => fields[-4].include?(path)?fields[-4]:(path + "/"+ fields[-4]),
@@ -96,20 +129,20 @@
           end
           return nil if $? && $?.exitstatus != 0
           entries.sort_by_name
-        end  
+        end
 
         STARTLOG="----------------------------"
         ENDLOG  ="============================================================================="
-        
+
         # Returns all revisions found between identifier_from and identifier_to
         # in the repository. both identifier have to be dates or nil.
         # these method returns nothing but yield every result in block
         def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={}, &block)
           logger.debug "<cvs> revisions path:'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}"
-          
+
           path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{CVS_BIN} -d #{shell_quote root_url} rlog"
-          cmd << " -d\">#{time_to_cvstime(identifier_from)}\"" if identifier_from
+          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rlog"
+          cmd << " -d\">#{time_to_cvstime_rlog(identifier_from)}\"" if identifier_from
           cmd << " #{shell_quote path_with_project}"
           shellout(cmd) do |io|
             state="entry_start"
@@ -123,7 +156,7 @@
             file_state=nil
             branch_map=nil
             
-            io.each_line() do |line|            
+            io.each_line() do |line|
               
               if state!="revision" && /^#{ENDLOG}/ =~ line
                 commit_log=String.new
@@ -162,9 +195,9 @@
                 end
                 next
               elsif state=="revision"
-                if /^#{ENDLOG}/ =~ line || /^#{STARTLOG}/ =~ line               
+                if /^#{ENDLOG}/ =~ line || /^#{STARTLOG}/ =~ line
                   if revision
-                    
+
                     revHelper=CvsRevisionHelper.new(revision)
                     revBranch="HEAD"
                     
@@ -176,7 +209,7 @@
                     
                     logger.debug("********** YIELD Revision #{revision}::#{revBranch}")
                     
-                    yield Revision.new({                    
+                    yield Revision.new({
                       :time => date,
                       :author => author,
                       :message=>commit_log.chomp,
@@ -188,9 +221,9 @@
                         :kind=>'file',
                         :action=>file_state
                       }]
-                    })                 
+                    })
                   end
-    
+
                   commit_log=String.new
                   revision=nil
                   
@@ -199,7 +232,7 @@
                   end
                   next
                 end
-                  
+
                 if /^branches: (.+)$/ =~ line
                   #TODO: version.branch = $1
                 elsif /^revision (\d+(?:\.\d+)+).*$/ =~ line
@@ -216,20 +249,20 @@
                   #                  version.line_minus = linechanges[2]
                   #                else
                   #                  version.line_plus  = 0
-                  #                  version.line_minus = 0     
-                  #                end              
-                else            
+                  #                  version.line_minus = 0
+                  #                end
+                else
                   commit_log << line unless line =~ /^\*\*\* empty log message \*\*\*/
-                end 
-              end 
+                end
+              end
             end
           end
-        end  
-        
+        end
+
         def diff(path, identifier_from, identifier_to=nil)
           logger.debug "<cvs> diff path:'#{path}',identifier_from #{identifier_from}, identifier_to #{identifier_to}"
           path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{CVS_BIN} -d #{shell_quote root_url} rdiff -u -r#{identifier_to} -r#{identifier_from} #{shell_quote path_with_project}"
+          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rdiff -u -r#{identifier_to} -r#{identifier_from} #{shell_quote path_with_project}"
           diff = []
           shellout(cmd) do |io|
             io.each_line do |line|
@@ -238,28 +271,29 @@
           end
           return nil if $? && $?.exitstatus != 0
           diff
-        end  
-        
+        end
+
         def cat(path, identifier=nil)
           identifier = (identifier) ? identifier : "HEAD"
           logger.debug "<cvs> cat path:'#{path}',identifier #{identifier}"
           path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{CVS_BIN} -d #{shell_quote root_url} co"
+          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} co"
           cmd << " -D \"#{time_to_cvstime(identifier)}\"" if identifier
           cmd << " -p #{shell_quote path_with_project}"
           cat = nil
           shellout(cmd) do |io|
+            io.binmode
             cat = io.read
           end
           return nil if $? && $?.exitstatus != 0
           cat
-        end  
+        end
 
         def annotate(path, identifier=nil)
           identifier = (identifier) ? identifier.to_i : "HEAD"
           logger.debug "<cvs> annotate path:'#{path}',identifier #{identifier}"
           path_with_project="#{url}#{with_leading_slash(path)}"
-          cmd = "#{CVS_BIN} -d #{shell_quote root_url} rannotate -r#{identifier} #{shell_quote path_with_project}"
+          cmd = "#{self.class.sq_bin} -d #{shell_quote root_url} rannotate -r#{identifier} #{shell_quote path_with_project}"
           blame = Annotate.new
           shellout(cmd) do |io|
             io.each_line do |line|
@@ -270,9 +304,9 @@
           return nil if $? && $?.exitstatus != 0
           blame
         end
-         
+
         private
-        
+
         # Returns the root url without the connexion string
         # :pserver:anonymous@foo.bar:/path => /path
         # :ext:cvsservername:/path => /path
@@ -290,6 +324,12 @@
           end
           return time.strftime("%Y-%m-%d %H:%M:%S")
         end
+
+        def time_to_cvstime_rlog(time)
+          return nil if time.nil?
+          t1 = time.clone.localtime
+          return t1.strftime("%Y-%m-%d %H:%M:%S")
+        end
           
         def normalize_cvs_path(path)
           normalize_path(path.gsub(/Attic\//,''))
@@ -339,7 +379,11 @@
         private
         def buildRevision(rev)
           if rev== 0
-            @base
+            if @branchid.nil?
+              @base+".0"
+            else
+              @base
+            end
           elsif @branchid.nil? 
             @base+"."+rev.to_s
           else
--- a/lib/redmine/scm/adapters/darcs_adapter.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/darcs_adapter.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -20,31 +20,45 @@
 
 module Redmine
   module Scm
-    module Adapters    
-      class DarcsAdapter < AbstractAdapter      
+    module Adapters
+      class DarcsAdapter < AbstractAdapter
         # Darcs executable name
-        DARCS_BIN = "darcs"
-        
+        DARCS_BIN = Redmine::Configuration['scm_darcs_command'] || "darcs"
+
         class << self
+          def client_command
+            @@bin    ||= DARCS_BIN
+          end
+
+          def sq_bin
+            @@sq_bin ||= shell_quote(DARCS_BIN)
+          end
+
           def client_version
             @@client_version ||= (darcs_binary_version || [])
           end
-  	  
+
+          def client_available
+            !client_version.empty?
+          end
+
           def darcs_binary_version
-            cmd = "#{DARCS_BIN} --version"
-            version = nil
-            shellout(cmd) do |io|
-              # Read darcs version in first returned line
-              if m = io.gets.match(%r{((\d+\.)+\d+)})
-                version = m[0].scan(%r{\d+}).collect(&:to_i)
-              end
+            darcsversion = darcs_binary_version_from_command_line.dup
+            if darcsversion.respond_to?(:force_encoding)
+              darcsversion.force_encoding('ASCII-8BIT')
             end
-            return nil if $? && $?.exitstatus != 0
-            version
+            if m = darcsversion.match(%r{\A(.*?)((\d+\.)+\d+)})
+              m[2].scan(%r{\d+}).collect(&:to_i)
+            end
+          end
+
+          def darcs_binary_version_from_command_line
+            shellout("#{sq_bin} --version") { |io| io.read }.to_s
           end
         end
 
-        def initialize(url, root_url=nil, login=nil, password=nil)
+        def initialize(url, root_url=nil, login=nil, password=nil,
+                       path_encoding=nil)
           @url = url
           @root_url = url
         end
@@ -59,14 +73,16 @@
           rev = revisions(nil,nil,nil,{:limit => 1})
           rev ? Info.new({:root_url => @url, :lastrev => rev.last}) : nil
         end
-        
+
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
         def entries(path=nil, identifier=nil)
           path_prefix = (path.blank? ? '' : "#{path}/")
-          path = '.' if path.blank?
-          entries = Entries.new          
-          cmd = "#{DARCS_BIN} annotate --repodir #{shell_quote @url} --xml-output"
+          if path.blank?
+            path = ( self.class.client_version_above?([2, 2, 0]) ? @url : '.' )
+          end
+          entries = Entries.new
+          cmd = "#{self.class.sq_bin} annotate --repodir #{shell_quote @url} --xml-output"
           cmd << " --match #{shell_quote("hash #{identifier}")}" if identifier
           cmd << " #{shell_quote path}"
           shellout(cmd) do |io|
@@ -86,11 +102,11 @@
           return nil if $? && $?.exitstatus != 0
           entries.compact.sort_by_name
         end
-    
+
         def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
           path = '.' if path.blank?
           revisions = Revisions.new
-          cmd = "#{DARCS_BIN} changes --repodir #{shell_quote @url} --xml-output"
+          cmd = "#{self.class.sq_bin} changes --repodir #{shell_quote @url} --xml-output"
           cmd << " --from-match #{shell_quote("hash #{identifier_from}")}" if identifier_from
           cmd << " --last #{options[:limit].to_i}" if options[:limit]
           shellout(cmd) do |io|
@@ -113,10 +129,10 @@
           return nil if $? && $?.exitstatus != 0
           revisions
         end
-        
+
         def diff(path, identifier_from, identifier_to=nil)
           path = '*' if path.blank?
-          cmd = "#{DARCS_BIN} diff --repodir #{shell_quote @url}"
+          cmd = "#{self.class.sq_bin} diff --repodir #{shell_quote @url}"
           if identifier_to.nil?
             cmd << " --match #{shell_quote("hash #{identifier_from}")}"
           else
@@ -133,9 +149,9 @@
           return nil if $? && $?.exitstatus != 0
           diff
         end
-        
+
         def cat(path, identifier=nil)
-          cmd = "#{DARCS_BIN} show content --repodir #{shell_quote @url}"
+          cmd = "#{self.class.sq_bin} show content --repodir #{shell_quote @url}"
           cmd << " --match #{shell_quote("hash #{identifier}")}" if identifier
           cmd << " #{shell_quote path}"
           cat = nil
@@ -148,7 +164,7 @@
         end
 
         private
-        
+
         # Returns an Entry from the given XML element
         # or nil if the entry was deleted
         def entry_from_xml(element, path_prefix)
@@ -156,7 +172,7 @@
           if modified_element.elements['modified_how'].text.match(/removed/)
             return nil
           end
-          
+
           Entry.new({:name => element.attributes['name'],
                      :path => path_prefix + element.attributes['name'],
                      :kind => element.name == 'file' ? 'file' : 'dir',
@@ -165,12 +181,41 @@
                        :identifier => nil,
                        :scmid => modified_element.elements['patch'].attributes['hash']
                        })
-                     })        
+                     })
         end
-        
+
+        def get_paths_for_patch(hash)
+          paths = get_paths_for_patch_raw(hash)
+          if self.class.client_version_above?([2, 4])
+            orig_paths = paths
+            paths = []
+            add_paths = []
+            add_paths_name = []
+            mod_paths = []
+            other_paths = []
+            orig_paths.each do |path|
+              if path[:action] == 'A'
+                add_paths << path
+                add_paths_name << path[:path]
+              elsif path[:action] == 'M'
+                mod_paths << path
+              else
+                other_paths << path
+              end
+            end
+            add_paths_name.each do |add_path|
+              mod_paths.delete_if { |m| m[:path] == add_path }
+            end
+            paths.concat add_paths
+            paths.concat mod_paths
+            paths.concat other_paths
+          end
+          paths
+        end
+
         # Retrieve changed paths for a single patch
-        def get_paths_for_patch(hash)
-          cmd = "#{DARCS_BIN} annotate --repodir #{shell_quote @url} --summary --xml-output"
+        def get_paths_for_patch_raw(hash)
+          cmd = "#{self.class.sq_bin} annotate --repodir #{shell_quote @url} --summary --xml-output"
           cmd << " --match #{shell_quote("hash #{hash}")} "
           paths = []
           shellout(cmd) do |io|
--- a/lib/redmine/scm/adapters/filesystem_adapter.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/filesystem_adapter.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -23,12 +23,19 @@
 
 module Redmine
   module Scm
-    module Adapters    
+    module Adapters
       class FilesystemAdapter < AbstractAdapter
-        
 
-        def initialize(url, root_url=nil, login=nil, password=nil)
+        class << self
+          def client_available
+            true
+          end
+        end
+
+        def initialize(url, root_url=nil, login=nil, password=nil,
+                       path_encoding=nil)
           @url = with_trailling_slash(url)
+          @path_encoding = path_encoding || 'UTF-8'
         end
 
         def format_path_ends(path, leading=true, trailling=true)
@@ -46,47 +53,59 @@
         rescue CommandFailed
           return nil
         end
-        
+
         def entries(path="", identifier=nil)
           entries = Entries.new
-          Dir.new(target(path)).each do |e|
-            relative_path = format_path_ends((format_path_ends(path,
-                                                               false,
-                                                               true) + e),
-                                             false,false)
-            target = target(relative_path)
-            entries << 
-              Entry.new({ :name => File.basename(e),
+          trgt_utf8 = target(path)
+          trgt = scm_iconv(@path_encoding, 'UTF-8', trgt_utf8)
+          Dir.new(trgt).each do |e1|
+            e_utf8 = scm_iconv('UTF-8', @path_encoding, e1)
+            relative_path_utf8 = format_path_ends((format_path_ends(path,false,true) + e_utf8),false,false)
+            t1_utf8 = target(relative_path_utf8)
+            t1 = scm_iconv(@path_encoding, 'UTF-8', t1_utf8)
+            relative_path = scm_iconv(@path_encoding, 'UTF-8', relative_path_utf8)
+            e1 = scm_iconv(@path_encoding, 'UTF-8', e_utf8)
+            if File.exist?(t1) and # paranoid test
+                  %w{file directory}.include?(File.ftype(t1)) and # avoid special types
+                  not File.basename(e1).match(/^\.+$/) # avoid . and ..
+              p1         = File.readable?(t1) ? relative_path : ""
+              utf_8_path = scm_iconv('UTF-8', @path_encoding, p1)
+              entries <<
+                Entry.new({ :name => scm_iconv('UTF-8', @path_encoding, File.basename(e1)),
                           # below : list unreadable files, but dont link them.
-                          :path => File.readable?(target) ? relative_path : "",
-                          :kind => (File.directory?(target) ? 'dir' : 'file'),
-                          :size => (File.directory?(target) ? nil : [File.size(target)].pack('l').unpack('L').first),
+                          :path => utf_8_path,
+                          :kind => (File.directory?(t1) ? 'dir' : 'file'),
+                          :size => (File.directory?(t1) ? nil : [File.size(t1)].pack('l').unpack('L').first),
                           :lastrev => 
-                          Revision.new({:time => (File.mtime(target)).localtime,
-                                       })
-                        }) if File.exist?(target) and # paranoid test
-              %w{file directory}.include?(File.ftype(target)) and # avoid special types
-              not File.basename(e).match(/^\.+$/) # avoid . and ..             
+                              Revision.new({:time => (File.mtime(t1)) })
+                        })
+            end
           end
           entries.sort_by_name
+        rescue  => err
+          logger.error "scm: filesystem: error: #{err.message}"
+          raise CommandFailed.new(err.message)
         end
-        
+
         def cat(path, identifier=nil)
-          File.new(target(path), "rb").read
+          p = scm_iconv(@path_encoding, 'UTF-8', target(path))
+          File.new(p, "rb").read
+        rescue  => err
+          logger.error "scm: filesystem: error: #{err.message}"
+          raise CommandFailed.new(err.message)
         end
 
         private
-        
+
         # AbstractAdapter::target is implicitly made to quote paths.
         # Here we do not shell-out, so we do not want quotes.
         def target(path=nil)
-          #Prevent the use of ..
+          # Prevent the use of ..
           if path and !path.match(/(^|\/)\.\.(\/|$)/)
             return "#{self.url}#{without_leading_slash(path)}"
           end
           return self.url
         end
-        
       end
     end
   end
--- a/lib/redmine/scm/adapters/git_adapter.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/git_adapter.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -19,10 +19,53 @@
 
 module Redmine
   module Scm
-    module Adapters    
+    module Adapters
       class GitAdapter < AbstractAdapter
+
+        SCM_GIT_REPORT_LAST_COMMIT = true
+
         # Git executable name
-        GIT_BIN = "git"
+        GIT_BIN = Redmine::Configuration['scm_git_command'] || "git"
+
+        # raised if scm command exited with error, e.g. unknown revision.
+        class ScmCommandAborted < CommandFailed; end
+
+        class << self
+          def client_command
+            @@bin    ||= GIT_BIN
+          end
+
+          def sq_bin
+            @@sq_bin ||= shell_quote(GIT_BIN)
+          end
+
+          def client_version
+            @@client_version ||= (scm_command_version || [])
+          end
+
+          def client_available
+            !client_version.empty?
+          end
+
+          def scm_command_version
+            scm_version = scm_version_from_command_line.dup
+            if scm_version.respond_to?(:force_encoding)
+              scm_version.force_encoding('ASCII-8BIT')
+            end
+            if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)})
+              m[2].scan(%r{\d+}).collect(&:to_i)
+            end
+          end
+
+          def scm_version_from_command_line
+            shellout("#{sq_bin} --version --no-color") { |io| io.read }.to_s
+          end
+        end
+
+        def initialize(url, root_url=nil, login=nil, password=nil, path_encoding=nil)
+          super
+          @flag_report_last_commit = SCM_GIT_REPORT_LAST_COMMIT
+        end
 
         def info
           begin
@@ -35,7 +78,7 @@
         def branches
           return @branches if @branches
           @branches = []
-          cmd = "#{GIT_BIN} --git-dir #{target('')} branch --no-color"
+          cmd = "#{self.class.sq_bin} --git-dir #{target('')} branch --no-color"
           shellout(cmd) do |io|
             io.each_line do |line|
               @branches << line.match('\s*\*?\s*(.*)$')[1]
@@ -46,20 +89,20 @@
 
         def tags
           return @tags if @tags
-          cmd = "#{GIT_BIN} --git-dir #{target('')} tag"
+          cmd = "#{self.class.sq_bin} --git-dir #{target('')} tag"
           shellout(cmd) do |io|
             @tags = io.readlines.sort!.map{|t| t.strip}
           end
         end
 
         def default_branch
-          branches.include?('master') ? 'master' : branches.first 
+          branches.include?('master') ? 'master' : branches.first
         end
-        
+
         def entries(path=nil, identifier=nil)
           path ||= ''
           entries = Entries.new
-          cmd = "#{GIT_BIN} --git-dir #{target('')} ls-tree -l "
+          cmd = "#{self.class.sq_bin} --git-dir #{target('')} ls-tree -l "
           cmd << shell_quote("HEAD:" + path) if identifier.nil?
           cmd << shell_quote(identifier + ":" + path) if identifier
           shellout(cmd)  do |io|
@@ -75,7 +118,7 @@
                  :path => full_path,
                  :kind => (type == "tree") ? 'dir' : 'file',
                  :size => (type == "tree") ? nil : size,
-                 :lastrev => lastrev(full_path,identifier)
+                 :lastrev => @flag_report_last_commit ? lastrev(full_path,identifier) : Revision.new
                 }) unless entries.detect{|entry| entry.name == name}
               end
             end
@@ -84,18 +127,17 @@
           entries.sort_by_name
         end
 
-        def lastrev(path,rev)
+        def lastrev(path, rev)
           return nil if path.nil?
-          cmd = "#{GIT_BIN} --git-dir #{target('')} log --no-color --date=iso --pretty=fuller --no-merges -n 1 "
-          cmd << " #{shell_quote rev} " if rev 
-          cmd <<  "-- #{shell_quote path} " unless path.empty?
+          cmd_args = %w|log --no-color --encoding=UTF-8 --date=iso --pretty=fuller --no-merges -n 1|
+          cmd_args << rev if rev 
+          cmd_args << "--" << path unless path.empty?
           lines = []
-          shellout(cmd) { |io| lines = io.readlines }
-          return nil if $? && $?.exitstatus != 0
+          scm_cmd(*cmd_args) { |io| lines = io.readlines }
           begin
               id = lines[0].split[1]
               author = lines[1].match('Author:\s+(.*)$')[1]
-              time = Time.parse(lines[4].match('CommitDate:\s+(.*)$')[1]).localtime
+              time = Time.parse(lines[4].match('CommitDate:\s+(.*)$')[1])
 
               Revision.new({
                 :identifier => id,
@@ -104,26 +146,29 @@
                 :time => time,
                 :message => nil, 
                 :paths => nil 
-              })
+                })
           rescue NoMethodError => e
               logger.error("The revision '#{path}' has a wrong format")
               return nil
           end
+        rescue ScmCommandAborted
+          nil
         end
 
         def revisions(path, identifier_from, identifier_to, options={})
           revisions = Revisions.new
+          cmd_args = %w|log --no-color --encoding=UTF-8 --raw --date=iso --pretty=fuller|
+          cmd_args << "--reverse" if options[:reverse]
+          cmd_args << "--all" if options[:all]
+          cmd_args << "-n" << "#{options[:limit].to_i}" if options[:limit]
+          from_to = ""
+          from_to << "#{identifier_from}.." if identifier_from
+          from_to << "#{identifier_to}" if identifier_to
+          cmd_args << from_to if !from_to.empty?
+          cmd_args << "--since=#{options[:since].strftime("%Y-%m-%d %H:%M:%S")}" if options[:since]
+          cmd_args << "--" << path if path && !path.empty?
 
-          cmd = "#{GIT_BIN} --git-dir #{target('')} log --no-color --raw --date=iso --pretty=fuller "
-          cmd << " --reverse " if options[:reverse]
-          cmd << " --all " if options[:all]
-          cmd << " -n #{options[:limit].to_i} " if options[:limit]
-          cmd << "#{shell_quote(identifier_from + '..')}" if identifier_from
-          cmd << "#{shell_quote identifier_to}" if identifier_to
-          cmd << " --since=#{shell_quote(options[:since].strftime("%Y-%m-%d %H:%M:%S"))}" if options[:since]
-          cmd << " -- #{shell_quote path}" if path && !path.empty?
-
-          shellout(cmd) do |io|
+          scm_cmd *cmd_args do |io|
             files=[]
             changeset = {}
             parsing_descr = 0  #0: not parsing desc or files, 1: parsing desc, 2: parsing files
@@ -200,8 +245,8 @@
               end
             end
           end
-
-          return nil if $? && $?.exitstatus != 0
+          revisions
+        rescue ScmCommandAborted
           revisions
         end
 
@@ -209,9 +254,9 @@
           path ||= ''
 
           if identifier_to
-            cmd = "#{GIT_BIN} --git-dir #{target('')} diff --no-color #{shell_quote identifier_to} #{shell_quote identifier_from}" 
+            cmd = "#{self.class.sq_bin} --git-dir #{target('')} diff --no-color #{shell_quote identifier_to} #{shell_quote identifier_from}" 
           else
-            cmd = "#{GIT_BIN} --git-dir #{target('')} show --no-color #{shell_quote identifier_from}"
+            cmd = "#{self.class.sq_bin} --git-dir #{target('')} show --no-color #{shell_quote identifier_from}"
           end
 
           cmd << " -- #{shell_quote path}" unless path.empty?
@@ -227,7 +272,7 @@
         
         def annotate(path, identifier=nil)
           identifier = 'HEAD' if identifier.blank?
-          cmd = "#{GIT_BIN} --git-dir #{target('')} blame -p #{shell_quote identifier} -- #{shell_quote path}"
+          cmd = "#{self.class.sq_bin} --git-dir #{target('')} blame -p #{shell_quote identifier} -- #{shell_quote path}"
           blame = Annotate.new
           content = nil
           shellout(cmd) { |io| io.binmode; content = io.read }
@@ -250,12 +295,12 @@
           end
           blame
         end
-        
+
         def cat(path, identifier=nil)
           if identifier.nil?
             identifier = 'HEAD'
           end
-          cmd = "#{GIT_BIN} --git-dir #{target('')} show --no-color #{shell_quote(identifier + ':' + path)}"
+          cmd = "#{self.class.sq_bin} --git-dir #{target('')} show --no-color #{shell_quote(identifier + ':' + path)}"
           cat = nil
           shellout(cmd) do |io|
             io.binmode
@@ -271,6 +316,18 @@
             identifier[0,8]
           end
         end
+
+        def scm_cmd(*args, &block)
+          repo_path = root_url || url
+          full_args = [GIT_BIN, '--git-dir', repo_path]
+          full_args += args
+          ret = shellout(full_args.map { |e| shell_quote e.to_s }.join(' '), &block)
+          if $? && $?.exitstatus != 0
+            raise ScmCommandAborted, "git exited with non-zero status: #{$?.exitstatus}"
+          end
+          ret
+        end
+        private :scm_cmd
       end
     end
   end
--- a/lib/redmine/scm/adapters/mercurial/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/mercurial/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/4633/trunk/lib/redmine/scm/adapters/mercurial
+/svn/!svn/ver/4989/trunk/lib/redmine/scm/adapters/mercurial
 END
 hg-template-0.9.5.tmpl
 K 25
@@ -9,6 +9,12 @@
 V 82
 /svn/!svn/ver/4633/trunk/lib/redmine/scm/adapters/mercurial/hg-template-0.9.5.tmpl
 END
+redminehelper.py
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svn/!svn/ver/4989/trunk/lib/redmine/scm/adapters/mercurial/redminehelper.py
+END
 hg-template-1.0.tmpl
 K 25
 svn:wc:ra_dav:version-url
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/scm/adapters/mercurial/.svn/dir-prop-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,7 @@
+K 10
+svn:ignore
+V 36
+redminehelper.pyc
+redminehelper.pyo
+
+END
--- a/lib/redmine/scm/adapters/mercurial/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/mercurial/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,16 +1,16 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/scm/adapters/mercurial
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-05T15:02:24.961855Z
-4633
+2011-03-02T10:17:36.526269Z
+4989
 tmaruyama
-
+has-props
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:09:38.000000Z
+2011-03-03T11:05:14.000000Z
 961af0eb6ab17203d985cdeac685937e
 2011-01-05T15:02:24.961855Z
 4633
@@ -60,13 +60,47 @@
 
 824
 
+redminehelper.py
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+5bf6790a201bf33c17cae96c6a9d75fc
+2011-03-02T10:17:36.526269Z
+4989
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6270
+
 hg-template-1.0.tmpl
 file
 
 
 
 
-2011-01-13T14:09:38.000000Z
+2011-03-03T11:05:14.000000Z
 9d5de62ae8cdc141d3f8b970dbba07a0
 2011-01-05T15:02:24.961855Z
 4633
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/scm/adapters/mercurial/.svn/text-base/redminehelper.py.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,183 @@
+# redminehelper: Redmine helper extension for Mercurial
+#
+# Copyright 2010 Alessio Franceschelli (alefranz.net)
+# Copyright 2010-2011 Yuya Nishihara <yuya@tcha.org>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+"""helper commands for Redmine to reduce the number of hg calls
+
+To test this extension, please try::
+
+    $ hg --config extensions.redminehelper=redminehelper.py rhsummary
+
+I/O encoding:
+
+:file path: urlencoded, raw string
+:tag name: utf-8
+:branch name: utf-8
+:node: 12-digits (short) hex string
+
+Output example of rhsummary::
+
+    <?xml version="1.0"?>
+    <rhsummary>
+      <repository root="/foo/bar">
+        <tip revision="1234" node="abcdef0123..."/>
+        <tag revision="123" node="34567abc..." name="1.1.1"/>
+        <branch .../>
+        ...
+      </repository>
+    </rhsummary>
+
+Output example of rhmanifest::
+
+    <?xml version="1.0"?>
+    <rhmanifest>
+      <repository root="/foo/bar">
+        <manifest revision="1234" path="lib">
+          <file name="diff.rb" revision="123" node="34567abc..." time="12345"
+                 size="100"/>
+          ...
+          <dir name="redmine"/>
+          ...
+        </manifest>
+      </repository>
+    </rhmanifest>
+"""
+import re, time, cgi, urllib
+from mercurial import cmdutil, commands, node, error
+
+_x = cgi.escape
+_u = lambda s: cgi.escape(urllib.quote(s))
+
+def _tip(ui, repo):
+    # see mercurial/commands.py:tip
+    def tiprev():
+        try:
+            return len(repo) - 1
+        except TypeError:  # Mercurial < 1.1
+            return repo.changelog.count() - 1
+    tipctx = repo.changectx(tiprev())
+    ui.write('<tip revision="%d" node="%s"/>\n'
+             % (tipctx.rev(), _x(node.short(tipctx.node()))))
+
+_SPECIAL_TAGS = ('tip',)
+
+def _tags(ui, repo):
+    # see mercurial/commands.py:tags
+    for t, n in reversed(repo.tagslist()):
+        if t in _SPECIAL_TAGS:
+            continue
+        try:
+            r = repo.changelog.rev(n)
+        except error.LookupError:
+            continue
+        ui.write('<tag revision="%d" node="%s" name="%s"/>\n'
+                 % (r, _x(node.short(n)), _x(t)))
+
+def _branches(ui, repo):
+    # see mercurial/commands.py:branches
+    def iterbranches():
+        for t, n in repo.branchtags().iteritems():
+            yield t, n, repo.changelog.rev(n)
+    def branchheads(branch):
+        try:
+            return repo.branchheads(branch, closed=False)
+        except TypeError:  # Mercurial < 1.2
+            return repo.branchheads(branch)
+    for t, n, r in sorted(iterbranches(), key=lambda e: e[2], reverse=True):
+        if repo.lookup(r) in branchheads(t):
+            ui.write('<branch revision="%d" node="%s" name="%s"/>\n'
+                     % (r, _x(node.short(n)), _x(t)))
+
+def _manifest(ui, repo, path, rev):
+    ctx = repo.changectx(rev)
+    ui.write('<manifest revision="%d" path="%s">\n'
+             % (ctx.rev(), _u(path)))
+
+    known = set()
+    pathprefix = (path.rstrip('/') + '/').lstrip('/')
+    for f, n in sorted(ctx.manifest().iteritems(), key=lambda e: e[0]):
+        if not f.startswith(pathprefix):
+            continue
+        name = re.sub(r'/.*', '/', f[len(pathprefix):])
+        if name in known:
+            continue
+        known.add(name)
+
+        if name.endswith('/'):
+            ui.write('<dir name="%s"/>\n'
+                     % _x(urllib.quote(name[:-1])))
+        else:
+            fctx = repo.filectx(f, fileid=n)
+            tm, tzoffset = fctx.date()
+            ui.write('<file name="%s" revision="%d" node="%s" '
+                     'time="%d" size="%d"/>\n'
+                     % (_u(name), fctx.rev(), _x(node.short(fctx.node())),
+                        tm, fctx.size(), ))
+
+    ui.write('</manifest>\n')
+
+def rhannotate(ui, repo, *pats, **opts):
+    return commands.annotate(ui, repo, *map(urllib.unquote_plus, pats), **opts)
+
+def rhcat(ui, repo, file1, *pats, **opts):
+    return commands.cat(ui, repo, urllib.unquote_plus(file1), *map(urllib.unquote_plus, pats), **opts)
+
+def rhdiff(ui, repo, *pats, **opts):
+    """diff repository (or selected files)"""
+    change = opts.pop('change', None)
+    if change:  # add -c option for Mercurial<1.1
+        base = repo.changectx(change).parents()[0].rev()
+        opts['rev'] = [str(base), change]
+    opts['nodates'] = True
+    return commands.diff(ui, repo, *map(urllib.unquote_plus, pats), **opts)
+
+def rhmanifest(ui, repo, path='', **opts):
+    """output the sub-manifest of the specified directory"""
+    ui.write('<?xml version="1.0"?>\n')
+    ui.write('<rhmanifest>\n')
+    ui.write('<repository root="%s">\n' % _u(repo.root))
+    try:
+        _manifest(ui, repo, urllib.unquote_plus(path), urllib.unquote_plus(opts.get('rev')))
+    finally:
+        ui.write('</repository>\n')
+        ui.write('</rhmanifest>\n')
+
+def rhsummary(ui, repo, **opts):
+    """output the summary of the repository"""
+    ui.write('<?xml version="1.0"?>\n')
+    ui.write('<rhsummary>\n')
+    ui.write('<repository root="%s">\n' % _u(repo.root))
+    try:
+        _tip(ui, repo)
+        _tags(ui, repo)
+        _branches(ui, repo)
+        # TODO: bookmarks in core (Mercurial>=1.8)
+    finally:
+        ui.write('</repository>\n')
+        ui.write('</rhsummary>\n')
+
+# This extension should be compatible with Mercurial 0.9.5.
+# Note that Mercurial 0.9.5 doesn't have extensions.wrapfunction().
+cmdtable = {
+    'rhannotate': (rhannotate,
+         [('r', 'rev', '', 'revision'),
+          ('u', 'user', None, 'list the author (long with -v)'),
+          ('n', 'number', None, 'list the revision number (default)'),
+          ('c', 'changeset', None, 'list the changeset'),
+         ],
+         'hg rhannotate [-r REV] [-u] [-n] [-c] FILE...'),
+    'rhcat': (rhcat,
+               [('r', 'rev', '', 'revision')],
+               'hg rhcat ([-r REV] ...) FILE...'),
+    'rhdiff': (rhdiff,
+               [('r', 'rev', [], 'revision'),
+                ('c', 'change', '', 'change made by revision')],
+               'hg rhdiff ([-c REV] | [-r REV] ...) [FILE]...'),
+    'rhmanifest': (rhmanifest,
+                   [('r', 'rev', '', 'show the specified revision')],
+                   'hg rhmanifest [-r REV] [PATH]'),
+    'rhsummary': (rhsummary, [], 'hg rhsummary'),
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/redmine/scm/adapters/mercurial/redminehelper.py	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,183 @@
+# redminehelper: Redmine helper extension for Mercurial
+#
+# Copyright 2010 Alessio Franceschelli (alefranz.net)
+# Copyright 2010-2011 Yuya Nishihara <yuya@tcha.org>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+"""helper commands for Redmine to reduce the number of hg calls
+
+To test this extension, please try::
+
+    $ hg --config extensions.redminehelper=redminehelper.py rhsummary
+
+I/O encoding:
+
+:file path: urlencoded, raw string
+:tag name: utf-8
+:branch name: utf-8
+:node: 12-digits (short) hex string
+
+Output example of rhsummary::
+
+    <?xml version="1.0"?>
+    <rhsummary>
+      <repository root="/foo/bar">
+        <tip revision="1234" node="abcdef0123..."/>
+        <tag revision="123" node="34567abc..." name="1.1.1"/>
+        <branch .../>
+        ...
+      </repository>
+    </rhsummary>
+
+Output example of rhmanifest::
+
+    <?xml version="1.0"?>
+    <rhmanifest>
+      <repository root="/foo/bar">
+        <manifest revision="1234" path="lib">
+          <file name="diff.rb" revision="123" node="34567abc..." time="12345"
+                 size="100"/>
+          ...
+          <dir name="redmine"/>
+          ...
+        </manifest>
+      </repository>
+    </rhmanifest>
+"""
+import re, time, cgi, urllib
+from mercurial import cmdutil, commands, node, error
+
+_x = cgi.escape
+_u = lambda s: cgi.escape(urllib.quote(s))
+
+def _tip(ui, repo):
+    # see mercurial/commands.py:tip
+    def tiprev():
+        try:
+            return len(repo) - 1
+        except TypeError:  # Mercurial < 1.1
+            return repo.changelog.count() - 1
+    tipctx = repo.changectx(tiprev())
+    ui.write('<tip revision="%d" node="%s"/>\n'
+             % (tipctx.rev(), _x(node.short(tipctx.node()))))
+
+_SPECIAL_TAGS = ('tip',)
+
+def _tags(ui, repo):
+    # see mercurial/commands.py:tags
+    for t, n in reversed(repo.tagslist()):
+        if t in _SPECIAL_TAGS:
+            continue
+        try:
+            r = repo.changelog.rev(n)
+        except error.LookupError:
+            continue
+        ui.write('<tag revision="%d" node="%s" name="%s"/>\n'
+                 % (r, _x(node.short(n)), _x(t)))
+
+def _branches(ui, repo):
+    # see mercurial/commands.py:branches
+    def iterbranches():
+        for t, n in repo.branchtags().iteritems():
+            yield t, n, repo.changelog.rev(n)
+    def branchheads(branch):
+        try:
+            return repo.branchheads(branch, closed=False)
+        except TypeError:  # Mercurial < 1.2
+            return repo.branchheads(branch)
+    for t, n, r in sorted(iterbranches(), key=lambda e: e[2], reverse=True):
+        if repo.lookup(r) in branchheads(t):
+            ui.write('<branch revision="%d" node="%s" name="%s"/>\n'
+                     % (r, _x(node.short(n)), _x(t)))
+
+def _manifest(ui, repo, path, rev):
+    ctx = repo.changectx(rev)
+    ui.write('<manifest revision="%d" path="%s">\n'
+             % (ctx.rev(), _u(path)))
+
+    known = set()
+    pathprefix = (path.rstrip('/') + '/').lstrip('/')
+    for f, n in sorted(ctx.manifest().iteritems(), key=lambda e: e[0]):
+        if not f.startswith(pathprefix):
+            continue
+        name = re.sub(r'/.*', '/', f[len(pathprefix):])
+        if name in known:
+            continue
+        known.add(name)
+
+        if name.endswith('/'):
+            ui.write('<dir name="%s"/>\n'
+                     % _x(urllib.quote(name[:-1])))
+        else:
+            fctx = repo.filectx(f, fileid=n)
+            tm, tzoffset = fctx.date()
+            ui.write('<file name="%s" revision="%d" node="%s" '
+                     'time="%d" size="%d"/>\n'
+                     % (_u(name), fctx.rev(), _x(node.short(fctx.node())),
+                        tm, fctx.size(), ))
+
+    ui.write('</manifest>\n')
+
+def rhannotate(ui, repo, *pats, **opts):
+    return commands.annotate(ui, repo, *map(urllib.unquote_plus, pats), **opts)
+
+def rhcat(ui, repo, file1, *pats, **opts):
+    return commands.cat(ui, repo, urllib.unquote_plus(file1), *map(urllib.unquote_plus, pats), **opts)
+
+def rhdiff(ui, repo, *pats, **opts):
+    """diff repository (or selected files)"""
+    change = opts.pop('change', None)
+    if change:  # add -c option for Mercurial<1.1
+        base = repo.changectx(change).parents()[0].rev()
+        opts['rev'] = [str(base), change]
+    opts['nodates'] = True
+    return commands.diff(ui, repo, *map(urllib.unquote_plus, pats), **opts)
+
+def rhmanifest(ui, repo, path='', **opts):
+    """output the sub-manifest of the specified directory"""
+    ui.write('<?xml version="1.0"?>\n')
+    ui.write('<rhmanifest>\n')
+    ui.write('<repository root="%s">\n' % _u(repo.root))
+    try:
+        _manifest(ui, repo, urllib.unquote_plus(path), urllib.unquote_plus(opts.get('rev')))
+    finally:
+        ui.write('</repository>\n')
+        ui.write('</rhmanifest>\n')
+
+def rhsummary(ui, repo, **opts):
+    """output the summary of the repository"""
+    ui.write('<?xml version="1.0"?>\n')
+    ui.write('<rhsummary>\n')
+    ui.write('<repository root="%s">\n' % _u(repo.root))
+    try:
+        _tip(ui, repo)
+        _tags(ui, repo)
+        _branches(ui, repo)
+        # TODO: bookmarks in core (Mercurial>=1.8)
+    finally:
+        ui.write('</repository>\n')
+        ui.write('</rhsummary>\n')
+
+# This extension should be compatible with Mercurial 0.9.5.
+# Note that Mercurial 0.9.5 doesn't have extensions.wrapfunction().
+cmdtable = {
+    'rhannotate': (rhannotate,
+         [('r', 'rev', '', 'revision'),
+          ('u', 'user', None, 'list the author (long with -v)'),
+          ('n', 'number', None, 'list the revision number (default)'),
+          ('c', 'changeset', None, 'list the changeset'),
+         ],
+         'hg rhannotate [-r REV] [-u] [-n] [-c] FILE...'),
+    'rhcat': (rhcat,
+               [('r', 'rev', '', 'revision')],
+               'hg rhcat ([-r REV] ...) FILE...'),
+    'rhdiff': (rhdiff,
+               [('r', 'rev', [], 'revision'),
+                ('c', 'change', '', 'change made by revision')],
+               'hg rhdiff ([-c REV] | [-r REV] ...) [FILE]...'),
+    'rhmanifest': (rhmanifest,
+                   [('r', 'rev', '', 'show the specified revision')],
+                   'hg rhmanifest [-r REV] [PATH]'),
+    'rhsummary': (rhsummary, [], 'hg rhsummary'),
+}
--- a/lib/redmine/scm/adapters/mercurial_adapter.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/mercurial_adapter.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -20,32 +20,51 @@
 
 module Redmine
   module Scm
-    module Adapters    
+    module Adapters
       class MercurialAdapter < AbstractAdapter
 
         # Mercurial executable name
-        HG_BIN = "hg"
-        TEMPLATES_DIR = File.dirname(__FILE__) + "/mercurial"
+        HG_BIN = Redmine::Configuration['scm_mercurial_command'] || "hg"
+        HELPERS_DIR = File.dirname(__FILE__) + "/mercurial"
+        HG_HELPER_EXT = "#{HELPERS_DIR}/redminehelper.py"
         TEMPLATE_NAME = "hg-template"
         TEMPLATE_EXTENSION = "tmpl"
 
+        # raised if hg command exited with error, e.g. unknown revision.
+        class HgCommandAborted < CommandFailed; end
+
         class << self
+          def client_command
+            @@bin    ||= HG_BIN
+          end
+
+          def sq_bin
+            @@sq_bin ||= shell_quote(HG_BIN)
+          end
+
           def client_version
             @@client_version ||= (hgversion || [])
           end
 
-          def hgversion  
+          def client_available
+            !client_version.empty?
+          end
+
+          def hgversion
             # The hg version is expressed either as a
             # release number (eg 0.9.5 or 1.0) or as a revision
             # id composed of 12 hexa characters.
-            theversion = hgversion_from_command_line
+            theversion = hgversion_from_command_line.dup
+            if theversion.respond_to?(:force_encoding)
+              theversion.force_encoding('ASCII-8BIT')
+            end
             if m = theversion.match(%r{\A(.*?)((\d+\.)+\d+)})
               m[2].scan(%r{\d+}).collect(&:to_i)
             end
           end
 
           def hgversion_from_command_line
-            shellout("#{HG_BIN} --version") { |io| io.read }.to_s
+            shellout("#{sq_bin} --version") { |io| io.read }.to_s
           end
 
           def template_path
@@ -58,153 +77,193 @@
             else
               ver = "0.9.5"
             end
-            "#{TEMPLATES_DIR}/#{TEMPLATE_NAME}-#{ver}.#{TEMPLATE_EXTENSION}"
+            "#{HELPERS_DIR}/#{TEMPLATE_NAME}-#{ver}.#{TEMPLATE_EXTENSION}"
           end
         end
 
-        def info
-          cmd = "#{HG_BIN} -R #{target('')} root"
-          root_url = nil
-          shellout(cmd) do |io|
-            root_url = io.read
-          end
-          return nil if $? && $?.exitstatus != 0
-          info = Info.new({:root_url => root_url.chomp,
-                            :lastrev => revisions(nil,nil,nil,{:limit => 1}).last
-                          })
-          info
-        rescue CommandFailed
-          return nil
+        def initialize(url, root_url=nil, login=nil, password=nil, path_encoding=nil)
+          super
+          @path_encoding = path_encoding || 'UTF-8'
         end
 
-        def entries(path=nil, identifier=nil)
-          path ||= ''
-          entries = Entries.new
-          cmd = "#{HG_BIN} -R #{target('')} --cwd #{target('')} locate"
-          cmd << " -r #{hgrev(identifier)}"
-          cmd << " " + shell_quote("path:#{path}") unless path.empty?
-          shellout(cmd) do |io|
-            io.each_line do |line|
-              # HG uses antislashs as separator on Windows
-              line = line.gsub(/\\/, "/")
-              if path.empty? or e = line.gsub!(%r{^#{with_trailling_slash(path)}},'')
-                e ||= line
-                e = e.chomp.split(%r{[\/\\]})
-                entries << Entry.new({:name => e.first,
-                                       :path => (path.nil? or path.empty? ? e.first : "#{with_trailling_slash(path)}#{e.first}"),
-                                       :kind => (e.size > 1 ? 'dir' : 'file'),
-                                       :lastrev => Revision.new
-                                     }) unless e.empty? || entries.detect{|entry| entry.name == e.first}
-              end
+        def info
+          tip = summary['repository']['tip']
+          Info.new(:root_url => CGI.unescape(summary['repository']['root']),
+                   :lastrev => Revision.new(:revision => tip['revision'],
+                                            :scmid => tip['node']))
+        end
+
+        def tags
+          as_ary(summary['repository']['tag']).map { |e| e['name'] }
+        end
+
+        # Returns map of {'tag' => 'nodeid', ...}
+        def tagmap
+          alist = as_ary(summary['repository']['tag']).map do |e|
+            e.values_at('name', 'node')
+          end
+          Hash[*alist.flatten]
+        end
+
+        def branches
+          as_ary(summary['repository']['branch']).map { |e| e['name'] }
+        end
+
+        # Returns map of {'branch' => 'nodeid', ...}
+        def branchmap
+          alist = as_ary(summary['repository']['branch']).map do |e|
+            e.values_at('name', 'node')
+          end
+          Hash[*alist.flatten]
+        end
+
+        def summary
+          return @summary if @summary 
+          hg 'rhsummary' do |io|
+            output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
+            begin
+              @summary = ActiveSupport::XmlMini.parse(output)['rhsummary']
+            rescue
             end
           end
-          return nil if $? && $?.exitstatus != 0
-          entries.sort_by_name
+        end
+        private :summary
+
+        def entries(path=nil, identifier=nil)
+          p1 = scm_iconv(@path_encoding, 'UTF-8', path)
+          manifest = hg('rhmanifest', '-r', CGI.escape(hgrev(identifier)),
+                        CGI.escape(without_leading_slash(p1.to_s))) do |io|
+            output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
+            begin
+              ActiveSupport::XmlMini.parse(output)['rhmanifest']['repository']['manifest']
+            rescue
+            end
+          end
+          path_prefix = path.blank? ? '' : with_trailling_slash(path)
+
+          entries = Entries.new
+          as_ary(manifest['dir']).each do |e|
+            n = scm_iconv('UTF-8', @path_encoding, CGI.unescape(e['name']))
+            p = "#{path_prefix}#{n}"
+            entries << Entry.new(:name => n, :path => p, :kind => 'dir')
+          end
+
+          as_ary(manifest['file']).each do |e|
+            n = scm_iconv('UTF-8', @path_encoding, CGI.unescape(e['name']))
+            p = "#{path_prefix}#{n}"
+            lr = Revision.new(:revision => e['revision'], :scmid => e['node'],
+                              :identifier => e['node'],
+                              :time => Time.at(e['time'].to_i))
+            entries << Entry.new(:name => n, :path => p, :kind => 'file',
+                                 :size => e['size'].to_i, :lastrev => lr)
+          end
+
+          entries
+        rescue HgCommandAborted
+          nil  # means not found
         end
 
-        # Fetch the revisions by using a template file that 
+        def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
+          revs = Revisions.new
+          each_revision(path, identifier_from, identifier_to, options) { |e| revs << e }
+          revs
+        end
+
+        # Iterates the revisions by using a template file that
         # makes Mercurial produce a xml output.
-        def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})  
-          revisions = Revisions.new
-          cmd = "#{HG_BIN} --debug --encoding utf8 -R #{target('')} log -C --style #{shell_quote self.class.template_path}"
-          if identifier_from && identifier_to
-            cmd << " -r #{hgrev(identifier_from)}:#{hgrev(identifier_to)}"
-          elsif identifier_from
-            cmd << " -r #{hgrev(identifier_from)}:"
-          end
-          cmd << " --limit #{options[:limit].to_i}" if options[:limit]
-          cmd << " #{shell_quote path}" unless path.blank?
-          shellout(cmd) do |io|
+        def each_revision(path=nil, identifier_from=nil, identifier_to=nil, options={})
+          hg_args = ['log', '--debug', '-C', '--style', self.class.template_path]
+          hg_args << '-r' << "#{hgrev(identifier_from)}:#{hgrev(identifier_to)}"
+          hg_args << '--limit' << options[:limit] if options[:limit]
+          hg_args << hgtarget(path) unless path.blank?
+          log = hg(*hg_args) do |io|
+            output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
             begin
-              # HG doesn't close the XML Document...
-              doc = REXML::Document.new(io.read << "</log>")
-              doc.elements.each("log/logentry") do |logentry|
-                paths = []
-                copies = logentry.get_elements('paths/path-copied')
-                logentry.elements.each("paths/path") do |path|
-                  # Detect if the added file is a copy
-                  if path.attributes['action'] == 'A' and c = copies.find{ |e| e.text == path.text }
-                    from_path = c.attributes['copyfrom-path']
-                    from_rev = logentry.attributes['revision']
-                  end
-                  paths << {:action => path.attributes['action'],
-                    :path => "/#{CGI.unescape(path.text)}",
-                    :from_path => from_path ? "/#{CGI.unescape(from_path)}" : nil,
-                    :from_revision => from_rev ? from_rev : nil
-                  }
-                end
-                paths.sort! { |x,y| x[:path] <=> y[:path] }
-
-                revisions << Revision.new({:identifier => logentry.attributes['revision'],
-                                            :scmid => logentry.attributes['node'],
-                                            :author => (logentry.elements['author'] ? logentry.elements['author'].text : ""),
-                                            :time => Time.parse(logentry.elements['date'].text).localtime,
-                                            :message => logentry.elements['msg'].text,
-                                            :paths => paths
-                                          })
-              end
+              # Mercurial < 1.5 does not support footer template for '</log>'
+              ActiveSupport::XmlMini.parse("#{output}</log>")['log']
             rescue
-              logger.debug($!)
             end
           end
-          return nil if $? && $?.exitstatus != 0
-          revisions
+
+          as_ary(log['logentry']).each do |le|
+            cpalist = as_ary(le['paths']['path-copied']).map do |e|
+              [e['__content__'], e['copyfrom-path']].map { |s| CGI.unescape(s) }
+            end
+            cpmap = Hash[*cpalist.flatten]
+
+            paths = as_ary(le['paths']['path']).map do |e|
+              p = scm_iconv('UTF-8', @path_encoding, CGI.unescape(e['__content__']) )
+              {:action => e['action'], :path => with_leading_slash(p),
+               :from_path => (cpmap.member?(p) ? with_leading_slash(cpmap[p]) : nil),
+               :from_revision => (cpmap.member?(p) ? le['revision'] : nil)}
+            end.sort { |a, b| a[:path] <=> b[:path] }
+
+            yield Revision.new(:revision => le['revision'],
+                               :scmid => le['node'],
+                               :author => (le['author']['__content__'] rescue ''),
+                               :time => Time.parse(le['date']['__content__']).localtime,
+                               :message => le['msg']['__content__'],
+                               :paths => paths)
+          end
+          self
         end
 
         def diff(path, identifier_from, identifier_to=nil)
-          path ||= ''
-          diff_args = ''
+          hg_args = %w|rhdiff|
+          if identifier_to
+            hg_args << '-r' << hgrev(identifier_to) << '-r' << hgrev(identifier_from)
+          else
+            hg_args << '-c' << hgrev(identifier_from)
+          end
+          unless path.blank?
+            p = scm_iconv(@path_encoding, 'UTF-8', path)
+            hg_args << CGI.escape(hgtarget(p))
+          end
           diff = []
-          if identifier_to
-            diff_args = "-r #{hgrev(identifier_to)} -r #{hgrev(identifier_from)}"
-          else
-            if self.class.client_version_above?([1, 2])
-              diff_args = "-c #{hgrev(identifier_from)}"
-            else
-              return []
-            end
-          end
-          cmd = "#{HG_BIN} -R #{target('')} --config diff.git=false diff --nodates #{diff_args}"
-          cmd << " -I #{target(path)}" unless path.empty?
-          shellout(cmd) do |io|
+          hg *hg_args do |io|
             io.each_line do |line|
               diff << line
             end
           end
-          return nil if $? && $?.exitstatus != 0
           diff
+        rescue HgCommandAborted
+          nil  # means not found
         end
 
         def cat(path, identifier=nil)
-          cmd = "#{HG_BIN} -R #{target('')} cat"
-          cmd << " -r #{hgrev(identifier)}"
-          cmd << " #{target(path)}"
-          cat = nil
-          shellout(cmd) do |io|
+          p = CGI.escape(scm_iconv(@path_encoding, 'UTF-8', path))
+          hg 'rhcat', '-r', hgrev(identifier), hgtarget(p) do |io|
             io.binmode
-            cat = io.read
+            io.read
           end
-          return nil if $? && $?.exitstatus != 0
-          cat
+        rescue HgCommandAborted
+          nil  # means not found
         end
 
         def annotate(path, identifier=nil)
-          path ||= ''
-          cmd = "#{HG_BIN} -R #{target('')}"
-          cmd << " annotate -ncu"
-          cmd << " -r #{hgrev(identifier)}"
-          cmd << " #{target(path)}"
+          p = CGI.escape(scm_iconv(@path_encoding, 'UTF-8', path))
           blame = Annotate.new
-          shellout(cmd) do |io|
+          hg 'rhannotate', '-ncu', '-r', hgrev(identifier), hgtarget(p) do |io|
             io.each_line do |line|
+              line.force_encoding('ASCII-8BIT') if line.respond_to?(:force_encoding)
               next unless line =~ %r{^([^:]+)\s(\d+)\s([0-9a-f]+):\s(.*)$}
               r = Revision.new(:author => $1.strip, :revision => $2, :scmid => $3,
                                :identifier => $3)
               blame.add_line($4.rstrip, r)
             end
           end
-          return nil if $? && $?.exitstatus != 0
           blame
+        rescue HgCommandAborted
+          nil  # means not found or cannot be annotated
         end
 
         class Revision < Redmine::Scm::Adapters::Revision
@@ -214,11 +273,40 @@
           end
         end
 
+        # Runs 'hg' command with the given args
+        def hg(*args, &block)
+          repo_path = root_url || url
+          full_args = [HG_BIN, '-R', repo_path, '--encoding', 'utf-8']
+          full_args << '--config' << "extensions.redminehelper=#{HG_HELPER_EXT}"
+          full_args << '--config' << 'diff.git=false'
+          full_args += args
+          ret = shellout(full_args.map { |e| shell_quote e.to_s }.join(' '), &block)
+          if $? && $?.exitstatus != 0
+            raise HgCommandAborted, "hg exited with non-zero status: #{$?.exitstatus}"
+          end
+          ret
+        end
+        private :hg
+
         # Returns correct revision identifier
-        def hgrev(identifier)
-          shell_quote(identifier.blank? ? 'tip' : identifier.to_s)
+        def hgrev(identifier, sq=false)
+          rev = identifier.blank? ? 'tip' : identifier.to_s
+          rev = shell_quote(rev) if sq
+          rev
         end
         private :hgrev
+
+        def hgtarget(path)
+          path ||= ''
+          root_url + '/' + without_leading_slash(path)
+        end
+        private :hgtarget
+
+        def as_ary(o)
+          return [] unless o
+          o.is_a?(Array) ? o : Array[o]
+        end
+        private :as_ary
       end
     end
   end
--- a/lib/redmine/scm/adapters/subversion_adapter.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/scm/adapters/subversion_adapter.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -20,38 +20,54 @@
 
 module Redmine
   module Scm
-    module Adapters    
+    module Adapters
       class SubversionAdapter < AbstractAdapter
-      
+
         # SVN executable name
-        SVN_BIN = "svn"
-        
+        SVN_BIN = Redmine::Configuration['scm_subversion_command'] || "svn"
+
         class << self
+          def client_command
+            @@bin    ||= SVN_BIN
+          end
+
+          def sq_bin
+            @@sq_bin ||= shell_quote(SVN_BIN)
+          end
+
           def client_version
             @@client_version ||= (svn_binary_version || [])
           end
-          
+
+          def client_available
+            !client_version.empty?
+          end
+
           def svn_binary_version
-            cmd = "#{SVN_BIN} --version"
-            version = nil
-            shellout(cmd) do |io|
-              # Read svn version in first returned line
-              if m = io.read.to_s.match(%r{\A(.*?)((\d+\.)+\d+)})
-                version = m[2].scan(%r{\d+}).collect(&:to_i)
-              end
+            scm_version = scm_version_from_command_line.dup
+            if scm_version.respond_to?(:force_encoding)
+              scm_version.force_encoding('ASCII-8BIT')
             end
-            return nil if $? && $?.exitstatus != 0
-            version
+            if m = scm_version.match(%r{\A(.*?)((\d+\.)+\d+)})
+              m[2].scan(%r{\d+}).collect(&:to_i)
+            end
+          end
+
+          def scm_version_from_command_line
+            shellout("#{sq_bin} --version") { |io| io.read }.to_s
           end
         end
-        
+
         # Get info about the svn repository
         def info
-          cmd = "#{SVN_BIN} info --xml #{target}"
+          cmd = "#{self.class.sq_bin} info --xml #{target}"
           cmd << credentials_string
           info = nil
           shellout(cmd) do |io|
             output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
             begin
               doc = ActiveSupport::XmlMini.parse(output)
               #root_url = doc.elements["info/entry/repository/root"].text          
@@ -70,17 +86,20 @@
         rescue CommandFailed
           return nil
         end
-        
+
         # Returns an Entries collection
         # or nil if the given path doesn't exist in the repository
         def entries(path=nil, identifier=nil)
           path ||= ''
           identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
           entries = Entries.new
-          cmd = "#{SVN_BIN} list --xml #{target(path)}@#{identifier}"
+          cmd = "#{self.class.sq_bin} list --xml #{target(path)}@#{identifier}"
           cmd << credentials_string
           shellout(cmd) do |io|
             output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
             begin
               doc = ActiveSupport::XmlMini.parse(output)
               each_xml_element(doc['lists']['list'], 'entry') do |entry|
@@ -110,17 +129,20 @@
           logger.debug("Found #{entries.size} entries in the repository for #{target(path)}") if logger && logger.debug?
           entries.sort_by_name
         end
-        
+
         def properties(path, identifier=nil)
           # proplist xml output supported in svn 1.5.0 and higher
           return nil unless self.class.client_version_above?([1, 5, 0])
           
           identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
-          cmd = "#{SVN_BIN} proplist --verbose --xml #{target(path)}@#{identifier}"
+          cmd = "#{self.class.sq_bin} proplist --verbose --xml #{target(path)}@#{identifier}"
           cmd << credentials_string
           properties = {}
           shellout(cmd) do |io|
             output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
             begin
               doc = ActiveSupport::XmlMini.parse(output)
               each_xml_element(doc['properties']['target'], 'property') do |property|
@@ -132,19 +154,22 @@
           return nil if $? && $?.exitstatus != 0
           properties
         end
-        
+
         def revisions(path=nil, identifier_from=nil, identifier_to=nil, options={})
           path ||= ''
           identifier_from = (identifier_from && identifier_from.to_i > 0) ? identifier_from.to_i : "HEAD"
           identifier_to = (identifier_to && identifier_to.to_i > 0) ? identifier_to.to_i : 1
           revisions = Revisions.new
-          cmd = "#{SVN_BIN} log --xml -r #{identifier_from}:#{identifier_to}"
+          cmd = "#{self.class.sq_bin} log --xml -r #{identifier_from}:#{identifier_to}"
           cmd << credentials_string
           cmd << " --verbose " if  options[:with_paths]
           cmd << " --limit #{options[:limit].to_i}" if options[:limit]
           cmd << ' ' + target(path)
           shellout(cmd) do |io|
             output = io.read
+            if output.respond_to?(:force_encoding)
+              output.force_encoding('UTF-8')
+            end
             begin
               doc = ActiveSupport::XmlMini.parse(output)
               each_xml_element(doc['log'], 'logentry') do |logentry|
@@ -171,13 +196,14 @@
           return nil if $? && $?.exitstatus != 0
           revisions
         end
-        
+
         def diff(path, identifier_from, identifier_to=nil, type="inline")
           path ||= ''
           identifier_from = (identifier_from and identifier_from.to_i > 0) ? identifier_from.to_i : ''
+
           identifier_to = (identifier_to and identifier_to.to_i > 0) ? identifier_to.to_i : (identifier_from.to_i - 1)
-          
-          cmd = "#{SVN_BIN} diff -r "
+
+          cmd = "#{self.class.sq_bin} diff -r "
           cmd << "#{identifier_to}:"
           cmd << "#{identifier_from}"
           cmd << " #{target(path)}@#{identifier_from}"
@@ -191,10 +217,10 @@
           return nil if $? && $?.exitstatus != 0
           diff
         end
-        
+
         def cat(path, identifier=nil)
           identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
-          cmd = "#{SVN_BIN} cat #{target(path)}@#{identifier}"
+          cmd = "#{self.class.sq_bin} cat #{target(path)}@#{identifier}"
           cmd << credentials_string
           cat = nil
           shellout(cmd) do |io|
@@ -204,10 +230,10 @@
           return nil if $? && $?.exitstatus != 0
           cat
         end
-        
+
         def annotate(path, identifier=nil)
           identifier = (identifier and identifier.to_i > 0) ? identifier.to_i : "HEAD"
-          cmd = "#{SVN_BIN} blame #{target(path)}@#{identifier}"
+          cmd = "#{self.class.sq_bin} blame #{target(path)}@#{identifier}"
           cmd << credentials_string
           blame = Annotate.new
           shellout(cmd) do |io|
--- a/lib/redmine/unified_diff.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/unified_diff.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -22,13 +22,21 @@
       options.assert_valid_keys(:type, :max_lines)
       diff = diff.split("\n") if diff.is_a?(String)
       diff_type = options[:type] || 'inline'
-      
       lines = 0
       @truncated = false
       diff_table = DiffTable.new(diff_type)
       diff.each do |line|
+        line_encoding = nil
+        if line.respond_to?(:force_encoding)
+          line_encoding = line.encoding
+          # TODO: UTF-16 and Japanese CP932 which is imcompatible with ASCII
+          #       In Japan, diffrence between file path encoding
+          #       and file contents encoding is popular.
+          line.force_encoding('ASCII-8BIT')
+        end
         unless diff_table.add_line line
-          self << diff_table if diff_table.length > 1
+          line.force_encoding(line_encoding) if line_encoding
+          self << diff_table if diff_table.length > 0
           diff_table = DiffTable.new(diff_type)
         end
         lines += 1
@@ -40,7 +48,7 @@
       self << diff_table unless diff_table.empty?
       self
     end
-    
+
     def truncated?; @truncated; end
   end
 
--- a/lib/redmine/version.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/version.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -4,7 +4,7 @@
   module VERSION #:nodoc:
     MAJOR = 1
     MINOR = 1
-    TINY  = 0
+    TINY  = 1
     
     # Branch values:
     # * official release: nil
--- a/lib/redmine/views/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/views/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/views
 http://redmine.rubyforge.org/svn
 
@@ -35,7 +35,7 @@
 
 
 
-2011-01-13T14:09:39.000000Z
+2011-03-03T11:05:14.000000Z
 e0e38b713c41ea63221dd877c6939983
 2010-12-03T11:25:21.858858Z
 4452
@@ -69,7 +69,7 @@
 
 
 
-2010-09-23T14:37:45.047759Z
+2011-03-03T11:05:14.000000Z
 849e9df27c041f540e690c6192939edf
 2009-01-29T13:54:44.887081Z
 2334
@@ -106,7 +106,7 @@
 
 
 
-2011-01-13T14:11:09.000000Z
+2011-03-03T11:05:14.000000Z
 04feeced33ca55e9fb99099efe2fdcf6
 2010-12-03T11:25:21.858858Z
 4452
--- a/lib/redmine/views/builders/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/views/builders/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/lib/redmine/views/builders
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:11:09.000000Z
+2011-03-03T11:05:14.000000Z
 8816150c9264dfa6e639af165670cbb1
 2010-12-11T13:13:49.013705Z
 4489
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:11:09.000000Z
+2011-03-03T11:05:14.000000Z
 f9654f4bc43dbb5c01d5be2d6b045dd7
 2010-12-11T13:13:49.013705Z
 4489
@@ -100,7 +100,7 @@
 
 
 
-2011-01-13T14:11:09.000000Z
+2011-03-03T11:05:14.000000Z
 4b47e2fa5030d1cdad48f3abb5ab7c44
 2010-12-03T11:25:21.858858Z
 4452
--- a/lib/redmine/views/my_page/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/views/my_page/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/redmine/views/my_page
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/redmine/views/my_page
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 b06dfe20a85191516f81de5874f37ec6
 2009-04-05T13:33:54.194067Z
 2659
--- a/lib/redmine/wiki_formatting/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/wiki_formatting/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/redmine/wiki_formatting
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/redmine/wiki_formatting
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:14.000000Z
 879f8ce24a6bb5e4f5ea3b6f798b7a63
 2010-11-06T17:47:27.890964Z
 4376
--- a/lib/redmine/wiki_formatting/textile/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/redmine/wiki_formatting/textile/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/lib/redmine/wiki_formatting/textile
+4993
+http://redmine.rubyforge.org/svn/trunk/lib/redmine/wiki_formatting/textile
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 dec83b1d0d7f682d1ebf1f172fe3c90b
 2009-11-11T10:55:19.574870Z
 3025
@@ -66,7 +66,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:14.000000Z
 b8052f700ecb0991fabdd3a5b684a412
 2010-11-06T17:47:27.890964Z
 4376
--- a/lib/tasks/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/tasks/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 34
-/svn/!svn/ver/4687/trunk/lib/tasks
+/svn/!svn/ver/4950/trunk/lib/tasks
 END
 deprecated.rake
 K 25
@@ -39,6 +39,12 @@
 V 52
 /svn/!svn/ver/4405/trunk/lib/tasks/initializers.rake
 END
+ciphering.rake
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/4950/trunk/lib/tasks/ciphering.rake
+END
 permissions.rake
 K 25
 svn:wc:ra_dav:version-url
@@ -55,7 +61,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 47
-/svn/!svn/ver/4687/trunk/lib/tasks/testing.rake
+/svn/!svn/ver/4806/trunk/lib/tasks/testing.rake
 END
 watchers.rake
 K 25
@@ -79,7 +85,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 47
-/svn/!svn/ver/4254/trunk/lib/tasks/locales.rake
+/svn/!svn/ver/4937/trunk/lib/tasks/locales.rake
 END
 migrate_from_trac.rake
 K 25
@@ -91,7 +97,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/4599/trunk/lib/tasks/migrate_from_mantis.rake
+/svn/!svn/ver/4765/trunk/lib/tasks/migrate_from_mantis.rake
 END
 email.rake
 K 25
--- a/lib/tasks/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/tasks/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/lib/tasks
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-11T08:41:11.973101Z
-4687
-tmaruyama
+2011-02-26T13:09:25.657748Z
+4950
+jplang
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:45.063748Z
+2011-03-03T11:05:14.000000Z
 03301be8b264b5cb46d05896861dcc4d
 2007-09-02T08:08:10.346505Z
 691
@@ -66,7 +66,7 @@
 
 
 
-2010-09-23T14:37:45.063748Z
+2011-03-03T11:05:14.000000Z
 2ee57ccc06c675e55c38a4153a27c7c3
 2010-05-01T09:37:46.451305Z
 3721
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:45.063748Z
+2011-03-03T11:05:14.000000Z
 0c57af5536009680bb8c3c3302fc628d
 2006-07-29T09:32:58.780216Z
 12
@@ -134,7 +134,7 @@
 
 
 
-2010-09-24T12:48:29.799790Z
+2011-03-03T11:05:14.000000Z
 07fcf57752978d65a694eb57adcc0851
 2010-09-20T23:17:51.402972Z
 4167
@@ -162,13 +162,47 @@
 
 1606
 
+metrics.rake
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+0254f4ee916dee0a2572e63e947f8a1b
+2009-07-27T00:55:43.057910Z
+2825
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+113
+
 initializers.rake
 file
 
 
 
 
-2010-11-19T13:04:51.424933Z
+2011-03-03T11:05:14.000000Z
 c25b466de7654465538a91e5f5ab32b9
 2010-11-14T15:14:19.280754Z
 4405
@@ -196,17 +230,18 @@
 
 1343
 
-metrics.rake
+ciphering.rake
 file
 
 
 
 
-2010-09-23T14:37:45.063748Z
-0254f4ee916dee0a2572e63e947f8a1b
-2009-07-27T00:55:43.057910Z
-2825
-edavis10
+2011-03-03T11:40:18.000000Z
+b522c20249b1fad89c3276d10ccaaf6b
+2011-02-26T13:09:25.657748Z
+4950
+jplang
+has-props
 
 
 
@@ -227,8 +262,7 @@
 
 
 
-
-113
+1409
 
 permissions.rake
 file
@@ -236,7 +270,7 @@
 
 
 
-2010-09-23T14:37:45.063748Z
+2011-03-03T11:05:14.000000Z
 010fbb563237ff01803aa47736cf863e
 2010-08-18T17:23:23.071766Z
 3948
@@ -270,7 +304,7 @@
 
 
 
-2010-09-23T14:37:45.063748Z
+2011-03-03T11:05:14.000000Z
 984c757ee4c8fa78f649f8dd34b715cf
 2009-03-15T10:03:56.604709Z
 2592
@@ -304,10 +338,10 @@
 
 
 
-2011-01-13T14:11:09.000000Z
-62ce14359d5062666d86230adc5ba695
-2011-01-11T08:41:11.973101Z
-4687
+2011-03-03T11:40:18.000000Z
+ca73c8345daa839f0145c671ad94b91f
+2011-02-11T15:30:45.959165Z
+4806
 tmaruyama
 
 
@@ -330,7 +364,7 @@
 
 
 
-3280
+3376
 
 watchers.rake
 file
@@ -338,7 +372,7 @@
 
 
 
-2010-09-23T14:37:45.067787Z
+2011-03-03T11:05:14.000000Z
 16eaf27a5959829a12961ff16e233600
 2009-12-13T12:39:22.716082Z
 3167
@@ -366,13 +400,47 @@
 
 180
 
+plugins.rake
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+f27a83cf3f04d7906ac2f3ca40d01a20
+2008-09-05T10:31:06.632668Z
+1786
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1256
+
 yardoc.rake
 file
 
 
 
 
-2010-09-23T14:37:45.067787Z
+2011-03-03T11:05:14.000000Z
 5c9889bed6f4a4d18dbeb3d904855bb6
 2010-08-07T15:11:26.667915Z
 3922
@@ -400,51 +468,17 @@
 
 578
 
-plugins.rake
-file
-
-
-
-
-2010-09-23T14:37:45.067787Z
-f27a83cf3f04d7906ac2f3ca40d01a20
-2008-09-05T10:31:06.632668Z
-1786
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1256
-
 locales.rake
 file
 
 
 
 
-2010-11-19T13:04:51.424933Z
-8cb19171aae8528b3149b7efa211fc50
-2010-10-15T22:41:47.658318Z
-4254
-edavis10
+2011-03-03T11:40:18.000000Z
+ceb44040708bb290ad5b62b5a366e823
+2011-02-23T18:03:33.945201Z
+4937
+jplang
 has-props
 
 
@@ -466,7 +500,7 @@
 
 
 
-3360
+4250
 
 migrate_from_trac.rake
 file
@@ -474,7 +508,7 @@
 
 
 
-2011-01-13T14:11:09.000000Z
+2011-03-03T11:05:14.000000Z
 db60f05f7cd325cbdd984f0b6d7b42ea
 2010-12-31T15:30:50.544770Z
 4599
@@ -508,10 +542,10 @@
 
 
 
-2011-01-13T14:11:09.000000Z
-3155277c35e0978585a77b55a40901fb
-2010-12-31T15:30:50.544770Z
-4599
+2011-03-03T11:05:14.000000Z
+ba7db3c8df92c72d300288ec7276dbad
+2011-01-28T19:45:09.952949Z
+4765
 jplang
 
 
@@ -534,7 +568,7 @@
 
 
 
-19137
+19166
 
 email.rake
 file
@@ -542,7 +576,7 @@
 
 
 
-2010-11-19T13:04:51.424933Z
+2011-03-03T11:05:14.000000Z
 7875b7a15307c626a93c284f33757320
 2010-10-15T22:50:33.240825Z
 4256
@@ -576,7 +610,7 @@
 
 
 
-2010-09-23T14:37:45.063748Z
+2011-03-03T11:05:14.000000Z
 82e0901f7cbdda05ed63c12a764c3614
 2007-09-23T17:19:27.414302Z
 752
@@ -610,7 +644,7 @@
 
 
 
-2011-01-13T14:11:09.000000Z
+2011-03-03T11:05:14.000000Z
 93f8964aea856c06fb2eaa62ca2023c2
 2011-01-06T18:52:37.169690Z
 4643
@@ -644,7 +678,7 @@
 
 
 
-2010-09-23T14:37:45.063748Z
+2011-03-03T11:05:14.000000Z
 320b77011663b1209247bb809bc43ecb
 2008-02-16T16:25:58.204498Z
 1155
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/tasks/.svn/prop-base/ciphering.rake.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/tasks/.svn/text-base/ciphering.rake.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,35 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
+namespace :db do
+  desc 'Encrypts SCM and LDAP passwords in the database.'
+  task :encrypt => :environment do
+    unless (Repository.encrypt_all(:password) && 
+      AuthSource.encrypt_all(:account_password))
+      raise "Some objects could not be saved after encryption, update was rollback'ed."
+    end
+  end
+  
+  desc 'Decrypts SCM and LDAP passwords in the database.'
+  task :decrypt => :environment do
+    unless (Repository.decrypt_all(:password) &&
+      AuthSource.decrypt_all(:account_password))
+      raise "Some objects could not be saved after decryption, update was rollback'ed."
+    end
+  end
+end
--- a/lib/tasks/.svn/text-base/locales.rake.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/tasks/.svn/text-base/locales.rake.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,3 +1,10 @@
+desc 'Updates and checks locales against en.yml'
+task :locales do
+  %w(locales:update locales:check_interpolation).collect do |task|
+    Rake::Task[task].invoke
+  end
+end
+
 namespace :locales do
   desc 'Updates language files based on en.yml content (only works for new top level keys).'
   task :update do
@@ -28,6 +35,26 @@
       lang.close
     end
   end
+  
+  desc 'Checks interpolation arguments in locals against en.yml'
+  task :check_interpolation do
+    dir = ENV['DIR'] || './config/locales'
+    en_strings = YAML.load(File.read(File.join(dir,'en.yml')))['en']
+    files = Dir.glob(File.join(dir,'*.{yaml,yml}'))
+    files.each do |file|
+      file_strings = YAML.load(File.read(file))
+      file_strings = file_strings[file_strings.keys.first]
+      
+      file_strings.each do |key, string|
+        next unless string.is_a?(String)
+        string.scan /%\{\w+\}/ do |match|
+          unless en_strings[key].nil? || en_strings[key].include?(match)
+            puts "#{file}: #{key} uses #{match} not found in en.yml"
+          end
+        end
+      end
+    end
+  end
 
   desc <<-END_DESC
 Removes a translation string from all locale file (only works for top-level childless non-multiline keys, probably doesn\'t work on windows).
--- a/lib/tasks/.svn/text-base/migrate_from_mantis.rake.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/tasks/.svn/text-base/migrate_from_mantis.rake.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -287,7 +287,7 @@
     	project.versions.each do |version|
           v = Version.new :name => encode(version.version),
                           :description => encode(version.description),
-                          :effective_date => version.date_order.to_date
+                          :effective_date => (version.date_order ? version.date_order.to_date : nil)
           v.project = p
           v.save
           versions_map[version.id] = v.id
--- a/lib/tasks/.svn/text-base/testing.rake.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/tasks/.svn/text-base/testing.rake.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -51,7 +51,8 @@
       (supported_scms - [:subversion, :mercurial]).each do |scm|
         desc "Creates a test #{scm} repository"
         task scm => :create_dir do
-          system "gunzip < test/fixtures/repositories/#{scm}_repository.tar.gz | tar -xv -C tmp/test"
+          # system "gunzip < test/fixtures/repositories/#{scm}_repository.tar.gz | tar -xv -C tmp/test"
+          system "tar -xvz -C tmp/test -f test/fixtures/repositories/#{scm}_repository.tar.gz"
         end
       end
       
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/tasks/ciphering.rake	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,35 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+
+namespace :db do
+  desc 'Encrypts SCM and LDAP passwords in the database.'
+  task :encrypt => :environment do
+    unless (Repository.encrypt_all(:password) && 
+      AuthSource.encrypt_all(:account_password))
+      raise "Some objects could not be saved after encryption, update was rollback'ed."
+    end
+  end
+  
+  desc 'Decrypts SCM and LDAP passwords in the database.'
+  task :decrypt => :environment do
+    unless (Repository.decrypt_all(:password) &&
+      AuthSource.decrypt_all(:account_password))
+      raise "Some objects could not be saved after decryption, update was rollback'ed."
+    end
+  end
+end
--- a/lib/tasks/locales.rake	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/tasks/locales.rake	Thu Mar 03 12:02:03 2011 +0000
@@ -1,3 +1,10 @@
+desc 'Updates and checks locales against en.yml'
+task :locales do
+  %w(locales:update locales:check_interpolation).collect do |task|
+    Rake::Task[task].invoke
+  end
+end
+
 namespace :locales do
   desc 'Updates language files based on en.yml content (only works for new top level keys).'
   task :update do
@@ -28,6 +35,26 @@
       lang.close
     end
   end
+  
+  desc 'Checks interpolation arguments in locals against en.yml'
+  task :check_interpolation do
+    dir = ENV['DIR'] || './config/locales'
+    en_strings = YAML.load(File.read(File.join(dir,'en.yml')))['en']
+    files = Dir.glob(File.join(dir,'*.{yaml,yml}'))
+    files.each do |file|
+      file_strings = YAML.load(File.read(file))
+      file_strings = file_strings[file_strings.keys.first]
+      
+      file_strings.each do |key, string|
+        next unless string.is_a?(String)
+        string.scan /%\{\w+\}/ do |match|
+          unless en_strings[key].nil? || en_strings[key].include?(match)
+            puts "#{file}: #{key} uses #{match} not found in en.yml"
+          end
+        end
+      end
+    end
+  end
 
   desc <<-END_DESC
 Removes a translation string from all locale file (only works for top-level childless non-multiline keys, probably doesn\'t work on windows).
--- a/lib/tasks/migrate_from_mantis.rake	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/tasks/migrate_from_mantis.rake	Thu Mar 03 12:02:03 2011 +0000
@@ -287,7 +287,7 @@
     	project.versions.each do |version|
           v = Version.new :name => encode(version.version),
                           :description => encode(version.description),
-                          :effective_date => version.date_order.to_date
+                          :effective_date => (version.date_order ? version.date_order.to_date : nil)
           v.project = p
           v.save
           versions_map[version.id] = v.id
--- a/lib/tasks/testing.rake	Thu Jan 20 09:59:02 2011 +0000
+++ b/lib/tasks/testing.rake	Thu Mar 03 12:02:03 2011 +0000
@@ -51,7 +51,8 @@
       (supported_scms - [:subversion, :mercurial]).each do |scm|
         desc "Creates a test #{scm} repository"
         task scm => :create_dir do
-          system "gunzip < test/fixtures/repositories/#{scm}_repository.tar.gz | tar -xv -C tmp/test"
+          # system "gunzip < test/fixtures/repositories/#{scm}_repository.tar.gz | tar -xv -C tmp/test"
+          system "tar -xvz -C tmp/test -f test/fixtures/repositories/#{scm}_repository.tar.gz"
         end
       end
       
--- a/log/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/log/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/log
+4993
+http://redmine.rubyforge.org/svn/trunk/log
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:11.000000Z
 ae0415159f2c4dba3fc1a559d4c0f9f5
 2006-10-15T09:00:05.847811Z
 31
--- a/public/.htaccess	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-# General Apache options
-<IfModule mod_fastcgi.c>
-	AddHandler fastcgi-script .fcgi
-</IfModule>
-<IfModule mod_fcgid.c>
-	AddHandler fcgid-script .fcgi
-</IfModule>
-<IfModule mod_cgi.c>
-	AddHandler cgi-script .cgi
-</IfModule>
-Options +FollowSymLinks +ExecCGI
-
-# If you don't want Rails to look in certain directories,
-# use the following rewrite rules so that Apache won't rewrite certain requests
-# 
-# Example:
-#   RewriteCond %{REQUEST_URI} ^/notrails.*
-#   RewriteRule .* - [L]
-
-# Redirect all requests not available on the filesystem to Rails
-# By default the cgi dispatcher is used which is very slow
-# 
-# For better performance replace the dispatcher with the fastcgi one
-#
-# Example:
-#   RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
-RewriteEngine On
-
-# If your Rails application is accessed via an Alias directive,
-# then you MUST also set the RewriteBase in this htaccess file.
-#
-# Example:
-#   Alias /myrailsapp /path/to/myrailsapp/public
-#   RewriteBase /myrailsapp
-
-RewriteRule ^$ index.html [QSA]
-RewriteRule ^([^.]+)$ $1.html [QSA]
-RewriteCond %{REQUEST_FILENAME} !-f
-<IfModule mod_fastcgi.c>
-	RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
-</IfModule>
-<IfModule mod_fcgid.c>
-	RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
-</IfModule>
-<IfModule mod_cgi.c>
-	RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
-</IfModule>
-
-# In case Rails experiences terminal errors
-# Instead of displaying this message you can supply a file here which will be rendered instead
-# 
-# Example:
-#   ErrorDocument 500 /500.html
-
-ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
\ No newline at end of file
--- a/public/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,47 @@
 K 25
 svn:wc:ra_dav:version-url
-V 45
-/svn/!svn/ver/4702/trunk/public
+V 31
+/svn/!svn/ver/4954/trunk/public
 END
+dispatch.fcgi.example
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/2017/trunk/public/dispatch.fcgi.example
+END
+500.html
+K 25
+svn:wc:ra_dav:version-url
+V 39
+/svn/!svn/ver/419/trunk/public/500.html
+END
+404.html
+K 25
+svn:wc:ra_dav:version-url
+V 39
+/svn/!svn/ver/419/trunk/public/404.html
+END
+dispatch.cgi.example
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/2017/trunk/public/dispatch.cgi.example
+END
+dispatch.rb.example
+K 25
+svn:wc:ra_dav:version-url
+V 51
+/svn/!svn/ver/2017/trunk/public/dispatch.rb.example
+END
+favicon.ico
+K 25
+svn:wc:ra_dav:version-url
+V 43
+/svn/!svn/ver/3845/trunk/public/favicon.ico
+END
+htaccess.fcgi.example
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/4775/trunk/public/htaccess.fcgi.example
+END
--- a/public/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/public
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-11T20:37:31.480170Z
-4702
+2011-02-27T13:34:41.060565Z
+4954
 jplang
 has-props
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:45.075747Z
+2011-03-03T11:05:14.000000Z
 aeefa1552a4af651eadd16f4e0bb1323
 2008-11-11T13:54:10.112610Z
 2017
@@ -72,7 +72,7 @@
 
 
 
-2010-09-23T14:37:45.071747Z
+2011-03-03T11:05:14.000000Z
 b78e2e9e0cd94c786bb9404516e062c4
 2007-04-04T18:20:45.423396Z
 419
@@ -112,7 +112,7 @@
 
 
 
-2010-09-23T14:37:45.071747Z
+2011-03-03T11:05:14.000000Z
 5acfd3818d5f470c26a1af577d06195e
 2007-04-04T18:20:45.423396Z
 419
@@ -146,7 +146,7 @@
 
 
 
-2010-09-23T14:37:45.071747Z
+2011-03-03T11:05:14.000000Z
 5a5128856eb14ac7b3f94099cb504775
 2008-11-11T13:54:10.112610Z
 2017
@@ -174,47 +174,13 @@
 
 477
 
-.htaccess
-file
-
-
-
-
-2010-09-23T14:37:45.067787Z
-67c99c6ef23adb15d9efed92be959b6e
-2007-11-27T17:20:57.329371Z
-934
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1632
-
 dispatch.rb.example
 file
 
 
 
 
-2010-09-23T14:37:45.075747Z
+2011-03-03T11:05:14.000000Z
 5a5128856eb14ac7b3f94099cb504775
 2008-11-11T13:54:10.112610Z
 2017
@@ -251,7 +217,7 @@
 
 
 
-2010-07-23T14:49:47.756104Z
+2011-03-03T11:05:14.000000Z
 6d85758acb4f4baa4d242ba451c91026
 2010-07-16T03:45:50.104236Z
 3845
@@ -279,3 +245,37 @@
 
 7886
 
+htaccess.fcgi.example
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+67c99c6ef23adb15d9efed92be959b6e
+2011-01-30T06:31:28.038726Z
+4775
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1632
+
--- a/public/.svn/prop-base/.htaccess.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 9
-eol-style
-V 6
-native
-END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/public/.svn/prop-base/htaccess.fcgi.example.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 9
+eol-style
+V 6
+native
+END
--- a/public/.svn/text-base/.htaccess.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-# General Apache options
-<IfModule mod_fastcgi.c>
-	AddHandler fastcgi-script .fcgi
-</IfModule>
-<IfModule mod_fcgid.c>
-	AddHandler fcgid-script .fcgi
-</IfModule>
-<IfModule mod_cgi.c>
-	AddHandler cgi-script .cgi
-</IfModule>
-Options +FollowSymLinks +ExecCGI
-
-# If you don't want Rails to look in certain directories,
-# use the following rewrite rules so that Apache won't rewrite certain requests
-# 
-# Example:
-#   RewriteCond %{REQUEST_URI} ^/notrails.*
-#   RewriteRule .* - [L]
-
-# Redirect all requests not available on the filesystem to Rails
-# By default the cgi dispatcher is used which is very slow
-# 
-# For better performance replace the dispatcher with the fastcgi one
-#
-# Example:
-#   RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
-RewriteEngine On
-
-# If your Rails application is accessed via an Alias directive,
-# then you MUST also set the RewriteBase in this htaccess file.
-#
-# Example:
-#   Alias /myrailsapp /path/to/myrailsapp/public
-#   RewriteBase /myrailsapp
-
-RewriteRule ^$ index.html [QSA]
-RewriteRule ^([^.]+)$ $1.html [QSA]
-RewriteCond %{REQUEST_FILENAME} !-f
-<IfModule mod_fastcgi.c>
-	RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
-</IfModule>
-<IfModule mod_fcgid.c>
-	RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
-</IfModule>
-<IfModule mod_cgi.c>
-	RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
-</IfModule>
-
-# In case Rails experiences terminal errors
-# Instead of displaying this message you can supply a file here which will be rendered instead
-# 
-# Example:
-#   ErrorDocument 500 /500.html
-
-ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/public/.svn/text-base/htaccess.fcgi.example.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,55 @@
+# General Apache options
+<IfModule mod_fastcgi.c>
+	AddHandler fastcgi-script .fcgi
+</IfModule>
+<IfModule mod_fcgid.c>
+	AddHandler fcgid-script .fcgi
+</IfModule>
+<IfModule mod_cgi.c>
+	AddHandler cgi-script .cgi
+</IfModule>
+Options +FollowSymLinks +ExecCGI
+
+# If you don't want Rails to look in certain directories,
+# use the following rewrite rules so that Apache won't rewrite certain requests
+# 
+# Example:
+#   RewriteCond %{REQUEST_URI} ^/notrails.*
+#   RewriteRule .* - [L]
+
+# Redirect all requests not available on the filesystem to Rails
+# By default the cgi dispatcher is used which is very slow
+# 
+# For better performance replace the dispatcher with the fastcgi one
+#
+# Example:
+#   RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
+RewriteEngine On
+
+# If your Rails application is accessed via an Alias directive,
+# then you MUST also set the RewriteBase in this htaccess file.
+#
+# Example:
+#   Alias /myrailsapp /path/to/myrailsapp/public
+#   RewriteBase /myrailsapp
+
+RewriteRule ^$ index.html [QSA]
+RewriteRule ^([^.]+)$ $1.html [QSA]
+RewriteCond %{REQUEST_FILENAME} !-f
+<IfModule mod_fastcgi.c>
+	RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
+</IfModule>
+<IfModule mod_fcgid.c>
+	RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
+</IfModule>
+<IfModule mod_cgi.c>
+	RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
+</IfModule>
+
+# In case Rails experiences terminal errors
+# Instead of displaying this message you can supply a file here which will be rendered instead
+# 
+# Example:
+#   ErrorDocument 500 /500.html
+
+ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
\ No newline at end of file
Binary file public/favicon.ico has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/public/help/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 36
+/svn/!svn/ver/4758/trunk/public/help
+END
+wiki_syntax_detailed.html
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/4758/trunk/public/help/wiki_syntax_detailed.html
+END
+wiki_syntax.html
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/1803/trunk/public/help/wiki_syntax.html
+END
--- a/public/help/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/help/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/public/help
+4993
+http://redmine.rubyforge.org/svn/trunk/public/help
 http://redmine.rubyforge.org/svn
 
 
 
-2010-10-29T22:48:59.506153Z
-4308
-jbbarth
+2011-01-23T16:12:38.944844Z
+4758
+jplang
 
 
 
@@ -32,11 +32,11 @@
 
 
 
-2010-11-30T13:11:53.000000Z
-380699b753ffb01cba5c9504216ff64b
-2010-10-29T22:48:59.506153Z
-4308
-jbbarth
+2011-03-03T11:05:14.000000Z
+4e4c86877abc332b323cde0e35f235fa
+2011-01-23T16:12:38.944844Z
+4758
+jplang
 
 
 
@@ -58,7 +58,7 @@
 
 
 
-11397
+12098
 
 wiki_syntax.html
 file
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 f3c9e77ebd5a0c8e580df191a00bc01c
 2008-09-13T09:45:07.868598Z
 1803
--- a/public/help/.svn/text-base/wiki_syntax_detailed.html.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/help/.svn/text-base/wiki_syntax_detailed.html.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -46,7 +46,9 @@
         <ul>
             <li>Link to an issue: <strong>#124</strong> (displays <del><a href="#" class="issue" title="bulk edit doesn't change the category or fixed version properties (Closed)">#124</a></del>, link is striked-through if the issue is closed)</li>
             <li>Link to a changeset: <strong>r758</strong> (displays <a href="#" class="changeset" title="Search engine now only searches objects the user is allowed to view.">r758</a>)</li>
-            <li>Link to a changeset with a non-numeric hash: <strong>commit:c6f4d0fd</strong> (displays c6f4d0fd).  Added in <a href="#" class="changeset" title="Merged Git support branch (r1200 to r1226).">r1236</a>.</li>
+            <li>Link to a changeset with a non-numeric hash: <strong>commit:c6f4d0fd</strong> (displays <a href="#" class="changeset">c6f4d0fd</a>).</li>
+            <li>Link to a changeset of another project: <strong>sandbox:r758</strong> (displays <a href="#" class="changeset" title="Search engine now only searches objects the user is allowed to view.">sanbox:r758</a>)</li>
+            <li>Link to a changeset with a non-numeric hash: <strong>sandbox:c6f4d0fd</strong> (displays <a href="#" class="changeset">sandbox:c6f4d0fd</a>).</li>
         </ul>
 
         <p>Wiki links:</p>
@@ -74,7 +76,7 @@
                     <li><strong>document#17</strong> (link to document with id 17)</li>
                     <li><strong>document:Greetings</strong> (link to the document with title "Greetings")</li>
                     <li><strong>document:"Some document"</strong> (double quotes can be used when document title contains spaces)</li>
-                    <li><strong>document:some_project:"Some document"</strong> (link to a document with title "Some document" in other project "some_project")
+                    <li><strong>sandbox:document:"Some document"</strong> (link to a document with title "Some document" in other project "sandbox")</li>
                 </ul></li>
         </ul>
 
@@ -84,6 +86,7 @@
                     <li><strong>version#3</strong> (link to version with id 3)</li>
                     <li><strong>version:1.0.0</strong> (link to version named "1.0.0")</li>
                     <li><strong>version:"1.0 beta 2"</strong></li>
+                    <li><strong>sandbox:version:1.0.0</strong> (link to version "1.0.0" in the project "sandbox")</li>
                 </ul></li>
         </ul>
 
@@ -103,7 +106,9 @@
                     <li><strong>source:some/file#L120</strong>      (link to line 120 of the file)</li>
                     <li><strong>source:some/file@52#L120</strong>   (link to line 120 of the file's revision 52)</li>
                     <li><strong>source:"some file@52#L120"</strong> (use double quotes when the URL contains spaces</li>
-                    <li><strong>export:some/file</strong>           (force the download of the file)</li>
+                    <li><strong>export:some/file</strong>           (force the download of the file)</li>
+                    <li><strong>sandbox:source:some/file</strong>   (link to the file located at /some/file in the repository of the project "sandbox")</li>
+                    <li><strong>sandbox:export:some/file</strong>   (force the download of the file)</li>
                 </ul></li>
         </ul>
 
--- a/public/help/wiki_syntax_detailed.html	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/help/wiki_syntax_detailed.html	Thu Mar 03 12:02:03 2011 +0000
@@ -46,7 +46,9 @@
         <ul>
             <li>Link to an issue: <strong>#124</strong> (displays <del><a href="#" class="issue" title="bulk edit doesn't change the category or fixed version properties (Closed)">#124</a></del>, link is striked-through if the issue is closed)</li>
             <li>Link to a changeset: <strong>r758</strong> (displays <a href="#" class="changeset" title="Search engine now only searches objects the user is allowed to view.">r758</a>)</li>
-            <li>Link to a changeset with a non-numeric hash: <strong>commit:c6f4d0fd</strong> (displays c6f4d0fd).  Added in <a href="#" class="changeset" title="Merged Git support branch (r1200 to r1226).">r1236</a>.</li>
+            <li>Link to a changeset with a non-numeric hash: <strong>commit:c6f4d0fd</strong> (displays <a href="#" class="changeset">c6f4d0fd</a>).</li>
+            <li>Link to a changeset of another project: <strong>sandbox:r758</strong> (displays <a href="#" class="changeset" title="Search engine now only searches objects the user is allowed to view.">sanbox:r758</a>)</li>
+            <li>Link to a changeset with a non-numeric hash: <strong>sandbox:c6f4d0fd</strong> (displays <a href="#" class="changeset">sandbox:c6f4d0fd</a>).</li>
         </ul>
 
         <p>Wiki links:</p>
@@ -74,7 +76,7 @@
                     <li><strong>document#17</strong> (link to document with id 17)</li>
                     <li><strong>document:Greetings</strong> (link to the document with title "Greetings")</li>
                     <li><strong>document:"Some document"</strong> (double quotes can be used when document title contains spaces)</li>
-                    <li><strong>document:some_project:"Some document"</strong> (link to a document with title "Some document" in other project "some_project")
+                    <li><strong>sandbox:document:"Some document"</strong> (link to a document with title "Some document" in other project "sandbox")</li>
                 </ul></li>
         </ul>
 
@@ -84,6 +86,7 @@
                     <li><strong>version#3</strong> (link to version with id 3)</li>
                     <li><strong>version:1.0.0</strong> (link to version named "1.0.0")</li>
                     <li><strong>version:"1.0 beta 2"</strong></li>
+                    <li><strong>sandbox:version:1.0.0</strong> (link to version "1.0.0" in the project "sandbox")</li>
                 </ul></li>
         </ul>
 
@@ -103,7 +106,9 @@
                     <li><strong>source:some/file#L120</strong>      (link to line 120 of the file)</li>
                     <li><strong>source:some/file@52#L120</strong>   (link to line 120 of the file's revision 52)</li>
                     <li><strong>source:"some file@52#L120"</strong> (use double quotes when the URL contains spaces</li>
-                    <li><strong>export:some/file</strong>           (force the download of the file)</li>
+                    <li><strong>export:some/file</strong>           (force the download of the file)</li>
+                    <li><strong>sandbox:source:some/file</strong>   (link to the file located at /some/file in the repository of the project "sandbox")</li>
+                    <li><strong>sandbox:export:some/file</strong>   (force the download of the file)</li>
                 </ul></li>
         </ul>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/public/htaccess.fcgi.example	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,55 @@
+# General Apache options
+<IfModule mod_fastcgi.c>
+	AddHandler fastcgi-script .fcgi
+</IfModule>
+<IfModule mod_fcgid.c>
+	AddHandler fcgid-script .fcgi
+</IfModule>
+<IfModule mod_cgi.c>
+	AddHandler cgi-script .cgi
+</IfModule>
+Options +FollowSymLinks +ExecCGI
+
+# If you don't want Rails to look in certain directories,
+# use the following rewrite rules so that Apache won't rewrite certain requests
+# 
+# Example:
+#   RewriteCond %{REQUEST_URI} ^/notrails.*
+#   RewriteRule .* - [L]
+
+# Redirect all requests not available on the filesystem to Rails
+# By default the cgi dispatcher is used which is very slow
+# 
+# For better performance replace the dispatcher with the fastcgi one
+#
+# Example:
+#   RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
+RewriteEngine On
+
+# If your Rails application is accessed via an Alias directive,
+# then you MUST also set the RewriteBase in this htaccess file.
+#
+# Example:
+#   Alias /myrailsapp /path/to/myrailsapp/public
+#   RewriteBase /myrailsapp
+
+RewriteRule ^$ index.html [QSA]
+RewriteRule ^([^.]+)$ $1.html [QSA]
+RewriteCond %{REQUEST_FILENAME} !-f
+<IfModule mod_fastcgi.c>
+	RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
+</IfModule>
+<IfModule mod_fcgid.c>
+	RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
+</IfModule>
+<IfModule mod_cgi.c>
+	RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
+</IfModule>
+
+# In case Rails experiences terminal errors
+# Instead of displaying this message you can supply a file here which will be rendered instead
+# 
+# Example:
+#   ErrorDocument 500 /500.html
+
+ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
\ No newline at end of file
--- a/public/images/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/images/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -51,12 +51,6 @@
 V 50
 /svn/!svn/ver/3419/trunk/public/images/warning.png
 END
-reload.png
-K 25
-svn:wc:ra_dav:version-url
-V 49
-/svn/!svn/ver/3430/trunk/public/images/reload.png
-END
 move.png
 K 25
 svn:wc:ra_dav:version-url
@@ -69,6 +63,12 @@
 V 50
 /svn/!svn/ver/3419/trunk/public/images/fav_off.png
 END
+reload.png
+K 25
+svn:wc:ra_dav:version-url
+V 49
+/svn/!svn/ver/3430/trunk/public/images/reload.png
+END
 project_marker.png
 K 25
 svn:wc:ra_dav:version-url
@@ -189,18 +189,18 @@
 V 52
 /svn/!svn/ver/4072/trunk/public/images/task_done.png
 END
+bullet_delete.png
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svn/!svn/ver/3419/trunk/public/images/bullet_delete.png
+END
 text_list_bullets.png
 K 25
 svn:wc:ra_dav:version-url
 V 60
 /svn/!svn/ver/3419/trunk/public/images/text_list_bullets.png
 END
-bullet_delete.png
-K 25
-svn:wc:ra_dav:version-url
-V 56
-/svn/!svn/ver/3419/trunk/public/images/bullet_delete.png
-END
 bullet_arrow_left.png
 K 25
 svn:wc:ra_dav:version-url
@@ -381,18 +381,18 @@
 V 47
 /svn/!svn/ver/3419/trunk/public/images/true.png
 END
+arrow_down.png
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/3419/trunk/public/images/arrow_down.png
+END
 2uparrow.png
 K 25
 svn:wc:ra_dav:version-url
 V 51
 /svn/!svn/ver/3419/trunk/public/images/2uparrow.png
 END
-arrow_down.png
-K 25
-svn:wc:ra_dav:version-url
-V 53
-/svn/!svn/ver/3419/trunk/public/images/arrow_down.png
-END
 cancel.png
 K 25
 svn:wc:ra_dav:version-url
--- a/public/images/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/images/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/public/images
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:45.159811Z
+2011-03-03T11:05:14.000000Z
 45d9f8f4b7723c5df684fd6785b40700
 2010-02-13T09:08:12.698526Z
 3419
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:11:09.000000Z
+2011-03-03T11:05:14.000000Z
 7042481efe0084860d2a7b176086b306
 2010-12-18T16:06:20.343240Z
 4534
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:45.123788Z
+2011-03-03T11:05:14.000000Z
 2455a62f4801926d7c69099f5134c867
 2010-02-13T09:08:12.698526Z
 3419
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 bc6f6e0d67aba9e7689e852dad4977f9
 2010-02-13T09:08:12.698526Z
 3419
@@ -168,7 +168,7 @@
 
 
 
-2010-09-24T12:48:29.823793Z
+2011-03-03T11:05:14.000000Z
 ecc1979ed435769c700725495428359f
 2010-09-10T03:09:02.311267Z
 4072
@@ -196,13 +196,47 @@
 
 160
 
+folder_open_add.png
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+8ae3a2d9ef884ed73a4157cd9c0465b8
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+375
+
 2downarrow.png
 file
 
 
 
 
-2010-09-23T14:37:45.123788Z
+2011-03-03T11:05:14.000000Z
 6730b4ea633194233bec98ee5f7a3977
 2010-02-13T09:08:12.698526Z
 3419
@@ -230,47 +264,13 @@
 
 282
 
-folder_open_add.png
-file
-
-
-
-
-2010-09-23T14:37:45.139758Z
-8ae3a2d9ef884ed73a4157cd9c0465b8
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-375
-
 warning.png
 file
 
 
 
 
-2010-09-23T14:37:45.163769Z
+2011-03-03T11:05:14.000000Z
 f1cdd6ad27b9211924dcd8a4c8133f1b
 2010-02-13T09:08:12.698526Z
 3419
@@ -298,13 +298,47 @@
 
 613
 
+move.png
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+0a2ceb01cbc3c01186fdcc25ced8eb0d
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+321
+
 fav_off.png
 file
 
 
 
 
-2010-09-23T14:37:45.131805Z
+2011-03-03T11:05:14.000000Z
 ff96c02d8f18116bb3f005f2c8b86e91
 2010-02-13T09:08:12.698526Z
 3419
@@ -332,47 +366,13 @@
 
 211
 
-move.png
-file
-
-
-
-
-2010-09-23T14:37:45.155802Z
-0a2ceb01cbc3c01186fdcc25ced8eb0d
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-321
-
 reload.png
 file
 
 
 
 
-2010-09-23T14:37:45.155802Z
+2011-03-03T11:05:14.000000Z
 a20844852ce8909ed4a19ccb0f6c6518
 2010-02-14T13:13:16.743297Z
 3430
@@ -406,7 +406,7 @@
 
 
 
-2010-09-24T12:48:29.823793Z
+2011-03-03T11:05:14.000000Z
 94cfc6b14b69f8eb30909fa1a0d8721d
 2010-09-10T03:09:02.311267Z
 4072
@@ -440,7 +440,7 @@
 
 
 
-2010-09-23T14:37:45.159811Z
+2011-03-03T11:05:14.000000Z
 6a0f06b7f2b400d1d7b07180a909fed2
 2010-02-13T09:08:12.698526Z
 3419
@@ -474,7 +474,7 @@
 
 
 
-2010-09-23T14:37:45.163769Z
+2011-03-03T11:05:14.000000Z
 91b883d074b727f1a95cd0ce48510a3c
 2010-02-13T09:08:12.698526Z
 3419
@@ -508,7 +508,7 @@
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 acd6a5a422b44466803829ce8a12fd9a
 2010-02-13T09:08:12.698526Z
 3419
@@ -542,7 +542,7 @@
 
 
 
-2010-09-23T14:37:45.155802Z
+2011-03-03T11:05:14.000000Z
 63c87d73f46ed17a4ebc2b5a7e6cd6f4
 2010-02-13T09:08:12.698526Z
 3419
@@ -576,7 +576,7 @@
 
 
 
-2010-09-23T14:37:45.123788Z
+2011-03-03T11:05:14.000000Z
 45e9710ba200afbac6ba55970bd9d625
 2010-02-23T21:10:15.865943Z
 3477
@@ -613,7 +613,7 @@
 
 
 
-2010-09-23T14:37:45.131805Z
+2011-03-03T11:05:14.000000Z
 7604387e10f9c0be473a497ee5f516b8
 2010-02-13T09:08:12.698526Z
 3419
@@ -647,7 +647,7 @@
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 66da3813f290297bc39d289b859c3818
 2010-02-13T09:08:12.698526Z
 3419
@@ -681,7 +681,7 @@
 
 
 
-2010-09-23T14:37:45.151760Z
+2011-03-03T11:05:14.000000Z
 0c32351cd2f92465a51d8da771bd92cb
 2010-02-13T09:08:12.698526Z
 3419
@@ -715,7 +715,7 @@
 
 
 
-2010-09-24T12:48:29.823793Z
+2011-03-03T11:05:14.000000Z
 59894f5d5656b1f6e2af9c22187e6e86
 2010-09-10T03:09:02.311267Z
 4072
@@ -749,7 +749,7 @@
 
 
 
-2010-09-23T14:37:45.131805Z
+2011-03-03T11:05:14.000000Z
 30a7571b4822a789787f2a8b25ad4808
 2010-02-13T09:08:12.698526Z
 3419
@@ -783,7 +783,7 @@
 
 
 
-2010-09-23T14:37:45.155802Z
+2011-03-03T11:05:14.000000Z
 80f689a299e7e69fb2512482bca6f5d4
 2010-02-13T09:08:12.698526Z
 3419
@@ -817,7 +817,7 @@
 
 
 
-2010-09-23T14:37:45.139758Z
+2011-03-03T11:05:14.000000Z
 ce8f2e6769f9abc327609dea0ded14e5
 2010-02-13T09:08:12.698526Z
 3419
@@ -851,7 +851,7 @@
 
 
 
-2010-09-23T14:37:45.151760Z
+2011-03-03T11:05:14.000000Z
 242909ef391b4ebc83d53b13b4d90991
 2010-02-13T09:08:12.698526Z
 3419
@@ -885,7 +885,7 @@
 
 
 
-2010-09-23T14:37:45.139758Z
+2011-03-03T11:05:14.000000Z
 cf95da81d3626d67d5f49792341e396a
 2010-02-13T09:08:12.698526Z
 3419
@@ -919,7 +919,7 @@
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 62d29dab3c8967d0ca404a25059c3dbd
 2010-02-13T09:08:12.698526Z
 3419
@@ -953,7 +953,7 @@
 
 
 
-2010-09-23T14:37:45.155802Z
+2011-03-03T11:05:14.000000Z
 eecb8adaaeabcff6c838886809c85f93
 2010-02-13T09:08:12.698526Z
 3419
@@ -987,7 +987,7 @@
 
 
 
-2010-09-23T14:37:45.131805Z
+2011-03-03T11:05:14.000000Z
 898a97e88d0cfc1dd41a6903d0a7cd72
 2010-02-13T09:08:12.698526Z
 3419
@@ -1021,7 +1021,7 @@
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 3713155c5afcfeffaf877126d6b942aa
 2010-02-13T09:08:12.698526Z
 3419
@@ -1055,7 +1055,7 @@
 
 
 
-2010-09-24T12:48:29.823793Z
+2011-03-03T11:05:14.000000Z
 40c58172e0c52eee4deb5227ec37f0cf
 2010-09-10T03:09:02.311267Z
 4072
@@ -1089,7 +1089,7 @@
 
 
 
-2010-09-23T14:37:45.123788Z
+2011-03-03T11:05:14.000000Z
 fba036d7348ff28f7ab7dacbc52bc32a
 2010-02-13T09:08:12.698526Z
 3419
@@ -1123,7 +1123,7 @@
 
 
 
-2010-09-23T14:37:45.159811Z
+2011-03-03T11:05:14.000000Z
 01c137e009015642700b935edb321a89
 2010-02-13T09:08:12.698526Z
 3419
@@ -1157,7 +1157,7 @@
 
 
 
-2010-09-23T14:37:45.123788Z
+2011-03-03T11:05:14.000000Z
 ef1412a13d9113c5e5e85cfcd8300d9d
 2010-02-13T09:08:12.698526Z
 3419
@@ -1191,7 +1191,7 @@
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 b2e4e10fb114db28b9245210a5505c44
 2010-02-14T11:52:12.027647Z
 3426
@@ -1225,7 +1225,7 @@
 
 
 
-2010-09-23T14:37:45.155802Z
+2011-03-03T11:05:14.000000Z
 e0d9ad958faa1c07b84c78c7b7e5ffae
 2010-02-13T09:08:12.698526Z
 3419
@@ -1259,7 +1259,7 @@
 
 
 
-2010-09-23T14:37:45.159811Z
+2011-03-03T11:05:14.000000Z
 3eb9e517f1a10430f7ec0ed7d30e05d8
 2010-02-13T09:08:12.698526Z
 3419
@@ -1293,7 +1293,7 @@
 
 
 
-2010-09-23T14:37:45.123788Z
+2011-03-03T11:05:14.000000Z
 e341b581fbbf8a5d038c8432409ceb5f
 2010-02-23T21:10:15.865943Z
 3477
@@ -1327,7 +1327,7 @@
 
 
 
-2010-09-23T14:37:45.123788Z
+2011-03-03T11:05:14.000000Z
 981a44ce8d3f71125a300dece0cc0f21
 2010-02-13T09:08:12.698526Z
 3419
@@ -1361,7 +1361,7 @@
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 c4e01ea1c0ce5a1cd5154dfd2512fb21
 2010-02-13T09:08:12.698526Z
 3419
@@ -1395,7 +1395,7 @@
 
 
 
-2010-09-23T14:37:45.139758Z
+2011-03-03T11:05:14.000000Z
 944495c065d05a9161ad7da534703010
 2010-02-13T09:08:12.698526Z
 3419
@@ -1423,13 +1423,47 @@
 
 403
 
+attachment.png
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+0a35d4eaddb2292fed7062295ee0dcd8
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+939
+
 textfield.png
 file
 
 
 
 
-2010-09-23T14:37:45.159811Z
+2011-03-03T11:05:14.000000Z
 985a1dadffeaa303ff1eef4ea53ec0f4
 2010-02-13T09:08:12.698526Z
 3419
@@ -1457,47 +1491,13 @@
 
 100
 
-attachment.png
-file
-
-
-
-
-2010-09-23T14:37:45.123788Z
-0a35d4eaddb2292fed7062295ee0dcd8
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-939
-
 false.png
 file
 
 
 
 
-2010-09-23T14:37:45.131805Z
+2011-03-03T11:05:14.000000Z
 f0c51de3ba403e552c8ab6e8084448a4
 2010-02-13T09:08:12.698526Z
 3419
@@ -1525,13 +1525,47 @@
 
 459
 
+bullet_toggle_plus.png
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+06cbf5da7daca348a87a6299a4112d71
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+217
+
 unlock.png
 file
 
 
 
 
-2010-09-23T14:37:45.159811Z
+2011-03-03T11:05:14.000000Z
 fa1be48a747127ee34d4fae020b825d4
 2010-02-14T13:13:16.743297Z
 3430
@@ -1559,47 +1593,13 @@
 
 448
 
-bullet_toggle_plus.png
-file
-
-
-
-
-2010-09-23T14:37:45.127811Z
-06cbf5da7daca348a87a6299a4112d71
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-217
-
 group.png
 file
 
 
 
 
-2010-09-23T14:37:45.139758Z
+2011-03-03T11:05:14.000000Z
 8e1056421acf9e61af00f0dcb83fef12
 2010-02-13T09:08:12.698526Z
 3419
@@ -1627,13 +1627,115 @@
 
 700
 
+plugin.png
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+e019855b07d30f1ce1baf59b9df27125
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+538
+
+loading.gif
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+03ce3dcc84af110e9da8699a841e5200
+2006-12-03T19:55:45.161980Z
+62
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1553
+
+bullet_blue.png
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+3363f60299360fb5539b769d089e145f
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+241
+
 save.png
 file
 
 
 
 
-2010-09-23T14:37:45.155802Z
+2011-03-03T11:05:14.000000Z
 9e64db8f4905a17e3a6f68792cd5e199
 2010-02-13T09:08:12.698526Z
 3419
@@ -1661,115 +1763,13 @@
 
 440
 
-bullet_blue.png
-file
-
-
-
-
-2010-09-23T14:37:45.123788Z
-3363f60299360fb5539b769d089e145f
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-241
-
-loading.gif
-file
-
-
-
-
-2010-09-23T14:37:45.151760Z
-03ce3dcc84af110e9da8699a841e5200
-2006-12-03T19:55:45.161980Z
-62
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1553
-
-plugin.png
-file
-
-
-
-
-2010-09-23T14:37:45.155802Z
-e019855b07d30f1ce1baf59b9df27125
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-538
-
 bullet_add.png
 file
 
 
 
 
-2010-09-23T14:37:45.123788Z
+2011-03-03T11:05:14.000000Z
 848b802c0ce8e051f98f086f6e31c8cd
 2010-02-13T09:08:12.698526Z
 3419
@@ -1803,7 +1803,7 @@
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 eec8605f3797315b2d8397422df1aed3
 2010-02-13T09:08:12.698526Z
 3419
@@ -1837,7 +1837,7 @@
 
 
 
-2010-09-24T12:48:29.823793Z
+2011-03-03T11:05:14.000000Z
 40c58172e0c52eee4deb5227ec37f0cf
 2010-09-10T03:09:02.311267Z
 4072
@@ -1871,7 +1871,7 @@
 
 
 
-2010-09-23T14:37:45.131805Z
+2011-03-03T11:05:14.000000Z
 7b5dcbdd0de4541b39e1302b6277684d
 2010-02-13T09:08:12.698526Z
 3419
@@ -1905,7 +1905,7 @@
 
 
 
-2010-09-23T14:37:45.159811Z
+2011-03-03T11:05:14.000000Z
 dca02b582c10127fcdc8af47e94d4e4c
 2010-02-13T09:08:12.698526Z
 3419
@@ -1933,13 +1933,81 @@
 
 608
 
+folder.png
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+59f2dc025632f00403490176e7f42bfc
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+970
+
+report.png
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+8d8ec49f5773997411ff708a82e40568
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1014
+
 zoom_out.png
 file
 
 
 
 
-2010-09-23T14:37:45.163769Z
+2011-03-03T11:05:14.000000Z
 42b319d6ad0249fb20833a17d5f373a4
 2010-02-13T09:08:12.698526Z
 3419
@@ -1967,81 +2035,13 @@
 
 461
 
-report.png
-file
-
-
-
-
-2010-09-23T14:37:45.155802Z
-8d8ec49f5773997411ff708a82e40568
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1014
-
-folder.png
-file
-
-
-
-
-2010-09-23T14:37:45.139758Z
-59f2dc025632f00403490176e7f42bfc
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-970
-
 fav.png
 file
 
 
 
 
-2010-09-23T14:37:45.131805Z
+2011-03-03T11:05:14.000000Z
 29feed9e7b5c34854bf9f9f39681e06b
 2010-02-13T09:08:12.698526Z
 3419
@@ -2075,7 +2075,7 @@
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 c4c76ce450e3e838afd6aa8f34a8d9a8
 2010-02-13T09:08:12.698526Z
 3419
@@ -2109,7 +2109,7 @@
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 97c12039afee2ea9c5a13e74f6fa5c0c
 2010-02-13T09:08:12.698526Z
 3419
@@ -2143,7 +2143,7 @@
 
 
 
-2010-09-23T14:37:45.159811Z
+2011-03-03T11:05:14.000000Z
 a30b3000c7286879d10ca1fbff06f71d
 2010-02-13T09:08:12.698526Z
 3419
@@ -2171,13 +2171,47 @@
 
 248
 
+arrow_down.png
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+ed9b7ced8e3b6275c14d528dc6909691
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+115
+
 2uparrow.png
 file
 
 
 
 
-2010-09-23T14:37:45.123788Z
+2011-03-03T11:05:14.000000Z
 afef823014efb32adcd9606b69119562
 2010-02-13T09:08:12.698526Z
 3419
@@ -2205,47 +2239,13 @@
 
 292
 
-arrow_down.png
-file
-
-
-
-
-2010-09-23T14:37:45.123788Z
-ed9b7ced8e3b6275c14d528dc6909691
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-115
-
 cancel.png
 file
 
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 812bdb688394ba6e2ed3cb7ceb4b7df0
 2010-02-13T09:08:12.698526Z
 3419
@@ -2279,7 +2279,7 @@
 
 
 
-2010-09-23T14:37:45.139758Z
+2011-03-03T11:05:14.000000Z
 7e62689a93d0a23cbd1cf2dd754653e2
 2010-02-13T09:08:12.698526Z
 3419
@@ -2313,7 +2313,7 @@
 
 
 
-2010-09-23T14:37:45.123788Z
+2011-03-03T11:05:14.000000Z
 9856446e5026c8d31704b84e836dc06e
 2010-02-13T09:08:12.698526Z
 3419
@@ -2347,7 +2347,7 @@
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 f94f71deb205f49de993ad9521791ada
 2010-02-13T09:08:12.698526Z
 3419
@@ -2381,7 +2381,7 @@
 
 
 
-2010-09-23T14:37:45.155802Z
+2011-03-03T11:05:14.000000Z
 3ec32bbf3ad9e052833d05c0d41445f0
 2010-02-13T09:08:12.698526Z
 3419
@@ -2415,7 +2415,7 @@
 
 
 
-2010-09-23T14:37:45.123788Z
+2011-03-03T11:05:14.000000Z
 980dcfdb816ce626e4d2df5c2a308549
 2010-02-13T09:08:12.698526Z
 3419
@@ -2449,7 +2449,7 @@
 
 
 
-2010-09-23T14:37:45.155802Z
+2011-03-03T11:05:14.000000Z
 3e9542b5042e280bc2fc0ae98c81529f
 2010-02-13T09:08:12.698526Z
 3419
@@ -2483,7 +2483,7 @@
 
 
 
-2010-09-23T14:37:45.151760Z
+2011-03-03T11:05:14.000000Z
 9a911ac680f354452f13729921e80d21
 2010-02-13T09:08:12.698526Z
 3419
@@ -2517,7 +2517,7 @@
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 ea73bd6514b7d5f1d7ea2bd336f9303a
 2010-02-13T09:08:12.698526Z
 3419
@@ -2551,7 +2551,7 @@
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 3b0e537dabdfa5385e76ea465c4ea57b
 2010-02-13T09:08:12.698526Z
 3419
@@ -2585,7 +2585,7 @@
 
 
 
-2010-09-23T14:37:45.123788Z
+2011-03-03T11:05:14.000000Z
 82e11faddb62c05a1ef9701035919c00
 2010-02-13T09:08:12.698526Z
 3419
@@ -2619,7 +2619,7 @@
 
 
 
-2010-09-23T14:37:45.159811Z
+2011-03-03T11:05:14.000000Z
 cd3890ab38793e53a99227a180616a70
 2010-02-13T09:08:12.698526Z
 3419
@@ -2653,7 +2653,7 @@
 
 
 
-2010-09-23T14:37:45.159811Z
+2011-03-03T11:05:14.000000Z
 9a73430b658b4e16668b3e3cc7e241b4
 2010-02-13T09:08:12.698526Z
 3419
@@ -2687,7 +2687,7 @@
 
 
 
-2010-09-23T14:37:45.163769Z
+2011-03-03T11:05:14.000000Z
 558c616ebcfa38b1c7b298184e58eb91
 2010-02-13T09:08:12.698526Z
 3419
@@ -2721,7 +2721,7 @@
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 2459e5967a6ddd78589ab52970574f3f
 2010-02-13T09:08:12.698526Z
 3419
@@ -2755,7 +2755,7 @@
 
 
 
-2010-09-23T14:37:45.131805Z
+2011-03-03T11:05:14.000000Z
 60f9166d90d7aeb71d0ec9ee337c3f5e
 2010-02-13T09:08:12.698526Z
 3419
@@ -2792,7 +2792,7 @@
 
 
 
-2010-09-23T14:37:45.127811Z
+2011-03-03T11:05:14.000000Z
 cd5b56dff1c089b4e1e3db29b2b7226e
 2010-02-13T09:08:12.698526Z
 3419
@@ -2826,7 +2826,7 @@
 
 
 
-2010-09-23T14:37:45.155802Z
+2011-03-03T11:05:14.000000Z
 6172a7483daa35983c4ea5a35bd8c64a
 2010-07-20T23:50:15.173990Z
 3859
@@ -2860,7 +2860,7 @@
 
 
 
-2010-09-23T14:37:45.159811Z
+2011-03-03T11:05:14.000000Z
 6b08128a1b67ecb4b1ed06c9c505ac63
 2010-02-13T09:08:12.698526Z
 3419
@@ -2894,7 +2894,7 @@
 
 
 
-2010-09-23T14:37:45.123788Z
+2011-03-03T11:05:14.000000Z
 980dcfdb816ce626e4d2df5c2a308549
 2010-02-13T09:08:12.698526Z
 3419
@@ -2928,7 +2928,7 @@
 
 
 
-2010-09-23T14:37:45.123788Z
+2011-03-03T11:05:14.000000Z
 035a9d73627fc55aeaa7b553ac82ae9e
 2010-02-13T09:08:12.698526Z
 3419
@@ -2962,7 +2962,7 @@
 
 
 
-2010-09-23T14:37:45.163769Z
+2011-03-03T11:05:14.000000Z
 06b4b4425c7439fd898cd68e97f75d0f
 2010-02-13T09:08:12.698526Z
 3419
@@ -2996,7 +2996,7 @@
 
 
 
-2010-09-23T14:37:45.163769Z
+2011-03-03T11:05:14.000000Z
 d8ae88af42e1b9d1a4f9397041b17cd8
 2010-02-13T09:08:12.698526Z
 3419
@@ -3030,7 +3030,7 @@
 
 
 
-2010-09-23T14:37:45.159811Z
+2011-03-03T11:05:14.000000Z
 85089bb401af7c5d7325ee317483ac70
 2010-02-13T09:08:12.698526Z
 3419
@@ -3064,7 +3064,7 @@
 
 
 
-2010-09-23T14:37:45.155802Z
+2011-03-03T11:05:14.000000Z
 11dc95a35460864fc1e81bd95121cbf4
 2010-02-13T09:08:12.698526Z
 3419
@@ -3098,7 +3098,7 @@
 
 
 
-2010-09-23T14:37:45.155802Z
+2011-03-03T11:05:14.000000Z
 d8720cf3644e6ae0511c1391fb2ecf07
 2009-02-11T19:07:07.158826Z
 2442
@@ -3132,7 +3132,7 @@
 
 
 
-2010-09-23T14:37:45.155802Z
+2011-03-03T11:05:14.000000Z
 8b706274d81243b3d26fdf06dfc9e533
 2010-02-13T09:08:12.698526Z
 3419
@@ -3166,7 +3166,7 @@
 
 
 
-2010-09-24T12:48:29.823793Z
+2011-03-03T11:05:14.000000Z
 f0626259c107cfa1d1e4cb9d9f6edd34
 2010-09-10T03:09:02.311267Z
 4072
@@ -3200,7 +3200,7 @@
 
 
 
-2010-09-23T14:37:45.159811Z
+2011-03-03T11:05:14.000000Z
 9265bd26d6ba3d780dcd6fe676352d93
 2010-02-13T09:08:12.698526Z
 3419
@@ -3234,7 +3234,7 @@
 
 
 
-2010-09-23T14:37:45.159811Z
+2011-03-03T11:05:14.000000Z
 e34a59e24637e7bf462f5a742dbe243f
 2010-02-13T09:08:12.698526Z
 3419
@@ -3268,7 +3268,7 @@
 
 
 
-2010-09-23T14:37:45.159811Z
+2011-03-03T11:05:14.000000Z
 11f086774137d85a5cc6590ec3335ead
 2010-02-13T09:08:12.698526Z
 3419
--- a/public/images/files/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/images/files/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/public/images/files
+4993
+http://redmine.rubyforge.org/svn/trunk/public/images/files
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 136af9d95025ca62a3091a261266e13f
 2010-02-13T09:08:12.698526Z
 3419
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 c801cf9aa0103de823e53e83459a1ff9
 2010-02-13T09:08:12.698526Z
 3419
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 1e51c81cb33d3d6746d440c1babfe0f5
 2010-02-13T09:08:12.698526Z
 3419
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 db0495227202385c9fce1b73f2d58ff0
 2010-02-13T09:08:12.698526Z
 3419
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 94db8424e52f54d7372a976574c4598e
 2010-02-13T09:08:12.698526Z
 3419
@@ -202,7 +202,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 ad3ed8ec19bb2a3cca8c03e0ea1aa846
 2010-02-13T09:08:12.698526Z
 3419
@@ -236,7 +236,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 8e05d64f0b9f45f076b41521a8d6a8d1
 2010-02-13T09:08:12.698526Z
 3419
@@ -270,7 +270,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 ea9b5de5353e1cac630021dfed30dba4
 2010-02-13T09:08:12.698526Z
 3419
@@ -304,7 +304,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 0790c67308754572014015fa90eef406
 2010-02-13T09:08:12.698526Z
 3419
@@ -338,7 +338,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 e11f9ebff53e8088dce2a0028f0d5190
 2010-02-13T09:08:12.698526Z
 3419
--- a/public/images/jstoolbar/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/images/jstoolbar/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/public/images/jstoolbar
+4993
+http://redmine.rubyforge.org/svn/trunk/public/images/jstoolbar
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 c77264aa6d145362b791c99d18f53ace
 2010-02-13T09:08:12.698526Z
 3419
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 c19bfc8d9620c00cdd8ae322426bc07e
 2010-02-13T09:08:12.698526Z
 3419
@@ -94,13 +94,81 @@
 
 252
 
+bt_ol.png
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+5477ff20be77ab65aa6b75f47778234e
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+248
+
+bt_h3.png
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+cb940b592da5ed0367305cb0514d5684
+2010-02-13T09:08:12.698526Z
+3419
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+261
+
 bt_code.png
 file
 
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 ef6624df45946b54e3b23db2a0c6b77b
 2010-02-13T09:08:12.698526Z
 3419
@@ -128,14 +196,14 @@
 
 927
 
-bt_h3.png
+bt_strong.png
 file
 
 
 
 
-2010-08-12T15:03:25.000000Z
-cb940b592da5ed0367305cb0514d5684
+2011-03-03T11:05:14.000000Z
+f9d7446ceaa5142a5030e9430b3a2bb4
 2010-02-13T09:08:12.698526Z
 3419
 jplang
@@ -160,41 +228,7 @@
 
 
 
-261
-
-bt_ol.png
-file
-
-
-
-
-2010-08-12T15:03:25.000000Z
-5477ff20be77ab65aa6b75f47778234e
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-248
+244
 
 bt_img.png
 file
@@ -202,7 +236,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 04a0e86c9eec7d85d445e7627b5fc8ea
 2010-02-13T09:08:12.698526Z
 3419
@@ -230,47 +264,13 @@
 
 1027
 
-bt_strong.png
-file
-
-
-
-
-2010-08-12T15:03:25.000000Z
-f9d7446ceaa5142a5030e9430b3a2bb4
-2010-02-13T09:08:12.698526Z
-3419
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-244
-
 bt_bq_remove.png
 file
 
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 123b8289e1bd69a5944cf727a5e39bc9
 2010-02-13T09:08:12.698526Z
 3419
@@ -304,7 +304,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 15d8f6c0fbf85718123fb7c7da782713
 2010-02-13T09:08:12.698526Z
 3419
@@ -338,7 +338,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 5a29cb56451be0fd714b99d2b2649bf0
 2010-02-13T09:08:12.698526Z
 3419
@@ -372,7 +372,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 07234419aecb827f11eef1ebd9b42482
 2010-02-13T09:08:12.698526Z
 3419
@@ -406,7 +406,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 5042501ddf948fe938ded69a40ef1024
 2010-02-13T09:08:12.698526Z
 3419
@@ -440,7 +440,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 584fb45fd15d894adc19ff3cf626fae9
 2010-02-13T09:08:12.698526Z
 3419
@@ -474,7 +474,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 8448f92476ae933bacef7bc30ffd18fd
 2010-02-13T09:08:12.698526Z
 3419
@@ -508,7 +508,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 38ee94bc0a44b9420854aceeccd2dd59
 2010-02-13T09:08:12.698526Z
 3419
--- a/public/javascripts/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/javascripts/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 43
-/svn/!svn/ver/4648/trunk/public/javascripts
+/svn/!svn/ver/4947/trunk/public/javascripts
 END
 prototype.js
 K 25
@@ -13,7 +13,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/4504/trunk/public/javascripts/context_menu.js
+/svn/!svn/ver/4947/trunk/public/javascripts/context_menu.js
 END
 repository_navigation.js
 K 25
@@ -43,7 +43,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 58
-/svn/!svn/ver/4648/trunk/public/javascripts/application.js
+/svn/!svn/ver/4900/trunk/public/javascripts/application.js
 END
 controls.js
 K 25
--- a/public/javascripts/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/javascripts/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/public/javascripts
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-06T21:02:19.982329Z
-4648
+2011-02-24T17:56:17.648907Z
+4947
 jplang
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-09-23T14:37:45.243754Z
+2011-03-03T11:05:14.000000Z
 b5684120e496c310977713be34be4868
 2009-02-21T11:04:50.579477Z
 2493
@@ -69,10 +69,10 @@
 
 
 
-2011-01-13T14:11:09.000000Z
-d8370dbea2b172789fa1683412c110a5
-2010-12-12T16:26:24.102027Z
-4504
+2011-03-03T11:40:18.000000Z
+3065b1a7ff2aca0c2d6fb394f4fef7fa
+2011-02-24T17:56:17.648907Z
+4947
 jplang
 has-props
 
@@ -95,7 +95,7 @@
 
 
 
-7021
+6852
 
 calendar
 dir
@@ -106,7 +106,7 @@
 
 
 
-2010-09-23T14:37:45.243754Z
+2011-03-03T11:05:14.000000Z
 b868f888ccb92a2e7d3b955f0213078c
 2009-08-15T22:41:40.505056Z
 2840
@@ -140,7 +140,7 @@
 
 
 
-2010-09-23T14:37:45.207758Z
+2011-03-03T11:05:14.000000Z
 a7d95dc040992701ba78fd5b97af950e
 2009-02-21T11:04:50.579477Z
 2493
@@ -174,7 +174,7 @@
 
 
 
-2010-09-23T14:37:45.243754Z
+2011-03-03T11:05:14.000000Z
 d62b158eef2592fbe11ce104e118631c
 2009-11-28T11:59:45.246623Z
 3106
@@ -208,7 +208,7 @@
 
 
 
-2010-09-23T14:37:45.207758Z
+2011-03-03T11:05:14.000000Z
 3aa08ad9af21eb305a120e2e1a47d1af
 2009-02-21T11:04:50.579477Z
 2493
@@ -242,10 +242,10 @@
 
 
 
-2011-01-13T14:11:09.000000Z
-d9adfbc01d7b99bb5de20d5e9fb145a6
-2011-01-06T21:02:19.982329Z
-4648
+2011-03-03T11:40:18.000000Z
+312c6491eda00cbd741131ab1685a4b9
+2011-02-21T09:53:29.844413Z
+4900
 jplang
 has-props
 
@@ -268,7 +268,7 @@
 
 
 
-7727
+8869
 
 controls.js
 file
@@ -276,7 +276,7 @@
 
 
 
-2010-09-23T14:37:45.207758Z
+2011-03-03T11:05:14.000000Z
 136701e951925f3dcb84f9a231f9326e
 2009-02-21T11:04:50.579477Z
 2493
--- a/public/javascripts/.svn/text-base/application.js.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/javascripts/.svn/text-base/application.js.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -46,6 +46,12 @@
 	Effect.toggle(fieldset.down('div'), 'slide', {duration:0.2});
 }
 
+function hideFieldset(el) {
+	var fieldset = Element.up(el, 'fieldset');
+	fieldset.toggleClassName('collapsed');
+	fieldset.down('div').hide();
+}
+
 var fileFieldCount = 1;
 
 function addFileField() {
@@ -249,6 +255,49 @@
   Event.observe('project_enabled_module_names_issue_tracking', 'change', f);
 }
 
+/*
+ * Class used to warn user when leaving a page with unsaved textarea
+ * Author: mathias.fischer@berlinonline.de
+*/
+
+var WarnLeavingUnsaved = Class.create({
+	observedForms: false,
+	observedElements: false,
+	changedForms: false,
+	message: null,
+	
+	initialize: function(message){
+		this.observedForms = $$('form');
+		this.observedElements =  $$('textarea');
+		this.message = message;
+		
+		this.observedElements.each(this.observeChange.bind(this));
+		this.observedForms.each(this.submitAction.bind(this));
+		
+		window.onbeforeunload = this.unload.bind(this);
+	},
+	
+	unload: function(){
+		if(this.changedForms)
+      return this.message;
+	},
+	
+	setChanged: function(){
+    this.changedForms = true;
+	},
+	
+	setUnchanged: function(){
+    this.changedForms = false;
+	},
+	
+	observeChange: function(element){
+    element.observe('change',this.setChanged.bindAsEventListener(this));
+	},
+	
+	submitAction: function(element){
+    element.observe('submit',this.setUnchanged.bindAsEventListener(this));
+	}
+});
 
 /* shows and hides ajax indicator */
 Ajax.Responders.register({
--- a/public/javascripts/.svn/text-base/context_menu.js.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/javascripts/.svn/text-base/context_menu.js.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -11,7 +11,7 @@
 
 	if (!observingContextMenuClick) {
 		Event.observe(document, 'click', this.Click.bindAsEventListener(this));
-		Event.observe(document, (window.opera ? 'click' : 'contextmenu'), this.RightClick.bindAsEventListener(this));
+		Event.observe(document, 'contextmenu', this.RightClick.bindAsEventListener(this));
 		observingContextMenuClick = true;
 	}
 	
@@ -23,8 +23,6 @@
 		this.hideMenu();
 		// do not show the context menu on links
 		if (Event.element(e).tagName == 'A') { return; }
-		// right-click simulated by Alt+Click with Opera
-		if (window.opera && !e.altKey) { return; }
 		var tr = Event.findElement(e, 'tr');
 		if (tr == document || tr == undefined  || !tr.hasClassName('hascontextmenu')) { return; }
 		Event.stop(e);
@@ -39,7 +37,6 @@
   Click: function(e) {
   	this.hideMenu();
   	if (Event.element(e).tagName == 'A') { return; }
-    if (window.opera && e.altKey) {	return; }
     if (Event.isLeftClick(e) || (navigator.appVersion.match(/\bMSIE\b/))) {      
       var tr = Event.findElement(e, 'tr');
       if (tr!=null && tr!=document && tr.hasClassName('hascontextmenu')) {
--- a/public/javascripts/application.js	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/javascripts/application.js	Thu Mar 03 12:02:03 2011 +0000
@@ -46,6 +46,12 @@
 	Effect.toggle(fieldset.down('div'), 'slide', {duration:0.2});
 }
 
+function hideFieldset(el) {
+	var fieldset = Element.up(el, 'fieldset');
+	fieldset.toggleClassName('collapsed');
+	fieldset.down('div').hide();
+}
+
 var fileFieldCount = 1;
 
 function addFileField() {
@@ -249,6 +255,49 @@
   Event.observe('project_enabled_module_names_issue_tracking', 'change', f);
 }
 
+/*
+ * Class used to warn user when leaving a page with unsaved textarea
+ * Author: mathias.fischer@berlinonline.de
+*/
+
+var WarnLeavingUnsaved = Class.create({
+	observedForms: false,
+	observedElements: false,
+	changedForms: false,
+	message: null,
+	
+	initialize: function(message){
+		this.observedForms = $$('form');
+		this.observedElements =  $$('textarea');
+		this.message = message;
+		
+		this.observedElements.each(this.observeChange.bind(this));
+		this.observedForms.each(this.submitAction.bind(this));
+		
+		window.onbeforeunload = this.unload.bind(this);
+	},
+	
+	unload: function(){
+		if(this.changedForms)
+      return this.message;
+	},
+	
+	setChanged: function(){
+    this.changedForms = true;
+	},
+	
+	setUnchanged: function(){
+    this.changedForms = false;
+	},
+	
+	observeChange: function(element){
+    element.observe('change',this.setChanged.bindAsEventListener(this));
+	},
+	
+	submitAction: function(element){
+    element.observe('submit',this.setUnchanged.bindAsEventListener(this));
+	}
+});
 
 /* shows and hides ajax indicator */
 Ajax.Responders.register({
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/public/javascripts/calendar/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/4903/trunk/public/javascripts/calendar
+END
+calendar-setup.js
+K 25
+svn:wc:ra_dav:version-url
+V 70
+/svn/!svn/ver/3252/trunk/public/javascripts/calendar/calendar-setup.js
+END
+calendar.js
+K 25
+svn:wc:ra_dav:version-url
+V 64
+/svn/!svn/ver/3822/trunk/public/javascripts/calendar/calendar.js
+END
--- a/public/javascripts/calendar/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/javascripts/calendar/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/public/javascripts/calendar
+4993
+http://redmine.rubyforge.org/svn/trunk/public/javascripts/calendar
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-05T11:33:08.614151Z
-4060
-winterheart
+2011-02-21T10:08:59.720731Z
+4903
+jplang
 
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 e9be087e31b69f1e6a29ebd09b878486
 2009-12-26T17:17:16.012737Z
 3252
@@ -69,7 +69,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 a2dccec0bd70984b17a54239caf0d5e0
 2010-06-30T02:54:15.730933Z
 3822
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/public/javascripts/calendar/lang/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,263 @@
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svn/!svn/ver/4903/trunk/public/javascripts/calendar/lang
+END
+calendar-fi.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/1186/trunk/public/javascripts/calendar/lang/calendar-fi.js
+END
+calendar-bs.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/2629/trunk/public/javascripts/calendar/lang/calendar-bs.js
+END
+calendar-cs.js
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/764/trunk/public/javascripts/calendar/lang/calendar-cs.js
+END
+calendar-mk.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/4049/trunk/public/javascripts/calendar/lang/calendar-mk.js
+END
+calendar-es.js
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/419/trunk/public/javascripts/calendar/lang/calendar-es.js
+END
+calendar-ko.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/2182/trunk/public/javascripts/calendar/lang/calendar-ko.js
+END
+calendar-eu.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/3338/trunk/public/javascripts/calendar/lang/calendar-eu.js
+END
+calendar-no.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/1300/trunk/public/javascripts/calendar/lang/calendar-no.js
+END
+calendar-hu.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/1452/trunk/public/javascripts/calendar/lang/calendar-hu.js
+END
+calendar-sk.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/1998/trunk/public/javascripts/calendar/lang/calendar-sk.js
+END
+calendar-vi.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/2493/trunk/public/javascripts/calendar/lang/calendar-vi.js
+END
+calendar-sr-yu.js
+K 25
+svn:wc:ra_dav:version-url
+V 75
+/svn/!svn/ver/4003/trunk/public/javascripts/calendar/lang/calendar-sr-yu.js
+END
+calendar-uk.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/1149/trunk/public/javascripts/calendar/lang/calendar-uk.js
+END
+calendar-ro.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/2630/trunk/public/javascripts/calendar/lang/calendar-ro.js
+END
+calendar-ru.js
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/907/trunk/public/javascripts/calendar/lang/calendar-ru.js
+END
+calendar-id.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/3227/trunk/public/javascripts/calendar/lang/calendar-id.js
+END
+calendar-en.js
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/419/trunk/public/javascripts/calendar/lang/calendar-en.js
+END
+calendar-gl.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/2296/trunk/public/javascripts/calendar/lang/calendar-gl.js
+END
+calendar-fr.js
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/748/trunk/public/javascripts/calendar/lang/calendar-fr.js
+END
+calendar-nl.js
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/539/trunk/public/javascripts/calendar/lang/calendar-nl.js
+END
+calendar-hr.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/3320/trunk/public/javascripts/calendar/lang/calendar-hr.js
+END
+calendar-zh-tw.js
+K 25
+svn:wc:ra_dav:version-url
+V 75
+/svn/!svn/ver/1498/trunk/public/javascripts/calendar/lang/calendar-zh-tw.js
+END
+calendar-mn.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/3626/trunk/public/javascripts/calendar/lang/calendar-mn.js
+END
+calendar-pl.js
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/749/trunk/public/javascripts/calendar/lang/calendar-pl.js
+END
+calendar-th.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/1383/trunk/public/javascripts/calendar/lang/calendar-th.js
+END
+calendar-it.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/4003/trunk/public/javascripts/calendar/lang/calendar-it.js
+END
+calendar-sl.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/2340/trunk/public/javascripts/calendar/lang/calendar-sl.js
+END
+calendar-lt.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/1149/trunk/public/javascripts/calendar/lang/calendar-lt.js
+END
+calendar-lv.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/3737/trunk/public/javascripts/calendar/lang/calendar-lv.js
+END
+calendar-zh.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/1498/trunk/public/javascripts/calendar/lang/calendar-zh.js
+END
+calendar-pt.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/1927/trunk/public/javascripts/calendar/lang/calendar-pt.js
+END
+calendar-ca.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/4060/trunk/public/javascripts/calendar/lang/calendar-ca.js
+END
+calendar-pt-br.js
+K 25
+svn:wc:ra_dav:version-url
+V 75
+/svn/!svn/ver/1453/trunk/public/javascripts/calendar/lang/calendar-pt-br.js
+END
+calendar-da.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/2292/trunk/public/javascripts/calendar/lang/calendar-da.js
+END
+calendar-sr.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/4003/trunk/public/javascripts/calendar/lang/calendar-sr.js
+END
+calendar-tr.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/1817/trunk/public/javascripts/calendar/lang/calendar-tr.js
+END
+calendar-fa.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/4903/trunk/public/javascripts/calendar/lang/calendar-fa.js
+END
+calendar-bg.js
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/502/trunk/public/javascripts/calendar/lang/calendar-bg.js
+END
+calendar-de.js
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/419/trunk/public/javascripts/calendar/lang/calendar-de.js
+END
+calendar-en-gb.js
+K 25
+svn:wc:ra_dav:version-url
+V 75
+/svn/!svn/ver/3809/trunk/public/javascripts/calendar/lang/calendar-en-gb.js
+END
+calendar-sv.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/2290/trunk/public/javascripts/calendar/lang/calendar-sv.js
+END
+calendar-ja.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/1051/trunk/public/javascripts/calendar/lang/calendar-ja.js
+END
+calendar-he.js
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/1478/trunk/public/javascripts/calendar/lang/calendar-he.js
+END
--- a/public/javascripts/calendar/lang/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/javascripts/calendar/lang/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/public/javascripts/calendar/lang
 http://redmine.rubyforge.org/svn
 
 
 
-2010-09-05T11:33:08.614151Z
-4060
-winterheart
+2011-02-21T10:08:59.720731Z
+4903
+jplang
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:45.195758Z
+2011-03-03T11:05:14.000000Z
 d89a932075b18af4121f1941175d33d6
 2008-03-05T08:54:26.865464Z
 1186
@@ -66,7 +66,7 @@
 
 
 
-2010-09-23T14:37:45.195758Z
+2011-03-03T11:05:14.000000Z
 1f10556f12619006e5cd99bf0e5061cc
 2009-03-24T19:16:02.676125Z
 2629
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:45.195758Z
+2011-03-03T11:05:14.000000Z
 071917d0ae794b3cb057a0b354cd5105
 2007-09-25T16:37:51.755262Z
 764
@@ -134,7 +134,7 @@
 
 
 
-2010-09-24T12:48:29.835791Z
+2011-03-03T11:05:14.000000Z
 1044fe45dceaa0d72c32aca5c86eea4a
 2010-08-29T12:54:04.302020Z
 4049
@@ -168,7 +168,7 @@
 
 
 
-2010-09-23T14:37:45.195758Z
+2011-03-03T11:05:14.000000Z
 5728a3665edb05faed6661f0f77c6eab
 2007-04-04T18:20:45.423396Z
 419
@@ -202,7 +202,7 @@
 
 
 
-2010-09-23T14:37:45.199778Z
+2011-03-03T11:05:14.000000Z
 42ef87b559c68d2db63b109f3cb3f3ed
 2008-12-24T15:48:59.830167Z
 2182
@@ -236,7 +236,7 @@
 
 
 
-2010-09-23T14:37:45.195758Z
+2011-03-03T11:05:14.000000Z
 3f9bda99497d5c8342d87b4ec6aa44ba
 2010-01-25T15:25:46.560119Z
 3338
@@ -270,7 +270,7 @@
 
 
 
-2010-09-23T14:37:45.199778Z
+2011-03-03T11:05:14.000000Z
 4ae334472d40209252da8c69f07eabd5
 2008-03-27T19:27:40.125888Z
 1300
@@ -304,7 +304,7 @@
 
 
 
-2010-09-23T14:37:45.199778Z
+2011-03-03T11:05:14.000000Z
 3c66093b97b7d0bb66f04dbc0be4afb3
 2008-05-25T12:18:49.439996Z
 1452
@@ -338,7 +338,7 @@
 
 
 
-2010-09-23T14:37:45.203758Z
+2011-03-03T11:05:14.000000Z
 c161d1507fbd65ebddd7ada7c495eb89
 2008-11-09T00:29:20.731069Z
 1998
@@ -372,7 +372,7 @@
 
 
 
-2010-09-23T14:37:45.203758Z
+2011-03-03T11:05:14.000000Z
 a85bbd596ff7e03e9434a286edd134fd
 2009-02-21T11:04:50.579477Z
 2493
@@ -400,13 +400,47 @@
 
 3978
 
+calendar-sr-yu.js
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+c48be791f5e8d236624752ce05cd3ed7
+2010-08-19T15:41:09.090282Z
+4003
+winterheart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3687
+
 calendar-uk.js
 file
 
 
 
 
-2010-09-23T14:37:45.203758Z
+2011-03-03T11:05:14.000000Z
 46811ee79796d2345bea2308475d1ec9
 2008-02-15T17:47:19.829750Z
 1149
@@ -434,47 +468,13 @@
 
 3600
 
-calendar-sr-yu.js
-file
-
-
-
-
-2010-09-23T14:37:45.203758Z
-c48be791f5e8d236624752ce05cd3ed7
-2010-08-19T15:41:09.090282Z
-4003
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3687
-
 calendar-ro.js
 file
 
 
 
 
-2010-09-23T14:37:45.203758Z
+2011-03-03T11:05:14.000000Z
 7e96487f7e089a48bd61d5e6e8785fe1
 2009-03-24T19:20:53.296475Z
 2630
@@ -508,7 +508,7 @@
 
 
 
-2010-09-23T14:37:45.203758Z
+2011-03-03T11:05:14.000000Z
 8555f3d813ca70ecbd2aaecae826549f
 2007-11-16T21:24:22.091853Z
 907
@@ -542,7 +542,7 @@
 
 
 
-2010-09-23T14:37:45.199778Z
+2011-03-03T11:05:14.000000Z
 f5a05a0d27c2d22fa8a7bf16be345250
 2009-12-23T18:56:03.404741Z
 3227
@@ -570,47 +570,13 @@
 
 3845
 
-calendar-gl.js
-file
-
-
-
-
-2010-09-23T14:37:45.195758Z
-c4f74e36f6a3debcf8ec065bc6886f04
-2009-01-23T15:37:59.406714Z
-2296
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3855
-
 calendar-en.js
 file
 
 
 
 
-2010-09-23T14:37:45.195758Z
+2011-03-03T11:05:14.000000Z
 46811ee79796d2345bea2308475d1ec9
 2007-04-04T18:20:45.423396Z
 419
@@ -638,13 +604,47 @@
 
 3600
 
+calendar-gl.js
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+c4f74e36f6a3debcf8ec065bc6886f04
+2009-01-23T15:37:59.406714Z
+2296
+winterheart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3855
+
 calendar-fr.js
 file
 
 
 
 
-2010-09-23T14:37:45.195758Z
+2011-03-03T11:05:14.000000Z
 0bfaa3ec0b265f9d5a815d9b9b348c96
 2007-09-22T14:12:44.830265Z
 748
@@ -672,13 +672,81 @@
 
 3870
 
+calendar-nl.js
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+c029bd9c4867bb39e86d1d6efada6d58
+2007-05-24T17:29:11.682821Z
+539
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3701
+
+calendar-hr.js
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+f8d0daa275cf612206c43d4c9be95d08
+2010-01-17T10:33:30.937961Z
+3320
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3646
+
 calendar-zh-tw.js
 file
 
 
 
 
-2010-09-23T14:37:45.203758Z
+2011-03-03T11:05:14.000000Z
 0bed4c9c046772a12267b4118bf1504a
 2008-06-07T09:03:20.687527Z
 1498
@@ -706,81 +774,13 @@
 
 3841
 
-calendar-hr.js
-file
-
-
-
-
-2010-09-23T14:37:45.195758Z
-f8d0daa275cf612206c43d4c9be95d08
-2010-01-17T10:33:30.937961Z
-3320
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3646
-
-calendar-nl.js
-file
-
-
-
-
-2010-09-23T14:37:45.199778Z
-c029bd9c4867bb39e86d1d6efada6d58
-2007-05-24T17:29:11.682821Z
-539
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3701
-
 calendar-mn.js
 file
 
 
 
 
-2010-09-23T14:37:45.199778Z
+2011-03-03T11:05:14.000000Z
 307341352eee53b3ccd1fbec2a4b27f7
 2010-04-03T10:49:16.109274Z
 3626
@@ -808,13 +808,47 @@
 
 3904
 
+calendar-pl.js
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+eabf711c28d30bb9474f3f505766f286
+2007-09-22T14:56:09.057923Z
+749
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3974
+
 calendar-th.js
 file
 
 
 
 
-2010-09-23T14:37:45.203758Z
+2011-03-03T11:05:14.000000Z
 c8c19e66c3e1099c3e0ecae6462f68da
 2008-04-30T08:47:14.770680Z
 1383
@@ -842,47 +876,13 @@
 
 4417
 
-calendar-pl.js
-file
-
-
-
-
-2010-09-23T14:37:45.199778Z
-eabf711c28d30bb9474f3f505766f286
-2007-09-22T14:56:09.057923Z
-749
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3974
-
 calendar-it.js
 file
 
 
 
 
-2010-09-23T14:37:45.199778Z
+2011-03-03T11:05:14.000000Z
 d637b0156da2601e000e16f1ac178768
 2010-08-19T15:41:09.090282Z
 4003
@@ -916,7 +916,7 @@
 
 
 
-2010-09-23T14:37:45.203758Z
+2011-03-03T11:05:14.000000Z
 cbf1a5c6b271835c701031aacaeaa271
 2009-01-31T12:02:37.933490Z
 2340
@@ -950,7 +950,7 @@
 
 
 
-2010-09-23T14:37:45.199778Z
+2011-03-03T11:05:14.000000Z
 33bc41a153fc6fb2aa53069fb0f647d6
 2008-02-15T17:47:19.829750Z
 1149
@@ -978,13 +978,47 @@
 
 3909
 
+calendar-lv.js
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+b260d88c13c01ebf4e7c94b9cb022930
+2010-05-14T18:15:41.754813Z
+3737
+winterheart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3803
+
 calendar-zh.js
 file
 
 
 
 
-2010-09-23T14:37:45.203758Z
+2011-03-03T11:05:14.000000Z
 02222471f3e701ac1223096737fa5705
 2008-06-07T09:03:20.687527Z
 1498
@@ -1012,47 +1046,13 @@
 
 3600
 
-calendar-lv.js
-file
-
-
-
-
-2010-09-23T14:37:45.199778Z
-b260d88c13c01ebf4e7c94b9cb022930
-2010-05-14T18:15:41.754813Z
-3737
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3803
-
 calendar-ca.js
 file
 
 
 
 
-2010-09-24T12:48:29.835791Z
+2011-03-03T11:05:14.000000Z
 2756627844089652700c203ee91ec6f3
 2010-09-05T11:33:08.614151Z
 4060
@@ -1086,7 +1086,7 @@
 
 
 
-2010-09-23T14:37:45.203758Z
+2011-03-03T11:05:14.000000Z
 67f2807b1ee731af4fe16f358a8d9096
 2008-10-06T15:00:56.914741Z
 1927
@@ -1120,7 +1120,7 @@
 
 
 
-2010-09-23T14:37:45.199778Z
+2011-03-03T11:05:14.000000Z
 c684331ae98de9a0e03db4de8f985e44
 2008-05-25T12:42:56.738934Z
 1453
@@ -1154,7 +1154,7 @@
 
 
 
-2010-09-23T14:37:45.195758Z
+2011-03-03T11:05:14.000000Z
 0d732eaa10604b943c7d600a15c8a651
 2009-01-20T16:09:07.993954Z
 2292
@@ -1188,7 +1188,7 @@
 
 
 
-2010-09-23T14:37:45.203758Z
+2011-03-03T11:05:14.000000Z
 a26f883ac70499ee0409af2c08156a84
 2010-08-19T15:41:09.090282Z
 4003
@@ -1222,7 +1222,7 @@
 
 
 
-2010-09-23T14:37:45.203758Z
+2011-03-03T11:05:14.000000Z
 8cb3dced137544295b39ef836028433e
 2008-09-13T17:25:01.876743Z
 1817
@@ -1250,13 +1250,47 @@
 
 3776
 
+calendar-fa.js
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+79e745b797f9148ac63de8ce583e2282
+2011-02-21T10:08:59.720731Z
+4903
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3977
+
 calendar-bg.js
 file
 
 
 
 
-2010-09-23T14:37:45.191758Z
+2011-03-03T11:05:14.000000Z
 df1a74fadb5ce5b1cc53aa70034f578b
 2007-05-02T19:36:00.768529Z
 502
@@ -1290,7 +1324,7 @@
 
 
 
-2010-09-23T14:37:45.195758Z
+2011-03-03T11:05:14.000000Z
 d508459192a856b332d75de94c8d5c6c
 2007-04-04T18:20:45.423396Z
 419
@@ -1324,7 +1358,7 @@
 
 
 
-2010-09-23T14:37:45.195758Z
+2011-03-03T11:05:14.000000Z
 66418d047f243e10172798af0fb4d927
 2010-06-21T19:54:55.180393Z
 3809
@@ -1358,7 +1392,7 @@
 
 
 
-2010-09-23T14:37:45.203758Z
+2011-03-03T11:05:14.000000Z
 7dc0f35efebbe8b0d078d2c847b43b7c
 2009-01-20T15:45:34.332677Z
 2290
@@ -1392,7 +1426,7 @@
 
 
 
-2010-09-23T14:37:45.199778Z
+2011-03-03T11:05:14.000000Z
 eb66ba69ac2233b24fe200060ec67ab7
 2008-01-10T18:34:14.889747Z
 1051
@@ -1426,7 +1460,7 @@
 
 
 
-2010-09-23T14:37:45.195758Z
+2011-03-03T11:05:14.000000Z
 0c77d7dafe8031971e69a7a57b3dc93e
 2008-05-30T15:34:53.673854Z
 1478
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/public/javascripts/calendar/lang/.svn/prop-base/calendar-fa.js.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/public/javascripts/calendar/lang/.svn/text-base/calendar-fa.js.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,127 @@
+// ** I18N
+
+// Calendar FA language
+// Author: Behrang Noroozinia, behrangn at g mail
+// Encoding: any
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("یک‌شنبه",
+ "دوشنبه",
+ "سه‌شنبه",
+ "چهارشنبه",
+ "پنج‌شنبه",
+ "آدینه",
+ "شنبه",
+ "یک‌شنبه");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("یک",
+ "دو",
+ "سه",
+ "چهار",
+ "پنج",
+ "آدینه",
+ "شنبه",
+ "یک");
+
+// First day of the week. "0" means display Sunday first, "1" means display
+// Monday first, etc.
+Calendar._FD = 0;
+
+// full month names
+Calendar._MN = new Array
+("ژانویه",
+ "Ùوریه",
+ "مارس",
+ "آوریل",
+ "مه",
+ "ژوئن",
+ "ژوئیه",
+ "اوت",
+ "سپتامبر",
+ "اکتبر",
+ "نوامبر",
+ "دسامبر");
+
+// short month names
+Calendar._SMN = new Array
+("ژان",
+ "Ùور",
+ "مار",
+ "آور",
+ "مه",
+ "ژوئن",
+ "ژوئیه",
+ "اوت",
+ "سپت",
+ "اکت",
+ "نوا",
+ "دسا");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "درباره گاهشمار";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
+"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
+"\n\n" +
+"Date selection:\n" +
+"- Use the \xab, \xbb buttons to select year\n" +
+"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" +
+"- Hold mouse button on any of the above buttons for faster selection.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Time selection:\n" +
+"- Click on any of the time parts to increase it\n" +
+"- or Shift-click to decrease it\n" +
+"- or click and drag for faster selection.";
+
+Calendar._TT["PREV_YEAR"] = "سال پیشین (برای Ùهرست Ù†Ú¯Ù‡ دارید)";
+Calendar._TT["PREV_MONTH"] = "ماه پیشین ( برای Ùهرست Ù†Ú¯Ù‡ دارید)";
+Calendar._TT["GO_TODAY"] = "برو به امروز";
+Calendar._TT["NEXT_MONTH"] = "ماه پسین (برای Ùهرست Ù†Ú¯Ù‡ دارید)";
+Calendar._TT["NEXT_YEAR"] = "سال پسین (برای Ùهرست Ù†Ú¯Ù‡ دارید)";
+Calendar._TT["SEL_DATE"] = "گزینش";
+Calendar._TT["DRAG_TO_MOVE"] = "برای جابجایی بکشید";
+Calendar._TT["PART_TODAY"] = " (امروز)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "آغاز Ù‡ÙØªÙ‡ از %s";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "4,5";
+
+Calendar._TT["CLOSE"] = "بسته";
+Calendar._TT["TODAY"] = "امروز";
+Calendar._TT["TIME_PART"] = "زدن (با Shift) یا کشیدن برای ویرایش";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
+
+Calendar._TT["WK"] = "Ù‡ÙØªÙ‡";
+Calendar._TT["TIME"] = "زمان:";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/public/javascripts/calendar/lang/calendar-fa.js	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,127 @@
+// ** I18N
+
+// Calendar FA language
+// Author: Behrang Noroozinia, behrangn at g mail
+// Encoding: any
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("یک‌شنبه",
+ "دوشنبه",
+ "سه‌شنبه",
+ "چهارشنبه",
+ "پنج‌شنبه",
+ "آدینه",
+ "شنبه",
+ "یک‌شنبه");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("یک",
+ "دو",
+ "سه",
+ "چهار",
+ "پنج",
+ "آدینه",
+ "شنبه",
+ "یک");
+
+// First day of the week. "0" means display Sunday first, "1" means display
+// Monday first, etc.
+Calendar._FD = 0;
+
+// full month names
+Calendar._MN = new Array
+("ژانویه",
+ "Ùوریه",
+ "مارس",
+ "آوریل",
+ "مه",
+ "ژوئن",
+ "ژوئیه",
+ "اوت",
+ "سپتامبر",
+ "اکتبر",
+ "نوامبر",
+ "دسامبر");
+
+// short month names
+Calendar._SMN = new Array
+("ژان",
+ "Ùور",
+ "مار",
+ "آور",
+ "مه",
+ "ژوئن",
+ "ژوئیه",
+ "اوت",
+ "سپت",
+ "اکت",
+ "نوا",
+ "دسا");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "درباره گاهشمار";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
+"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
+"\n\n" +
+"Date selection:\n" +
+"- Use the \xab, \xbb buttons to select year\n" +
+"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" +
+"- Hold mouse button on any of the above buttons for faster selection.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Time selection:\n" +
+"- Click on any of the time parts to increase it\n" +
+"- or Shift-click to decrease it\n" +
+"- or click and drag for faster selection.";
+
+Calendar._TT["PREV_YEAR"] = "سال پیشین (برای Ùهرست Ù†Ú¯Ù‡ دارید)";
+Calendar._TT["PREV_MONTH"] = "ماه پیشین ( برای Ùهرست Ù†Ú¯Ù‡ دارید)";
+Calendar._TT["GO_TODAY"] = "برو به امروز";
+Calendar._TT["NEXT_MONTH"] = "ماه پسین (برای Ùهرست Ù†Ú¯Ù‡ دارید)";
+Calendar._TT["NEXT_YEAR"] = "سال پسین (برای Ùهرست Ù†Ú¯Ù‡ دارید)";
+Calendar._TT["SEL_DATE"] = "گزینش";
+Calendar._TT["DRAG_TO_MOVE"] = "برای جابجایی بکشید";
+Calendar._TT["PART_TODAY"] = " (امروز)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "آغاز Ù‡ÙØªÙ‡ از %s";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "4,5";
+
+Calendar._TT["CLOSE"] = "بسته";
+Calendar._TT["TODAY"] = "امروز";
+Calendar._TT["TIME_PART"] = "زدن (با Shift) یا کشیدن برای ویرایش";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
+
+Calendar._TT["WK"] = "Ù‡ÙØªÙ‡";
+Calendar._TT["TIME"] = "زمان:";
--- a/public/javascripts/context_menu.js	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/javascripts/context_menu.js	Thu Mar 03 12:02:03 2011 +0000
@@ -11,7 +11,7 @@
 
 	if (!observingContextMenuClick) {
 		Event.observe(document, 'click', this.Click.bindAsEventListener(this));
-		Event.observe(document, (window.opera ? 'click' : 'contextmenu'), this.RightClick.bindAsEventListener(this));
+		Event.observe(document, 'contextmenu', this.RightClick.bindAsEventListener(this));
 		observingContextMenuClick = true;
 	}
 	
@@ -23,8 +23,6 @@
 		this.hideMenu();
 		// do not show the context menu on links
 		if (Event.element(e).tagName == 'A') { return; }
-		// right-click simulated by Alt+Click with Opera
-		if (window.opera && !e.altKey) { return; }
 		var tr = Event.findElement(e, 'tr');
 		if (tr == document || tr == undefined  || !tr.hasClassName('hascontextmenu')) { return; }
 		Event.stop(e);
@@ -39,7 +37,6 @@
   Click: function(e) {
   	this.hideMenu();
   	if (Event.element(e).tagName == 'A') { return; }
-    if (window.opera && e.altKey) {	return; }
     if (Event.isLeftClick(e) || (navigator.appVersion.match(/\bMSIE\b/))) {      
       var tr = Event.findElement(e, 'tr');
       if (tr!=null && tr!=document && tr.hasClassName('hascontextmenu')) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/public/javascripts/jstoolbar/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svn/!svn/ver/4903/trunk/public/javascripts/jstoolbar
+END
+textile.js
+K 25
+svn:wc:ra_dav:version-url
+V 64
+/svn/!svn/ver/1955/trunk/public/javascripts/jstoolbar/textile.js
+END
+jstoolbar.js
+K 25
+svn:wc:ra_dav:version-url
+V 66
+/svn/!svn/ver/1955/trunk/public/javascripts/jstoolbar/jstoolbar.js
+END
--- a/public/javascripts/jstoolbar/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/javascripts/jstoolbar/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/public/javascripts/jstoolbar
+4993
+http://redmine.rubyforge.org/svn/trunk/public/javascripts/jstoolbar
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-29T12:54:04.302020Z
-4049
-winterheart
+2011-02-21T10:08:59.720731Z
+4903
+jplang
 
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 277ebc7c66d8c8280bbe729e6cb11529
 2008-10-27T11:08:29.901011Z
 1955
@@ -69,7 +69,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 2b77f98553b6d5e0d4c405195eebe664
 2008-10-27T11:08:29.901011Z
 1955
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/public/javascripts/jstoolbar/lang/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,263 @@
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/svn/!svn/ver/4903/trunk/public/javascripts/jstoolbar/lang
+END
+jstoolbar-mk.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/4049/trunk/public/javascripts/jstoolbar/lang/jstoolbar-mk.js
+END
+jstoolbar-es.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/2033/trunk/public/javascripts/jstoolbar/lang/jstoolbar-es.js
+END
+jstoolbar-ko.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/2202/trunk/public/javascripts/jstoolbar/lang/jstoolbar-ko.js
+END
+jstoolbar-eu.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/3338/trunk/public/javascripts/jstoolbar/lang/jstoolbar-eu.js
+END
+jstoolbar-no.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1540/trunk/public/javascripts/jstoolbar/lang/jstoolbar-no.js
+END
+jstoolbar-hu.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-hu.js
+END
+jstoolbar-sk.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1997/trunk/public/javascripts/jstoolbar/lang/jstoolbar-sk.js
+END
+jstoolbar-vi.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/2493/trunk/public/javascripts/jstoolbar/lang/jstoolbar-vi.js
+END
+jstoolbar-sr-yu.js
+K 25
+svn:wc:ra_dav:version-url
+V 77
+/svn/!svn/ver/4003/trunk/public/javascripts/jstoolbar/lang/jstoolbar-sr-yu.js
+END
+jstoolbar-uk.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-uk.js
+END
+jstoolbar-ro.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/2630/trunk/public/javascripts/jstoolbar/lang/jstoolbar-ro.js
+END
+jstoolbar-ru.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/2901/trunk/public/javascripts/jstoolbar/lang/jstoolbar-ru.js
+END
+jstoolbar-id.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/3227/trunk/public/javascripts/jstoolbar/lang/jstoolbar-id.js
+END
+jstoolbar-en.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-en.js
+END
+jstoolbar-gl.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/2296/trunk/public/javascripts/jstoolbar/lang/jstoolbar-gl.js
+END
+jstoolbar-fr.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-fr.js
+END
+jstoolbar-nl.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/2291/trunk/public/javascripts/jstoolbar/lang/jstoolbar-nl.js
+END
+jstoolbar-hr.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/3320/trunk/public/javascripts/jstoolbar/lang/jstoolbar-hr.js
+END
+jstoolbar-zh-tw.js
+K 25
+svn:wc:ra_dav:version-url
+V 77
+/svn/!svn/ver/1498/trunk/public/javascripts/jstoolbar/lang/jstoolbar-zh-tw.js
+END
+jstoolbar-mn.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/3626/trunk/public/javascripts/jstoolbar/lang/jstoolbar-mn.js
+END
+jstoolbar-pl.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1928/trunk/public/javascripts/jstoolbar/lang/jstoolbar-pl.js
+END
+jstoolbar-th.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-th.js
+END
+jstoolbar-it.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/4003/trunk/public/javascripts/jstoolbar/lang/jstoolbar-it.js
+END
+jstoolbar-sl.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/2340/trunk/public/javascripts/jstoolbar/lang/jstoolbar-sl.js
+END
+jstoolbar-lt.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-lt.js
+END
+jstoolbar-lv.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/3737/trunk/public/javascripts/jstoolbar/lang/jstoolbar-lv.js
+END
+jstoolbar-zh.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1498/trunk/public/javascripts/jstoolbar/lang/jstoolbar-zh.js
+END
+jstoolbar-pt.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1927/trunk/public/javascripts/jstoolbar/lang/jstoolbar-pt.js
+END
+jstoolbar-ca.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1865/trunk/public/javascripts/jstoolbar/lang/jstoolbar-ca.js
+END
+jstoolbar-pt-br.js
+K 25
+svn:wc:ra_dav:version-url
+V 77
+/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-pt-br.js
+END
+jstoolbar-da.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/2921/trunk/public/javascripts/jstoolbar/lang/jstoolbar-da.js
+END
+jstoolbar-sr.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/4003/trunk/public/javascripts/jstoolbar/lang/jstoolbar-sr.js
+END
+jstoolbar-tr.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1817/trunk/public/javascripts/jstoolbar/lang/jstoolbar-tr.js
+END
+jstoolbar-fa.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/4903/trunk/public/javascripts/jstoolbar/lang/jstoolbar-fa.js
+END
+jstoolbar-bg.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-bg.js
+END
+jstoolbar-de.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-de.js
+END
+jstoolbar-en-gb.js
+K 25
+svn:wc:ra_dav:version-url
+V 77
+/svn/!svn/ver/3809/trunk/public/javascripts/jstoolbar/lang/jstoolbar-en-gb.js
+END
+jstoolbar-sv.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/2298/trunk/public/javascripts/jstoolbar/lang/jstoolbar-sv.js
+END
+jstoolbar-ja.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/2901/trunk/public/javascripts/jstoolbar/lang/jstoolbar-ja.js
+END
+jstoolbar-he.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-he.js
+END
+jstoolbar-fi.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-fi.js
+END
+jstoolbar-bs.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/2629/trunk/public/javascripts/jstoolbar/lang/jstoolbar-bs.js
+END
+jstoolbar-cs.js
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/1479/trunk/public/javascripts/jstoolbar/lang/jstoolbar-cs.js
+END
--- a/public/javascripts/jstoolbar/lang/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/javascripts/jstoolbar/lang/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/public/javascripts/jstoolbar/lang
 http://redmine.rubyforge.org/svn
 
 
 
-2010-08-29T12:54:04.302020Z
-4049
-winterheart
+2011-02-21T10:08:59.720731Z
+4903
+jplang
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-24T12:48:29.827791Z
+2011-03-03T11:05:14.000000Z
 318952e82ec967a5474a8b8464b66c63
 2010-08-29T12:54:04.302020Z
 4049
@@ -66,7 +66,7 @@
 
 
 
-2010-09-23T14:37:45.231813Z
+2011-03-03T11:05:14.000000Z
 21ca3fea9a77d127edb7d2e95b33b8f8
 2008-11-14T15:18:13.107466Z
 2033
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:45.235815Z
+2011-03-03T11:05:14.000000Z
 7cbd6179e32e9b8ec12a884c820565ca
 2008-12-29T18:27:27.433290Z
 2202
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:45.231813Z
+2011-03-03T11:05:14.000000Z
 73ba5f511744c07325bc0eae3dce14e6
 2010-01-25T15:25:46.560119Z
 3338
@@ -168,7 +168,7 @@
 
 
 
-2010-09-23T14:37:45.235815Z
+2011-03-03T11:05:14.000000Z
 b1cfe765b72f2d904756bf60307c97b7
 2008-06-15T09:49:16.794942Z
 1540
@@ -202,7 +202,7 @@
 
 
 
-2010-09-23T14:37:45.231813Z
+2011-03-03T11:05:14.000000Z
 83762b06ef0b9a9756f858357bf11361
 2008-05-30T16:35:36.510811Z
 1479
@@ -236,7 +236,7 @@
 
 
 
-2010-09-23T14:37:45.235815Z
+2011-03-03T11:05:14.000000Z
 b27b3e83de7c68c7752703799c0a4cda
 2008-11-08T22:34:41.558925Z
 1997
@@ -270,7 +270,7 @@
 
 
 
-2010-09-23T14:37:45.239756Z
+2011-03-03T11:05:14.000000Z
 06a6efe1fa0092d534f1cc403529670b
 2009-02-21T11:04:50.579477Z
 2493
@@ -298,13 +298,47 @@
 
 783
 
+jstoolbar-sr-yu.js
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+bf8f49f26dc22319ff3da721c261c593
+2010-08-19T15:41:09.090282Z
+4003
+winterheart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+761
+
 jstoolbar-uk.js
 file
 
 
 
 
-2010-09-23T14:37:45.239756Z
+2011-03-03T11:05:14.000000Z
 c49e65f5c02ababbaa0c9a9968424950
 2008-05-30T16:35:36.510811Z
 1479
@@ -332,47 +366,13 @@
 
 722
 
-jstoolbar-sr-yu.js
-file
-
-
-
-
-2010-09-23T14:37:45.239756Z
-bf8f49f26dc22319ff3da721c261c593
-2010-08-19T15:41:09.090282Z
-4003
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-761
-
 jstoolbar-ro.js
 file
 
 
 
 
-2010-09-23T14:37:45.235815Z
+2011-03-03T11:05:14.000000Z
 de3d5c4af91e93505e939ccb1ef6b27a
 2009-03-24T19:20:53.296475Z
 2630
@@ -406,7 +406,7 @@
 
 
 
-2010-09-23T14:37:45.235815Z
+2011-03-03T11:05:14.000000Z
 9f461eb7e9ab4460155983bd005c3237
 2009-09-24T15:03:23.893264Z
 2901
@@ -440,7 +440,7 @@
 
 
 
-2010-09-23T14:37:45.231813Z
+2011-03-03T11:05:14.000000Z
 fd6a3f960f0d6e1ce7e6466d592453fe
 2009-12-23T18:56:03.404741Z
 3227
@@ -474,7 +474,7 @@
 
 
 
-2010-09-23T14:37:45.231813Z
+2011-03-03T11:05:14.000000Z
 c49e65f5c02ababbaa0c9a9968424950
 2008-05-30T16:35:36.510811Z
 1479
@@ -508,7 +508,7 @@
 
 
 
-2010-09-23T14:37:45.231813Z
+2011-03-03T11:05:14.000000Z
 1114856226e757ddfb08a99ab1cac3eb
 2009-01-23T15:37:59.406714Z
 2296
@@ -542,7 +542,7 @@
 
 
 
-2010-09-23T14:37:45.231813Z
+2011-03-03T11:05:14.000000Z
 9b432fe2e801ed76abf312a10c643fb8
 2008-05-30T16:35:36.510811Z
 1479
@@ -570,13 +570,81 @@
 
 753
 
+jstoolbar-nl.js
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+b1bc7a04b7b466073845dd2c81bbbf23
+2009-01-20T15:53:09.750096Z
+2291
+winterheart
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+753
+
+jstoolbar-hr.js
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+f13f0553753c4b53bd96c294ca6ce15e
+2010-01-17T10:33:30.937961Z
+3320
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+721
+
 jstoolbar-zh-tw.js
 file
 
 
 
 
-2010-09-23T14:37:45.239756Z
+2011-03-03T11:05:14.000000Z
 be45a6e710f3a07e9fab41d795a64030
 2008-06-07T09:03:20.687527Z
 1498
@@ -604,81 +672,13 @@
 
 716
 
-jstoolbar-hr.js
-file
-
-
-
-
-2010-09-23T14:37:45.231813Z
-f13f0553753c4b53bd96c294ca6ce15e
-2010-01-17T10:33:30.937961Z
-3320
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-721
-
-jstoolbar-nl.js
-file
-
-
-
-
-2010-09-23T14:37:45.235815Z
-b1bc7a04b7b466073845dd2c81bbbf23
-2009-01-20T15:53:09.750096Z
-2291
-winterheart
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-753
-
 jstoolbar-mn.js
 file
 
 
 
 
-2010-09-23T14:37:45.235815Z
+2011-03-03T11:05:14.000000Z
 e7df0709db363c802a6a5a4913520ac5
 2010-04-03T10:49:16.109274Z
 3626
@@ -706,13 +706,47 @@
 
 916
 
+jstoolbar-pl.js
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+1d2b7d7c66953806ca428f91a95d2eaa
+2008-10-07T17:41:16.515762Z
+1928
+winterheart
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+851
+
 jstoolbar-th.js
 file
 
 
 
 
-2010-09-23T14:37:45.239756Z
+2011-03-03T11:05:14.000000Z
 3f844a6495d4eebb122b5c7b21696282
 2008-05-30T16:35:36.510811Z
 1479
@@ -740,47 +774,13 @@
 
 931
 
-jstoolbar-pl.js
-file
-
-
-
-
-2010-09-23T14:37:45.235815Z
-1d2b7d7c66953806ca428f91a95d2eaa
-2008-10-07T17:41:16.515762Z
-1928
-winterheart
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-851
-
 jstoolbar-it.js
 file
 
 
 
 
-2010-09-23T14:37:45.235815Z
+2011-03-03T11:05:14.000000Z
 c7198fe4acf23cf7df996603e68b492b
 2010-08-19T15:41:09.090282Z
 4003
@@ -814,7 +814,7 @@
 
 
 
-2010-09-23T14:37:45.239756Z
+2011-03-03T11:05:14.000000Z
 a85f4ab1ed887a855f03c2cc8efb0107
 2009-01-31T12:02:37.933490Z
 2340
@@ -848,7 +848,7 @@
 
 
 
-2010-09-23T14:37:45.235815Z
+2011-03-03T11:05:14.000000Z
 1fbcdee2a48a3d359fd766880b9b606f
 2008-05-30T16:35:36.510811Z
 1479
@@ -876,13 +876,47 @@
 
 754
 
+jstoolbar-lv.js
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+5a44b7a9bd5b7db86d0a7398ee5bc779
+2010-05-14T18:15:41.754813Z
+3737
+winterheart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+836
+
 jstoolbar-zh.js
 file
 
 
 
 
-2010-09-23T14:37:45.239756Z
+2011-03-03T11:05:14.000000Z
 fa9b7d27a231a3c85c1a4632f2563ac4
 2008-06-07T09:03:20.687527Z
 1498
@@ -910,81 +944,13 @@
 
 722
 
-jstoolbar-lv.js
-file
-
-
-
-
-2010-09-23T14:37:45.235815Z
-5a44b7a9bd5b7db86d0a7398ee5bc779
-2010-05-14T18:15:41.754813Z
-3737
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-836
-
-jstoolbar-ca.js
-file
-
-
-
-
-2010-09-23T14:37:45.231813Z
-6aacb53ed49e6e14831baf8c38096662
-2008-09-15T16:07:30.857601Z
-1865
-winterheart
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-763
-
 jstoolbar-pt.js
 file
 
 
 
 
-2010-09-23T14:37:45.235815Z
+2011-03-03T11:05:14.000000Z
 2479961837e503c00632ff7e6997b10d
 2008-10-06T15:00:56.914741Z
 1927
@@ -1012,13 +978,47 @@
 
 823
 
+jstoolbar-ca.js
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+6aacb53ed49e6e14831baf8c38096662
+2008-09-15T16:07:30.857601Z
+1865
+winterheart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+763
+
 jstoolbar-da.js
 file
 
 
 
 
-2010-09-23T14:37:45.231813Z
+2011-03-03T11:05:14.000000Z
 4061b38de5e085dac922f77f94bd254a
 2009-10-11T09:24:45.635758Z
 2921
@@ -1046,13 +1046,47 @@
 
 746
 
+jstoolbar-sr.js
+file
+
+
+
+
+2011-03-03T11:05:14.000000Z
+fb00cc94dfc8f319dda707b957aae8a6
+2010-08-19T15:41:09.090282Z
+4003
+winterheart
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+912
+
 jstoolbar-pt-br.js
 file
 
 
 
 
-2010-09-23T14:37:45.235815Z
+2011-03-03T11:05:14.000000Z
 37aed8a5fce8e7f2030ac37e3d635068
 2008-05-30T16:35:36.510811Z
 1479
@@ -1080,47 +1114,13 @@
 
 819
 
-jstoolbar-sr.js
-file
-
-
-
-
-2010-09-23T14:37:45.239756Z
-fb00cc94dfc8f319dda707b957aae8a6
-2010-08-19T15:41:09.090282Z
-4003
-winterheart
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-912
-
 jstoolbar-tr.js
 file
 
 
 
 
-2010-09-23T14:37:45.239756Z
+2011-03-03T11:05:14.000000Z
 c7333a1fd77fe1f7db31810175f8fe8f
 2008-09-13T17:25:01.876743Z
 1817
@@ -1148,13 +1148,47 @@
 
 662
 
+jstoolbar-fa.js
+file
+
+
+
+
+2011-03-03T11:40:18.000000Z
+5fde8ac79f7084911ce37f5cdad2052e
+2011-02-21T10:08:59.720731Z
+4903
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+838
+
 jstoolbar-bg.js
 file
 
 
 
 
-2010-09-23T14:37:45.227756Z
+2011-03-03T11:05:14.000000Z
 c49e65f5c02ababbaa0c9a9968424950
 2008-05-30T16:35:36.510811Z
 1479
@@ -1188,7 +1222,7 @@
 
 
 
-2010-09-23T14:37:45.231813Z
+2011-03-03T11:05:14.000000Z
 7c5edef659f90a30330909bc13b0d6fb
 2008-05-30T16:35:36.510811Z
 1479
@@ -1222,7 +1256,7 @@
 
 
 
-2010-09-23T14:37:45.231813Z
+2011-03-03T11:05:14.000000Z
 c49e65f5c02ababbaa0c9a9968424950
 2010-06-21T19:54:55.180393Z
 3809
@@ -1256,7 +1290,7 @@
 
 
 
-2010-09-23T14:37:45.239756Z
+2011-03-03T11:05:14.000000Z
 7ec48cf15b3d65b2a0994b50b033b4b8
 2009-01-23T15:46:22.446544Z
 2298
@@ -1290,7 +1324,7 @@
 
 
 
-2010-09-23T14:37:45.235815Z
+2011-03-03T11:05:14.000000Z
 06245b4053c38d6bf3ae61d1bf4c7587
 2009-09-24T15:03:23.893264Z
 2901
@@ -1324,7 +1358,7 @@
 
 
 
-2010-09-23T14:37:45.231813Z
+2011-03-03T11:05:14.000000Z
 c49e65f5c02ababbaa0c9a9968424950
 2008-05-30T16:35:36.510811Z
 1479
@@ -1358,7 +1392,7 @@
 
 
 
-2010-09-23T14:37:45.231813Z
+2011-03-03T11:05:14.000000Z
 0377fba91478a1df25844aa70609e204
 2008-05-30T16:35:36.510811Z
 1479
@@ -1392,7 +1426,7 @@
 
 
 
-2010-09-23T14:37:45.231813Z
+2011-03-03T11:05:14.000000Z
 da8e9ced2ea20fedc7bb3204082fc68a
 2009-03-24T19:16:02.676125Z
 2629
@@ -1426,7 +1460,7 @@
 
 
 
-2010-09-23T14:37:45.231813Z
+2011-03-03T11:05:14.000000Z
 8394af79dae7854d27ccdb8b72c3262c
 2008-05-30T16:35:36.510811Z
 1479
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/public/javascripts/jstoolbar/lang/.svn/prop-base/jstoolbar-fa.js.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/public/javascripts/jstoolbar/lang/.svn/text-base/jstoolbar-fa.js.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,16 @@
+jsToolBar.strings = {};
+jsToolBar.strings['Strong'] = 'پررنگ';
+jsToolBar.strings['Italic'] = 'کج';
+jsToolBar.strings['Underline'] = 'زیرخط';
+jsToolBar.strings['Deleted'] = 'برداشته شده';
+jsToolBar.strings['Code'] = 'کد درون خطی';
+jsToolBar.strings['Heading 1'] = 'سربرگ ۱';
+jsToolBar.strings['Heading 2'] = 'سربرگ ۲';
+jsToolBar.strings['Heading 3'] = 'سربرگ ۳';
+jsToolBar.strings['Unordered list'] = 'Ùهرست بدون شماره';
+jsToolBar.strings['Ordered list'] = 'Ùهرست با شماره';
+jsToolBar.strings['Quote'] = 'تو بردن';
+jsToolBar.strings['Unquote'] = 'بیرون آوردن';
+jsToolBar.strings['Preformatted text'] = 'نوشته قالب بندی شده';
+jsToolBar.strings['Wiki link'] = 'پیوند به برگ ویکی';
+jsToolBar.strings['Image'] = 'عکس';
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/public/javascripts/jstoolbar/lang/jstoolbar-fa.js	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,16 @@
+jsToolBar.strings = {};
+jsToolBar.strings['Strong'] = 'پررنگ';
+jsToolBar.strings['Italic'] = 'کج';
+jsToolBar.strings['Underline'] = 'زیرخط';
+jsToolBar.strings['Deleted'] = 'برداشته شده';
+jsToolBar.strings['Code'] = 'کد درون خطی';
+jsToolBar.strings['Heading 1'] = 'سربرگ ۱';
+jsToolBar.strings['Heading 2'] = 'سربرگ ۲';
+jsToolBar.strings['Heading 3'] = 'سربرگ ۳';
+jsToolBar.strings['Unordered list'] = 'Ùهرست بدون شماره';
+jsToolBar.strings['Ordered list'] = 'Ùهرست با شماره';
+jsToolBar.strings['Quote'] = 'تو بردن';
+jsToolBar.strings['Unquote'] = 'بیرون آوردن';
+jsToolBar.strings['Preformatted text'] = 'نوشته قالب بندی شده';
+jsToolBar.strings['Wiki link'] = 'پیوند به برگ ویکی';
+jsToolBar.strings['Image'] = 'عکس';
--- a/public/stylesheets/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/stylesheets/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 43
-/svn/!svn/ver/4702/trunk/public/stylesheets
+/svn/!svn/ver/4954/trunk/public/stylesheets
 END
 context_menu.css
 K 25
@@ -49,5 +49,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/4702/trunk/public/stylesheets/application.css
+/svn/!svn/ver/4954/trunk/public/stylesheets/application.css
 END
--- a/public/stylesheets/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/stylesheets/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/public/stylesheets
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-11T20:37:31.480170Z
-4702
+2011-02-27T13:34:41.060565Z
+4954
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:45.247783Z
+2011-03-03T11:05:14.000000Z
 d4e12d14040f9f048ddc696b1c0adf71
 2010-05-01T11:54:40.545656Z
 3725
@@ -66,7 +66,7 @@
 
 
 
-2010-09-23T14:37:45.247783Z
+2011-03-03T11:05:14.000000Z
 ee22ead851abb7d0733ccd46315ccdc2
 2010-08-19T01:13:50.846630Z
 3950
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:45.247783Z
+2011-03-03T11:05:14.000000Z
 c8ca83463f3cde626ce2e2c3dca08cb2
 2010-08-22T19:12:21.015911Z
 4014
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:45.251810Z
+2011-03-03T11:05:14.000000Z
 d4a1902945bf7a0faa18be73960030c9
 2008-09-17T17:18:05.938945Z
 1872
@@ -168,7 +168,7 @@
 
 
 
-2010-09-23T14:37:45.251810Z
+2011-03-03T11:05:14.000000Z
 cb7655798f97e931ea4992a9dd1afc4f
 2010-08-22T19:12:21.015911Z
 4014
@@ -202,7 +202,7 @@
 
 
 
-2010-09-23T14:37:45.247783Z
+2011-03-03T11:05:14.000000Z
 62cab819ebe98bd9fb95415ac7b52e12
 2007-12-28T21:58:33.550772Z
 1024
@@ -236,7 +236,7 @@
 
 
 
-2010-09-23T14:37:45.251810Z
+2011-03-03T11:05:14.000000Z
 360ffe5ea0cba43a286c7e42756b463f
 2010-03-28T11:30:48.135356Z
 3619
@@ -270,10 +270,31 @@
 
 
 
-
-b268a66dce14ef4250f269776b4ddcde
-2011-01-11T20:37:31.480170Z
-4702
+2011-03-03T11:40:18.000000Z
+1c8f6eb0fe9e3708adf095c11bc824bf
+2011-02-27T13:34:41.060565Z
+4954
 jplang
 has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+35897
 
--- a/public/stylesheets/.svn/text-base/application.css.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/stylesheets/.svn/text-base/application.css.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -672,6 +672,13 @@
 .diff_out { background: #fcc; }
 .diff_in { background: #cfc; }
 
+.text-diff {
+padding: 1em;
+background-color:#f6f6f6;
+color:#505050;
+border: 1px solid #e4e4e4;
+}
+
 /***** Wiki *****/
 div.wiki table {
     border: 1px solid #505050;
@@ -783,6 +790,7 @@
 }
 
 .gantt_subjects { font-size: 0.8em; }
+.gantt_subjects div { line-height:1.2em;height:16px;overflow:hidden;white-space:nowrap;text-overflow: ellipsis; }
 
 .task {
   position: absolute;
--- a/public/stylesheets/.svn/tmp/application.css.tmp	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/stylesheets/.svn/tmp/application.css.tmp	Thu Mar 03 12:02:03 2011 +0000
@@ -841,7 +841,6 @@
 .icon-folder { background-image: url(../images/folder.png); }
 .open .icon-folder { background-image: url(../images/folder_open.png); }
 .icon-package { background-image: url(../images/package.png); }
-.icon-home { background-image: url(../images/home.png); }
 .icon-user { background-image: url(../images/user.png); }
 .icon-projects { background-image: url(../images/projects.png); }
 .icon-help { background-image: url(../images/help.png); }
@@ -914,8 +913,8 @@
 }
 
 td.username img.gravatar {
-	float: left;
-	margin: 0 1em 0 0;
+	margin: 0 0.5em 0 0;
+	vertical-align: top;
 }
 
 #activity dt img.gravatar {
--- a/public/stylesheets/.svn/tmp/tempfile.tmp	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/stylesheets/.svn/tmp/tempfile.tmp	Thu Mar 03 12:02:03 2011 +0000
@@ -1,3 +1,4 @@
+html {overflow-y:scroll;}
 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
 
 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
@@ -178,6 +179,8 @@
 tr.user.locked, tr.user.registered { color: #aaa; }
 tr.user.locked a, tr.user.registered a { color: #aaa; }
 
+tr.wiki-page-version td.updated_on, tr.wiki-page-version td.author {text-align:center;}
+
 tr.time-entry { text-align: center; white-space: nowrap; }
 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
@@ -663,6 +666,7 @@
 }
 
 #parent_issue_candidates ul li {width: 500px;}
+#related_issue_candidates ul li {width: 500px;}
 
 /***** Diff *****/
 .diff_out { background: #fcc; }
@@ -778,6 +782,8 @@
   overflow: hidden;
 }
 
+.gantt_subjects { font-size: 0.8em; }
+
 .task {
   position: absolute;
   height:8px;
@@ -790,24 +796,26 @@
 }
 
 .task.label {width:100%;}
+.task.label.project, .task.label.version { font-weight: bold; }
 
 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
 .task_done { background:#00c600 url(../images/task_done.png); border: 1px solid #00c600; }  
 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
 
-.task_todo.parent { background: #888; border: 1px solid #888; height: 6px;}
+.task_todo.parent { background: #888; border: 1px solid #888; height: 3px;}
 .task_late.parent, .task_done.parent { height: 3px;}
-.task_todo.parent .left  { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -5px; left: 0px; top: -1px;}
-.task_todo.parent .right { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-right: -5px; right: 0px; top: -1px;}
+.task.parent.marker.starting  { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -4px; left: 0px; top: -1px;}
+.task.parent.marker.ending { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -4px; right: 0px; top: -1px;}
 
-.milestone { background-image:url(../images/version_marker.png); background-repeat: no-repeat; border: 0; }
-.milestone_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
-.milestone_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
-.milestone_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
-.project-line { background-image:url(../images/project_marker.png); background-repeat: no-repeat; border: 0; }
-.project_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
-.project_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
-.project_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
+.version.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
+.version.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
+.version.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
+.version.marker { background-image:url(../images/version_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
+
+.project.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
+.project.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
+.project.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
+.project.marker { background-image:url(../images/project_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
 
 .version-behind-schedule a, .issue-behind-schedule a {color: #f66914;}
 .version-overdue a, .issue-overdue a, .project-overdue a {color: #f00;}
@@ -833,7 +841,6 @@
 .icon-folder { background-image: url(../images/folder.png); }
 .open .icon-folder { background-image: url(../images/folder_open.png); }
 .icon-package { background-image: url(../images/package.png); }
-.icon-home { background-image: url(../images/home.png); }
 .icon-user { background-image: url(../images/user.png); }
 .icon-projects { background-image: url(../images/projects.png); }
 .icon-help { background-image: url(../images/help.png); }
@@ -906,8 +913,8 @@
 }
 
 td.username img.gravatar {
-	float: left;
-	margin: 0 1em 0 0;
+	margin: 0 0.5em 0 0;
+	vertical-align: top;
 }
 
 #activity dt img.gravatar {
--- a/public/stylesheets/application.css	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/stylesheets/application.css	Thu Mar 03 12:02:03 2011 +0000
@@ -350,8 +350,8 @@
 ul.projects ul.projects { border-left: 3px solid #e0e0e0; }
 ul.projects li.root { list-style-type:none; margin-bottom: 1em; }
 ul.projects li.child { list-style-type:none; margin-top: 1em;}
-ul.projects div.root a.project { /* font-family: "Trebuchet MS", Verdana, sans-serif; */ font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
-/* .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; } */
+ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
+.my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
 
 #tracker_project_ids ul { margin: 0;  padding-left: 1em; }
 #tracker_project_ids li { list-style-type:none; } 
@@ -672,6 +672,13 @@
 .diff_out { background: #fcc; }
 .diff_in { background: #cfc; }
 
+.text-diff {
+padding: 1em;
+background-color:#f6f6f6;
+color:#505050;
+border: 1px solid #e4e4e4;
+}
+
 /***** Wiki *****/
 div.wiki table {
     border: 1px solid #505050;
@@ -783,6 +790,7 @@
 }
 
 .gantt_subjects { font-size: 0.8em; }
+.gantt_subjects div { line-height:1.2em;height:16px;overflow:hidden;white-space:nowrap;text-overflow: ellipsis; }
 
 .task {
   position: absolute;
--- a/public/themes/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/themes/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/public/themes
+4993
+http://redmine.rubyforge.org/svn/trunk/public/themes
 http://redmine.rubyforge.org/svn
 
 
@@ -38,7 +38,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 5b7a0352b95a67871b90c5a90a226123
 2007-10-10T17:17:37.630066Z
 818
--- a/public/themes/alternate/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/themes/alternate/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/public/themes/alternate
+4993
+http://redmine.rubyforge.org/svn/trunk/public/themes/alternate
 http://redmine.rubyforge.org/svn
 
 
--- a/public/themes/alternate/stylesheets/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/themes/alternate/stylesheets/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/public/themes/alternate/stylesheets
+4993
+http://redmine.rubyforge.org/svn/trunk/public/themes/alternate/stylesheets
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 8a47fb469dca292ea631422810927fe3
 2009-11-15T21:15:31.339604Z
 3069
--- a/public/themes/classic/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/themes/classic/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/public/themes/classic
+4993
+http://redmine.rubyforge.org/svn/trunk/public/themes/classic
 http://redmine.rubyforge.org/svn
 
 
--- a/public/themes/classic/images/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/themes/classic/images/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/public/themes/classic/images
+4993
+http://redmine.rubyforge.org/svn/trunk/public/themes/classic/images
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 a137eb4441860564ce1655357af26de8
 2009-12-18T14:10:26.630799Z
 3183
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 99bea32e1990e011e870f6c562e87a6a
 2009-12-18T14:10:26.630799Z
 3183
--- a/public/themes/classic/stylesheets/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/public/themes/classic/stylesheets/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/public/themes/classic/stylesheets
+4993
+http://redmine.rubyforge.org/svn/trunk/public/themes/classic/stylesheets
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:14.000000Z
 1bfaedd3f6b62419367da41a7a9310b2
 2009-12-18T14:10:26.630799Z
 3183
--- a/script/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/script/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/script
+4993
+http://redmine.rubyforge.org/svn/trunk/script
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 623b2f8265970f73bdb3489872d00eb6
 2010-11-02T00:20:21.419252Z
 4359
@@ -69,7 +69,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 2ac529bf7a654b9b91b2fea2275aa44e
 2010-11-02T00:20:21.419252Z
 4359
@@ -103,7 +103,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 ff97a702418dbc85fec089b97506281f
 2010-11-02T00:20:21.419252Z
 4359
@@ -137,7 +137,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 1fd5fa2d4aeee5b4111a40f62ae85446
 2010-11-02T00:20:21.419252Z
 4359
@@ -171,7 +171,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 95866cb3b894816b540afd282b952618
 2010-11-02T00:20:21.419252Z
 4359
@@ -205,7 +205,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 0cccc4eabf129ebd7b571d3eceda8893
 2010-11-02T00:20:21.419252Z
 4359
@@ -239,7 +239,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 b0aeca2e257a2226502c570e671e1b76
 2010-11-02T00:20:21.419252Z
 4359
@@ -273,7 +273,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 fb51df9bca94c25a928f40468354700f
 2010-11-02T00:20:21.419252Z
 4359
@@ -310,7 +310,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 db0dd437d39c21fe52e1fc05a0680163
 2010-11-02T00:20:21.419252Z
 4359
--- a/script/performance/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/script/performance/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/script/performance
+4993
+http://redmine.rubyforge.org/svn/trunk/script/performance
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 33063b7a3d4dbef12ac8bcb55a5e6e3e
 2010-11-02T00:20:21.419252Z
 4359
@@ -66,7 +66,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 9d3b872769337c49e648b9fe47e4e280
 2010-11-02T00:20:21.419252Z
 4359
@@ -100,7 +100,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 b6500710f6029724e44cbd25f80eaaf1
 2010-11-02T00:20:21.419252Z
 4359
--- a/script/process/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/script/process/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/script/process
+4993
+http://redmine.rubyforge.org/svn/trunk/script/process
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 47bf41d8d2c97d220d9f70916e94c651
 2010-11-02T00:20:21.419252Z
 4359
@@ -66,7 +66,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 9137857ebdaf61d57a3496f7e61fede3
 2010-11-02T00:20:21.419252Z
 4359
@@ -100,7 +100,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 99af2666610d48d13e2eeceacf487d16
 2010-11-02T00:20:21.419252Z
 4359
@@ -134,7 +134,7 @@
 
 
 
-2010-11-30T13:11:53.000000Z
+2011-03-03T11:05:13.000000Z
 64b5316e88e7555bf827ad04edbce4a6
 2010-11-02T00:20:21.419252Z
 4359
--- a/test/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 29
-/svn/!svn/ver/4730/trunk/test
+/svn/!svn/ver/4991/trunk/test
 END
 object_daddy_helpers.rb
 K 25
--- a/test/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-16T15:36:42.998302Z
-4730
-jplang
+2011-03-03T03:35:13.139305Z
+4991
+tmaruyama
 
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-09-24T12:48:25.883734Z
+2011-03-03T11:05:09.000000Z
 bec9d26a7ae75350529040e7bca36bfa
 2010-09-10T19:44:45.405792Z
 4078
@@ -72,7 +72,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 07898564890be4ff9e6c039fa6aa9d41
 2011-01-01T12:24:18.924489Z
 4603
@@ -118,7 +118,7 @@
 
 
 
-2010-09-23T14:37:45.427769Z
+2011-03-03T11:05:09.000000Z
 29604d905b321f5bf19b86f7b9797394
 2009-09-13T17:14:35.707881Z
 2887
--- a/test/exemplars/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/exemplars/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/exemplars
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:45.291809Z
+2011-03-03T11:05:08.000000Z
 26c766235d2f79490fa33a7ec9c154ae
 2010-01-27T18:29:03.119133Z
 3340
@@ -66,7 +66,7 @@
 
 
 
-2010-09-23T14:37:45.295820Z
+2011-03-03T11:05:08.000000Z
 62261c71ec828fa443bd44e055602e3d
 2010-01-27T18:29:03.119133Z
 3340
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 0da51e5e074d641e056e5011545571b8
 2010-01-27T18:29:03.119133Z
 3340
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 5b8b8763d7419d535d1d14d7bfb4f343
 2010-01-27T18:29:03.119133Z
 3340
@@ -168,7 +168,7 @@
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 13a55da47c4b6a61a3dbfd73eea41049
 2010-08-19T22:24:42.251508Z
 4010
@@ -202,7 +202,7 @@
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 26c91af771947fc671b87a08282608b3
 2010-04-13T05:57:27.803435Z
 3670
@@ -236,7 +236,7 @@
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 acf3ae00213d45112f6e13ecce212af1
 2010-01-28T19:05:21.831741Z
 3342
@@ -270,7 +270,7 @@
 
 
 
-2010-09-23T14:37:45.291809Z
+2011-03-03T11:05:08.000000Z
 662be883bd5a43d964b868caaf34b276
 2010-01-27T18:29:03.119133Z
 3340
@@ -304,7 +304,7 @@
 
 
 
-2010-09-23T14:37:45.295820Z
+2011-03-03T11:05:08.000000Z
 2dc494eb57aee9ee3c3ca5324f61e707
 2010-01-27T18:29:03.119133Z
 3340
@@ -338,7 +338,7 @@
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 06cec6b1adf323a00a75e5c008f73c57
 2010-01-27T18:29:03.119133Z
 3340
@@ -372,7 +372,7 @@
 
 
 
-2010-09-23T14:37:45.295820Z
+2011-03-03T11:05:08.000000Z
 e51316252a08488be9aa2878c00c4959
 2010-01-27T18:29:03.119133Z
 3340
@@ -406,7 +406,7 @@
 
 
 
-2010-09-23T14:37:45.291809Z
+2011-03-03T11:05:08.000000Z
 e5f24c612cf3bcc7b17aeeafeae0697d
 2009-10-20T00:36:51.144135Z
 2937
@@ -440,7 +440,7 @@
 
 
 
-2010-11-19T13:04:41.365641Z
+2011-03-03T11:05:08.000000Z
 9be3a10325013fa24b00903db30d1ca3
 2010-11-14T16:24:21.989522Z
 4406
@@ -474,7 +474,7 @@
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 24d00671cf3c2137d957ee6dac273517
 2010-01-28T19:05:21.831741Z
 3342
@@ -508,7 +508,7 @@
 
 
 
-2010-09-23T14:37:45.291809Z
+2011-03-03T11:05:08.000000Z
 1f7deb35b057dce8eb5dbc41d9a29019
 2010-01-28T19:05:21.831741Z
 3342
@@ -542,7 +542,7 @@
 
 
 
-2010-09-23T14:37:45.291809Z
+2011-03-03T11:05:08.000000Z
 575c5f91f698576ec8f6cc88bbcd31d8
 2010-01-27T18:29:03.119133Z
 3340
@@ -576,7 +576,7 @@
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 fd5cfe62b2a92441a7cdb5035c4c4897
 2009-10-18T22:25:00.956502Z
 2930
@@ -610,7 +610,7 @@
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 faf4bf5a3a3662c361ce668c20c293a4
 2010-01-27T18:29:03.119133Z
 3340
@@ -644,7 +644,7 @@
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 91f000c1e57fb0edc16bf90ea8efc6fa
 2010-01-28T19:05:21.831741Z
 3342
@@ -678,7 +678,7 @@
 
 
 
-2010-09-23T14:37:45.291809Z
+2011-03-03T11:05:08.000000Z
 3b871be1550b1a964324a18f868dabae
 2009-12-06T10:28:20.099964Z
 3123
@@ -712,7 +712,7 @@
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 dfe8cbec2ef3bcffe6b9352e3a3d807c
 2009-10-18T22:25:00.956502Z
 2930
@@ -746,7 +746,7 @@
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 a9ebd14814e0885fc096d0702745f30d
 2010-01-27T18:29:03.119133Z
 3340
@@ -774,13 +774,47 @@
 
 481
 
+member_role_exemplar.rb
+file
+
+
+
+
+2011-03-03T11:05:08.000000Z
+d1bdf1810c216ecde56d0750f78bea10
+2010-01-27T18:29:03.119133Z
+3340
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+250
+
 issue_exemplar.rb
 file
 
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 92ac53d6b3a2e00ae1a9e0e4bc5d548b
 2010-02-08T18:53:12.750770Z
 3398
@@ -808,16 +842,16 @@
 
 449
 
-member_role_exemplar.rb
+tracker_exemplar.rb
 file
 
 
 
 
-2010-09-23T14:37:45.291809Z
-d1bdf1810c216ecde56d0750f78bea10
-2010-01-27T18:29:03.119133Z
-3340
+2011-03-03T11:05:08.000000Z
+94aed9cd40bd95ab8d8c2f51bfc097cf
+2009-10-18T22:25:00.956502Z
+2930
 edavis10
 
 
@@ -840,7 +874,7 @@
 
 
 
-250
+179
 
 issue_status_exemplar.rb
 file
@@ -848,7 +882,7 @@
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 d17dfd87c9c081965089712a4ce42a6d
 2009-10-18T22:25:00.956502Z
 2930
@@ -876,14 +910,14 @@
 
 182
 
-tracker_exemplar.rb
+time_entry_activity.rb
 file
 
 
 
 
-2010-09-23T14:37:45.291809Z
-94aed9cd40bd95ab8d8c2f51bfc097cf
+2011-03-03T11:05:08.000000Z
+74f5207a054732dd9be1b3184340ca77
 2009-10-18T22:25:00.956502Z
 2930
 edavis10
@@ -908,7 +942,7 @@
 
 
 
-179
+236
 
 subversion_repository_exemplar.rb
 file
@@ -916,7 +950,7 @@
 
 
 
-2010-09-23T14:37:45.291809Z
+2011-03-03T11:05:08.000000Z
 908d8689f3ff469978b8af8bb55084b4
 2010-01-27T18:29:03.119133Z
 3340
@@ -944,14 +978,14 @@
 
 235
 
-time_entry_activity.rb
+role_exemplar.rb
 file
 
 
 
 
-2010-09-23T14:37:45.291809Z
-74f5207a054732dd9be1b3184340ca77
+2011-03-03T11:05:08.000000Z
+9c97ca570fa9b00ab1ecebd226f52f66
 2009-10-18T22:25:00.956502Z
 2930
 edavis10
@@ -976,7 +1010,7 @@
 
 
 
-236
+157
 
 changeset_exemplar.rb
 file
@@ -984,7 +1018,7 @@
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 c01820cc719616bb5a0895cfddb40798
 2010-01-27T18:29:03.119133Z
 3340
@@ -1012,47 +1046,13 @@
 
 377
 
-role_exemplar.rb
-file
-
-
-
-
-2010-09-23T14:37:45.291809Z
-9c97ca570fa9b00ab1ecebd226f52f66
-2009-10-18T22:25:00.956502Z
-2930
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-157
-
 comment_exemplar.rb
 file
 
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 27218d998d6798365d0cc47ae8d8bb87
 2010-01-28T19:05:21.831741Z
 3342
@@ -1086,7 +1086,7 @@
 
 
 
-2010-09-23T14:37:45.295820Z
+2011-03-03T11:05:08.000000Z
 0b05f7ce166d5bb3695d2fad7e56fc7f
 2010-01-27T18:29:03.119133Z
 3340
@@ -1120,7 +1120,7 @@
 
 
 
-2010-09-23T14:37:45.291809Z
+2011-03-03T11:05:08.000000Z
 2a6254ddbc381a97b49b17936c25ef78
 2010-01-28T19:05:21.831741Z
 3342
@@ -1154,7 +1154,7 @@
 
 
 
-2010-09-23T14:37:45.287807Z
+2011-03-03T11:05:08.000000Z
 d60529466c1df6db1edcdac71fa1a9d7
 2010-04-13T05:57:27.803435Z
 3670
@@ -1188,7 +1188,7 @@
 
 
 
-2010-11-19T13:04:41.365641Z
+2011-03-03T11:05:08.000000Z
 44278bb3b28eed2566aab063777becf7
 2010-09-28T18:22:10.512346Z
 4218
@@ -1222,7 +1222,7 @@
 
 
 
-2010-09-23T14:37:45.291809Z
+2011-03-03T11:05:08.000000Z
 0a69ac358346b15717ccb6b0cddba4be
 2010-01-27T18:29:03.119133Z
 3340
@@ -1256,7 +1256,7 @@
 
 
 
-2010-09-23T14:37:45.291809Z
+2011-03-03T11:05:08.000000Z
 19471f6afbec20925ddd6824c1290526
 2010-01-27T18:29:03.119133Z
 3340
--- a/test/fixtures/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,19 +1,19 @@
 K 25
 svn:wc:ra_dav:version-url
 V 38
-/svn/!svn/ver/4681/trunk/test/fixtures
+/svn/!svn/ver/4964/trunk/test/fixtures
 END
 journal_details.yml
 K 25
 svn:wc:ra_dav:version-url
 V 58
-/svn/!svn/ver/3123/trunk/test/fixtures/journal_details.yml
+/svn/!svn/ver/4954/trunk/test/fixtures/journal_details.yml
 END
 issue_statuses.yml
 K 25
 svn:wc:ra_dav:version-url
 V 57
-/svn/!svn/ver/2895/trunk/test/fixtures/issue_statuses.yml
+/svn/!svn/ver/4895/trunk/test/fixtures/issue_statuses.yml
 END
 changesets.yml
 K 25
@@ -199,7 +199,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 48
-/svn/!svn/ver/4216/trunk/test/fixtures/users.yml
+/svn/!svn/ver/4936/trunk/test/fixtures/users.yml
 END
 auth_sources.yml
 K 25
--- a/test/fixtures/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/fixtures
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-10T19:45:20.108166Z
-4681
-jplang
+2011-02-28T14:12:47.115180Z
+4964
+tmaruyama
 
 
 
@@ -35,10 +35,10 @@
 
 
 
-2010-09-23T14:37:45.327799Z
-7f7308fa24fe8015418b4bf81a265389
-2009-12-06T10:28:20.099964Z
-3123
+2011-03-03T11:40:18.000000Z
+c85ec633618360a62da10b17100bbf56
+2011-02-27T13:34:41.060565Z
+4954
 jplang
 has-props
 
@@ -61,7 +61,7 @@
 
 
 
-359
+547
 
 ldap
 dir
@@ -72,10 +72,10 @@
 
 
 
-2010-09-23T14:37:45.327799Z
-940bc0bea76bc76ba8ef1b224d744eee
-2009-09-20T14:06:57.257282Z
-2895
+2011-03-03T11:40:18.000000Z
+2d31c6b69ca13da5466d1600bae9a2fd
+2011-02-20T15:38:07.840581Z
+4895
 jplang
 has-props
 
@@ -98,7 +98,7 @@
 
 
 
-505
+589
 
 changesets.yml
 file
@@ -106,7 +106,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 d3a777560e5a963bc848b30547a65d4b
 2010-12-05T11:45:09.061840Z
 4470
@@ -140,7 +140,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 15f318dd68723b4c4dab1e1ca66dd044
 2011-01-06T20:36:31.826591Z
 4645
@@ -177,7 +177,7 @@
 
 
 
-2010-09-23T14:37:45.355763Z
+2011-03-03T11:05:09.000000Z
 a519d5e75a6d1ac1516064c882aa773c
 2009-09-20T14:06:57.257282Z
 2895
@@ -205,13 +205,47 @@
 
 165
 
+time_entries.yml
+file
+
+
+
+
+2011-03-03T11:05:09.000000Z
+5259028ece10055ea04cb1baddadd334
+2009-10-21T22:34:52.412718Z
+2950
+edavis10
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1074
+
 projects_trackers.yml
 file
 
 
 
 
-2010-09-23T14:37:45.343799Z
+2011-03-03T11:05:09.000000Z
 b7264b0f4d285dc38ba7139feaabafe2
 2008-12-29T12:40:56.716698Z
 2196
@@ -245,7 +279,7 @@
 
 
 
-2010-09-23T14:37:45.343799Z
+2011-03-03T11:05:09.000000Z
 e9853df4a04648bcb9389127748b24c4
 2009-09-20T14:06:57.257282Z
 2895
@@ -273,47 +307,13 @@
 
 428
 
-time_entries.yml
-file
-
-
-
-
-2010-09-23T14:37:45.351765Z
-5259028ece10055ea04cb1baddadd334
-2009-10-21T22:34:52.412718Z
-2950
-edavis10
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1074
-
 custom_values.yml
 file
 
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 342c09046e9942f00cced7e066066202
 2010-12-11T10:47:00.859736Z
 4488
@@ -347,7 +347,7 @@
 
 
 
-2010-09-23T14:37:45.343799Z
+2011-03-03T11:05:09.000000Z
 b72e570a19a6a6297fd0e78a0c15d9a6
 2009-09-20T14:06:57.257282Z
 2895
@@ -381,7 +381,7 @@
 
 
 
-2010-09-23T14:37:45.327799Z
+2011-03-03T11:05:09.000000Z
 e6b2256ffe56fa2baa64e474f5c920d6
 2009-09-20T14:06:57.257282Z
 2895
@@ -415,7 +415,7 @@
 
 
 
-2010-09-23T14:37:45.319762Z
+2011-03-03T11:05:09.000000Z
 7e42308ab41cac587386d54899cfcef5
 2009-09-20T14:06:57.257282Z
 2895
@@ -449,7 +449,7 @@
 
 
 
-2010-09-23T14:37:45.351765Z
+2011-03-03T11:05:09.000000Z
 ad513155b260eb8a8739d4d13c2823a8
 2009-12-19T13:32:21.556847Z
 3194
@@ -483,7 +483,7 @@
 
 
 
-2010-09-23T14:37:45.327799Z
+2011-03-03T11:05:09.000000Z
 1cdfea6614ecba6cddecb3d4524c38ba
 2009-12-26T16:14:55.591181Z
 3250
@@ -517,7 +517,7 @@
 
 
 
-2010-09-23T14:37:45.319762Z
+2011-03-03T11:05:09.000000Z
 159394b420966c9e2f5ab0e31cb93b41
 2009-11-27T20:32:28.228739Z
 3099
@@ -554,7 +554,7 @@
 
 
 
-2010-09-23T14:37:45.351765Z
+2011-03-03T11:05:09.000000Z
 e5a26332fd48dac7e33a963622f49994
 2009-09-20T14:06:57.257282Z
 2895
@@ -582,13 +582,16 @@
 
 293
 
+configuration
+dir
+
 changes.yml
 file
 
 
 
 
-2010-09-23T14:37:45.315821Z
+2011-03-03T11:05:09.000000Z
 909e55408711ba1774e1c071b162962f
 2009-09-20T14:06:57.257282Z
 2895
@@ -622,7 +625,7 @@
 
 
 
-2010-09-23T14:37:45.319762Z
+2011-03-03T11:05:09.000000Z
 c6789a99aba9f28cf1d31a36b36224c8
 2010-01-03T11:18:09.741250Z
 3278
@@ -656,7 +659,7 @@
 
 
 
-2010-09-23T14:37:45.323763Z
+2011-03-03T11:05:09.000000Z
 bafbddc194242dbdcac1f2bfc550c27b
 2010-03-13T14:56:49.379682Z
 3573
@@ -693,7 +696,7 @@
 
 
 
-2010-09-23T14:37:45.343799Z
+2011-03-03T11:05:09.000000Z
 86387d627355e1debc04c364c29efe81
 2009-12-26T16:14:55.591181Z
 3250
@@ -727,7 +730,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 a8c37ca171bb5f39ffbc6cd3ffcf0c52
 2010-12-10T11:06:21.419457Z
 4482
@@ -761,7 +764,7 @@
 
 
 
-2010-09-23T14:37:45.343799Z
+2011-03-03T11:05:09.000000Z
 b5bafc332d23c9efcc2ef648a9a393b9
 2009-11-16T18:07:30.910440Z
 3071
@@ -789,13 +792,47 @@
 
 2345
 
+wiki_contents.yml
+file
+
+
+
+
+2011-03-03T11:05:09.000000Z
+595d0f0964e3c3f8ce7edb4b07941ffa
+2011-01-10T19:45:20.108166Z
+4681
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1953
+
 watchers.yml
 file
 
 
 
 
-2010-09-23T14:37:45.351765Z
+2011-03-03T11:05:09.000000Z
 9dbcd982c4227d919ea750ce4fde79a7
 2009-02-12T17:35:57.542817Z
 2456
@@ -823,47 +860,13 @@
 
 219
 
-wiki_contents.yml
-file
-
-
-
-
-2011-01-13T14:09:10.000000Z
-595d0f0964e3c3f8ce7edb4b07941ffa
-2011-01-10T19:45:20.108166Z
-4681
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1953
-
 wiki_pages.yml
 file
 
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 8d80a417fe13f7041cdec04f3206169e
 2011-01-10T18:32:04.408692Z
 4680
@@ -897,7 +900,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 c1fe3d9f5bbcbf5cf73c684b744d0c7a
 2010-12-12T17:00:52.100205Z
 4505
@@ -931,7 +934,7 @@
 
 
 
-2010-09-23T14:37:45.315821Z
+2011-03-03T11:05:09.000000Z
 0cb04e10717d1de94f328dd92f2e9f8c
 2009-09-20T14:06:57.257282Z
 2895
@@ -965,7 +968,7 @@
 
 
 
-2010-09-23T14:37:45.351765Z
+2011-03-03T11:05:09.000000Z
 fcf009196cf46bc9d64e947e8275e51f
 2009-09-20T14:06:57.257282Z
 2895
@@ -1002,7 +1005,7 @@
 
 
 
-2010-09-23T14:37:45.343799Z
+2011-03-03T11:05:09.000000Z
 a12098ae3dcc7df2fffdc5aabc036445
 2009-12-26T16:14:55.591181Z
 3250
@@ -1039,7 +1042,7 @@
 
 
 
-2010-09-23T14:37:45.327799Z
+2011-03-03T11:05:09.000000Z
 0f791723030addfd84aeb8e8478b4373
 2009-12-06T10:28:20.099964Z
 3123
@@ -1073,7 +1076,7 @@
 
 
 
-2010-09-23T14:37:45.355763Z
+2011-03-03T11:05:09.000000Z
 be9ed58ec8ae1a4d2e1608c712c480be
 2009-09-20T14:06:57.257282Z
 2895
@@ -1107,7 +1110,7 @@
 
 
 
-2010-09-23T14:37:45.319762Z
+2011-03-03T11:05:09.000000Z
 28c83450d87eb6a49fe3d920f05e16b7
 2010-01-14T20:00:17.463579Z
 3313
@@ -1141,11 +1144,11 @@
 
 
 
-2010-11-19T13:04:46.864726Z
-f590d477ec468a76d8d31d5ed99de0e6
-2010-09-28T18:22:00.231301Z
-4216
-edavis10
+2011-03-03T11:40:18.000000Z
+4bc8168f868eb01690365ddcb82e8841
+2011-02-23T17:27:31.762248Z
+4936
+jplang
 has-props
 
 
@@ -1167,7 +1170,7 @@
 
 
 
-3294
+3500
 
 auth_sources.yml
 file
@@ -1175,7 +1178,7 @@
 
 
 
-2010-09-23T14:37:45.315821Z
+2011-03-03T11:05:09.000000Z
 f299e9e4f8b4310d276f3cc0bd4573a2
 2010-02-26T08:42:40.283735Z
 3490
@@ -1209,7 +1212,7 @@
 
 
 
-2010-09-23T14:37:45.343799Z
+2011-03-03T11:05:09.000000Z
 f41152c0bbe67b30733fb44c847c0c28
 2009-12-13T12:39:22.716082Z
 3167
@@ -1243,7 +1246,7 @@
 
 
 
-2010-09-23T14:37:45.327799Z
+2011-03-03T11:05:09.000000Z
 14b2db45f35ee3e6f8c2a8a05b94c82b
 2009-11-07T08:44:56.035544Z
 3013
@@ -1277,7 +1280,7 @@
 
 
 
-2010-09-23T14:37:45.351765Z
+2011-03-03T11:05:09.000000Z
 0670d0dee081a5f922aa2d3ff7af9764
 2009-12-06T10:28:20.099964Z
 3123
@@ -1311,7 +1314,7 @@
 
 
 
-2010-09-23T14:37:45.315821Z
+2011-03-03T11:05:09.000000Z
 c3c2ab815b9af7fb01ccafc5fc881f87
 2009-10-25T11:23:46.266302Z
 2976
@@ -1345,7 +1348,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 c91798950ab5d71a04f10a60ad9e5259
 2011-01-01T13:40:36.520874Z
 4604
@@ -1379,7 +1382,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 3106fd060b768ea17e35b5ea975e0aca
 2010-12-12T17:00:52.100205Z
 4505
@@ -1413,7 +1416,7 @@
 
 
 
-2010-09-23T14:37:45.351765Z
+2011-03-03T11:05:09.000000Z
 644bd85c22127195b9f31217cce0595e
 2009-09-20T14:06:57.257282Z
 2895
--- a/test/fixtures/.svn/text-base/issue_statuses.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/.svn/text-base/issue_statuses.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,31 +1,37 @@
 --- 
+issue_statuses_001: 
+  id: 1
+  name: New
+  is_default: true
+  is_closed: false
+  position: 1
+issue_statuses_002: 
+  id: 2
+  name: Assigned
+  is_default: false
+  is_closed: false
+  position: 2
+issue_statuses_003: 
+  id: 3
+  name: Resolved
+  is_default: false
+  is_closed: false
+  position: 3
+issue_statuses_004: 
+  name: Feedback
+  id: 4
+  is_default: false
+  is_closed: false
+  position: 4
+issue_statuses_005: 
+  id: 5
+  name: Closed
+  is_default: false
+  is_closed: true
+  position: 5
 issue_statuses_006: 
+  id: 6
   name: Rejected
   is_default: false
   is_closed: true
-  id: 6
-issue_statuses_001: 
-  name: New
-  is_default: true
-  is_closed: false
-  id: 1
-issue_statuses_002: 
-  name: Assigned
-  is_default: false
-  is_closed: false
-  id: 2
-issue_statuses_003: 
-  name: Resolved
-  is_default: false
-  is_closed: false
-  id: 3
-issue_statuses_004: 
-  name: Feedback
-  is_default: false
-  is_closed: false
-  id: 4
-issue_statuses_005: 
-  name: Closed
-  is_default: false
-  is_closed: true
-  id: 5
+  position: 6
--- a/test/fixtures/.svn/text-base/journal_details.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/.svn/text-base/journal_details.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -20,3 +20,10 @@
   value: "6"
   prop_key: fixed_version_id
   journal_id: 4
+journal_details_004:
+  old_value: "This word was removed and an other was"
+  property: attr
+  id: 4
+  value: "This word was and an other was added"
+  prop_key: description
+  journal_id: 3
--- a/test/fixtures/.svn/text-base/users.yml.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/.svn/text-base/users.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -4,7 +4,9 @@
   status: 1
   last_login_on: 
   language: en
-  hashed_password: 4e4aeb7baaf0706bd670263fef42dad15763b608
+  # password = foo
+  salt: 3126f764c3c5ac61cbfc103f25f934cf
+  hashed_password: 9e4dd7eeb172c12a0691a6d9d3a269f7e9fe671b
   updated_on: 2006-07-19 19:34:07 +02:00
   admin: false
   mail: rhill@somenet.foo
@@ -20,7 +22,9 @@
   status: 1
   last_login_on: 2006-07-19 22:57:52 +02:00
   language: en
-  hashed_password: d033e22ae348aeb5660fc2140aec35850c4da997
+  # password = admin
+  salt: 82090c953c4a0000a7db253b0691a6b4
+  hashed_password: b5b6ff9543bf1387374cdfa27a54c96d236a7150
   updated_on: 2006-07-19 22:57:52 +02:00
   admin: true
   mail: admin@somenet.foo
@@ -36,7 +40,9 @@
   status: 1
   last_login_on: 2006-07-19 22:42:15 +02:00
   language: en
-  hashed_password: a9a653d4151fa2c081ba1ffc2c2726f3b80b7d7d
+  # password = jsmith
+  salt: 67eb4732624d5a7753dcea7ce0bb7d7d
+  hashed_password: bfbe06043353a677d0215b26a5800d128d5413bc
   updated_on: 2006-07-19 22:42:15 +02:00
   admin: false
   mail: jsmith@somenet.foo
@@ -52,7 +58,9 @@
   status: 1
   last_login_on: 
   language: en
-  hashed_password: 7feb7657aa7a7bf5aef3414a5084875f27192415
+  # password = foo
+  salt: 7599f9963ec07b5a3b55b354407120c0
+  hashed_password: 8f659c8d7c072f189374edacfa90d6abbc26d8ed
   updated_on: 2006-07-19 19:33:19 +02:00
   admin: false
   mail: dlopper@somenet.foo
@@ -70,7 +78,7 @@
   status: 3
   last_login_on: 
   language: en
-  hashed_password: 7feb7657aa7a7bf5aef3414a5084875f27192415
+  hashed_password: 1
   updated_on: 2006-07-19 19:33:19 +02:00
   admin: false
   mail: dlopper2@somenet.foo
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/configuration/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,29 @@
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svn/!svn/ver/4752/trunk/test/fixtures/configuration
+END
+no_default.yml
+K 25
+svn:wc:ra_dav:version-url
+V 67
+/svn/!svn/ver/4752/trunk/test/fixtures/configuration/no_default.yml
+END
+overrides.yml
+K 25
+svn:wc:ra_dav:version-url
+V 66
+/svn/!svn/ver/4752/trunk/test/fixtures/configuration/overrides.yml
+END
+default.yml
+K 25
+svn:wc:ra_dav:version-url
+V 64
+/svn/!svn/ver/4752/trunk/test/fixtures/configuration/default.yml
+END
+empty.yml
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/4752/trunk/test/fixtures/configuration/empty.yml
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/configuration/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,164 @@
+10
+
+dir
+4993
+http://redmine.rubyforge.org/svn/trunk/test/fixtures/configuration
+http://redmine.rubyforge.org/svn
+
+
+
+2011-01-23T10:22:00.456857Z
+4752
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+no_default.yml
+file
+
+
+
+
+2011-03-03T11:05:09.000000Z
+3c3b944decf7592dd335fc1d536985e7
+2011-01-23T10:22:00.456857Z
+4752
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+64
+
+overrides.yml
+file
+
+
+
+
+2011-03-03T11:05:09.000000Z
+0b2286bdf8e49e063fb511553d63d73b
+2011-01-23T10:22:00.456857Z
+4752
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+83
+
+default.yml
+file
+
+
+
+
+2011-03-03T11:05:09.000000Z
+8f9245a8cde919ad5693021c5eb8e67e
+2011-01-23T10:22:00.456857Z
+4752
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+64
+
+empty.yml
+file
+
+
+
+
+2011-03-03T11:05:09.000000Z
+f807b10f3b740dafc7ebfd848048a587
+2011-01-23T10:22:00.456857Z
+4752
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+43
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/configuration/.svn/prop-base/default.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/configuration/.svn/prop-base/empty.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/configuration/.svn/prop-base/no_default.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/configuration/.svn/prop-base/overrides.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/configuration/.svn/text-base/default.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,8 @@
+default:
+  somesetting: foo
+  
+production:
+
+development:
+
+test:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/configuration/.svn/text-base/empty.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,7 @@
+default:
+
+production:
+
+development:
+
+test:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/configuration/.svn/text-base/no_default.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,8 @@
+default:
+  
+production:
+
+development:
+
+test:
+  somesetting: foo
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/configuration/.svn/text-base/overrides.yml.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,9 @@
+default:
+  somesetting: foo
+  
+production:
+
+development:
+
+test:
+  somesetting: bar
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/configuration/default.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,8 @@
+default:
+  somesetting: foo
+  
+production:
+
+development:
+
+test:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/configuration/empty.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,7 @@
+default:
+
+production:
+
+development:
+
+test:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/configuration/no_default.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,8 @@
+default:
+  
+production:
+
+development:
+
+test:
+  somesetting: foo
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/configuration/overrides.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,9 @@
+default:
+  somesetting: foo
+  
+production:
+
+development:
+
+test:
+  somesetting: bar
--- a/test/fixtures/diffs/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/diffs/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/test/fixtures/diffs
+4993
+http://redmine.rubyforge.org/svn/trunk/test/fixtures/diffs
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:09.000000Z
 64527b211202fbff696792d538e2b14e
 2008-12-07T15:21:40.165860Z
 2112
--- a/test/fixtures/encoding/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/encoding/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/test/fixtures/encoding
+4993
+http://redmine.rubyforge.org/svn/trunk/test/fixtures/encoding
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:09.000000Z
 eee83cf374737071543358b83f85f75b
 2010-02-20T11:24:41.988635Z
 3466
--- a/test/fixtures/files/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/files/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/fixtures/files
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 8ab69915b7f66c8199e6d137073d9ffe
 2011-01-01T13:40:36.520874Z
 4604
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 69b7e1bc8546406b1ddc3719d879254c
 2011-01-01T13:40:36.520874Z
 4604
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:45.323763Z
+2011-03-03T11:05:09.000000Z
 8b4167c6b87869174dd17db0694ef2e1
 2008-06-09T18:40:59.518583Z
 1520
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:45.323763Z
+2011-03-03T11:05:09.000000Z
 c72c8a9a0de99c39f9e6d712c13b7624
 2008-06-09T18:40:59.518583Z
 1520
@@ -168,7 +168,7 @@
 
 
 
-2010-09-23T14:37:45.323763Z
+2011-03-03T11:05:09.000000Z
 1478adae0d4eb06d35897518540e25d6
 2008-12-02T17:57:13.240321Z
 2085
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/files/.svn/prop-base/060719210727_changeset_iso8859-1.diff.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/files/.svn/text-base/060719210727_changeset_iso8859-1.diff.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,13 @@
+Index: trunk/app/controllers/issues_controller.rb
+===================================================================
+--- trunk/app/controllers/issues_controller.rb	(révision 1483)
++++ trunk/app/controllers/issues_controller.rb	(révision 1484)
+@@ -149,7 +149,7 @@
+         attach_files(@issue, params[:attachments])
+         flash[:notice] = 'Demande créée avec succès'
+         Mailer.deliver_issue_add(@issue) if Setting.notified_events.include?('issue_added')
+-        redirect_to :controller => 'issues', :action => 'show', :id => @issue,  :project_id => @project
++        redirect_to :controller => 'issues', :action => 'show', :id => @issue
+         return
+       end		
+     end	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/files/.svn/text-base/060719210727_changeset_utf8.diff.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,13 @@
+Index: trunk/app/controllers/issues_controller.rb
+===================================================================
+--- trunk/app/controllers/issues_controller.rb	(révision 1483)
++++ trunk/app/controllers/issues_controller.rb	(révision 1484)
+@@ -149,7 +149,7 @@
+         attach_files(@issue, params[:attachments])
+         flash[:notice] = 'Demande créée avec succès'
+         Mailer.deliver_issue_add(@issue) if Setting.notified_events.include?('issue_added')
+-        redirect_to :controller => 'issues', :action => 'show', :id => @issue,  :project_id => @project
++        redirect_to :controller => 'issues', :action => 'show', :id => @issue
+         return
+       end		
+     end	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/files/060719210727_changeset_iso8859-1.diff	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,13 @@
+Index: trunk/app/controllers/issues_controller.rb
+===================================================================
+--- trunk/app/controllers/issues_controller.rb	(révision 1483)
++++ trunk/app/controllers/issues_controller.rb	(révision 1484)
+@@ -149,7 +149,7 @@
+         attach_files(@issue, params[:attachments])
+         flash[:notice] = 'Demande créée avec succès'
+         Mailer.deliver_issue_add(@issue) if Setting.notified_events.include?('issue_added')
+-        redirect_to :controller => 'issues', :action => 'show', :id => @issue,  :project_id => @project
++        redirect_to :controller => 'issues', :action => 'show', :id => @issue
+         return
+       end		
+     end	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fixtures/files/060719210727_changeset_utf8.diff	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,13 @@
+Index: trunk/app/controllers/issues_controller.rb
+===================================================================
+--- trunk/app/controllers/issues_controller.rb	(révision 1483)
++++ trunk/app/controllers/issues_controller.rb	(révision 1484)
+@@ -149,7 +149,7 @@
+         attach_files(@issue, params[:attachments])
+         flash[:notice] = 'Demande créée avec succès'
+         Mailer.deliver_issue_add(@issue) if Setting.notified_events.include?('issue_added')
+-        redirect_to :controller => 'issues', :action => 'show', :id => @issue,  :project_id => @project
++        redirect_to :controller => 'issues', :action => 'show', :id => @issue
+         return
+       end		
+     end	
--- a/test/fixtures/issue_statuses.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/issue_statuses.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -1,31 +1,37 @@
 --- 
+issue_statuses_001: 
+  id: 1
+  name: New
+  is_default: true
+  is_closed: false
+  position: 1
+issue_statuses_002: 
+  id: 2
+  name: Assigned
+  is_default: false
+  is_closed: false
+  position: 2
+issue_statuses_003: 
+  id: 3
+  name: Resolved
+  is_default: false
+  is_closed: false
+  position: 3
+issue_statuses_004: 
+  name: Feedback
+  id: 4
+  is_default: false
+  is_closed: false
+  position: 4
+issue_statuses_005: 
+  id: 5
+  name: Closed
+  is_default: false
+  is_closed: true
+  position: 5
 issue_statuses_006: 
+  id: 6
   name: Rejected
   is_default: false
   is_closed: true
-  id: 6
-issue_statuses_001: 
-  name: New
-  is_default: true
-  is_closed: false
-  id: 1
-issue_statuses_002: 
-  name: Assigned
-  is_default: false
-  is_closed: false
-  id: 2
-issue_statuses_003: 
-  name: Resolved
-  is_default: false
-  is_closed: false
-  id: 3
-issue_statuses_004: 
-  name: Feedback
-  is_default: false
-  is_closed: false
-  id: 4
-issue_statuses_005: 
-  name: Closed
-  is_default: false
-  is_closed: true
-  id: 5
+  position: 6
--- a/test/fixtures/journal_details.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/journal_details.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -20,3 +20,10 @@
   value: "6"
   prop_key: fixed_version_id
   journal_id: 4
+journal_details_004:
+  old_value: "This word was removed and an other was"
+  property: attr
+  id: 4
+  value: "This word was and an other was added"
+  prop_key: description
+  journal_id: 3
--- a/test/fixtures/ldap/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/ldap/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/test/fixtures/ldap
+4993
+http://redmine.rubyforge.org/svn/trunk/test/fixtures/ldap
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:09.000000Z
 acbef41cb6cf252c83489cc3344e2604
 2010-02-26T08:31:36.418866Z
 3489
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:25.000000Z
+2011-03-03T11:05:09.000000Z
 f1b10e6d96dd658e563d4ba74d52e87b
 2010-02-26T08:31:36.418866Z
 3489
--- a/test/fixtures/mail_handler/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/mail_handler/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -3,36 +3,36 @@
 V 51
 /svn/!svn/ver/4575/trunk/test/fixtures/mail_handler
 END
+ticket_html_only.eml
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/2136/trunk/test/fixtures/mail_handler/ticket_html_only.eml
+END
 message_reply_by_subject.eml
 K 25
 svn:wc:ra_dav:version-url
 V 80
 /svn/!svn/ver/2294/trunk/test/fixtures/mail_handler/message_reply_by_subject.eml
 END
-ticket_html_only.eml
-K 25
-svn:wc:ra_dav:version-url
-V 72
-/svn/!svn/ver/2136/trunk/test/fixtures/mail_handler/ticket_html_only.eml
-END
 issue_update_with_multiple_quoted_reply_above.eml
 K 25
 svn:wc:ra_dav:version-url
 V 101
 /svn/!svn/ver/4361/trunk/test/fixtures/mail_handler/issue_update_with_multiple_quoted_reply_above.eml
 END
+ticket_with_localized_attributes.eml
+K 25
+svn:wc:ra_dav:version-url
+V 88
+/svn/!svn/ver/4395/trunk/test/fixtures/mail_handler/ticket_with_localized_attributes.eml
+END
 ticket_with_spaces_between_attribute_and_separator.eml
 K 25
 svn:wc:ra_dav:version-url
 V 106
 /svn/!svn/ver/2838/trunk/test/fixtures/mail_handler/ticket_with_spaces_between_attribute_and_separator.eml
 END
-ticket_with_localized_attributes.eml
-K 25
-svn:wc:ra_dav:version-url
-V 88
-/svn/!svn/ver/4395/trunk/test/fixtures/mail_handler/ticket_with_localized_attributes.eml
-END
 ticket_with_long_subject.eml
 K 25
 svn:wc:ra_dav:version-url
@@ -105,18 +105,18 @@
 V 92
 /svn/!svn/ver/4361/trunk/test/fixtures/mail_handler/issue_update_with_quoted_reply_above.eml
 END
+ticket_with_custom_fields.eml
+K 25
+svn:wc:ra_dav:version-url
+V 81
+/svn/!svn/ver/2211/trunk/test/fixtures/mail_handler/ticket_with_custom_fields.eml
+END
 ticket_reply.eml
 K 25
 svn:wc:ra_dav:version-url
 V 68
 /svn/!svn/ver/2288/trunk/test/fixtures/mail_handler/ticket_reply.eml
 END
-ticket_with_custom_fields.eml
-K 25
-svn:wc:ra_dav:version-url
-V 81
-/svn/!svn/ver/2211/trunk/test/fixtures/mail_handler/ticket_with_custom_fields.eml
-END
 message_reply.eml
 K 25
 svn:wc:ra_dav:version-url
--- a/test/fixtures/mail_handler/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/mail_handler/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/fixtures/mail_handler
 http://redmine.rubyforge.org/svn
 
@@ -26,47 +26,13 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
-issue_update_with_multiple_quoted_reply_above.eml
-file
-
-
-
-
-2010-11-19T13:04:46.204713Z
-ef4c0db9f76d81792292785d2ae9cb6a
-2010-11-02T19:00:31.177706Z
-4361
-edavis10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2018
-
 ticket_html_only.eml
 file
 
 
 
 
-2010-09-23T14:37:45.339796Z
+2011-03-03T11:05:09.000000Z
 5e24af78a4534798611158a3d81efb34
 2008-12-14T17:10:16.292262Z
 2136
@@ -100,7 +66,7 @@
 
 
 
-2010-09-23T14:37:45.339796Z
+2011-03-03T11:05:09.000000Z
 09130a1100cb410ed07fdff5564b2993
 2009-01-21T18:22:30.765588Z
 2294
@@ -128,13 +94,47 @@
 
 410
 
+issue_update_with_multiple_quoted_reply_above.eml
+file
+
+
+
+
+2011-03-03T11:05:09.000000Z
+ef4c0db9f76d81792292785d2ae9cb6a
+2010-11-02T19:00:31.177706Z
+4361
+edavis10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2018
+
 ticket_with_localized_attributes.eml
 file
 
 
 
 
-2010-11-19T13:04:46.204713Z
+2011-03-03T11:05:09.000000Z
 8ac895d880e6f19fc21333c4003babaf
 2010-11-12T12:29:35.878777Z
 4395
@@ -168,7 +168,7 @@
 
 
 
-2010-09-23T14:37:45.339796Z
+2011-03-03T11:05:09.000000Z
 4fbec91f5454b84077ae1290fba0bc8e
 2009-08-13T16:57:36.259313Z
 2838
@@ -202,7 +202,7 @@
 
 
 
-2010-09-23T14:37:45.339796Z
+2011-03-03T11:05:09.000000Z
 ed7adca07ce64c4d15f3e638a222e38d
 2010-06-20T16:22:36.211973Z
 3801
@@ -236,7 +236,7 @@
 
 
 
-2010-09-23T14:37:45.339796Z
+2011-03-03T11:05:09.000000Z
 0c3b0545575d405416f585f8d5910bcb
 2009-11-08T13:51:53.384956Z
 3022
@@ -270,7 +270,7 @@
 
 
 
-2010-09-23T14:37:45.339796Z
+2011-03-03T11:05:09.000000Z
 40927905de0187dc52a9adb3e4a2c252
 2008-11-30T16:00:45.142894Z
 2077
@@ -304,7 +304,7 @@
 
 
 
-2010-09-23T14:37:45.339796Z
+2011-03-03T11:05:09.000000Z
 d276c2037b0bf277b66f921379695c35
 2008-07-06T16:26:25.352975Z
 1643
@@ -338,7 +338,7 @@
 
 
 
-2010-09-23T14:37:45.335799Z
+2011-03-03T11:05:09.000000Z
 1fc46fd2b0b8dcdaf67dfde24d0e8b89
 2010-01-17T11:00:54.196987Z
 3322
@@ -372,7 +372,7 @@
 
 
 
-2010-09-23T14:37:45.339796Z
+2011-03-03T11:05:09.000000Z
 4d85674ea94930e7f1c8e288f03a57b8
 2008-06-22T10:45:03.753412Z
 1568
@@ -406,7 +406,7 @@
 
 
 
-2010-09-23T14:37:45.339796Z
+2011-03-03T11:05:09.000000Z
 9dbf54ce4376f62447ef0696fe9b3a79
 2010-06-19T19:24:17.380627Z
 3783
@@ -434,13 +434,47 @@
 
 485
 
+ticket_by_unknown_user.eml
+file
+
+
+
+
+2011-03-03T11:05:09.000000Z
+0979c01baf02b924bd8a6db3980c59c9
+2009-06-14T14:48:34.287541Z
+2789
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+526
+
 ticket_with_invalid_attributes.eml
 file
 
 
 
 
-2010-11-19T13:04:46.204713Z
+2011-03-03T11:05:09.000000Z
 605f28e31469b6897f33cf34bbc1ad0a
 2010-11-14T13:48:01.671461Z
 4404
@@ -468,47 +502,13 @@
 
 2028
 
-ticket_by_unknown_user.eml
-file
-
-
-
-
-2010-09-23T14:37:45.339796Z
-0979c01baf02b924bd8a6db3980c59c9
-2009-06-14T14:48:34.287541Z
-2789
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-526
-
 ticket_reply_with_status.eml
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:09.000000Z
 f1b76e664d73fd54d9e346c2329d94a9
 2010-12-29T17:36:01.998670Z
 4575
@@ -542,7 +542,7 @@
 
 
 
-2010-11-19T13:04:46.204713Z
+2011-03-03T11:05:09.000000Z
 af7f3e5f9caddc2cad5fba0ba9d73882
 2010-11-12T11:34:53.754717Z
 4394
@@ -576,7 +576,7 @@
 
 
 
-2010-11-19T13:04:46.204713Z
+2011-03-03T11:05:09.000000Z
 977375e727ce2d63ce878f877d692c62
 2010-11-02T19:00:31.177706Z
 4361
@@ -604,47 +604,13 @@
 
 1979
 
-ticket_reply.eml
-file
-
-
-
-
-2010-09-23T14:37:45.339796Z
-4bd4decc00f83404fdd1a835809e4552
-2009-01-19T18:29:07.726757Z
-2288
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2012
-
 ticket_with_custom_fields.eml
 file
 
 
 
 
-2010-09-23T14:37:45.339796Z
+2011-03-03T11:05:09.000000Z
 4ef77e6337f95c7a8362c4a51c09d0af
 2008-12-30T14:57:33.008940Z
 2211
@@ -672,13 +638,47 @@
 
 1887
 
+ticket_reply.eml
+file
+
+
+
+
+2011-03-03T11:05:09.000000Z
+4bd4decc00f83404fdd1a835809e4552
+2009-01-19T18:29:07.726757Z
+2288
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2012
+
 message_reply.eml
 file
 
 
 
 
-2010-09-23T14:37:45.339796Z
+2011-03-03T11:05:09.000000Z
 c174d0c5bbb339ef9361c45aab58b2bb
 2009-01-19T19:03:53.393843Z
 2289
@@ -712,7 +712,7 @@
 
 
 
-2010-09-23T14:37:45.343799Z
+2011-03-03T11:05:09.000000Z
 7bc2d83ee5c078a264dd66ec75f35c77
 2009-03-06T18:25:19.434505Z
 2553
--- a/test/fixtures/mailer/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/mailer/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/test/fixtures/mailer
+4993
+http://redmine.rubyforge.org/svn/trunk/test/fixtures/mailer
 http://redmine.rubyforge.org/svn
 
 
--- a/test/fixtures/repositories/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/repositories/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 51
-/svn/!svn/ver/4676/trunk/test/fixtures/repositories
+/svn/!svn/ver/4964/trunk/test/fixtures/repositories
 END
 darcs_repository.tar.gz
 K 25
@@ -31,7 +31,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 73
-/svn/!svn/ver/4310/trunk/test/fixtures/repositories/git_repository.tar.gz
+/svn/!svn/ver/4964/trunk/test/fixtures/repositories/git_repository.tar.gz
 END
 filesystem_repository.tar.gz
 K 25
--- a/test/fixtures/repositories/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/repositories/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/fixtures/repositories
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-10T17:43:01.353336Z
-4676
-jplang
+2011-02-28T14:12:47.115180Z
+4964
+tmaruyama
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:45.351765Z
+2011-03-03T11:05:09.000000Z
 0553391b55404e8ff509358b388f085b
 2008-03-12T20:28:49.748698Z
 1236
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:09:10.000000Z
+2011-03-03T11:05:09.000000Z
 2436fc3d3aefeb07b291d5660396ca8d
 2011-01-10T17:43:01.353336Z
 4676
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:45.351765Z
+2011-03-03T11:05:09.000000Z
 bd13c11517bf083e83846aeccff745f1
 2010-06-20T16:08:26.745839Z
 3800
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:45.347765Z
+2011-03-03T11:05:09.000000Z
 fa70d4aeca5639d750d94281ad664957
 2007-12-03T19:19:36.156779Z
 951
@@ -168,11 +168,11 @@
 
 
 
-2010-11-19T13:04:46.860726Z
-300e21b10239e2fa28df3111924b8328
-2010-10-29T23:21:57.240368Z
-4310
-jbbarth
+2011-03-03T11:40:18.000000Z
+a520f027eaf4a4548dfbc85e8d7e71c5
+2011-02-28T14:12:47.115180Z
+4964
+tmaruyama
 has-props
 
 
@@ -194,7 +194,7 @@
 
 
 
-20730
+15432
 
 filesystem_repository.tar.gz
 file
@@ -202,7 +202,7 @@
 
 
 
-2010-09-23T14:37:45.351765Z
+2011-03-03T11:05:09.000000Z
 9fbee7c5669de84f0767597eb41af9f7
 2008-06-08T15:40:24.603157Z
 1508
@@ -236,7 +236,7 @@
 
 
 
-2010-09-23T14:37:45.351765Z
+2011-03-03T11:05:09.000000Z
 0c4730bd5eb192e094531f218b7a3119
 2007-12-13T18:52:09.073829Z
 987
Binary file test/fixtures/repositories/.svn/text-base/git_repository.tar.gz.svn-base has changed
Binary file test/fixtures/repositories/git_repository.tar.gz has changed
--- a/test/fixtures/users.yml	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/fixtures/users.yml	Thu Mar 03 12:02:03 2011 +0000
@@ -4,7 +4,9 @@
   status: 1
   last_login_on: 
   language: en
-  hashed_password: 4e4aeb7baaf0706bd670263fef42dad15763b608
+  # password = foo
+  salt: 3126f764c3c5ac61cbfc103f25f934cf
+  hashed_password: 9e4dd7eeb172c12a0691a6d9d3a269f7e9fe671b
   updated_on: 2006-07-19 19:34:07 +02:00
   admin: false
   mail: rhill@somenet.foo
@@ -20,7 +22,9 @@
   status: 1
   last_login_on: 2006-07-19 22:57:52 +02:00
   language: en
-  hashed_password: d033e22ae348aeb5660fc2140aec35850c4da997
+  # password = admin
+  salt: 82090c953c4a0000a7db253b0691a6b4
+  hashed_password: b5b6ff9543bf1387374cdfa27a54c96d236a7150
   updated_on: 2006-07-19 22:57:52 +02:00
   admin: true
   mail: admin@somenet.foo
@@ -36,7 +40,9 @@
   status: 1
   last_login_on: 2006-07-19 22:42:15 +02:00
   language: en
-  hashed_password: a9a653d4151fa2c081ba1ffc2c2726f3b80b7d7d
+  # password = jsmith
+  salt: 67eb4732624d5a7753dcea7ce0bb7d7d
+  hashed_password: bfbe06043353a677d0215b26a5800d128d5413bc
   updated_on: 2006-07-19 22:42:15 +02:00
   admin: false
   mail: jsmith@somenet.foo
@@ -52,7 +58,9 @@
   status: 1
   last_login_on: 
   language: en
-  hashed_password: 7feb7657aa7a7bf5aef3414a5084875f27192415
+  # password = foo
+  salt: 7599f9963ec07b5a3b55b354407120c0
+  hashed_password: 8f659c8d7c072f189374edacfa90d6abbc26d8ed
   updated_on: 2006-07-19 19:33:19 +02:00
   admin: false
   mail: dlopper@somenet.foo
@@ -70,7 +78,7 @@
   status: 3
   last_login_on: 
   language: en
-  hashed_password: 7feb7657aa7a7bf5aef3414a5084875f27192415
+  hashed_password: 1
   updated_on: 2006-07-19 19:33:19 +02:00
   admin: false
   mail: dlopper2@somenet.foo
--- a/test/functional/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 40
-/svn/!svn/ver/4729/trunk/test/functional
+/svn/!svn/ver/4982/trunk/test/functional
 END
 issues_controller_test.rb
 K 25
@@ -69,18 +69,18 @@
 V 65
 /svn/!svn/ver/4509/trunk/test/functional/admin_controller_test.rb
 END
-welcome_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 67
-/svn/!svn/ver/4509/trunk/test/functional/welcome_controller_test.rb
-END
 context_menus_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 73
 /svn/!svn/ver/4673/trunk/test/functional/context_menus_controller_test.rb
 END
+welcome_controller_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 67
+/svn/!svn/ver/4900/trunk/test/functional/welcome_controller_test.rb
+END
 account_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -93,6 +93,12 @@
 V 69
 /svn/!svn/ver/4509/trunk/test/functional/calendars_controller_test.rb
 END
+journals_controller_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/4954/trunk/test/functional/journals_controller_test.rb
+END
 time_entry_reports_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -103,13 +109,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 69
-/svn/!svn/ver/4509/trunk/test/functional/workflows_controller_test.rb
-END
-journals_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4535/trunk/test/functional/journals_controller_test.rb
+/svn/!svn/ver/4895/trunk/test/functional/workflows_controller_test.rb
 END
 project_enumerations_controller_test.rb
 K 25
@@ -139,7 +139,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 76
-/svn/!svn/ver/4577/trunk/test/functional/repositories_cvs_controller_test.rb
+/svn/!svn/ver/4982/trunk/test/functional/repositories_cvs_controller_test.rb
 END
 application_controller_test.rb
 K 25
@@ -165,18 +165,18 @@
 V 66
 /svn/!svn/ver/4509/trunk/test/functional/search_controller_test.rb
 END
-repositories_bazaar_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 79
-/svn/!svn/ver/4509/trunk/test/functional/repositories_bazaar_controller_test.rb
-END
 messages_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 68
 /svn/!svn/ver/4509/trunk/test/functional/messages_controller_test.rb
 END
+repositories_bazaar_controller_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4982/trunk/test/functional/repositories_bazaar_controller_test.rb
+END
 attachments_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -225,23 +225,23 @@
 V 68
 /svn/!svn/ver/4647/trunk/test/functional/projects_controller_test.rb
 END
-repositories_git_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 76
-/svn/!svn/ver/4713/trunk/test/functional/repositories_git_controller_test.rb
-END
 members_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 67
 /svn/!svn/ver/4509/trunk/test/functional/members_controller_test.rb
 END
+repositories_git_controller_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svn/!svn/ver/4734/trunk/test/functional/repositories_git_controller_test.rb
+END
 repositories_mercurial_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 82
-/svn/!svn/ver/4718/trunk/test/functional/repositories_mercurial_controller_test.rb
+/svn/!svn/ver/4855/trunk/test/functional/repositories_mercurial_controller_test.rb
 END
 issue_categories_controller_test.rb
 K 25
@@ -289,7 +289,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 78
-/svn/!svn/ver/4509/trunk/test/functional/repositories_darcs_controller_test.rb
+/svn/!svn/ver/4982/trunk/test/functional/repositories_darcs_controller_test.rb
 END
 wiki_controller_test.rb
 K 25
@@ -297,29 +297,29 @@
 V 64
 /svn/!svn/ver/4509/trunk/test/functional/wiki_controller_test.rb
 END
+previews_controller_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/4509/trunk/test/functional/previews_controller_test.rb
+END
 auth_sources_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 72
 /svn/!svn/ver/4509/trunk/test/functional/auth_sources_controller_test.rb
 END
-previews_controller_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 68
-/svn/!svn/ver/4509/trunk/test/functional/previews_controller_test.rb
-END
 repositories_subversion_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 83
-/svn/!svn/ver/4710/trunk/test/functional/repositories_subversion_controller_test.rb
+/svn/!svn/ver/4896/trunk/test/functional/repositories_subversion_controller_test.rb
 END
 issue_relations_controller_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 75
-/svn/!svn/ver/4509/trunk/test/functional/issue_relations_controller_test.rb
+/svn/!svn/ver/4764/trunk/test/functional/issue_relations_controller_test.rb
 END
 versions_controller_test.rb
 K 25
--- a/test/functional/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/functional
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-16T15:23:11.666065Z
-4729
-jplang
+2011-03-01T10:27:30.170724Z
+4982
+tmaruyama
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 1831ada3aea1c4ecb568cb55a718eec9
 2010-12-18T13:40:50.641112Z
 4530
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 b42af2a4997da321fbe322b3d4ef47da
 2010-12-12T23:24:34.194336Z
 4509
@@ -100,7 +100,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 60c22807824b3989da92a03d4be0a1e6
 2010-12-12T23:24:34.194336Z
 4509
@@ -134,7 +134,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 f7c1328f2c586830c64233c2db054f0a
 2010-12-12T23:24:34.194336Z
 4509
@@ -168,7 +168,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 e6efbfdb394b5a3d4c8f5430c202a5b0
 2010-12-12T23:24:34.194336Z
 4509
@@ -202,7 +202,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 145c16cdb388cc98a1223c6f6dd6fb17
 2010-12-12T23:24:34.194336Z
 4509
@@ -236,7 +236,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 69809abf0a26741f5ca07db44aa223c0
 2010-12-12T23:24:34.194336Z
 4509
@@ -270,7 +270,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 cc837387e8b85884334a89e8bf935118
 2010-12-12T23:24:34.194336Z
 4509
@@ -304,7 +304,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 b68039337f934e7e49f4a06cda5e2b12
 2010-12-12T23:24:34.194336Z
 4509
@@ -338,7 +338,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 0798c1198c6db7754d04c79144c449c0
 2010-12-12T23:24:34.194336Z
 4509
@@ -372,7 +372,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 744fc8a1d2a4cdf6e8aa3ad0caa0fe4a
 2010-12-12T23:24:34.194336Z
 4509
@@ -400,47 +400,13 @@
 
 4086
 
-welcome_controller_test.rb
-file
-
-
-
-
-2011-01-13T14:09:08.000000Z
-bf75948e1edceb4241e67a84731477f6
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2379
-
 context_menus_controller_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 d3363951aa9a6c2a59c32d83d2483226
 2011-01-09T21:01:40.583303Z
 4673
@@ -468,13 +434,47 @@
 
 6411
 
+welcome_controller_test.rb
+file
+
+
+
+
+2011-03-03T11:40:17.000000Z
+99cada623881a6be69cdf13119cc1de7
+2011-02-21T09:53:29.844413Z
+4900
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3015
+
 account_controller_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 f6ad0bbad8d30d8ea41eb0b7ecaf32b6
 2010-12-12T23:24:34.194336Z
 4509
@@ -508,7 +508,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 a7eb2ff041caaed4c7c09ad8f9fe3719
 2010-12-12T23:24:34.194336Z
 4509
@@ -536,13 +536,47 @@
 
 2390
 
+journals_controller_test.rb
+file
+
+
+
+
+2011-03-03T11:40:17.000000Z
+aa7254e0715b3701554945deb5d98998
+2011-02-27T13:34:41.060565Z
+4954
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3099
+
 time_entry_reports_controller_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 e21197e1c3590e65b300103bf8e16efe
 2010-12-12T23:24:34.194336Z
 4509
@@ -570,16 +604,16 @@
 
 5424
 
-journals_controller_test.rb
+workflows_controller_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
-04e54620db6899c02b7e7a9e2645d0a6
-2010-12-18T17:11:41.680297Z
-4535
+2011-03-03T11:40:17.000000Z
+843e1eb3b5d05f3cb16580fe88d1baf5
+2011-02-20T15:38:07.840581Z
+4895
 jplang
 has-props
 
@@ -602,41 +636,7 @@
 
 
 
-2783
-
-workflows_controller_test.rb
-file
-
-
-
-
-2011-01-13T14:09:08.000000Z
-e99e1deab48be8515101e664af4d55da
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-6673
+7860
 
 project_enumerations_controller_test.rb
 file
@@ -644,7 +644,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 11b0d808c1b8f003db130d54022dbab0
 2010-12-31T15:45:35.200558Z
 4600
@@ -678,7 +678,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 b1aac6fc8fdaa84c3e3652849721bfa5
 2010-12-12T23:24:34.194336Z
 4509
@@ -706,13 +706,47 @@
 
 2663
 
+issue_moves_controller_test.rb
+file
+
+
+
+
+2011-03-03T11:05:08.000000Z
+539d0852190ec556b2284bfe678e8523
+2010-12-12T23:24:34.194336Z
+4509
+jbbarth
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5131
+
 users_controller_test.rb
 file
 
 
 
 
-2011-01-19T15:03:31.000000Z
+2011-03-03T11:05:08.000000Z
 067fe08ee66949066dd0db8fa2741f5e
 2011-01-16T15:23:11.666065Z
 4729
@@ -740,51 +774,17 @@
 
 9068
 
-issue_moves_controller_test.rb
-file
-
-
-
-
-2011-01-13T14:09:08.000000Z
-539d0852190ec556b2284bfe678e8523
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5131
-
 repositories_cvs_controller_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
-1d8cb0fdead69e39081ca4d0f7c68e51
-2010-12-29T17:46:47.689075Z
-4577
-jplang
+2011-03-03T11:40:17.000000Z
+1802113ecf354a24583d7c5a8db750b6
+2011-03-01T10:27:30.170724Z
+4982
+tmaruyama
 has-props
 
 
@@ -806,7 +806,7 @@
 
 
 
-6662
+8336
 
 application_controller_test.rb
 file
@@ -814,7 +814,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 278a104110d269c64def6c487219db07
 2010-12-23T13:33:01.454946Z
 4571
@@ -848,7 +848,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 10667cf5e4dc66eea96b196643c93a42
 2010-12-12T23:24:34.194336Z
 4509
@@ -882,7 +882,7 @@
 
 
 
-2010-09-23T14:37:45.387766Z
+2011-03-03T11:05:08.000000Z
 d6759c42ae866d7210c7006911e82a42
 2010-05-23T03:16:31.304135Z
 3744
@@ -916,7 +916,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 ce03a18446664d9bc073791097735811
 2010-12-12T23:24:34.194336Z
 4509
@@ -944,47 +944,13 @@
 
 4680
 
-repositories_bazaar_controller_test.rb
-file
-
-
-
-
-2011-01-13T14:09:08.000000Z
-c7a720bd5851fd9afe177432179cd921
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5059
-
 messages_controller_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 887437d272f8b8eba93dbf8bd5645868
 2010-12-12T23:24:34.194336Z
 4509
@@ -1012,13 +978,47 @@
 
 5047
 
+repositories_bazaar_controller_test.rb
+file
+
+
+
+
+2011-03-03T11:40:17.000000Z
+138b8dc8d1e30b2a8f5eda76b0f905b6
+2011-03-01T10:27:30.170724Z
+4982
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5177
+
 attachments_controller_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 00941bda584b7f5b7b636e48635d83dd
 2011-01-01T13:40:36.520874Z
 4604
@@ -1052,7 +1052,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 893a5cfefe3652680d241de9a657652c
 2010-12-12T23:24:34.194336Z
 4509
@@ -1086,7 +1086,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 39db66894beef1baa1696d6aee75f45d
 2010-12-12T23:24:34.194336Z
 4509
@@ -1120,7 +1120,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 c8fa245738b58d9f87afc40fc1b71f94
 2010-12-12T23:24:34.194336Z
 4509
@@ -1154,7 +1154,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 d50a042e5cc7e5d43cbb9be02b82aaf6
 2010-12-12T23:24:34.194336Z
 4509
@@ -1188,7 +1188,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 3ed28603b2a3697d060e06d90dd7b118
 2010-12-12T23:24:34.194336Z
 4509
@@ -1222,7 +1222,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 f5552cd43c853f04daaadb5d6c7bf159
 2010-12-12T23:24:34.194336Z
 4509
@@ -1256,7 +1256,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 dbbc4feeecbff202aa7569d4a17beaa1
 2011-01-06T20:57:17.003359Z
 4647
@@ -1290,7 +1290,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 7cdb2ab302fb93f982b33fb6460d48c3
 2010-12-12T23:24:34.194336Z
 4509
@@ -1324,10 +1324,10 @@
 
 
 
-2011-01-19T15:03:31.000000Z
-77f633299c1c1b0a463c44e8cb0df415
-2011-01-14T23:10:13.682113Z
-4713
+2011-03-03T11:05:08.000000Z
+0852f4a59ed3301126f2b2a95fee40ef
+2011-01-21T13:22:28.782688Z
+4734
 tmaruyama
 has-props
 
@@ -1350,7 +1350,7 @@
 
 
 
-7824
+8148
 
 repositories_mercurial_controller_test.rb
 file
@@ -1358,10 +1358,10 @@
 
 
 
-2011-01-19T15:03:31.000000Z
-a1c9433bf435d82001d81ebe611a3647
-2011-01-15T10:15:41.926218Z
-4718
+2011-03-03T11:40:17.000000Z
+c737d31340fe167746054c6975d86b18
+2011-02-16T11:18:18.909794Z
+4855
 tmaruyama
 has-props
 
@@ -1384,7 +1384,7 @@
 
 
 
-7534
+7919
 
 issue_categories_controller_test.rb
 file
@@ -1392,7 +1392,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 eff59ff8c4c616a1773223454b960363
 2010-12-12T23:24:34.194336Z
 4509
@@ -1426,7 +1426,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 d91b8b56b5bd1fd602e96842dfabab72
 2010-12-12T23:24:34.194336Z
 4509
@@ -1460,7 +1460,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 df6f548bb7fbdaeb235c5e8d3c1be576
 2010-12-12T23:24:34.194336Z
 4509
@@ -1494,7 +1494,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 f3101a3b1343baa274ce471911aa0e96
 2010-12-12T23:24:34.194336Z
 4509
@@ -1528,7 +1528,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 00f79a248e4bf77814823526e38ee630
 2010-12-14T18:29:24.891563Z
 4511
@@ -1562,7 +1562,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 8c664ac03cac7930264318af932f46e0
 2010-12-12T23:24:34.194336Z
 4509
@@ -1596,7 +1596,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 190cbeea6f926cc615d6d2918a50e909
 2010-12-12T23:24:34.194336Z
 4509
@@ -1630,11 +1630,11 @@
 
 
 
-2011-01-13T14:09:08.000000Z
-ac4fd4943d72406872230aa7bad0213c
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-03-03T11:40:17.000000Z
+a05a557c98b400ffe59662be78e31270
+2011-03-01T10:27:30.170724Z
+4982
+tmaruyama
 has-props
 
 
@@ -1656,7 +1656,7 @@
 
 
 
-3844
+4268
 
 wiki_controller_test.rb
 file
@@ -1664,7 +1664,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 33e64585bc7591ba6089135bbadb817e
 2010-12-12T23:24:34.194336Z
 4509
@@ -1692,13 +1692,47 @@
 
 17903
 
+previews_controller_test.rb
+file
+
+
+
+
+2011-03-03T11:05:08.000000Z
+c262b8203846b82045458a273da221fc
+2010-12-12T23:24:34.194336Z
+4509
+jbbarth
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1106
+
 auth_sources_controller_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 017010de8f7353d064e6b866e9dbb0c3
 2010-12-12T23:24:34.194336Z
 4509
@@ -1726,51 +1760,17 @@
 
 1961
 
-previews_controller_test.rb
-file
-
-
-
-
-2011-01-13T14:09:08.000000Z
-c262b8203846b82045458a273da221fc
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1106
-
 repositories_subversion_controller_test.rb
 file
 
 
 
 
-2011-01-19T15:03:31.000000Z
-9ffab3723a0facfd46dabe5efe813d30
-2011-01-14T20:22:36.080461Z
-4710
-jplang
+2011-03-03T11:40:17.000000Z
+d6a450e274753a0903a76b51c16eae7b
+2011-02-21T03:59:30.193463Z
+4896
+tmaruyama
 has-props
 
 
@@ -1792,7 +1792,7 @@
 
 
 
-9276
+11247
 
 issue_relations_controller_test.rb
 file
@@ -1800,11 +1800,11 @@
 
 
 
-2011-01-13T14:09:08.000000Z
-71066c7d539a973325b545d1d8183fe5
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-03-03T11:05:08.000000Z
+ac7b05267cda86408af77321975d9099
+2011-01-27T21:38:47.430923Z
+4764
+jplang
 has-props
 
 
@@ -1826,7 +1826,7 @@
 
 
 
-2165
+2998
 
 versions_controller_test.rb
 file
@@ -1834,7 +1834,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 2e73f89630c087f8170f62f3f79079c0
 2010-12-12T23:24:34.194336Z
 4509
@@ -1868,7 +1868,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 4194cdc2f733e6e1a38bedb7a6af05c8
 2010-12-12T23:24:34.194336Z
 4509
@@ -1902,7 +1902,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 770100e7a7049e202c8a1ea476659a30
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/functional/.svn/text-base/issue_relations_controller_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/.svn/text-base/issue_relations_controller_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -33,6 +33,19 @@
     end
   end
   
+  def test_new_xhr
+    assert_difference 'IssueRelation.count' do
+      @request.session[:user_id] = 3
+      xhr :post, :new,
+        :issue_id => 3, 
+        :relation => {:issue_to_id => '1', :relation_type => 'relates', :delay => ''}
+      assert_select_rjs 'relations' do
+        assert_select 'table', 1
+        assert_select 'tr', 2 # relations
+      end
+    end
+  end
+  
   def test_new_should_accept_id_with_hash
     assert_difference 'IssueRelation.count' do
       @request.session[:user_id] = 3
@@ -68,4 +81,20 @@
       post :destroy, :id => '2', :issue_id => '3'
     end
   end
+  
+  def test_destroy_xhr
+    IssueRelation.create!(:relation_type => IssueRelation::TYPE_RELATES) do |r|
+      r.issue_from_id = 3
+      r.issue_to_id = 1
+    end
+    
+    assert_difference 'IssueRelation.count', -1 do
+      @request.session[:user_id] = 3
+      xhr :post, :destroy, :id => '2', :issue_id => '3'
+      assert_select_rjs 'relations' do
+        assert_select 'table', 1
+        assert_select 'tr', 1 # relation left
+      end
+    end
+  end
 end
--- a/test/functional/.svn/text-base/journals_controller_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/.svn/text-base/journals_controller_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -38,6 +38,19 @@
     assert_equal 'application/atom+xml', @response.content_type
   end
   
+  def test_diff
+    get :diff, :id => 3, :detail_id => 4
+    assert_response :success
+    assert_template 'diff'
+    
+    assert_tag 'span',
+      :attributes => {:class => 'diff_out'},
+      :content => /removed/
+    assert_tag 'span',
+      :attributes => {:class => 'diff_in'},
+      :content => /added/
+  end
+  
   def test_reply_to_issue
     @request.session[:user_id] = 2
     get :new, :id => 6
--- a/test/functional/.svn/text-base/repositories_bazaar_controller_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/.svn/text-base/repositories_bazaar_controller_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -32,9 +32,13 @@
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
-    Repository::Bazaar.create(:project => Project.find(3), :url => REPOSITORY_PATH)
+    @project = Project.find(3)
+    @repository = Repository::Bazaar.create(
+                    :project => @project, :url => REPOSITORY_PATH,
+                    :log_encoding => 'UTF-8')
+    assert @repository
   end
-  
+
   if File.directory?(REPOSITORY_PATH)
     def test_show
       get :show, :id => 3
@@ -43,7 +47,7 @@
       assert_not_nil assigns(:entries)
       assert_not_nil assigns(:changesets)
     end
-    
+
     def test_browse_root
       get :show, :id => 3
       assert_response :success
@@ -53,7 +57,7 @@
       assert assigns(:entries).detect {|e| e.name == 'directory' && e.kind == 'dir'}
       assert assigns(:entries).detect {|e| e.name == 'doc-mkdir.txt' && e.kind == 'file'}
     end
-    
+
     def test_browse_directory
       get :show, :id => 3, :path => ['directory']
       assert_response :success
--- a/test/functional/.svn/text-base/repositories_cvs_controller_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/.svn/text-base/repositories_cvs_controller_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -29,7 +29,8 @@
   REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
   # CVS module
   MODULE_NAME = 'test'
-  
+  PRJ_ID = 3
+
   def setup
     @controller = RepositoriesController.new
     @request    = ActionController::TestRequest.new
@@ -37,14 +38,19 @@
     Setting.default_language = 'en'
     User.current = nil
 
-    @project = Project.find(1)
-    @project.repository = Repository::Cvs.create(:root_url => REPOSITORY_PATH,
-                                                 :url => MODULE_NAME)
+    @project = Project.find(PRJ_ID)
+    @repository  = Repository::Cvs.create(:project => Project.find(PRJ_ID),
+                                          :root_url => REPOSITORY_PATH,
+                                          :url => MODULE_NAME,
+                                          :log_encoding => 'UTF-8')
+    assert @repository
   end
   
   if File.directory?(REPOSITORY_PATH)
     def test_show
-      get :show, :id => 1
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -52,7 +58,9 @@
     end
     
     def test_browse_root
-      get :show, :id => 1
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -66,7 +74,9 @@
     end
     
     def test_browse_directory
-      get :show, :id => 1, :path => ['images']
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['images']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -78,8 +88,9 @@
     end
     
     def test_browse_at_given_revision
-      Project.find(1).repository.fetch_changesets
-      get :show, :id => 1, :path => ['images'], :rev => 1
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['images'], :rev => 1
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -87,7 +98,9 @@
     end
   
     def test_entry
-      get :entry, :id => 1, :path => ['sources', 'watchers_controller.rb']
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'entry'
       assert_no_tag :tag => 'td', :attributes => { :class => /line-code/},
@@ -96,8 +109,9 @@
     
     def test_entry_at_given_revision
       # changesets must be loaded
-      Project.find(1).repository.fetch_changesets
-      get :entry, :id => 1, :path => ['sources', 'watchers_controller.rb'], :rev => 2
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'], :rev => 2
       assert_response :success
       assert_template 'entry'
       # this line was removed in r3
@@ -106,18 +120,24 @@
     end
     
     def test_entry_not_found
-      get :entry, :id => 1, :path => ['sources', 'zzz.c']
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['sources', 'zzz.c']
       assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
                                 :content => /The entry or revision was not found in the repository/
     end
   
     def test_entry_download
-      get :entry, :id => 1, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
       assert_response :success
     end
 
     def test_directory_entry
-      get :entry, :id => 1, :path => ['sources']
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['sources']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entry)
@@ -125,8 +145,9 @@
     end
     
     def test_diff
-      Project.find(1).repository.fetch_changesets
-      get :diff, :id => 1, :rev => 3, :type => 'inline'
+      @repository.fetch_changesets
+      @repository.reload
+      get :diff, :id => PRJ_ID, :rev => 3, :type => 'inline'
       assert_response :success
       assert_template 'diff'
       assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_out' },
@@ -134,10 +155,29 @@
       assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' },
                                :content => /watched.remove_all_watcher/
     end
+                               
+    def test_diff_new_files
+      @repository.fetch_changesets
+      @repository.reload
+      get :diff, :id => PRJ_ID, :rev => 1, :type => 'inline'
+      assert_response :success
+      assert_template 'diff'
+      assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' },
+                               :content => /watched.remove_watcher/
+      assert_tag :tag => 'th', :attributes => { :class => 'filename' },
+                               :content => /test\/README/
+      assert_tag :tag => 'th', :attributes => { :class => 'filename' },
+                               :content => /test\/images\/delete.png	/
+      assert_tag :tag => 'th', :attributes => { :class => 'filename' },
+                               :content => /test\/images\/edit.png/
+      assert_tag :tag => 'th', :attributes => { :class => 'filename' },
+                               :content => /test\/sources\/watchers_controller.rb/                        
+    end
 
     def test_annotate
-      Project.find(1).repository.fetch_changesets
-      get :annotate, :id => 1, :path => ['sources', 'watchers_controller.rb']
+      @repository.fetch_changesets
+      @repository.reload
+      get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'annotate'
       # 1.1 line
--- a/test/functional/.svn/text-base/repositories_darcs_controller_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/.svn/text-base/repositories_darcs_controller_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -26,26 +26,35 @@
 
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/darcs_repository'
+  PRJ_ID = 3
 
   def setup
     @controller = RepositoriesController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
-    Repository::Darcs.create(:project => Project.find(3), :url => REPOSITORY_PATH)
+    @project = Project.find(PRJ_ID)
+    @repository = Repository::Darcs.create(
+                        :project => @project, :url => REPOSITORY_PATH,
+                        :log_encoding => 'UTF-8')
+    assert @repository
   end
-  
+
   if File.directory?(REPOSITORY_PATH)
     def test_show
-      get :show, :id => 3
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
       assert_not_nil assigns(:changesets)
     end
-    
+
     def test_browse_root
-      get :show, :id => 3
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -54,9 +63,11 @@
       assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
       assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
     end
-    
+
     def test_browse_directory
-      get :show, :id => 3, :path => ['images']
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['images']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -66,27 +77,31 @@
       assert_equal 'file', entry.kind
       assert_equal 'images/edit.png', entry.path
     end
-    
+
     def test_browse_at_given_revision
-      Project.find(3).repository.fetch_changesets
-      get :show, :id => 3, :path => ['images'], :rev => 1
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['images'], :rev => 1
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
       assert_equal ['delete.png'], assigns(:entries).collect(&:name)
     end
-    
+
     def test_changes
-      get :changes, :id => 3, :path => ['images', 'edit.png']
+      @repository.fetch_changesets
+      @repository.reload
+      get :changes, :id => PRJ_ID, :path => ['images', 'edit.png']
       assert_response :success
       assert_template 'changes'
       assert_tag :tag => 'h2', :content => 'edit.png'
     end
-  
+
     def test_diff
-      Project.find(3).repository.fetch_changesets
+      @repository.fetch_changesets
+      @repository.reload
       # Full diff of changeset 5
-      get :diff, :id => 3, :rev => 5
+      get :diff, :id => PRJ_ID, :rev => 5
       assert_response :success
       assert_template 'diff'
       # Line 22 removed
--- a/test/functional/.svn/text-base/repositories_git_controller_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/.svn/text-base/repositories_git_controller_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -170,6 +170,15 @@
                  :sibling => { :tag => 'td', :content => /watcher =/ }
     end
 
+    def test_annotate_at_given_revision
+      @repository.fetch_changesets
+      @repository.reload
+      get :annotate, :id => 3, :rev => 'deff7', :path => ['sources', 'watchers_controller.rb']
+      assert_response :success
+      assert_template 'annotate'
+      assert_tag :tag => 'h2', :content => /@ deff712f/
+    end
+
     def test_annotate_binary_file
       get :annotate, :id => 3, :path => ['images', 'edit.png']
       assert_response 500
--- a/test/functional/.svn/text-base/repositories_mercurial_controller_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/.svn/text-base/repositories_mercurial_controller_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -34,6 +34,7 @@
     User.current = nil
     @repository = Repository::Mercurial.create(:project => Project.find(3), :url => REPOSITORY_PATH)
     assert @repository
+    @diff_c_support = true
   end
 
   if File.directory?(REPOSITORY_PATH)
@@ -137,7 +138,7 @@
         assert_response :success
         assert_template 'diff'
 
-        if @repository.scm.class.client_version_above?([1, 2])
+        if @diff_c_support
           # Line 22 removed
           assert_tag :tag => 'th',
                      :content => '22',
@@ -196,6 +197,17 @@
                  :sibling => { :tag => 'td', :content => /watcher =/ }
     end
 
+    def test_annotate_at_given_revision
+      @repository.fetch_changesets
+      @repository.reload
+      [2, '400bb8672109', '400', 400].each do |r1|
+        get :annotate, :id => 3, :rev => r1, :path => ['sources', 'watchers_controller.rb']
+        assert_response :success
+        assert_template 'annotate'
+        assert_tag :tag => 'h2', :content => /@ 2:400bb8672109/
+      end
+    end
+
     def test_empty_revision
       @repository.fetch_changesets
       @repository.reload
--- a/test/functional/.svn/text-base/repositories_subversion_controller_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/.svn/text-base/repositories_subversion_controller_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -26,17 +26,26 @@
            :repositories, :issues, :issue_statuses, :changesets, :changes,
            :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers
 
+  PRJ_ID = 3
+
   def setup
     @controller = RepositoriesController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     Setting.default_language = 'en'
     User.current = nil
+
+    @project = Project.find(PRJ_ID)
+    @repository = Repository::Subversion.create(:project => @project,
+               :url => "file://#{self.class.repository_path('subversion')}")
+    assert @repository
   end
 
   if repository_configured?('subversion')
     def test_show
-      get :show, :id => 1
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -44,7 +53,9 @@
     end
     
     def test_browse_root
-      get :show, :id => 1
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -53,7 +64,9 @@
     end
     
     def test_browse_directory
-      get :show, :id => 1, :path => ['subversion_test']
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['subversion_test']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -65,7 +78,9 @@
     end
 
     def test_browse_at_given_revision
-      get :show, :id => 1, :path => ['subversion_test'], :rev => 4
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['subversion_test'], :rev => 4
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -73,7 +88,9 @@
     end
     
     def test_file_changes
-      get :changes, :id => 1, :path => ['subversion_test', 'folder', 'helloworld.rb' ]
+      @repository.fetch_changesets
+      @repository.reload
+      get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder', 'helloworld.rb' ]
       assert_response :success
       assert_template 'changes'
       
@@ -93,7 +110,9 @@
     end
 
     def test_directory_changes
-      get :changes, :id => 1, :path => ['subversion_test', 'folder' ]
+      @repository.fetch_changesets
+      @repository.reload
+      get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder' ]
       assert_response :success
       assert_template 'changes'
       
@@ -103,15 +122,19 @@
     end
       
     def test_entry
-      get :entry, :id => 1, :path => ['subversion_test', 'helloworld.c']
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c']
       assert_response :success
       assert_template 'entry'
     end
       
     def test_entry_should_send_if_too_big
+      @repository.fetch_changesets
+      @repository.reload
       # no files in the test repo is larger than 1KB...
       with_settings :file_max_size_displayed => 0 do
-        get :entry, :id => 1, :path => ['subversion_test', 'helloworld.c']
+        get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c']
         assert_response :success
         assert_template ''
         assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition']
@@ -119,7 +142,9 @@
     end
     
     def test_entry_at_given_revision
-      get :entry, :id => 1, :path => ['subversion_test', 'helloworld.rb'], :rev => 2
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.rb'], :rev => 2
       assert_response :success
       assert_template 'entry'
       # this line was removed in r3 and file was moved in r6
@@ -128,27 +153,36 @@
     end
     
     def test_entry_not_found
-      get :entry, :id => 1, :path => ['subversion_test', 'zzz.c']
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['subversion_test', 'zzz.c']
       assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
                                 :content => /The entry or revision was not found in the repository/
     end
   
     def test_entry_download
-      get :entry, :id => 1, :path => ['subversion_test', 'helloworld.c'], :format => 'raw'
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c'], :format => 'raw'
       assert_response :success
       assert_template ''
       assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition']
     end
     
     def test_directory_entry
-      get :entry, :id => 1, :path => ['subversion_test', 'folder']
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['subversion_test', 'folder']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entry)
       assert_equal 'folder', assigns(:entry).name
     end
     
+    # TODO: this test needs fixtures.
     def test_revision
+      @repository.fetch_changesets
+      @repository.reload
       get :revision, :id => 1, :rev => 2
       assert_response :success
       assert_template 'revision'
@@ -167,19 +201,30 @@
     end
     
     def test_invalid_revision
-      get :revision, :id => 1, :rev => 'something_weird'
+      @repository.fetch_changesets
+      @repository.reload
+      get :revision, :id => PRJ_ID, :rev => 'something_weird'
+      assert_response 404
+      assert_error_tag :content => /was not found/
+    end
+
+    def test_invalid_revision_diff
+      get :diff, :id => PRJ_ID, :rev => '1', :rev_to => 'something_weird'
       assert_response 404
       assert_error_tag :content => /was not found/
     end
 
     def test_empty_revision
+      @repository.fetch_changesets
+      @repository.reload
       ['', ' ', nil].each do |r|
-        get :revision, :id => 1, :rev => r
+        get :revision, :id => PRJ_ID, :rev => r
         assert_response 404
         assert_error_tag :content => /was not found/
       end
     end
 
+    # TODO: this test needs fixtures.
     def test_revision_with_repository_pointing_to_a_subdirectory
       r = Project.find(1).repository
       # Changes repository url to a subdirectory
@@ -203,7 +248,9 @@
     end
     
     def test_revision_diff
-      get :diff, :id => 1, :rev => 3
+      @repository.fetch_changesets
+      @repository.reload
+      get :diff, :id => PRJ_ID, :rev => 3
       assert_response :success
       assert_template 'diff'
 
@@ -211,7 +258,9 @@
     end
 
     def test_directory_diff
-      get :diff, :id => 1, :rev => 6, :rev_to => 2, :path => ['subversion_test', 'folder']
+      @repository.fetch_changesets
+      @repository.reload
+      get :diff, :id => PRJ_ID, :rev => 6, :rev_to => 2, :path => ['subversion_test', 'folder']
       assert_response :success
       assert_template 'diff'
       
@@ -224,10 +273,21 @@
     end
     
     def test_annotate
-      get :annotate, :id => 1, :path => ['subversion_test', 'helloworld.c']
+      @repository.fetch_changesets
+      @repository.reload
+      get :annotate, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c']
       assert_response :success
       assert_template 'annotate'
     end
+
+    def test_annotate_at_given_revision
+      @repository.fetch_changesets
+      @repository.reload
+      get :annotate, :id => PRJ_ID, :rev => 8, :path => ['subversion_test', 'helloworld.c']
+      assert_response :success
+      assert_template 'annotate'
+      assert_tag :tag => 'h2', :content => /@ 8/
+    end
   else
     puts "Subversion test repository NOT FOUND. Skipping functional tests !!!"
     def test_fake; assert true end
--- a/test/functional/.svn/text-base/welcome_controller_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/.svn/text-base/welcome_controller_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -67,4 +67,28 @@
     assert_equal 'text/plain', @response.content_type
     assert @response.body.match(%r{^Disallow: /projects/ecookbook/issues\r?$})
   end
+  
+  def test_warn_on_leaving_unsaved_turn_on
+    user = User.find(2)
+    user.pref.warn_on_leaving_unsaved = '1'
+    user.pref.save!
+    @request.session[:user_id] = 2
+    
+    get :index
+    assert_tag 'script',
+      :attributes => {:type => "text/javascript"},
+      :content => %r{new WarnLeavingUnsaved}
+  end
+  
+  def test_warn_on_leaving_unsaved_turn_off
+    user = User.find(2)
+    user.pref.warn_on_leaving_unsaved = '0'
+    user.pref.save!
+    @request.session[:user_id] = 2
+    
+    get :index
+    assert_no_tag 'script',
+      :attributes => {:type => "text/javascript"},
+      :content => %r{new WarnLeavingUnsaved}
+  end
 end
--- a/test/functional/.svn/text-base/workflows_controller_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/.svn/text-base/workflows_controller_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -65,17 +65,17 @@
     
     # allowed transitions
     assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
-                                                 :name => 'issue_status[3][]',
-                                                 :value => '5',
+                                                 :name => 'issue_status[3][5][]',
+                                                 :value => 'always',
                                                  :checked => 'checked' }
     # not allowed
     assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
-                                                 :name => 'issue_status[3][]',
-                                                 :value => '2',
+                                                 :name => 'issue_status[3][2][]',
+                                                 :value => 'always',
                                                  :checked => nil }
     # unused
     assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox',
-                                                    :name => 'issue_status[4][]' }
+                                                    :name => 'issue_status[1][1][]' }
   end
   
   def test_get_edit_with_role_and_tracker_and_all_statuses
@@ -89,13 +89,17 @@
     assert_equal IssueStatus.count, assigns(:statuses).size
     
     assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
-                                                 :name => 'issue_status[1][]',
-                                                 :value => '1',
+                                                 :name => 'issue_status[1][1][]',
+                                                 :value => 'always',
                                                  :checked => nil }
   end
   
   def test_post_edit
-    post :edit, :role_id => 2, :tracker_id => 1, :issue_status => {'4' => ['5'], '3' => ['1', '2']}
+    post :edit, :role_id => 2, :tracker_id => 1,
+      :issue_status => {
+        '4' => {'5' => ['always']},
+        '3' => {'1' => ['always'], '2' => ['always']}
+      }
     assert_redirected_to '/workflows/edit?role_id=2&tracker_id=1'
     
     assert_equal 3, Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2})
@@ -103,6 +107,30 @@
     assert_nil      Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 5, :new_status_id => 4})
   end
   
+  def test_post_edit_with_additional_transitions
+    post :edit, :role_id => 2, :tracker_id => 1,
+      :issue_status => {
+        '4' => {'5' => ['always']},
+        '3' => {'1' => ['author'], '2' => ['assignee'], '4' => ['author', 'assignee']}
+      }
+    assert_redirected_to '/workflows/edit?role_id=2&tracker_id=1'
+    
+    assert_equal 4, Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2})
+    
+    w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 4, :new_status_id => 5})
+    assert ! w.author
+    assert ! w.assignee
+    w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 1})
+    assert w.author
+    assert ! w.assignee
+    w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 2})
+    assert ! w.author
+    assert w.assignee
+    w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 4})
+    assert w.author
+    assert w.assignee
+  end
+  
   def test_clear_workflow
     assert Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2}) > 0
 
--- a/test/functional/issue_relations_controller_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/issue_relations_controller_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -33,6 +33,19 @@
     end
   end
   
+  def test_new_xhr
+    assert_difference 'IssueRelation.count' do
+      @request.session[:user_id] = 3
+      xhr :post, :new,
+        :issue_id => 3, 
+        :relation => {:issue_to_id => '1', :relation_type => 'relates', :delay => ''}
+      assert_select_rjs 'relations' do
+        assert_select 'table', 1
+        assert_select 'tr', 2 # relations
+      end
+    end
+  end
+  
   def test_new_should_accept_id_with_hash
     assert_difference 'IssueRelation.count' do
       @request.session[:user_id] = 3
@@ -68,4 +81,20 @@
       post :destroy, :id => '2', :issue_id => '3'
     end
   end
+  
+  def test_destroy_xhr
+    IssueRelation.create!(:relation_type => IssueRelation::TYPE_RELATES) do |r|
+      r.issue_from_id = 3
+      r.issue_to_id = 1
+    end
+    
+    assert_difference 'IssueRelation.count', -1 do
+      @request.session[:user_id] = 3
+      xhr :post, :destroy, :id => '2', :issue_id => '3'
+      assert_select_rjs 'relations' do
+        assert_select 'table', 1
+        assert_select 'tr', 1 # relation left
+      end
+    end
+  end
 end
--- a/test/functional/journals_controller_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/journals_controller_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -38,6 +38,19 @@
     assert_equal 'application/atom+xml', @response.content_type
   end
   
+  def test_diff
+    get :diff, :id => 3, :detail_id => 4
+    assert_response :success
+    assert_template 'diff'
+    
+    assert_tag 'span',
+      :attributes => {:class => 'diff_out'},
+      :content => /removed/
+    assert_tag 'span',
+      :attributes => {:class => 'diff_in'},
+      :content => /added/
+  end
+  
   def test_reply_to_issue
     @request.session[:user_id] = 2
     get :new, :id => 6
--- a/test/functional/repositories_bazaar_controller_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/repositories_bazaar_controller_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -32,9 +32,13 @@
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
-    Repository::Bazaar.create(:project => Project.find(3), :url => REPOSITORY_PATH)
+    @project = Project.find(3)
+    @repository = Repository::Bazaar.create(
+                    :project => @project, :url => REPOSITORY_PATH,
+                    :log_encoding => 'UTF-8')
+    assert @repository
   end
-  
+
   if File.directory?(REPOSITORY_PATH)
     def test_show
       get :show, :id => 3
@@ -43,7 +47,7 @@
       assert_not_nil assigns(:entries)
       assert_not_nil assigns(:changesets)
     end
-    
+
     def test_browse_root
       get :show, :id => 3
       assert_response :success
@@ -53,7 +57,7 @@
       assert assigns(:entries).detect {|e| e.name == 'directory' && e.kind == 'dir'}
       assert assigns(:entries).detect {|e| e.name == 'doc-mkdir.txt' && e.kind == 'file'}
     end
-    
+
     def test_browse_directory
       get :show, :id => 3, :path => ['directory']
       assert_response :success
--- a/test/functional/repositories_cvs_controller_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/repositories_cvs_controller_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -29,7 +29,8 @@
   REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
   # CVS module
   MODULE_NAME = 'test'
-  
+  PRJ_ID = 3
+
   def setup
     @controller = RepositoriesController.new
     @request    = ActionController::TestRequest.new
@@ -37,14 +38,19 @@
     Setting.default_language = 'en'
     User.current = nil
 
-    @project = Project.find(1)
-    @project.repository = Repository::Cvs.create(:root_url => REPOSITORY_PATH,
-                                                 :url => MODULE_NAME)
+    @project = Project.find(PRJ_ID)
+    @repository  = Repository::Cvs.create(:project => Project.find(PRJ_ID),
+                                          :root_url => REPOSITORY_PATH,
+                                          :url => MODULE_NAME,
+                                          :log_encoding => 'UTF-8')
+    assert @repository
   end
   
   if File.directory?(REPOSITORY_PATH)
     def test_show
-      get :show, :id => 1
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -52,7 +58,9 @@
     end
     
     def test_browse_root
-      get :show, :id => 1
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -66,7 +74,9 @@
     end
     
     def test_browse_directory
-      get :show, :id => 1, :path => ['images']
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['images']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -78,8 +88,9 @@
     end
     
     def test_browse_at_given_revision
-      Project.find(1).repository.fetch_changesets
-      get :show, :id => 1, :path => ['images'], :rev => 1
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['images'], :rev => 1
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -87,7 +98,9 @@
     end
   
     def test_entry
-      get :entry, :id => 1, :path => ['sources', 'watchers_controller.rb']
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'entry'
       assert_no_tag :tag => 'td', :attributes => { :class => /line-code/},
@@ -96,8 +109,9 @@
     
     def test_entry_at_given_revision
       # changesets must be loaded
-      Project.find(1).repository.fetch_changesets
-      get :entry, :id => 1, :path => ['sources', 'watchers_controller.rb'], :rev => 2
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'], :rev => 2
       assert_response :success
       assert_template 'entry'
       # this line was removed in r3
@@ -106,18 +120,24 @@
     end
     
     def test_entry_not_found
-      get :entry, :id => 1, :path => ['sources', 'zzz.c']
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['sources', 'zzz.c']
       assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
                                 :content => /The entry or revision was not found in the repository/
     end
   
     def test_entry_download
-      get :entry, :id => 1, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
       assert_response :success
     end
 
     def test_directory_entry
-      get :entry, :id => 1, :path => ['sources']
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['sources']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entry)
@@ -125,8 +145,9 @@
     end
     
     def test_diff
-      Project.find(1).repository.fetch_changesets
-      get :diff, :id => 1, :rev => 3, :type => 'inline'
+      @repository.fetch_changesets
+      @repository.reload
+      get :diff, :id => PRJ_ID, :rev => 3, :type => 'inline'
       assert_response :success
       assert_template 'diff'
       assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_out' },
@@ -134,10 +155,29 @@
       assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' },
                                :content => /watched.remove_all_watcher/
     end
+                               
+    def test_diff_new_files
+      @repository.fetch_changesets
+      @repository.reload
+      get :diff, :id => PRJ_ID, :rev => 1, :type => 'inline'
+      assert_response :success
+      assert_template 'diff'
+      assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' },
+                               :content => /watched.remove_watcher/
+      assert_tag :tag => 'th', :attributes => { :class => 'filename' },
+                               :content => /test\/README/
+      assert_tag :tag => 'th', :attributes => { :class => 'filename' },
+                               :content => /test\/images\/delete.png	/
+      assert_tag :tag => 'th', :attributes => { :class => 'filename' },
+                               :content => /test\/images\/edit.png/
+      assert_tag :tag => 'th', :attributes => { :class => 'filename' },
+                               :content => /test\/sources\/watchers_controller.rb/                        
+    end
 
     def test_annotate
-      Project.find(1).repository.fetch_changesets
-      get :annotate, :id => 1, :path => ['sources', 'watchers_controller.rb']
+      @repository.fetch_changesets
+      @repository.reload
+      get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
       assert_template 'annotate'
       # 1.1 line
--- a/test/functional/repositories_darcs_controller_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/repositories_darcs_controller_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -26,26 +26,35 @@
 
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/darcs_repository'
+  PRJ_ID = 3
 
   def setup
     @controller = RepositoriesController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     User.current = nil
-    Repository::Darcs.create(:project => Project.find(3), :url => REPOSITORY_PATH)
+    @project = Project.find(PRJ_ID)
+    @repository = Repository::Darcs.create(
+                        :project => @project, :url => REPOSITORY_PATH,
+                        :log_encoding => 'UTF-8')
+    assert @repository
   end
-  
+
   if File.directory?(REPOSITORY_PATH)
     def test_show
-      get :show, :id => 3
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
       assert_not_nil assigns(:changesets)
     end
-    
+
     def test_browse_root
-      get :show, :id => 3
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -54,9 +63,11 @@
       assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
       assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
     end
-    
+
     def test_browse_directory
-      get :show, :id => 3, :path => ['images']
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['images']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -66,27 +77,31 @@
       assert_equal 'file', entry.kind
       assert_equal 'images/edit.png', entry.path
     end
-    
+
     def test_browse_at_given_revision
-      Project.find(3).repository.fetch_changesets
-      get :show, :id => 3, :path => ['images'], :rev => 1
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['images'], :rev => 1
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
       assert_equal ['delete.png'], assigns(:entries).collect(&:name)
     end
-    
+
     def test_changes
-      get :changes, :id => 3, :path => ['images', 'edit.png']
+      @repository.fetch_changesets
+      @repository.reload
+      get :changes, :id => PRJ_ID, :path => ['images', 'edit.png']
       assert_response :success
       assert_template 'changes'
       assert_tag :tag => 'h2', :content => 'edit.png'
     end
-  
+
     def test_diff
-      Project.find(3).repository.fetch_changesets
+      @repository.fetch_changesets
+      @repository.reload
       # Full diff of changeset 5
-      get :diff, :id => 3, :rev => 5
+      get :diff, :id => PRJ_ID, :rev => 5
       assert_response :success
       assert_template 'diff'
       # Line 22 removed
--- a/test/functional/repositories_git_controller_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/repositories_git_controller_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -170,6 +170,15 @@
                  :sibling => { :tag => 'td', :content => /watcher =/ }
     end
 
+    def test_annotate_at_given_revision
+      @repository.fetch_changesets
+      @repository.reload
+      get :annotate, :id => 3, :rev => 'deff7', :path => ['sources', 'watchers_controller.rb']
+      assert_response :success
+      assert_template 'annotate'
+      assert_tag :tag => 'h2', :content => /@ deff712f/
+    end
+
     def test_annotate_binary_file
       get :annotate, :id => 3, :path => ['images', 'edit.png']
       assert_response 500
--- a/test/functional/repositories_mercurial_controller_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/repositories_mercurial_controller_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -34,6 +34,7 @@
     User.current = nil
     @repository = Repository::Mercurial.create(:project => Project.find(3), :url => REPOSITORY_PATH)
     assert @repository
+    @diff_c_support = true
   end
 
   if File.directory?(REPOSITORY_PATH)
@@ -137,7 +138,7 @@
         assert_response :success
         assert_template 'diff'
 
-        if @repository.scm.class.client_version_above?([1, 2])
+        if @diff_c_support
           # Line 22 removed
           assert_tag :tag => 'th',
                      :content => '22',
@@ -196,6 +197,17 @@
                  :sibling => { :tag => 'td', :content => /watcher =/ }
     end
 
+    def test_annotate_at_given_revision
+      @repository.fetch_changesets
+      @repository.reload
+      [2, '400bb8672109', '400', 400].each do |r1|
+        get :annotate, :id => 3, :rev => r1, :path => ['sources', 'watchers_controller.rb']
+        assert_response :success
+        assert_template 'annotate'
+        assert_tag :tag => 'h2', :content => /@ 2:400bb8672109/
+      end
+    end
+
     def test_empty_revision
       @repository.fetch_changesets
       @repository.reload
--- a/test/functional/repositories_subversion_controller_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/repositories_subversion_controller_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -26,17 +26,26 @@
            :repositories, :issues, :issue_statuses, :changesets, :changes,
            :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers
 
+  PRJ_ID = 3
+
   def setup
     @controller = RepositoriesController.new
     @request    = ActionController::TestRequest.new
     @response   = ActionController::TestResponse.new
     Setting.default_language = 'en'
     User.current = nil
+
+    @project = Project.find(PRJ_ID)
+    @repository = Repository::Subversion.create(:project => @project,
+               :url => "file://#{self.class.repository_path('subversion')}")
+    assert @repository
   end
 
   if repository_configured?('subversion')
     def test_show
-      get :show, :id => 1
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -44,7 +53,9 @@
     end
     
     def test_browse_root
-      get :show, :id => 1
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -53,7 +64,9 @@
     end
     
     def test_browse_directory
-      get :show, :id => 1, :path => ['subversion_test']
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['subversion_test']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -65,7 +78,9 @@
     end
 
     def test_browse_at_given_revision
-      get :show, :id => 1, :path => ['subversion_test'], :rev => 4
+      @repository.fetch_changesets
+      @repository.reload
+      get :show, :id => PRJ_ID, :path => ['subversion_test'], :rev => 4
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entries)
@@ -73,7 +88,9 @@
     end
     
     def test_file_changes
-      get :changes, :id => 1, :path => ['subversion_test', 'folder', 'helloworld.rb' ]
+      @repository.fetch_changesets
+      @repository.reload
+      get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder', 'helloworld.rb' ]
       assert_response :success
       assert_template 'changes'
       
@@ -93,7 +110,9 @@
     end
 
     def test_directory_changes
-      get :changes, :id => 1, :path => ['subversion_test', 'folder' ]
+      @repository.fetch_changesets
+      @repository.reload
+      get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder' ]
       assert_response :success
       assert_template 'changes'
       
@@ -103,15 +122,19 @@
     end
       
     def test_entry
-      get :entry, :id => 1, :path => ['subversion_test', 'helloworld.c']
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c']
       assert_response :success
       assert_template 'entry'
     end
       
     def test_entry_should_send_if_too_big
+      @repository.fetch_changesets
+      @repository.reload
       # no files in the test repo is larger than 1KB...
       with_settings :file_max_size_displayed => 0 do
-        get :entry, :id => 1, :path => ['subversion_test', 'helloworld.c']
+        get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c']
         assert_response :success
         assert_template ''
         assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition']
@@ -119,7 +142,9 @@
     end
     
     def test_entry_at_given_revision
-      get :entry, :id => 1, :path => ['subversion_test', 'helloworld.rb'], :rev => 2
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.rb'], :rev => 2
       assert_response :success
       assert_template 'entry'
       # this line was removed in r3 and file was moved in r6
@@ -128,27 +153,36 @@
     end
     
     def test_entry_not_found
-      get :entry, :id => 1, :path => ['subversion_test', 'zzz.c']
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['subversion_test', 'zzz.c']
       assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
                                 :content => /The entry or revision was not found in the repository/
     end
   
     def test_entry_download
-      get :entry, :id => 1, :path => ['subversion_test', 'helloworld.c'], :format => 'raw'
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c'], :format => 'raw'
       assert_response :success
       assert_template ''
       assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition']
     end
     
     def test_directory_entry
-      get :entry, :id => 1, :path => ['subversion_test', 'folder']
+      @repository.fetch_changesets
+      @repository.reload
+      get :entry, :id => PRJ_ID, :path => ['subversion_test', 'folder']
       assert_response :success
       assert_template 'show'
       assert_not_nil assigns(:entry)
       assert_equal 'folder', assigns(:entry).name
     end
     
+    # TODO: this test needs fixtures.
     def test_revision
+      @repository.fetch_changesets
+      @repository.reload
       get :revision, :id => 1, :rev => 2
       assert_response :success
       assert_template 'revision'
@@ -167,19 +201,30 @@
     end
     
     def test_invalid_revision
-      get :revision, :id => 1, :rev => 'something_weird'
+      @repository.fetch_changesets
+      @repository.reload
+      get :revision, :id => PRJ_ID, :rev => 'something_weird'
+      assert_response 404
+      assert_error_tag :content => /was not found/
+    end
+
+    def test_invalid_revision_diff
+      get :diff, :id => PRJ_ID, :rev => '1', :rev_to => 'something_weird'
       assert_response 404
       assert_error_tag :content => /was not found/
     end
 
     def test_empty_revision
+      @repository.fetch_changesets
+      @repository.reload
       ['', ' ', nil].each do |r|
-        get :revision, :id => 1, :rev => r
+        get :revision, :id => PRJ_ID, :rev => r
         assert_response 404
         assert_error_tag :content => /was not found/
       end
     end
 
+    # TODO: this test needs fixtures.
     def test_revision_with_repository_pointing_to_a_subdirectory
       r = Project.find(1).repository
       # Changes repository url to a subdirectory
@@ -203,7 +248,9 @@
     end
     
     def test_revision_diff
-      get :diff, :id => 1, :rev => 3
+      @repository.fetch_changesets
+      @repository.reload
+      get :diff, :id => PRJ_ID, :rev => 3
       assert_response :success
       assert_template 'diff'
 
@@ -211,7 +258,9 @@
     end
 
     def test_directory_diff
-      get :diff, :id => 1, :rev => 6, :rev_to => 2, :path => ['subversion_test', 'folder']
+      @repository.fetch_changesets
+      @repository.reload
+      get :diff, :id => PRJ_ID, :rev => 6, :rev_to => 2, :path => ['subversion_test', 'folder']
       assert_response :success
       assert_template 'diff'
       
@@ -224,10 +273,21 @@
     end
     
     def test_annotate
-      get :annotate, :id => 1, :path => ['subversion_test', 'helloworld.c']
+      @repository.fetch_changesets
+      @repository.reload
+      get :annotate, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c']
       assert_response :success
       assert_template 'annotate'
     end
+
+    def test_annotate_at_given_revision
+      @repository.fetch_changesets
+      @repository.reload
+      get :annotate, :id => PRJ_ID, :rev => 8, :path => ['subversion_test', 'helloworld.c']
+      assert_response :success
+      assert_template 'annotate'
+      assert_tag :tag => 'h2', :content => /@ 8/
+    end
   else
     puts "Subversion test repository NOT FOUND. Skipping functional tests !!!"
     def test_fake; assert true end
--- a/test/functional/welcome_controller_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/welcome_controller_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -67,4 +67,28 @@
     assert_equal 'text/plain', @response.content_type
     assert @response.body.match(%r{^Disallow: /projects/ecookbook/issues\r?$})
   end
+  
+  def test_warn_on_leaving_unsaved_turn_on
+    user = User.find(2)
+    user.pref.warn_on_leaving_unsaved = '1'
+    user.pref.save!
+    @request.session[:user_id] = 2
+    
+    get :index
+    assert_tag 'script',
+      :attributes => {:type => "text/javascript"},
+      :content => %r{new WarnLeavingUnsaved}
+  end
+  
+  def test_warn_on_leaving_unsaved_turn_off
+    user = User.find(2)
+    user.pref.warn_on_leaving_unsaved = '0'
+    user.pref.save!
+    @request.session[:user_id] = 2
+    
+    get :index
+    assert_no_tag 'script',
+      :attributes => {:type => "text/javascript"},
+      :content => %r{new WarnLeavingUnsaved}
+  end
 end
--- a/test/functional/workflows_controller_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/functional/workflows_controller_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -65,17 +65,17 @@
     
     # allowed transitions
     assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
-                                                 :name => 'issue_status[3][]',
-                                                 :value => '5',
+                                                 :name => 'issue_status[3][5][]',
+                                                 :value => 'always',
                                                  :checked => 'checked' }
     # not allowed
     assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
-                                                 :name => 'issue_status[3][]',
-                                                 :value => '2',
+                                                 :name => 'issue_status[3][2][]',
+                                                 :value => 'always',
                                                  :checked => nil }
     # unused
     assert_no_tag :tag => 'input', :attributes => { :type => 'checkbox',
-                                                    :name => 'issue_status[4][]' }
+                                                    :name => 'issue_status[1][1][]' }
   end
   
   def test_get_edit_with_role_and_tracker_and_all_statuses
@@ -89,13 +89,17 @@
     assert_equal IssueStatus.count, assigns(:statuses).size
     
     assert_tag :tag => 'input', :attributes => { :type => 'checkbox',
-                                                 :name => 'issue_status[1][]',
-                                                 :value => '1',
+                                                 :name => 'issue_status[1][1][]',
+                                                 :value => 'always',
                                                  :checked => nil }
   end
   
   def test_post_edit
-    post :edit, :role_id => 2, :tracker_id => 1, :issue_status => {'4' => ['5'], '3' => ['1', '2']}
+    post :edit, :role_id => 2, :tracker_id => 1,
+      :issue_status => {
+        '4' => {'5' => ['always']},
+        '3' => {'1' => ['always'], '2' => ['always']}
+      }
     assert_redirected_to '/workflows/edit?role_id=2&tracker_id=1'
     
     assert_equal 3, Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2})
@@ -103,6 +107,30 @@
     assert_nil      Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 5, :new_status_id => 4})
   end
   
+  def test_post_edit_with_additional_transitions
+    post :edit, :role_id => 2, :tracker_id => 1,
+      :issue_status => {
+        '4' => {'5' => ['always']},
+        '3' => {'1' => ['author'], '2' => ['assignee'], '4' => ['author', 'assignee']}
+      }
+    assert_redirected_to '/workflows/edit?role_id=2&tracker_id=1'
+    
+    assert_equal 4, Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2})
+    
+    w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 4, :new_status_id => 5})
+    assert ! w.author
+    assert ! w.assignee
+    w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 1})
+    assert w.author
+    assert ! w.assignee
+    w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 2})
+    assert ! w.author
+    assert w.assignee
+    w = Workflow.find(:first, :conditions => {:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 4})
+    assert w.author
+    assert w.assignee
+  end
+  
   def test_clear_workflow
     assert Workflow.count(:conditions => {:tracker_id => 1, :role_id => 2}) > 0
 
--- a/test/integration/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/integration/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/integration
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 b828e87474858f965d2048f5f15f8e4b
 2010-12-12T23:24:34.194336Z
 4509
@@ -63,13 +63,16 @@
 lib
 dir
 
+api_test
+dir
+
 routing_test.rb
 file
 
 
 
 
-2011-01-19T15:03:31.000000Z
+2011-03-03T11:05:08.000000Z
 7e4b62197ce8e1dfe456477ae9ee384f
 2011-01-16T15:23:11.666065Z
 4729
@@ -97,16 +100,13 @@
 
 28869
 
-api_test
-dir
-
 admin_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 fbd4d2a8c15f4ec209250f3395903604
 2010-12-12T23:24:34.194336Z
 4509
@@ -140,7 +140,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 4b83660bc635b651f2e1d2d8ee50b84b
 2010-12-12T23:24:34.194336Z
 4509
@@ -174,7 +174,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 09fa9e6798468c9b7fda21b438e16c5e
 2010-12-12T23:24:34.194336Z
 4509
@@ -208,7 +208,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 5cdf08841a7442b774036772bb1fc1a7
 2010-12-12T23:24:34.194336Z
 4509
@@ -242,7 +242,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 ff949103a3bdac892a3372cfb71047f0
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/integration/api_test/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/integration/api_test/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/integration/api_test
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 7d38bb393dfe949c081c7e9ee2ea0caa
 2010-12-12T23:24:34.194336Z
 4509
@@ -66,7 +66,7 @@
 
 
 
-2011-01-19T15:03:31.000000Z
+2011-03-03T11:05:08.000000Z
 5cca5d3e833a26e12978491298f55859
 2011-01-16T15:23:11.666065Z
 4729
@@ -100,7 +100,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 1704d0f93701094c0ebf95183e078b5f
 2010-12-12T23:24:34.194336Z
 4509
@@ -134,7 +134,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 92abe10e190b64c60afc90866336aa7c
 2010-12-12T23:24:34.194336Z
 4509
@@ -168,7 +168,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 31d08ba85b57fcdb41e06c1f367de87e
 2011-01-06T20:36:31.826591Z
 4645
@@ -202,7 +202,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 a4c38f734c93d99d52de27d41a380756
 2010-12-12T23:24:34.194336Z
 4509
@@ -236,7 +236,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 445e18c4a9d648b99d948eac4e750480
 2010-12-12T23:24:34.194336Z
 4509
@@ -270,7 +270,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 bee85bcaab5d8fb5f90a64ad4ac32e3c
 2010-12-12T23:24:34.194336Z
 4509
@@ -304,7 +304,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 24e8e5b1544016befedeea49b8fb5cb5
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/integration/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/integration/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/test/integration/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/test/integration/lib
 http://redmine.rubyforge.org/svn
 
 
--- a/test/integration/lib/redmine/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/integration/lib/redmine/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/integration/lib/redmine
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 302d4ea0c07530cc9d48b971849df66d
 2010-12-12T23:24:34.194336Z
 4509
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 782f5d377a79dea8a580dcd902121b37
 2010-12-23T09:42:33.439630Z
 4560
--- a/test/mocks/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/mocks/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/test/mocks
+4993
+http://redmine.rubyforge.org/svn/trunk/test/mocks
 http://redmine.rubyforge.org/svn
 
 
@@ -38,7 +38,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:09.000000Z
 c73745cf74166bf38552d6469b74b190
 2009-09-20T14:06:57.257282Z
 2895
--- a/test/mocks/development/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/mocks/development/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/test/mocks/development
+4993
+http://redmine.rubyforge.org/svn/trunk/test/mocks/development
 http://redmine.rubyforge.org/svn
 
 
--- a/test/mocks/test/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/mocks/test/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/test/mocks/test
+4993
+http://redmine.rubyforge.org/svn/trunk/test/mocks/test
 http://redmine.rubyforge.org/svn
 
 
--- a/test/unit/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 34
-/svn/!svn/ver/4730/trunk/test/unit
+/svn/!svn/ver/4991/trunk/test/unit
 END
 document_test.rb
 K 25
@@ -19,13 +19,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 57
-/svn/!svn/ver/4703/trunk/test/unit/repository_git_test.rb
+/svn/!svn/ver/4986/trunk/test/unit/repository_git_test.rb
 END
 repository_mercurial_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 63
-/svn/!svn/ver/4704/trunk/test/unit/repository_mercurial_test.rb
+/svn/!svn/ver/4991/trunk/test/unit/repository_mercurial_test.rb
 END
 issue_relation_test.rb
 K 25
@@ -55,13 +55,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 48
-/svn/!svn/ver/4723/trunk/test/unit/issue_test.rb
+/svn/!svn/ver/4958/trunk/test/unit/issue_test.rb
 END
 issue_status_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 55
-/svn/!svn/ver/4509/trunk/test/unit/issue_status_test.rb
+/svn/!svn/ver/4895/trunk/test/unit/issue_status_test.rb
 END
 time_entry_activity_test.rb
 K 25
@@ -79,13 +79,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 64
-/svn/!svn/ver/4703/trunk/test/unit/repository_subversion_test.rb
+/svn/!svn/ver/4987/trunk/test/unit/repository_subversion_test.rb
 END
 repository_bazaar_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 60
-/svn/!svn/ver/4613/trunk/test/unit/repository_bazaar_test.rb
+/svn/!svn/ver/4982/trunk/test/unit/repository_bazaar_test.rb
 END
 role_test.rb
 K 25
@@ -97,7 +97,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 52
-/svn/!svn/ver/4613/trunk/test/unit/changeset_test.rb
+/svn/!svn/ver/4984/trunk/test/unit/changeset_test.rb
 END
 comment_test.rb
 K 25
@@ -139,7 +139,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 47
-/svn/!svn/ver/4730/trunk/test/unit/user_test.rb
+/svn/!svn/ver/4936/trunk/test/unit/user_test.rb
 END
 mail_handler_test.rb
 K 25
@@ -151,7 +151,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 53
-/svn/!svn/ver/4726/trunk/test/unit/repository_test.rb
+/svn/!svn/ver/4982/trunk/test/unit/repository_test.rb
 END
 time_entry_test.rb
 K 25
@@ -165,17 +165,23 @@
 V 52
 /svn/!svn/ver/4509/trunk/test/unit/principal_test.rb
 END
+journal_observer_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/!svn/ver/4509/trunk/test/unit/journal_observer_test.rb
+END
 auth_source_ldap_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 59
 /svn/!svn/ver/4509/trunk/test/unit/auth_source_ldap_test.rb
 END
-journal_observer_test.rb
+repository_filesystem_test.rb
 K 25
 svn:wc:ra_dav:version-url
-V 59
-/svn/!svn/ver/4509/trunk/test/unit/journal_observer_test.rb
+V 64
+/svn/!svn/ver/4509/trunk/test/unit/repository_filesystem_test.rb
 END
 project_nested_set_test.rb
 K 25
@@ -183,11 +189,11 @@
 V 61
 /svn/!svn/ver/4650/trunk/test/unit/project_nested_set_test.rb
 END
-repository_filesystem_test.rb
+message_test.rb
 K 25
 svn:wc:ra_dav:version-url
-V 64
-/svn/!svn/ver/4509/trunk/test/unit/repository_filesystem_test.rb
+V 50
+/svn/!svn/ver/4509/trunk/test/unit/message_test.rb
 END
 wiki_redirect_test.rb
 K 25
@@ -195,12 +201,6 @@
 V 56
 /svn/!svn/ver/4509/trunk/test/unit/wiki_redirect_test.rb
 END
-message_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 50
-/svn/!svn/ver/4509/trunk/test/unit/message_test.rb
-END
 issue_category_test.rb
 K 25
 svn:wc:ra_dav:version-url
@@ -223,13 +223,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 57
-/svn/!svn/ver/4509/trunk/test/unit/repository_cvs_test.rb
+/svn/!svn/ver/4982/trunk/test/unit/repository_cvs_test.rb
 END
 repository_darcs_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/4608/trunk/test/unit/repository_darcs_test.rb
+/svn/!svn/ver/4982/trunk/test/unit/repository_darcs_test.rb
 END
 activity_test.rb
 K 25
@@ -271,13 +271,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/4509/trunk/test/unit/issue_nested_set_test.rb
+/svn/!svn/ver/4735/trunk/test/unit/issue_nested_set_test.rb
 END
 query_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 48
-/svn/!svn/ver/4553/trunk/test/unit/query_test.rb
+/svn/!svn/ver/4888/trunk/test/unit/query_test.rb
 END
 search_test.rb
 K 25
@@ -285,18 +285,18 @@
 V 49
 /svn/!svn/ver/4509/trunk/test/unit/search_test.rb
 END
+custom_value_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/!svn/ver/4509/trunk/test/unit/custom_value_test.rb
+END
 project_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 50
 /svn/!svn/ver/4615/trunk/test/unit/project_test.rb
 END
-custom_value_test.rb
-K 25
-svn:wc:ra_dav:version-url
-V 55
-/svn/!svn/ver/4509/trunk/test/unit/custom_value_test.rb
-END
 member_test.rb
 K 25
 svn:wc:ra_dav:version-url
--- a/test/unit/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/unit
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-16T15:36:42.998302Z
-4730
-jplang
+2011-03-03T03:35:13.139305Z
+4991
+tmaruyama
 
 
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:08:14.000000Z
+2011-03-03T11:05:08.000000Z
 31100b89782bb9004a5f162375b5192b
 2010-12-12T23:24:34.194336Z
 4509
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:08:14.000000Z
+2011-03-03T11:05:08.000000Z
 e89c6342d99d8e32ca9c9d3399641b96
 2010-12-12T23:24:34.194336Z
 4509
@@ -100,10 +100,10 @@
 
 
 
-2011-01-13T14:08:14.000000Z
-f95988379d5f7fa7f341954a886c6a3e
-2011-01-13T12:04:30.962313Z
-4703
+2011-03-03T11:40:17.000000Z
+47242b5b6c39be0674556191a42a70ff
+2011-03-02T05:12:39.499704Z
+4986
 tmaruyama
 has-props
 
@@ -126,7 +126,7 @@
 
 
 
-4415
+5437
 
 repository_mercurial_test.rb
 file
@@ -134,10 +134,10 @@
 
 
 
-2011-01-13T14:08:14.000000Z
-37d81db20cb50110ac1f7fa44e5ecb40
-2011-01-13T12:04:51.838288Z
-4704
+2011-03-03T11:40:17.000000Z
+df5148d6503c41188684ca42c8fb1563
+2011-03-03T03:35:13.139305Z
+4991
 tmaruyama
 has-props
 
@@ -160,7 +160,7 @@
 
 
 
-6345
+7231
 
 issue_relation_test.rb
 file
@@ -168,7 +168,7 @@
 
 
 
-2011-01-19T15:03:31.000000Z
+2011-03-03T11:05:08.000000Z
 c121bfc1afd3428c1c63ffc8e4c9441e
 2011-01-15T14:03:39.071238Z
 4721
@@ -202,7 +202,7 @@
 
 
 
-2011-01-13T14:08:14.000000Z
+2011-03-03T11:05:08.000000Z
 9aa8e8e5f5ef4c0c74c9fcdaba7ada60
 2010-12-31T11:16:03.020751Z
 4597
@@ -236,7 +236,7 @@
 
 
 
-2011-01-13T14:08:14.000000Z
+2011-03-03T11:05:08.000000Z
 01227adbe16fcf333a7e99f9a7bcc0f6
 2010-12-12T23:24:34.194336Z
 4509
@@ -270,7 +270,7 @@
 
 
 
-2011-01-13T14:08:14.000000Z
+2011-03-03T11:05:08.000000Z
 afdfda5a2d9285920afb8815085ad0ee
 2010-12-12T23:24:34.194336Z
 4509
@@ -304,10 +304,10 @@
 
 
 
-2011-01-19T15:03:31.000000Z
-a8c280ae08bee271010554106ded8aa0
-2011-01-15T14:12:18.630628Z
-4723
+2011-03-03T11:40:17.000000Z
+103def744f4a7e87035c40962f5f4b9f
+2011-02-27T15:51:10.736814Z
+4958
 jplang
 has-props
 
@@ -330,7 +330,7 @@
 
 
 
-30795
+32944
 
 issue_status_test.rb
 file
@@ -338,11 +338,11 @@
 
 
 
-2011-01-13T14:08:14.000000Z
-46bccc51b3aa0bd4b3826318f662f587
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-03-03T11:40:17.000000Z
+927e020ce867263e6cf5af443bfaecd8
+2011-02-20T15:38:07.840581Z
+4895
+jplang
 has-props
 
 
@@ -364,7 +364,7 @@
 
 
 
-3236
+4757
 
 time_entry_activity_test.rb
 file
@@ -372,7 +372,7 @@
 
 
 
-2011-01-13T14:08:14.000000Z
+2011-03-03T11:05:08.000000Z
 41183297c9b098b67d368c45289eb47f
 2010-12-12T23:24:34.194336Z
 4509
@@ -406,7 +406,7 @@
 
 
 
-2011-01-13T14:08:14.000000Z
+2011-03-03T11:05:08.000000Z
 32e8c8fd522283c8008b2dac1de383dd
 2010-12-12T23:24:34.194336Z
 4509
@@ -440,10 +440,10 @@
 
 
 
-2011-01-13T14:08:14.000000Z
-fb0636f5bb4d94047ed14879e88f7df7
-2011-01-13T12:04:30.962313Z
-4703
+2011-03-03T11:40:17.000000Z
+428e976e05c3c4bffbc9885ef1272fc7
+2011-03-02T07:10:39.633104Z
+4987
 tmaruyama
 has-props
 
@@ -466,7 +466,7 @@
 
 
 
-5506
+7066
 
 repository_bazaar_test.rb
 file
@@ -474,10 +474,10 @@
 
 
 
-2011-01-13T14:08:14.000000Z
-b0c66b65fc51cdbf6f9885dddbfe5a23
-2011-01-02T09:45:05.291687Z
-4613
+2011-03-03T11:40:17.000000Z
+562f1297bf47e2199e1f04ccd1733f49
+2011-03-01T10:27:30.170724Z
+4982
 tmaruyama
 has-props
 
@@ -500,10 +500,41 @@
 
 
 
-3125
+2704
 
-helpers
-dir
+changeset_test.rb
+file
+
+
+
+
+2011-03-03T11:40:17.000000Z
+ee5c9c8f3cf4814a73673fe693faf697
+2011-03-01T15:35:27.747088Z
+4984
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+10123
 
 role_test.rb
 file
@@ -511,7 +542,7 @@
 
 
 
-2011-01-13T14:08:14.000000Z
+2011-03-03T11:05:08.000000Z
 54e0d5b5ac94a5a9a0649b2af1b030e4
 2010-12-12T23:24:34.194336Z
 4509
@@ -539,39 +570,8 @@
 
 3054
 
-changeset_test.rb
-file
-
-
-
-
-2011-01-13T14:08:14.000000Z
-c3cb358e85c7a5ddde50a50e8e8395d9
-2011-01-02T09:45:05.291687Z
-4613
-tmaruyama
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-7938
+helpers
+dir
 
 comment_test.rb
 file
@@ -579,7 +579,7 @@
 
 
 
-2011-01-13T14:08:14.000000Z
+2011-03-03T11:05:08.000000Z
 d279aa9cdae195412ec42a41d76bc999
 2010-12-12T23:24:34.194336Z
 4509
@@ -613,7 +613,7 @@
 
 
 
-2011-01-13T14:08:14.000000Z
+2011-03-03T11:05:08.000000Z
 fe66a05a1301e78c21ab94a101fda6af
 2011-01-10T18:32:04.408692Z
 4680
@@ -650,7 +650,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 fadeda4795465dbbbf5873729ddba30a
 2010-12-12T23:24:34.194336Z
 4509
@@ -684,7 +684,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 93378a65c9f444ca160b6681b7435610
 2010-12-12T23:24:34.194336Z
 4509
@@ -718,7 +718,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 621cee22436f207cb82915edfe609d42
 2010-12-12T23:24:34.194336Z
 4509
@@ -752,7 +752,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 f1290324d506f8535d74ccf3f878c24f
 2010-12-12T23:24:34.194336Z
 4509
@@ -786,10 +786,10 @@
 
 
 
-2011-01-19T15:03:31.000000Z
-6dc51cd302ef5c8dc8f571846733a835
-2011-01-16T15:36:42.998302Z
-4730
+2011-03-03T11:40:17.000000Z
+93a08b69d91fdc8222483cbb6d20563d
+2011-02-23T17:27:31.762248Z
+4936
 jplang
 has-props
 
@@ -812,7 +812,75 @@
 
 
 
-24597
+26161
+
+mail_handler_test.rb
+file
+
+
+
+
+2011-03-03T11:05:08.000000Z
+ccd63941c3776cd520a713f27ed01d08
+2010-12-29T17:38:57.772516Z
+4576
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+18979
+
+repository_test.rb
+file
+
+
+
+
+2011-03-03T11:40:17.000000Z
+71ee0e9aa37fb046390f5774895ef623
+2011-03-01T10:27:30.170724Z
+4982
+tmaruyama
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6540
 
 time_entry_test.rb
 file
@@ -820,7 +888,7 @@
 
 
 
-2011-01-19T15:03:31.000000Z
+2011-03-03T11:05:08.000000Z
 ab1c1db4414427c710071842f98a5685
 2011-01-14T18:45:28.811697Z
 4709
@@ -848,73 +916,73 @@
 
 4317
 
-repository_test.rb
+principal_test.rb
 file
 
 
 
 
-2011-01-19T15:03:31.000000Z
-759b702e56d17ca338fcead30d8cfcbe
-2011-01-16T14:27:02.047144Z
-4726
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-6554
+2011-03-03T11:05:08.000000Z
+69e70ceb20c56bbb25155e8120146aa3
+2010-12-12T23:24:34.194336Z
+4509
+jbbarth
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2078
 
-mail_handler_test.rb
+journal_observer_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
-ccd63941c3776cd520a713f27ed01d08
-2010-12-29T17:38:57.772516Z
-4576
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-18979
+2011-03-03T11:05:08.000000Z
+0a054ecc047ebca7e0cb9fe8aadf51eb
+2010-12-12T23:24:34.194336Z
+4509
+jbbarth
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3959
 
 auth_source_ldap_test.rb
 file
@@ -922,7 +990,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 4de167441793151c86bc376e671cc3c1
 2010-12-12T23:24:34.194336Z
 4509
@@ -950,73 +1018,39 @@
 
 2793
 
-principal_test.rb
+project_nested_set_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
-69e70ceb20c56bbb25155e8120146aa3
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2078
-
-journal_observer_test.rb
-file
-
-
-
-
-2011-01-13T14:09:08.000000Z
-0a054ecc047ebca7e0cb9fe8aadf51eb
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3959
+2011-03-03T11:05:08.000000Z
+47282cfa59c0817a7936d60b0ac3e16c
+2011-01-06T21:17:08.355137Z
+4650
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4027
 
 repository_filesystem_test.rb
 file
@@ -1024,7 +1058,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 8d990ac10b1aeee25c74ee1f5cdc9d18
 2010-12-12T23:24:34.194336Z
 4509
@@ -1052,47 +1086,13 @@
 
 1940
 
-project_nested_set_test.rb
-file
-
-
-
-
-2011-01-13T14:09:08.000000Z
-47282cfa59c0817a7936d60b0ac3e16c
-2011-01-06T21:17:08.355137Z
-4650
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4027
-
 message_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 6b620c2638af1111d237a35ecba5107d
 2010-12-12T23:24:34.194336Z
 4509
@@ -1126,7 +1126,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 f4be42a1985df0fc471331477246eea7
 2010-12-12T23:24:34.194336Z
 4509
@@ -1160,7 +1160,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 fb1799532feba53a1df0355271636ce7
 2010-12-12T23:24:34.194336Z
 4509
@@ -1194,7 +1194,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 e8fef8d0f3de527136fabe2c2195be9e
 2010-12-31T15:24:42.140175Z
 4598
@@ -1228,7 +1228,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 23d11bc7cfedc1a4d419928eb81d5c64
 2010-12-12T23:24:34.194336Z
 4509
@@ -1262,11 +1262,11 @@
 
 
 
-2011-01-13T14:09:08.000000Z
-c57bd5b650a9fa0627831717134ceeb2
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-03-03T11:40:17.000000Z
+a2d7bc3feefa89da466f5ead9e4da18d
+2011-03-01T10:27:30.170724Z
+4982
+tmaruyama
 has-props
 
 
@@ -1288,7 +1288,7 @@
 
 
 
-2542
+3909
 
 repository_darcs_test.rb
 file
@@ -1296,10 +1296,10 @@
 
 
 
-2011-01-13T14:09:08.000000Z
-ae2d97f344e9c59bb09648e9e333db84
-2011-01-01T22:01:28.805978Z
-4608
+2011-03-03T11:40:17.000000Z
+44a11577927a86290e2887c1e0c0dd24
+2011-03-01T10:27:30.170724Z
+4982
 tmaruyama
 has-props
 
@@ -1322,7 +1322,7 @@
 
 
 
-2596
+2723
 
 activity_test.rb
 file
@@ -1330,7 +1330,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 f2227b773374d5366d6ee7e26f7f977e
 2010-12-12T23:24:34.194336Z
 4509
@@ -1364,7 +1364,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 50cc3fd88223d69f74e1b11991989bbc
 2010-12-12T23:24:34.194336Z
 4509
@@ -1398,7 +1398,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 3665052c1291d40753ee1ab4c61cd237
 2010-12-12T23:24:34.194336Z
 4509
@@ -1432,7 +1432,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 5f0c8e09595f6c8f6a95def9d4ff3833
 2010-12-12T23:24:34.194336Z
 4509
@@ -1466,7 +1466,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 870052407719f2a360e8e95f0498130f
 2010-12-12T23:24:34.194336Z
 4509
@@ -1500,7 +1500,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 2b51ebfe6e4e23011d9b29f08028d832
 2010-12-12T23:24:34.194336Z
 4509
@@ -1534,11 +1534,11 @@
 
 
 
-2011-01-13T14:09:08.000000Z
-bdd4058358d08008a7597d544590d561
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-03-03T11:05:08.000000Z
+a9a2a1d3497b65464c17a71858f15278
+2011-01-22T11:46:15.415880Z
+4735
+jplang
 has-props
 
 
@@ -1560,7 +1560,7 @@
 
 
 
-13662
+14804
 
 query_test.rb
 file
@@ -1568,10 +1568,10 @@
 
 
 
-2011-01-13T14:09:08.000000Z
-25fe3c9e8b257bd7f2ce5b8a28f8f508
-2010-12-21T21:46:54.984442Z
-4553
+2011-03-03T11:40:17.000000Z
+1cf7133fc93cd35e36b828afe1abdd35
+2011-02-20T13:03:32.835478Z
+4888
 jplang
 has-props
 
@@ -1594,7 +1594,7 @@
 
 
 
-20770
+21925
 
 search_test.rb
 file
@@ -1602,7 +1602,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 7c10ed0c6e700b4bfe67499ced7f9129
 2010-12-12T23:24:34.194336Z
 4509
@@ -1630,13 +1630,47 @@
 
 4661
 
+custom_value_test.rb
+file
+
+
+
+
+2011-03-03T11:05:08.000000Z
+e012f89814e1a9ddec5e1fd550c6b5e1
+2010-12-12T23:24:34.194336Z
+4509
+jbbarth
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3677
+
 project_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 d50e8af60d440f2f3c60a31031b79830
 2011-01-02T11:38:35.152085Z
 4615
@@ -1664,47 +1698,13 @@
 
 39071
 
-custom_value_test.rb
-file
-
-
-
-
-2011-01-13T14:09:08.000000Z
-e012f89814e1a9ddec5e1fd550c6b5e1
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3677
-
 member_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 ef906b6b6bdeaa8d627ff66390dd31ab
 2010-12-12T23:24:34.194336Z
 4509
@@ -1738,7 +1738,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 2f98e8acd7868617728cd08702411096
 2010-12-12T23:24:34.194336Z
 4509
@@ -1772,7 +1772,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 759e3cea9ff889147937b83bcc137e4b
 2010-12-12T23:24:34.194336Z
 4509
@@ -1806,7 +1806,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 eab02ac34d43f18f1bc929dd62d6ee9a
 2010-12-12T23:24:34.194336Z
 4509
@@ -1840,7 +1840,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 59b08ad686160723b5b83df2cb5f8ee1
 2010-12-12T23:24:34.194336Z
 4509
@@ -1874,7 +1874,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 8a4fd1977e88faed5d7ebca9ac40d037
 2010-12-12T23:24:34.194336Z
 4509
@@ -1908,7 +1908,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 8f6032e2276c7077ad1716c67634c17e
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/unit/.svn/text-base/changeset_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/.svn/text-base/changeset_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -72,24 +72,40 @@
     Setting.commit_ref_keywords = '*'
     Setting.commit_logtime_enabled = '1'
 
-    c = Changeset.new(:repository => Project.find(1).repository,
-                      :committed_on => 24.hours.ago,
-                      :comments => 'Worked on this issue #1 @2h',
-                      :revision => '520',
-                      :user => User.find(2))
-    assert_difference 'TimeEntry.count' do
-      c.scan_comment_for_issue_ids
+    {
+      '2' => 2.0,
+      '2h' => 2.0,
+      '2hours' => 2.0,
+      '15m' => 0.25,
+      '15min' => 0.25,
+      '3h15' => 3.25,
+      '3h15m' => 3.25,
+      '3h15min' => 3.25,
+      '3:15' => 3.25,
+      '3.25' => 3.25,
+      '3.25h' => 3.25,
+      '3,25' => 3.25,
+      '3,25h' => 3.25,
+    }.each do |syntax, expected_hours|
+      c = Changeset.new(:repository => Project.find(1).repository,
+                        :committed_on => 24.hours.ago,
+                        :comments => "Worked on this issue #1 @#{syntax}",
+                        :revision => '520',
+                        :user => User.find(2))
+      assert_difference 'TimeEntry.count' do
+        c.scan_comment_for_issue_ids
+      end
+      assert_equal [1], c.issue_ids.sort
+      
+      time = TimeEntry.first(:order => 'id desc')
+      assert_equal 1, time.issue_id
+      assert_equal 1, time.project_id
+      assert_equal 2, time.user_id
+      assert_equal expected_hours, time.hours, "@#{syntax} should be logged as #{expected_hours} hours but was #{time.hours}"
+      assert_equal Date.yesterday, time.spent_on
+      assert time.activity.is_default?
+      assert time.comments.include?('r520'), "r520 was expected in time_entry comments: #{time.comments}"
     end
-    assert_equal [1], c.issue_ids.sort
-    
-    time = TimeEntry.first(:order => 'id desc')
-    assert_equal 1, time.issue_id
-    assert_equal 1, time.project_id
-    assert_equal 2, time.user_id
-    assert_equal 2.0, time.hours
-    assert_equal Date.yesterday, time.spent_on
-    assert time.activity.is_default?
-    assert time.comments.include?('r520'), "r520 was expected in time_entry comments: #{time.comments}"
   end
   
   def test_ref_keywords_closing_with_timelog
@@ -100,7 +116,7 @@
     
     c = Changeset.new(:repository => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => 'This is a comment. Fixes #1 @2.5, #2 @1',
+                      :comments => 'This is a comment. Fixes #1 @4.5, #2 @1',
                       :user => User.find(2))
     assert_difference 'TimeEntry.count', 2 do
       c.scan_comment_for_issue_ids
@@ -169,12 +185,12 @@
     assert_equal [2], c.issue_ids.sort
     assert c.issues.first.project != c.project
   end
-  
+
   def test_text_tag_revision
     c = Changeset.new(:revision => '520')
     assert_equal 'r520', c.text_tag
   end
-  
+
   def test_text_tag_hash
     c = Changeset.new(:scmid => '7234cb2750b63f47bff735edc50a1c0a433c2518', :revision => '7234cb2750b63f47bff735edc50a1c0a433c2518')
     assert_equal 'commit:7234cb2750b63f47bff735edc50a1c0a433c2518', c.text_tag
@@ -204,19 +220,67 @@
     changeset = Changeset.find_by_revision('10')
     assert_nil changeset.next
   end
-  
+
   def test_comments_should_be_converted_to_utf8
-    with_settings :commit_logs_encoding => 'ISO-8859-1' do
-      c = Changeset.new
-      c.comments = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
+      proj = Project.find(3)
+      str = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
+      r = Repository::Bazaar.create!(
+            :project => proj, :url => '/tmp/test/bazaar',
+            :log_encoding => 'ISO-8859-1' )
+      assert r
+      c = Changeset.new(:repository => r,
+                        :committed_on => Time.now,
+                        :revision => '123',
+                        :scmid => '12345',
+                        :comments => str)
+      assert( c.save )
       assert_equal "Texte encodé en ISO-8859-1.", c.comments
-    end
   end
-  
+
   def test_invalid_utf8_sequences_in_comments_should_be_stripped
-    c = Changeset.new
-    c.comments = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
-    assert_equal "Texte encod en ISO-8859-1.", c.comments
+      proj = Project.find(3)
+      str = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
+      r = Repository::Bazaar.create!(
+            :project => proj, :url => '/tmp/test/bazaar',
+            :log_encoding => 'UTF-8' )
+      assert r
+      c = Changeset.new(:repository => r,
+                        :committed_on => Time.now,
+                        :revision => '123',
+                        :scmid => '12345',
+                        :comments => str)
+      assert( c.save )
+      if str.respond_to?(:force_encoding)
+        assert_equal "Texte encod? en ISO-8859-1.", c.comments
+      else
+        assert_equal "Texte encod en ISO-8859-1.", c.comments
+      end
+  end
+
+  def test_comments_should_be_converted_all_latin1_to_utf8
+      s1 = "\xC2\x80"
+      s2 = "\xc3\x82\xc2\x80"
+      if s1.respond_to?(:force_encoding)
+        s3 = s1
+        s4 = s2
+        s1.force_encoding('ASCII-8BIT')
+        s2.force_encoding('ASCII-8BIT')
+        s3.force_encoding('ISO-8859-1')
+        s4.force_encoding('UTF-8')
+        assert_equal s3.encode('UTF-8'), s4
+      end
+      proj = Project.find(3)
+      r = Repository::Bazaar.create!(
+            :project => proj, :url => '/tmp/test/bazaar',
+            :log_encoding => 'ISO-8859-1' )
+      assert r
+      c = Changeset.new(:repository => r,
+                        :committed_on => Time.now,
+                        :revision => '123',
+                        :scmid => '12345',
+                        :comments => s1)
+      assert( c.save )
+      assert_equal s2, c.comments
   end
 
   def test_identifier
--- a/test/unit/.svn/text-base/issue_nested_set_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/.svn/text-base/issue_nested_set_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -202,7 +202,19 @@
     issue2 = create_issue!
     issue3 = create_issue!(:parent_issue_id => issue2.id)
     issue4 = create_issue!(:parent_issue_id => issue1.id)
-    issue2.reload.destroy
+    
+    issue3.init_journal(User.find(2))
+    issue3.subject = 'child with journal'
+    issue3.save!
+    
+    assert_difference 'Issue.count', -2 do
+      assert_difference 'Journal.count', -1 do
+        assert_difference 'JournalDetail.count', -1 do
+          Issue.find(issue2.id).destroy
+        end
+      end
+    end
+    
     issue1.reload
     issue4.reload
     assert !Issue.exists?(issue2.id)
@@ -211,6 +223,26 @@
     assert_equal [issue1.id, 2, 3], [issue4.root_id, issue4.lft, issue4.rgt]
   end
   
+  def test_destroy_child_issue_with_children
+    root = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'root')
+    child = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'child', :parent_issue_id => root.id)
+    leaf = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'leaf', :parent_issue_id => child.id)
+    leaf.init_journal(User.find(2))
+    leaf.subject = 'leaf with journal'
+    leaf.save!
+    
+    assert_difference 'Issue.count', -2 do
+      assert_difference 'Journal.count', -1 do
+        assert_difference 'JournalDetail.count', -1 do
+          Issue.find(child.id).destroy
+        end
+      end
+    end
+    
+    root = Issue.find(root.id)
+    assert root.leaf?, "Root issue is not a leaf (lft: #{root.lft}, rgt: #{root.rgt})"
+  end
+  
   def test_parent_priority_should_be_the_highest_child_priority
     parent = create_issue!(:priority => IssuePriority.find_by_name('Normal'))
     # Create children
--- a/test/unit/.svn/text-base/issue_status_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/.svn/text-base/issue_status_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -18,7 +18,7 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class IssueStatusTest < ActiveSupport::TestCase
-  fixtures :issue_statuses, :issues
+  fixtures :issue_statuses, :issues, :roles, :trackers
 
   def test_create
     status = IssueStatus.new :name => "Assigned"
@@ -68,6 +68,30 @@
     status.reload
     assert status.is_default?
   end
+  
+  def test_new_statuses_allowed_to
+    Workflow.delete_all
+    
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 2, :author => false, :assignee => false)
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3, :author => true, :assignee => false)
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4, :author => false, :assignee => true)
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 5, :author => true, :assignee => true)
+    status = IssueStatus.find(1)
+    role = Role.find(1)
+    tracker = Tracker.find(1)
+
+    assert_equal [2], status.new_statuses_allowed_to([role], tracker, false, false).map(&:id)
+    assert_equal [2], status.find_new_statuses_allowed_to([role], tracker, false, false).map(&:id)
+    
+    assert_equal [2, 3], status.new_statuses_allowed_to([role], tracker, true, false).map(&:id)
+    assert_equal [2, 3], status.find_new_statuses_allowed_to([role], tracker, true, false).map(&:id)
+    
+    assert_equal [2, 4], status.new_statuses_allowed_to([role], tracker, false, true).map(&:id)
+    assert_equal [2, 4], status.find_new_statuses_allowed_to([role], tracker, false, true).map(&:id)
+    
+    assert_equal [2, 3, 4, 5], status.new_statuses_allowed_to([role], tracker, true, true).map(&:id)
+    assert_equal [2, 3, 4, 5], status.find_new_statuses_allowed_to([role], tracker, true, true).map(&:id)
+  end
 
   context "#update_done_ratios" do
     setup do
--- a/test/unit/.svn/text-base/issue_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/.svn/text-base/issue_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -210,6 +210,33 @@
     assert_equal IssueCategory.find(1).assigned_to, issue.assigned_to
   end
   
+  
+  
+  def test_new_statuses_allowed_to
+    Workflow.delete_all
+    
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 2, :author => false, :assignee => false)
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3, :author => true, :assignee => false)
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4, :author => false, :assignee => true)
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 5, :author => true, :assignee => true)
+    status = IssueStatus.find(1)
+    role = Role.find(1)
+    tracker = Tracker.find(1)
+    user = User.find(2)
+    
+    issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1)
+    assert_equal [1, 2], issue.new_statuses_allowed_to(user).map(&:id)
+    
+    issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :author => user)
+    assert_equal [1, 2, 3], issue.new_statuses_allowed_to(user).map(&:id)
+    
+    issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :assigned_to => user)
+    assert_equal [1, 2, 4], issue.new_statuses_allowed_to(user).map(&:id)
+    
+    issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :author => user, :assigned_to => user)
+    assert_equal [1, 2, 3, 4, 5], issue.new_statuses_allowed_to(user).map(&:id)
+  end
+  
   def test_copy
     issue = Issue.new.copy_from(1)
     assert issue.save
@@ -594,6 +621,29 @@
     assert ActionMailer::Base.deliveries.empty?
   end
   
+  def test_journalized_description
+    IssueCustomField.delete_all
+    
+    i = Issue.first
+    old_description = i.description
+    new_description = "This is the new description"
+    
+    i.init_journal(User.find(2))
+    i.description = new_description
+    assert_difference 'Journal.count', 1 do
+      assert_difference 'JournalDetail.count', 1 do
+        i.save!
+      end
+    end
+    
+    detail = JournalDetail.first(:order => 'id DESC')
+    assert_equal i, detail.journal.journalized
+    assert_equal 'attr', detail.property
+    assert_equal 'description', detail.prop_key
+    assert_equal old_description, detail.old_value
+    assert_equal new_description, detail.value
+  end
+  
   def test_saving_twice_should_not_duplicate_journal_details
     i = Issue.find(:first)
     i.init_journal(User.find(2), 'Some notes')
--- a/test/unit/.svn/text-base/query_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/.svn/text-base/query_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -484,7 +484,6 @@
         # Users not in a group
         assert_query_statement_includes @query, "#{Issue.table_name}.assigned_to_id IS NULL OR #{Issue.table_name}.assigned_to_id NOT IN ('#{@user_in_group.id}','#{@second_user_in_group.id}','#{@user_in_group2.id}')"
         assert_find_issues_with_query_is_successful @query
-
       end
 
       should "search assigned to any group member (all)" do
@@ -494,7 +493,22 @@
         # Only users in a group
         assert_query_statement_includes @query, "#{Issue.table_name}.assigned_to_id IN ('#{@user_in_group.id}','#{@second_user_in_group.id}','#{@user_in_group2.id}')"
         assert_find_issues_with_query_is_successful @query
-
+      end
+      
+      should "return an empty set with = empty group" do
+        @empty_group = Group.generate!
+        @query = Query.new(:name => '_')
+        @query.add_filter('member_of_group', '=', [@empty_group.id.to_s])
+        
+        assert_equal [], find_issues_with_query(@query)
+      end
+      
+      should "return issues with ! empty group" do
+        @empty_group = Group.generate!
+        @query = Query.new(:name => '_')
+        @query.add_filter('member_of_group', '!', [@empty_group.id.to_s])
+        
+        assert_find_issues_with_query_is_successful @query
       end
     end
 
@@ -540,6 +554,22 @@
         assert_query_statement_includes @query, "#{Issue.table_name}.assigned_to_id IN ('#{@manager.id}','#{@developer.id}','#{@boss.id}')"
         assert_find_issues_with_query_is_successful @query
       end
+      
+      should "return an empty set with empty role" do
+        @empty_role = Role.generate!
+        @query = Query.new(:name => '_')
+        @query.add_filter('assigned_to_role', '=', [@empty_role.id.to_s])
+        
+        assert_equal [], find_issues_with_query(@query)
+      end
+      
+      should "return issues with ! empty role" do
+        @empty_role = Role.generate!
+        @query = Query.new(:name => '_')
+        @query.add_filter('member_of_group', '!', [@empty_role.id.to_s])
+        
+        assert_find_issues_with_query_is_successful @query
+      end
     end
   end
   
--- a/test/unit/.svn/text-base/repository_bazaar_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/.svn/text-base/repository_bazaar_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -19,16 +19,19 @@
 
 class RepositoryBazaarTest < ActiveSupport::TestCase
   fixtures :projects
-  
+
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/bazaar_repository'
   REPOSITORY_PATH.gsub!(/\/+/, '/')
 
   def setup
-    @project = Project.find(1)
-    assert @repository = Repository::Bazaar.create(:project => @project, :url => "file:///#{REPOSITORY_PATH}")
+    @project = Project.find(3)
+    @repository = Repository::Bazaar.create(
+              :project => @project, :url => "file:///#{REPOSITORY_PATH}",
+              :log_encoding => 'UTF-8')
+    assert @repository
   end
-  
+
   if File.directory?(REPOSITORY_PATH)  
     def test_fetch_changesets_from_scratch
       @repository.fetch_changesets
@@ -38,7 +41,7 @@
       assert_equal 9, @repository.changes.count
       assert_equal 'Initial import', @repository.changesets.find_by_revision('1').comments
     end
-    
+
     def test_fetch_changesets_incremental
       @repository.fetch_changesets
       # Remove changesets with revision > 5
@@ -49,7 +52,7 @@
       @repository.fetch_changesets
       assert_equal 4, @repository.changesets.count
     end
-    
+
     def test_entries
       entries = @repository.entries
       assert_equal 2, entries.size
@@ -68,19 +71,6 @@
       assert_equal 'file', entries.last.kind
       assert_equal 'edit.png', entries.last.name
     end
-    
-    def test_cat
-      cat = @repository.scm.cat('directory/document.txt')
-      assert cat =~ /Write the contents of a file as of a given revision to standard output/
-    end
-    
-    def test_annotate
-      annotate = @repository.scm.annotate('doc-mkdir.txt')
-      assert_equal 17, annotate.lines.size
-      assert_equal '1', annotate.revisions[0].identifier
-      assert_equal 'jsmith@', annotate.revisions[0].author
-      assert_equal 'mkdir', annotate.lines[0]
-    end
   else
     puts "Bazaar test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/.svn/text-base/repository_cvs_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/.svn/text-base/repository_cvs_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -27,34 +27,64 @@
   MODULE_NAME = 'test'
   
   def setup
-    @project = Project.find(1)
-    assert @repository = Repository::Cvs.create(:project => @project, 
-                                                :root_url => REPOSITORY_PATH,
-                                                :url => MODULE_NAME)
+    @project = Project.find(3)
+    @repository = Repository::Cvs.create(:project => @project, 
+                                         :root_url => REPOSITORY_PATH,
+                                         :url => MODULE_NAME,
+                                         :log_encoding => 'UTF-8')
+    assert @repository
   end
   
   if File.directory?(REPOSITORY_PATH)  
     def test_fetch_changesets_from_scratch
+      assert_equal 0, @repository.changesets.count
       @repository.fetch_changesets
       @repository.reload
       
       assert_equal 5, @repository.changesets.count
       assert_equal 14, @repository.changes.count
       assert_not_nil @repository.changesets.find_by_comments('Two files changed')
+
+      r2 = @repository.changesets.find_by_revision('2')
+      assert_equal 'v1-20071213-162510', r2.scmid
     end
     
     def test_fetch_changesets_incremental
+      assert_equal 0, @repository.changesets.count
       @repository.fetch_changesets
-      # Remove the 3 latest changesets
-      @repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy)
+      # Remove changesets with revision > 3
+      @repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 3}
       @repository.reload
-      assert_equal 2, @repository.changesets.count
-      
+      assert_equal 3, @repository.changesets.count
+      assert_equal %w|3 2 1|, @repository.changesets.collect(&:revision)
+
+      rev3_commit = @repository.changesets.find(:first, :order => 'committed_on DESC')
+      assert_equal '3', rev3_commit.revision
+       # 2007-12-14 01:27:22 +0900
+      rev3_committed_on = Time.gm(2007, 12, 13, 16, 27, 22)
+      assert_equal 'HEAD-20071213-162722', rev3_commit.scmid
+      assert_equal rev3_committed_on, rev3_commit.committed_on
+      latest_rev = @repository.latest_changeset
+      assert_equal rev3_committed_on, latest_rev.committed_on
+
       @repository.fetch_changesets
+      @repository.reload
       assert_equal 5, @repository.changesets.count
+
+      assert_equal %w|5 4 3 2 1|, @repository.changesets.collect(&:revision)
+      rev5_commit = @repository.changesets.find(:first, :order => 'committed_on DESC')
+      assert_equal 'HEAD-20071213-163001', rev5_commit.scmid
+       # 2007-12-14 01:30:01 +0900
+      rev5_committed_on = Time.gm(2007, 12, 13, 16, 30, 1)
+      assert_equal rev5_committed_on, rev5_commit.committed_on
     end
     
     def test_deleted_files_should_not_be_listed
+      assert_equal 0, @repository.changesets.count
+      @repository.fetch_changesets
+      @repository.reload
+      assert_equal 5, @repository.changesets.count
+
       entries = @repository.entries('sources')
       assert entries.detect {|e| e.name == 'watchers_controller.rb'}
       assert_nil entries.detect {|e| e.name == 'welcome_controller.rb'}
--- a/test/unit/.svn/text-base/repository_darcs_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/.svn/text-base/repository_darcs_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -19,25 +19,28 @@
 
 class RepositoryDarcsTest < ActiveSupport::TestCase
   fixtures :projects
-  
+
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/darcs_repository'
-  
+
   def setup
-    @project = Project.find(1)
-    assert @repository = Repository::Darcs.create(:project => @project, :url => REPOSITORY_PATH)
+    @project = Project.find(3)
+    @repository = Repository::Darcs.create(
+                      :project => @project, :url => REPOSITORY_PATH,
+                      :log_encoding => 'UTF-8')
+    assert @repository
   end
-  
+
   if File.directory?(REPOSITORY_PATH)  
     def test_fetch_changesets_from_scratch
       @repository.fetch_changesets
       @repository.reload
-      
+
       assert_equal 6, @repository.changesets.count
       assert_equal 13, @repository.changes.count
       assert_equal "Initial commit.", @repository.changesets.find_by_revision('1').comments
     end
-    
+
     def test_fetch_changesets_incremental
       @repository.fetch_changesets
       # Remove changesets with revision > 3
@@ -48,8 +51,10 @@
       @repository.fetch_changesets
       assert_equal 6, @repository.changesets.count
     end
-    
+
     def test_deleted_files_should_not_be_listed
+      @repository.fetch_changesets
+      @repository.reload
       entries = @repository.entries('sources')
       assert entries.detect {|e| e.name == 'watchers_controller.rb'}
       assert_nil entries.detect {|e| e.name == 'welcome_controller.rb'}
--- a/test/unit/.svn/text-base/repository_git_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/.svn/text-base/repository_git_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -18,25 +18,29 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class RepositoryGitTest < ActiveSupport::TestCase
-  fixtures :projects, :repositories, :enabled_modules, :users, :roles 
-  
+  fixtures :projects, :repositories, :enabled_modules, :users, :roles
+
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
   REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
-  
+
+  FELIX_HEX  = "Felix Sch\xC3\xA4fer"
+
   def setup
-    @project = Project.find(1)
-    assert @repository = Repository::Git.create(:project => @project, :url => REPOSITORY_PATH)
+    Setting.commit_logs_encoding = 'UTF-8'
+    @project = Project.find(3)
+    @repository = Repository::Git.create(:project => @project, :url => REPOSITORY_PATH)
+    assert @repository
   end
-  
+
   if File.directory?(REPOSITORY_PATH)  
     def test_fetch_changesets_from_scratch
       @repository.fetch_changesets
       @repository.reload
-      
-      assert_equal 15, @repository.changesets.count
-      assert_equal 24, @repository.changes.count
-      
+
+      assert_equal 16, @repository.changesets.count
+      assert_equal 25, @repository.changes.count
+
       commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
       assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
       assert_equal "jsmith <jsmith@foo.bar>", commit.committer
@@ -57,10 +61,20 @@
       # Remove the 3 latest changesets
       @repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy)
       @repository.reload
-      assert_equal 12, @repository.changesets.count
-      
+      cs1 = @repository.changesets
+      assert_equal 13, cs1.count
+
+      rev_a_commit = @repository.changesets.find(:first, :order => 'committed_on DESC')
+      assert_equal '4f26664364207fa8b1af9f8722647ab2d4ac5d43', rev_a_commit.revision
+      # Mon Jul 5 22:34:26 2010 +0200
+      rev_a_committed_on = Time.gm(2010, 7, 5, 20, 34, 26)
+      assert_equal '4f26664364207fa8b1af9f8722647ab2d4ac5d43', rev_a_commit.scmid
+      assert_equal rev_a_committed_on, rev_a_commit.committed_on
+      latest_rev = @repository.latest_changeset
+      assert_equal rev_a_committed_on, latest_rev.committed_on
+
       @repository.fetch_changesets
-      assert_equal 15, @repository.changesets.count
+      assert_equal 16, @repository.changesets.count
     end
 
     def test_find_changeset_by_name
@@ -103,6 +117,17 @@
       assert c.event_title.include?('abc7234c:')
       assert_equal 'abc7234cb2750b63f47bff735edc50a1c0a433c2', c.event_url[:rev]
     end
+
+    def test_log_utf8
+      @repository.fetch_changesets
+      @repository.reload
+      str_felix_hex  = FELIX_HEX
+      if str_felix_hex.respond_to?(:force_encoding)
+          str_felix_hex.force_encoding('UTF-8')
+      end
+      c = @repository.changesets.find_by_revision('ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
+      assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
+    end
   else
     puts "Git test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/.svn/text-base/repository_mercurial_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/.svn/text-base/repository_mercurial_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -22,23 +22,23 @@
   
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
-  
+
   def setup
-    @project = Project.find(1)
-    assert @repository = Repository::Mercurial.create(:project => @project, :url => REPOSITORY_PATH)
+    @project = Project.find(3)
+    @repository = Repository::Mercurial.create(:project => @project, :url => REPOSITORY_PATH)
+    assert @repository
   end
-  
+
   if File.directory?(REPOSITORY_PATH)  
     def test_fetch_changesets_from_scratch
       @repository.fetch_changesets
       @repository.reload
-      
       assert_equal 17, @repository.changesets.count
       assert_equal 25, @repository.changes.count
       assert_equal "Initial import.\nThe repository contains 3 files.",
                    @repository.changesets.find_by_revision('0').comments
     end
-    
+
     def test_fetch_changesets_incremental
       @repository.fetch_changesets
       # Remove changesets with revision > 2
@@ -49,19 +49,6 @@
       @repository.fetch_changesets
       assert_equal 17, @repository.changesets.count
     end
-    
-    def test_entries
-      assert_equal 2, @repository.entries("sources", 2).size
-      assert_equal 2, @repository.entries("sources", '400bb8672109').size
-      assert_equal 1, @repository.entries("sources", 3).size
-      assert_equal 1, @repository.entries("sources", 'b3a615152df8').size
-    end
-
-    def test_locate_on_outdated_repository
-      assert_equal 1, @repository.entries("images", 0).size
-      assert_equal 2, @repository.entries("images").size
-      assert_equal 2, @repository.entries("images", 2).size
-    end
 
     def test_isodatesec
       # Template keyword 'isodatesec' supported in Mercurial 1.0 and higher
@@ -171,6 +158,43 @@
       assert c.event_title.include?('123:abc400bb8672:')
       assert_equal 'abc400bb8672', c.event_url[:rev]
     end
+
+    def test_latest_changesets_with_limit
+      @repository.fetch_changesets
+      @repository.reload
+      changesets = @repository.latest_changesets('', nil, 2)
+      assert_equal @repository.latest_changesets('', nil)[0, 2], changesets
+    end
+
+    def test_latest_changesets_with_filepath
+      @repository.fetch_changesets
+      @repository.reload
+      changesets = @repository.latest_changesets('README', nil)
+      assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
+
+      path = 'sql_escape/percent%dir/percent%file1.txt'
+      changesets = @repository.latest_changesets(path, nil)
+      assert_equal %w|11 10 9|, changesets.collect(&:revision)
+
+      path = 'sql_escape/underscore_dir/understrike_file.txt'
+      changesets = @repository.latest_changesets(path, nil)
+      assert_equal %w|12 9|, changesets.collect(&:revision)
+    end
+
+    def test_latest_changesets_with_dirpath
+      @repository.fetch_changesets
+      @repository.reload
+      changesets = @repository.latest_changesets('images', nil)
+      assert_equal %w|1 0|, changesets.collect(&:revision)
+
+      path = 'sql_escape/percent%dir'
+      changesets = @repository.latest_changesets(path, nil)
+      assert_equal %w|13 11 10 9|, changesets.collect(&:revision)
+
+      path = 'sql_escape/underscore_dir'
+      changesets = @repository.latest_changesets(path, nil)
+      assert_equal %w|13 12 9|, changesets.collect(&:revision)
+    end
   else
     puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/.svn/text-base/repository_subversion_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/.svn/text-base/repository_subversion_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -21,8 +21,9 @@
   fixtures :projects, :repositories, :enabled_modules, :users, :roles 
   
   def setup
-    @project = Project.find(1)
-    assert @repository = Repository::Subversion.create(:project => @project, :url => "file:///#{self.class.repository_path('subversion')}")
+    @project = Project.find(3)
+    assert @repository = Repository::Subversion.create(:project => @project,
+             :url => "file://#{self.class.repository_path('subversion')}")
   end
   
   if repository_configured?('subversion')
@@ -74,7 +75,7 @@
     end
 
     def test_directory_listing_with_square_brackets_in_base
-      @project = Project.find(1)
+      @project = Project.find(3)
       @repository = Repository::Subversion.create(:project => @project, :url => "file:///#{self.class.repository_path('subversion')}/subversion_test/[folder_with_brackets]")
 
       @repository.fetch_changesets
@@ -136,6 +137,56 @@
       assert c.event_title.include?('123456789:')
       assert_equal '123456789', c.event_url[:rev]
     end
+
+    def test_log_encoding_ignore_setting
+      with_settings :commit_logs_encoding => 'windows-1252' do
+        s1 = "\xC2\x80"
+        s2 = "\xc3\x82\xc2\x80"
+        if s1.respond_to?(:force_encoding)
+          s3 = s1
+          s4 = s2
+          s1.force_encoding('ASCII-8BIT')
+          s2.force_encoding('ASCII-8BIT')
+          s3.force_encoding('ISO-8859-1')
+          s4.force_encoding('UTF-8')
+          assert_equal s3.encode('UTF-8'), s4
+        end
+        c = Changeset.new(:repository => @repository,
+                          :comments=>s2,
+                          :revision=>'123',
+                          :committed_on => Time.now)
+        assert c.save
+        assert_equal s2, c.comments
+      end
+    end
+
+    def test_previous
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('3')
+      assert_equal @repository.find_changeset_by_name('2'), changeset.previous
+    end
+
+    def test_previous_nil
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('1')
+      assert_nil changeset.previous
+    end
+
+    def test_next
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('2')
+      assert_equal @repository.find_changeset_by_name('3'), changeset.next
+    end
+
+    def test_next_nil
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('11')
+      assert_nil changeset.next
+    end
   else
     puts "Subversion test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/.svn/text-base/repository_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/.svn/text-base/repository_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -125,16 +125,19 @@
     assert_not_equal( comment, changeset.comments )
     assert_equal( 'This is a loooooooooooooooooooooooooooong comment', changeset.comments )
   end
-  
+
   def test_for_urls_strip
-    repository = Repository::Cvs.create(:project => Project.find(4), :url => ' :pserver:login:password@host:/path/to/the/repository',
-                                                                     :root_url => 'foo  ')
+    repository = Repository::Cvs.create(
+        :project => Project.find(4),
+        :url => ' :pserver:login:password@host:/path/to/the/repository',
+        :root_url => 'foo  ',
+        :log_encoding => 'UTF-8')
     assert repository.save
     repository.reload
     assert_equal ':pserver:login:password@host:/path/to/the/repository', repository.url
     assert_equal 'foo', repository.root_url
   end
-  
+
   def test_manual_user_mapping
     assert_no_difference "Changeset.count(:conditions => 'user_id <> 2')" do
       c = Changeset.create!(:repository => @repository, :committer => 'foo', :committed_on => Time.now, :revision => 100, :comments => 'Committed by foo.')
--- a/test/unit/.svn/text-base/user_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/.svn/text-base/user_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -361,7 +361,6 @@
     user = User.try_to_login("admin", "hello")
     assert_kind_of User, user
     assert_equal "admin", user.login
-    assert_equal User.hash_password("hello"), user.hashed_password    
   end
   
   def test_name_format
@@ -383,6 +382,22 @@
     assert_equal nil, user  
   end
   
+  context ".try_to_login" do
+    context "with good credentials" do
+      should "return the user" do
+        user = User.try_to_login("admin", "admin")
+        assert_kind_of User, user
+        assert_equal "admin", user.login
+      end
+    end
+    
+    context "with wrong credentials" do
+      should "return nil" do
+        assert_nil User.try_to_login("admin", "foo")
+      end
+    end
+  end
+  
   if ldap_configured?
     context "#try_to_login using LDAP" do
       context "with failed connection to the LDAP server" do
@@ -672,6 +687,7 @@
       
       should "be false for a user with :only_my_events and isn't an author, creator, or assignee" do
         @user = User.generate_with_protected!(:mail_notification => 'only_my_events')
+        Member.create!(:user => @user, :project => @project, :role_ids => [1])
         assert ! @user.notify_about?(@issue)
       end
       
@@ -704,12 +720,45 @@
         @assignee.update_attribute(:mail_notification, 'only_owner')
         assert ! @assignee.notify_about?(@issue)
       end
+      
+      should "be true for a user with :selected and is the author" do
+        @author.update_attribute(:mail_notification, 'selected')
+        assert @author.notify_about?(@issue)
+      end
+      
+      should "be true for a user with :selected and is the assignee" do
+        @assignee.update_attribute(:mail_notification, 'selected')
+        assert @assignee.notify_about?(@issue)
+      end
+      
+      should "be false for a user with :selected and is not the author or assignee" do
+        @user = User.generate_with_protected!(:mail_notification => 'selected')
+        Member.create!(:user => @user, :project => @project, :role_ids => [1])
+        assert ! @user.notify_about?(@issue)
+      end
     end
 
     context "other events" do
       should 'be added and tested'
     end
   end
+
+  def test_salt_unsalted_passwords
+    # Restore a user with an unsalted password
+    user = User.find(1)
+    user.salt = nil
+    user.hashed_password = User.hash_password("unsalted")
+    user.save!
+    
+    User.salt_unsalted_passwords!
+    
+    user.reload
+    # Salt added
+    assert !user.salt.blank?
+    # Password still valid
+    assert user.check_password?("unsalted")
+    assert_equal user, User.try_to_login(user.login, "unsalted")
+  end
   
   if Object.const_defined?(:OpenID)
     
--- a/test/unit/changeset_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/changeset_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -72,24 +72,40 @@
     Setting.commit_ref_keywords = '*'
     Setting.commit_logtime_enabled = '1'
 
-    c = Changeset.new(:repository => Project.find(1).repository,
-                      :committed_on => 24.hours.ago,
-                      :comments => 'Worked on this issue #1 @2h',
-                      :revision => '520',
-                      :user => User.find(2))
-    assert_difference 'TimeEntry.count' do
-      c.scan_comment_for_issue_ids
+    {
+      '2' => 2.0,
+      '2h' => 2.0,
+      '2hours' => 2.0,
+      '15m' => 0.25,
+      '15min' => 0.25,
+      '3h15' => 3.25,
+      '3h15m' => 3.25,
+      '3h15min' => 3.25,
+      '3:15' => 3.25,
+      '3.25' => 3.25,
+      '3.25h' => 3.25,
+      '3,25' => 3.25,
+      '3,25h' => 3.25,
+    }.each do |syntax, expected_hours|
+      c = Changeset.new(:repository => Project.find(1).repository,
+                        :committed_on => 24.hours.ago,
+                        :comments => "Worked on this issue #1 @#{syntax}",
+                        :revision => '520',
+                        :user => User.find(2))
+      assert_difference 'TimeEntry.count' do
+        c.scan_comment_for_issue_ids
+      end
+      assert_equal [1], c.issue_ids.sort
+      
+      time = TimeEntry.first(:order => 'id desc')
+      assert_equal 1, time.issue_id
+      assert_equal 1, time.project_id
+      assert_equal 2, time.user_id
+      assert_equal expected_hours, time.hours, "@#{syntax} should be logged as #{expected_hours} hours but was #{time.hours}"
+      assert_equal Date.yesterday, time.spent_on
+      assert time.activity.is_default?
+      assert time.comments.include?('r520'), "r520 was expected in time_entry comments: #{time.comments}"
     end
-    assert_equal [1], c.issue_ids.sort
-    
-    time = TimeEntry.first(:order => 'id desc')
-    assert_equal 1, time.issue_id
-    assert_equal 1, time.project_id
-    assert_equal 2, time.user_id
-    assert_equal 2.0, time.hours
-    assert_equal Date.yesterday, time.spent_on
-    assert time.activity.is_default?
-    assert time.comments.include?('r520'), "r520 was expected in time_entry comments: #{time.comments}"
   end
   
   def test_ref_keywords_closing_with_timelog
@@ -100,7 +116,7 @@
     
     c = Changeset.new(:repository => Project.find(1).repository,
                       :committed_on => Time.now,
-                      :comments => 'This is a comment. Fixes #1 @2.5, #2 @1',
+                      :comments => 'This is a comment. Fixes #1 @4.5, #2 @1',
                       :user => User.find(2))
     assert_difference 'TimeEntry.count', 2 do
       c.scan_comment_for_issue_ids
@@ -169,12 +185,12 @@
     assert_equal [2], c.issue_ids.sort
     assert c.issues.first.project != c.project
   end
-  
+
   def test_text_tag_revision
     c = Changeset.new(:revision => '520')
     assert_equal 'r520', c.text_tag
   end
-  
+
   def test_text_tag_hash
     c = Changeset.new(:scmid => '7234cb2750b63f47bff735edc50a1c0a433c2518', :revision => '7234cb2750b63f47bff735edc50a1c0a433c2518')
     assert_equal 'commit:7234cb2750b63f47bff735edc50a1c0a433c2518', c.text_tag
@@ -204,19 +220,67 @@
     changeset = Changeset.find_by_revision('10')
     assert_nil changeset.next
   end
-  
+
   def test_comments_should_be_converted_to_utf8
-    with_settings :commit_logs_encoding => 'ISO-8859-1' do
-      c = Changeset.new
-      c.comments = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
+      proj = Project.find(3)
+      str = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
+      r = Repository::Bazaar.create!(
+            :project => proj, :url => '/tmp/test/bazaar',
+            :log_encoding => 'ISO-8859-1' )
+      assert r
+      c = Changeset.new(:repository => r,
+                        :committed_on => Time.now,
+                        :revision => '123',
+                        :scmid => '12345',
+                        :comments => str)
+      assert( c.save )
       assert_equal "Texte encodé en ISO-8859-1.", c.comments
-    end
   end
-  
+
   def test_invalid_utf8_sequences_in_comments_should_be_stripped
-    c = Changeset.new
-    c.comments = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
-    assert_equal "Texte encod en ISO-8859-1.", c.comments
+      proj = Project.find(3)
+      str = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
+      r = Repository::Bazaar.create!(
+            :project => proj, :url => '/tmp/test/bazaar',
+            :log_encoding => 'UTF-8' )
+      assert r
+      c = Changeset.new(:repository => r,
+                        :committed_on => Time.now,
+                        :revision => '123',
+                        :scmid => '12345',
+                        :comments => str)
+      assert( c.save )
+      if str.respond_to?(:force_encoding)
+        assert_equal "Texte encod? en ISO-8859-1.", c.comments
+      else
+        assert_equal "Texte encod en ISO-8859-1.", c.comments
+      end
+  end
+
+  def test_comments_should_be_converted_all_latin1_to_utf8
+      s1 = "\xC2\x80"
+      s2 = "\xc3\x82\xc2\x80"
+      if s1.respond_to?(:force_encoding)
+        s3 = s1
+        s4 = s2
+        s1.force_encoding('ASCII-8BIT')
+        s2.force_encoding('ASCII-8BIT')
+        s3.force_encoding('ISO-8859-1')
+        s4.force_encoding('UTF-8')
+        assert_equal s3.encode('UTF-8'), s4
+      end
+      proj = Project.find(3)
+      r = Repository::Bazaar.create!(
+            :project => proj, :url => '/tmp/test/bazaar',
+            :log_encoding => 'ISO-8859-1' )
+      assert r
+      c = Changeset.new(:repository => r,
+                        :committed_on => Time.now,
+                        :revision => '123',
+                        :scmid => '12345',
+                        :comments => s1)
+      assert( c.save )
+      assert_equal s2, c.comments
   end
 
   def test_identifier
--- a/test/unit/helpers/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/helpers/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 42
-/svn/!svn/ver/4696/trunk/test/unit/helpers
+/svn/!svn/ver/4982/trunk/test/unit/helpers
+END
+repository_helper_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/4932/trunk/test/unit/helpers/repository_helper_test.rb
 END
 custom_fields_helper_test.rb
 K 25
@@ -25,7 +31,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 69
-/svn/!svn/ver/4696/trunk/test/unit/helpers/application_helper_test.rb
+/svn/!svn/ver/4982/trunk/test/unit/helpers/application_helper_test.rb
 END
 search_helper_test.rb
 K 25
--- a/test/unit/helpers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/helpers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/unit/helpers
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-11T16:03:24.486964Z
-4696
+2011-03-01T10:27:30.170724Z
+4982
 tmaruyama
 
 
@@ -26,13 +26,47 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
+repository_helper_test.rb
+file
+
+
+
+
+2011-03-03T11:40:17.000000Z
+657e0f9ae00af3978571139525631dcc
+2011-02-23T07:04:52.071012Z
+4932
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2288
+
 custom_fields_helper_test.rb
 file
 
 
 
 
-2011-01-13T14:08:13.000000Z
+2011-03-03T11:05:08.000000Z
 0091346b4a944910faf5733e2ed88a76
 2010-12-12T23:24:34.194336Z
 4509
@@ -66,7 +100,7 @@
 
 
 
-2011-01-13T14:08:13.000000Z
+2011-03-03T11:05:08.000000Z
 ac087c4ae8e6354c77ef7189351ce220
 2010-12-12T23:24:34.194336Z
 4509
@@ -100,7 +134,7 @@
 
 
 
-2010-09-23T14:37:45.483825Z
+2011-03-03T11:05:08.000000Z
 2c72db60f744a7dec4600df692c40766
 2010-08-11T14:42:10.119704Z
 3936
@@ -134,10 +168,10 @@
 
 
 
-2011-01-13T14:08:13.000000Z
-29c11d5b78186bda781c09791622a62f
-2011-01-11T16:03:24.486964Z
-4696
+2011-03-03T11:40:17.000000Z
+1f311492ce81d8708bef3193e684f98d
+2011-03-01T10:27:30.170724Z
+4982
 tmaruyama
 has-props
 
@@ -160,7 +194,7 @@
 
 
 
-33335
+35024
 
 search_helper_test.rb
 file
@@ -168,7 +202,7 @@
 
 
 
-2011-01-13T14:08:13.000000Z
+2011-03-03T11:05:08.000000Z
 9eb29557d249537fed237c15e1b1b65b
 2010-12-12T23:24:34.194336Z
 4509
@@ -202,7 +236,7 @@
 
 
 
-2011-01-13T14:08:13.000000Z
+2011-03-03T11:05:08.000000Z
 fd65c7c018eb59b2d8697ebeb6b7ba71
 2010-12-12T23:24:34.194336Z
 4509
@@ -236,7 +270,7 @@
 
 
 
-2011-01-13T14:08:13.000000Z
+2011-03-03T11:05:08.000000Z
 93f6f6ca679f5c32988254776b6d09ae
 2010-12-12T23:24:34.194336Z
 4509
@@ -270,7 +304,7 @@
 
 
 
-2011-01-13T14:08:13.000000Z
+2011-03-03T11:05:08.000000Z
 b26d2e82551d9f01c0394400ffd85136
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/unit/helpers/.svn/text-base/application_helper_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/helpers/.svn/text-base/application_helper_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -200,7 +200,7 @@
       'export:/some/file'           => link_to('export:/some/file', source_url.merge(:format => 'raw'), :class => 'source download'),
       # message
       'message#4'                   => link_to('Post 2', message_url, :class => 'message'),
-      'message#5'                   => link_to('RE: post 2', message_url.merge(:anchor => 'message-5'), :class => 'message'),
+      'message#5'                   => link_to('RE: post 2', message_url.merge(:anchor => 'message-5', :r => 5), :class => 'message'),
       # project
       'project#3'                   => link_to('eCookbook Subproject 1', project_url, :class => 'project'),
       'project:subproject1'         => link_to('eCookbook Subproject 1', project_url, :class => 'project'),
@@ -224,6 +224,35 @@
     @project = Project.find(1)
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text), "#{text} failed" }
   end
+  
+  def test_cross_project_redmine_links
+    source_link = link_to('ecookbook:source:/some/file', {:controller => 'repositories', :action => 'entry', :id => 'ecookbook', :path => ['some', 'file']},
+      :class => 'source')
+    
+    changeset_link = link_to('ecookbook:r2', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :rev => 2},
+      :class => 'changeset', :title => 'This commit fixes #1, #2 and references #1 & #3')
+                                   
+    to_test = {
+      # documents
+      'document:"Test document"'              => 'document:"Test document"',
+      'ecookbook:document:"Test document"'    => '<a href="/documents/1" class="document">Test document</a>',
+      'invalid:document:"Test document"'      => 'invalid:document:"Test document"',
+      # versions
+      'version:"1.0"'                         => 'version:"1.0"',
+      'ecookbook:version:"1.0"'               => '<a href="/versions/show/2" class="version">1.0</a>',
+      'invalid:version:"1.0"'                 => 'invalid:version:"1.0"',
+      # changeset
+      'r2'                                    => 'r2',
+      'ecookbook:r2'                          => changeset_link,
+      'invalid:r2'                            => 'invalid:r2',
+      # source
+      'source:/some/file'                     => 'source:/some/file',
+      'ecookbook:source:/some/file'           => source_link,
+      'invalid:source:/some/file'             => 'invalid:source:/some/file',
+    }
+    @project = Project.find(3)
+    to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text), "#{text} failed" }
+  end
 
   def test_redmine_links_git_commit
     changeset_link = link_to('abcd',
@@ -263,7 +292,9 @@
       'commit:20080308225258-98289-abcd456efg.gz' => changeset_link,
      }
     @project = Project.find(3)
-    r = Repository::Darcs.create!(:project => @project, :url => '/tmp/test/darcs')
+    r = Repository::Darcs.create!(
+            :project => @project, :url => '/tmp/test/darcs',
+            :log_encoding => 'UTF-8')
     assert r
     c = Changeset.new(:repository => r,
                       :committed_on => Time.now,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/helpers/.svn/text-base/repository_helper_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,68 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.expand_path('../../../test_helper', __FILE__)
+
+class RepositoryHelperTest < HelperTestCase
+  include RepositoriesHelper
+
+  def test_from_latin1_to_utf8
+    with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
+      s1 = "Texte encod\xc3\xa9"
+      s2 = "Texte encod\xe9"
+      s3 = s2
+      if s1.respond_to?(:force_encoding)
+        s1.force_encoding("UTF-8")
+        s2.force_encoding("ASCII-8BIT")
+        s3.force_encoding("UTF-8")
+      end
+      assert_equal s1, to_utf8(s2)
+      assert_equal s1, to_utf8(s3)
+    end
+  end
+
+  def test_from_euc_jp_to_utf8
+    with_settings :repositories_encodings => 'UTF-8,EUC-JP' do
+      s1 = "\xe3\x83\xac\xe3\x83\x83\xe3\x83\x89\xe3\x83\x9e\xe3\x82\xa4\xe3\x83\xb3"
+      s2 = "\xa5\xec\xa5\xc3\xa5\xc9\xa5\xde\xa5\xa4\xa5\xf3"
+      s3 = s2
+      if s1.respond_to?(:force_encoding)
+        s1.force_encoding("UTF-8")
+        s2.force_encoding("ASCII-8BIT")
+        s3.force_encoding("UTF-8")
+      end
+      assert_equal s1, to_utf8(s2)
+      assert_equal s1, to_utf8(s3)
+    end
+  end
+
+  def test_to_utf8_should_be_converted_all_latin1_to_utf8
+    with_settings :repositories_encodings => 'ISO-8859-1' do
+      s1 = "\xc3\x82\xc2\x80"
+      s2 = "\xC2\x80"
+      s3 = s2
+      if s1.respond_to?(:force_encoding)
+        s1.force_encoding("UTF-8")
+        s2.force_encoding("ASCII-8BIT")
+        s3.force_encoding("UTF-8")
+      end
+      assert_equal s1, to_utf8(s2)
+      assert_equal s1, to_utf8(s3)
+    end
+  end
+end
+
--- a/test/unit/helpers/application_helper_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/helpers/application_helper_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -200,7 +200,7 @@
       'export:/some/file'           => link_to('export:/some/file', source_url.merge(:format => 'raw'), :class => 'source download'),
       # message
       'message#4'                   => link_to('Post 2', message_url, :class => 'message'),
-      'message#5'                   => link_to('RE: post 2', message_url.merge(:anchor => 'message-5'), :class => 'message'),
+      'message#5'                   => link_to('RE: post 2', message_url.merge(:anchor => 'message-5', :r => 5), :class => 'message'),
       # project
       'project#3'                   => link_to('eCookbook Subproject 1', project_url, :class => 'project'),
       'project:subproject1'         => link_to('eCookbook Subproject 1', project_url, :class => 'project'),
@@ -224,6 +224,35 @@
     @project = Project.find(1)
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text), "#{text} failed" }
   end
+  
+  def test_cross_project_redmine_links
+    source_link = link_to('ecookbook:source:/some/file', {:controller => 'repositories', :action => 'entry', :id => 'ecookbook', :path => ['some', 'file']},
+      :class => 'source')
+    
+    changeset_link = link_to('ecookbook:r2', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :rev => 2},
+      :class => 'changeset', :title => 'This commit fixes #1, #2 and references #1 & #3')
+                                   
+    to_test = {
+      # documents
+      'document:"Test document"'              => 'document:"Test document"',
+      'ecookbook:document:"Test document"'    => '<a href="/documents/1" class="document">Test document</a>',
+      'invalid:document:"Test document"'      => 'invalid:document:"Test document"',
+      # versions
+      'version:"1.0"'                         => 'version:"1.0"',
+      'ecookbook:version:"1.0"'               => '<a href="/versions/show/2" class="version">1.0</a>',
+      'invalid:version:"1.0"'                 => 'invalid:version:"1.0"',
+      # changeset
+      'r2'                                    => 'r2',
+      'ecookbook:r2'                          => changeset_link,
+      'invalid:r2'                            => 'invalid:r2',
+      # source
+      'source:/some/file'                     => 'source:/some/file',
+      'ecookbook:source:/some/file'           => source_link,
+      'invalid:source:/some/file'             => 'invalid:source:/some/file',
+    }
+    @project = Project.find(3)
+    to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text), "#{text} failed" }
+  end
 
   def test_redmine_links_git_commit
     changeset_link = link_to('abcd',
@@ -263,7 +292,9 @@
       'commit:20080308225258-98289-abcd456efg.gz' => changeset_link,
      }
     @project = Project.find(3)
-    r = Repository::Darcs.create!(:project => @project, :url => '/tmp/test/darcs')
+    r = Repository::Darcs.create!(
+            :project => @project, :url => '/tmp/test/darcs',
+            :log_encoding => 'UTF-8')
     assert r
     c = Changeset.new(:repository => r,
                       :committed_on => Time.now,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/helpers/repository_helper_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,68 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.expand_path('../../../test_helper', __FILE__)
+
+class RepositoryHelperTest < HelperTestCase
+  include RepositoriesHelper
+
+  def test_from_latin1_to_utf8
+    with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
+      s1 = "Texte encod\xc3\xa9"
+      s2 = "Texte encod\xe9"
+      s3 = s2
+      if s1.respond_to?(:force_encoding)
+        s1.force_encoding("UTF-8")
+        s2.force_encoding("ASCII-8BIT")
+        s3.force_encoding("UTF-8")
+      end
+      assert_equal s1, to_utf8(s2)
+      assert_equal s1, to_utf8(s3)
+    end
+  end
+
+  def test_from_euc_jp_to_utf8
+    with_settings :repositories_encodings => 'UTF-8,EUC-JP' do
+      s1 = "\xe3\x83\xac\xe3\x83\x83\xe3\x83\x89\xe3\x83\x9e\xe3\x82\xa4\xe3\x83\xb3"
+      s2 = "\xa5\xec\xa5\xc3\xa5\xc9\xa5\xde\xa5\xa4\xa5\xf3"
+      s3 = s2
+      if s1.respond_to?(:force_encoding)
+        s1.force_encoding("UTF-8")
+        s2.force_encoding("ASCII-8BIT")
+        s3.force_encoding("UTF-8")
+      end
+      assert_equal s1, to_utf8(s2)
+      assert_equal s1, to_utf8(s3)
+    end
+  end
+
+  def test_to_utf8_should_be_converted_all_latin1_to_utf8
+    with_settings :repositories_encodings => 'ISO-8859-1' do
+      s1 = "\xc3\x82\xc2\x80"
+      s2 = "\xC2\x80"
+      s3 = s2
+      if s1.respond_to?(:force_encoding)
+        s1.force_encoding("UTF-8")
+        s2.force_encoding("ASCII-8BIT")
+        s3.force_encoding("UTF-8")
+      end
+      assert_equal s1, to_utf8(s2)
+      assert_equal s1, to_utf8(s3)
+    end
+  end
+end
+
--- a/test/unit/issue_nested_set_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/issue_nested_set_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -202,7 +202,19 @@
     issue2 = create_issue!
     issue3 = create_issue!(:parent_issue_id => issue2.id)
     issue4 = create_issue!(:parent_issue_id => issue1.id)
-    issue2.reload.destroy
+    
+    issue3.init_journal(User.find(2))
+    issue3.subject = 'child with journal'
+    issue3.save!
+    
+    assert_difference 'Issue.count', -2 do
+      assert_difference 'Journal.count', -1 do
+        assert_difference 'JournalDetail.count', -1 do
+          Issue.find(issue2.id).destroy
+        end
+      end
+    end
+    
     issue1.reload
     issue4.reload
     assert !Issue.exists?(issue2.id)
@@ -211,6 +223,26 @@
     assert_equal [issue1.id, 2, 3], [issue4.root_id, issue4.lft, issue4.rgt]
   end
   
+  def test_destroy_child_issue_with_children
+    root = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'root')
+    child = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'child', :parent_issue_id => root.id)
+    leaf = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'leaf', :parent_issue_id => child.id)
+    leaf.init_journal(User.find(2))
+    leaf.subject = 'leaf with journal'
+    leaf.save!
+    
+    assert_difference 'Issue.count', -2 do
+      assert_difference 'Journal.count', -1 do
+        assert_difference 'JournalDetail.count', -1 do
+          Issue.find(child.id).destroy
+        end
+      end
+    end
+    
+    root = Issue.find(root.id)
+    assert root.leaf?, "Root issue is not a leaf (lft: #{root.lft}, rgt: #{root.rgt})"
+  end
+  
   def test_parent_priority_should_be_the_highest_child_priority
     parent = create_issue!(:priority => IssuePriority.find_by_name('Normal'))
     # Create children
--- a/test/unit/issue_status_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/issue_status_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -18,7 +18,7 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class IssueStatusTest < ActiveSupport::TestCase
-  fixtures :issue_statuses, :issues
+  fixtures :issue_statuses, :issues, :roles, :trackers
 
   def test_create
     status = IssueStatus.new :name => "Assigned"
@@ -68,6 +68,30 @@
     status.reload
     assert status.is_default?
   end
+  
+  def test_new_statuses_allowed_to
+    Workflow.delete_all
+    
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 2, :author => false, :assignee => false)
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3, :author => true, :assignee => false)
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4, :author => false, :assignee => true)
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 5, :author => true, :assignee => true)
+    status = IssueStatus.find(1)
+    role = Role.find(1)
+    tracker = Tracker.find(1)
+
+    assert_equal [2], status.new_statuses_allowed_to([role], tracker, false, false).map(&:id)
+    assert_equal [2], status.find_new_statuses_allowed_to([role], tracker, false, false).map(&:id)
+    
+    assert_equal [2, 3], status.new_statuses_allowed_to([role], tracker, true, false).map(&:id)
+    assert_equal [2, 3], status.find_new_statuses_allowed_to([role], tracker, true, false).map(&:id)
+    
+    assert_equal [2, 4], status.new_statuses_allowed_to([role], tracker, false, true).map(&:id)
+    assert_equal [2, 4], status.find_new_statuses_allowed_to([role], tracker, false, true).map(&:id)
+    
+    assert_equal [2, 3, 4, 5], status.new_statuses_allowed_to([role], tracker, true, true).map(&:id)
+    assert_equal [2, 3, 4, 5], status.find_new_statuses_allowed_to([role], tracker, true, true).map(&:id)
+  end
 
   context "#update_done_ratios" do
     setup do
--- a/test/unit/issue_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/issue_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -210,6 +210,33 @@
     assert_equal IssueCategory.find(1).assigned_to, issue.assigned_to
   end
   
+  
+  
+  def test_new_statuses_allowed_to
+    Workflow.delete_all
+    
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 2, :author => false, :assignee => false)
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3, :author => true, :assignee => false)
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4, :author => false, :assignee => true)
+    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 5, :author => true, :assignee => true)
+    status = IssueStatus.find(1)
+    role = Role.find(1)
+    tracker = Tracker.find(1)
+    user = User.find(2)
+    
+    issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1)
+    assert_equal [1, 2], issue.new_statuses_allowed_to(user).map(&:id)
+    
+    issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :author => user)
+    assert_equal [1, 2, 3], issue.new_statuses_allowed_to(user).map(&:id)
+    
+    issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :assigned_to => user)
+    assert_equal [1, 2, 4], issue.new_statuses_allowed_to(user).map(&:id)
+    
+    issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :author => user, :assigned_to => user)
+    assert_equal [1, 2, 3, 4, 5], issue.new_statuses_allowed_to(user).map(&:id)
+  end
+  
   def test_copy
     issue = Issue.new.copy_from(1)
     assert issue.save
@@ -594,6 +621,29 @@
     assert ActionMailer::Base.deliveries.empty?
   end
   
+  def test_journalized_description
+    IssueCustomField.delete_all
+    
+    i = Issue.first
+    old_description = i.description
+    new_description = "This is the new description"
+    
+    i.init_journal(User.find(2))
+    i.description = new_description
+    assert_difference 'Journal.count', 1 do
+      assert_difference 'JournalDetail.count', 1 do
+        i.save!
+      end
+    end
+    
+    detail = JournalDetail.first(:order => 'id DESC')
+    assert_equal i, detail.journal.journalized
+    assert_equal 'attr', detail.property
+    assert_equal 'description', detail.prop_key
+    assert_equal old_description, detail.old_value
+    assert_equal new_description, detail.value
+  end
+  
   def test_saving_twice_should_not_duplicate_journal_details
     i = Issue.find(:first)
     i.init_journal(User.find(2), 'Some notes')
--- a/test/unit/lib/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 38
-/svn/!svn/ver/4705/trunk/test/unit/lib
+/svn/!svn/ver/4964/trunk/test/unit/lib
 END
 redmine_test.rb
 K 25
--- a/test/unit/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-13T12:05:11.734883Z
-4705
+2011-02-28T14:12:47.115180Z
+4964
 tmaruyama
 
 
@@ -35,7 +35,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 eec42202798f1936d0e12c27f43f9add
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/unit/lib/redmine/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,13 @@
 K 25
 svn:wc:ra_dav:version-url
 V 46
-/svn/!svn/ver/4705/trunk/test/unit/lib/redmine
+/svn/!svn/ver/4964/trunk/test/unit/lib/redmine
+END
+wiki_formatting.rb
+K 25
+svn:wc:ra_dav:version-url
+V 65
+/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/wiki_formatting.rb
 END
 menu_manager_test.rb
 K 25
@@ -15,17 +21,11 @@
 V 61
 /svn/!svn/ver/4509/trunk/test/unit/lib/redmine/plugin_test.rb
 END
-wiki_formatting.rb
-K 25
-svn:wc:ra_dav:version-url
-V 65
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/wiki_formatting.rb
-END
 i18n_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/4679/trunk/test/unit/lib/redmine/i18n_test.rb
+/svn/!svn/ver/4894/trunk/test/unit/lib/redmine/i18n_test.rb
 END
 hook_test.rb
 K 25
@@ -51,17 +51,29 @@
 V 61
 /svn/!svn/ver/4509/trunk/test/unit/lib/redmine/themes_test.rb
 END
+configuration_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 68
+/svn/!svn/ver/4949/trunk/test/unit/lib/redmine/configuration_test.rb
+END
 mime_type_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 64
 /svn/!svn/ver/4509/trunk/test/unit/lib/redmine/mime_type_test.rb
 END
+ciphering_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 64
+/svn/!svn/ver/4950/trunk/test/unit/lib/redmine/ciphering_test.rb
+END
 unified_diff_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 67
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/unified_diff_test.rb
+/svn/!svn/ver/4929/trunk/test/unit/lib/redmine/unified_diff_test.rb
 END
 notifiable_test.rb
 K 25
--- a/test/unit/lib/redmine/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-13T12:05:11.734883Z
-4705
+2011-02-28T14:12:47.115180Z
+4964
 tmaruyama
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-01-13T14:08:14.000000Z
-9aeca8ed785b33fdf901312133798b8b
-2011-01-10T18:25:12.105765Z
-4679
+2011-03-03T11:40:17.000000Z
+4368129679eec86fab2cd631de3b8cc5
+2011-02-20T14:56:37.399906Z
+4894
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-4202
+4952
 
 scm
 dir
@@ -69,7 +69,7 @@
 
 
 
-2011-01-13T14:08:14.000000Z
+2011-03-03T11:05:08.000000Z
 761d6ebcd277ba4a1d0a2216a7fe8925
 2010-12-12T23:24:34.194336Z
 4509
@@ -103,7 +103,7 @@
 
 
 
-2011-01-13T14:08:14.000000Z
+2011-03-03T11:05:08.000000Z
 2e952466cca65bea9ea095ad2ec01811
 2010-12-12T23:24:34.194336Z
 4509
@@ -137,7 +137,7 @@
 
 
 
-2011-01-13T14:08:14.000000Z
+2011-03-03T11:05:08.000000Z
 161e4b78a0d1cdfd67d5bd54f6480726
 2010-12-12T23:24:34.194336Z
 4509
@@ -174,13 +174,81 @@
 menu_manager
 dir
 
+plugin_test.rb
+file
+
+
+
+
+2011-03-03T11:05:08.000000Z
+d2f2e4457ed4eda1b5efb8a41a3de255
+2010-12-12T23:24:34.194336Z
+4509
+jbbarth
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4168
+
+menu_manager_test.rb
+file
+
+
+
+
+2011-03-03T11:05:08.000000Z
+1a6043d0994b5fb4a09f3962ab5542ce
+2010-12-12T23:24:34.194336Z
+4509
+jbbarth
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1044
+
 wiki_formatting.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 22afe4f1981d3d856beef3275f95f243
 2010-12-12T23:24:34.194336Z
 4509
@@ -208,81 +276,13 @@
 
 1966
 
-plugin_test.rb
-file
-
-
-
-
-2011-01-13T14:09:08.000000Z
-d2f2e4457ed4eda1b5efb8a41a3de255
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4168
-
-menu_manager_test.rb
-file
-
-
-
-
-2011-01-13T14:09:08.000000Z
-1a6043d0994b5fb4a09f3962ab5542ce
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1044
-
 hook_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 6b610cfc1e3e51f457eea06a6e6fb9a0
 2010-12-12T23:24:34.194336Z
 4509
@@ -310,16 +310,13 @@
 
 5741
 
-helpers
-dir
-
 access_control_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 6682bde90d30369ef1d27b806391134f
 2010-12-12T23:24:34.194336Z
 4509
@@ -347,17 +344,88 @@
 
 1801
 
+helpers
+dir
+
+configuration_test.rb
+file
+
+
+
+
+2011-03-03T11:40:17.000000Z
+d96ffe5035b073e1dffdb3f01fe8e06e
+2011-02-25T14:30:05.998365Z
+4949
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1877
+
+ciphering_test.rb
+file
+
+
+
+
+2011-03-03T11:40:17.000000Z
+c2c353211cdd7cf9a87b9102e26b8d14
+2011-02-26T13:09:25.657748Z
+4950
+jplang
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3125
+
 unified_diff_test.rb
 file
 
 
 
 
-2011-01-13T14:09:08.000000Z
-247766b1dcc53d063207850027e6f78d
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-03-03T11:40:17.000000Z
+6b58d3612b430c0757566b1cd6bfcda0
+2011-02-23T07:03:45.049119Z
+4929
+tmaruyama
 has-props
 
 
@@ -379,7 +447,7 @@
 
 
 
-1923
+2455
 
 notifiable_test.rb
 file
@@ -387,7 +455,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 562f9308fbaa71c0ef605a5cfe24d3a5
 2010-12-12T23:24:34.194336Z
 4509
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/.svn/prop-base/ciphering_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/.svn/prop-base/configuration_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 13
+svn:eol-style
+V 6
+native
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/.svn/text-base/ciphering_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,84 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.expand_path('../../../../test_helper', __FILE__)
+
+class Redmine::CipheringTest < ActiveSupport::TestCase
+  
+  def test_password_should_be_encrypted
+    Redmine::Configuration.with 'database_cipher_key' => 'secret' do
+      r = Repository::Subversion.generate!(:password => 'foo')
+      assert_equal 'foo', r.password
+      assert r.read_attribute(:password).match(/\Aaes-256-cbc:.+\Z/)
+    end
+  end
+  
+  def test_password_should_be_clear_with_blank_key
+    Redmine::Configuration.with 'database_cipher_key' => '' do
+      r = Repository::Subversion.generate!(:password => 'foo')
+      assert_equal 'foo', r.password
+      assert_equal 'foo', r.read_attribute(:password)
+    end
+  end
+  
+  def test_password_should_be_clear_with_nil_key
+    Redmine::Configuration.with 'database_cipher_key' => nil do
+      r = Repository::Subversion.generate!(:password => 'foo')
+      assert_equal 'foo', r.password
+      assert_equal 'foo', r.read_attribute(:password)
+    end
+  end
+  
+  def test_unciphered_password_should_be_readable
+    Redmine::Configuration.with 'database_cipher_key' => nil do
+      r = Repository::Subversion.generate!(:password => 'clear')
+    end
+    
+    Redmine::Configuration.with 'database_cipher_key' => 'secret' do
+      r = Repository.first(:order => 'id DESC')
+      assert_equal 'clear', r.password
+    end
+  end
+  
+  def test_encrypt_all
+    Repository.delete_all
+    Redmine::Configuration.with 'database_cipher_key' => nil do
+      Repository::Subversion.generate!(:password => 'foo')
+      Repository::Subversion.generate!(:password => 'bar')
+    end
+    
+    Redmine::Configuration.with 'database_cipher_key' => 'secret' do
+      assert Repository.encrypt_all(:password)
+      r = Repository.first(:order => 'id DESC')
+      assert_equal 'bar', r.password
+      assert r.read_attribute(:password).match(/\Aaes-256-cbc:.+\Z/)
+    end
+  end
+  
+  def test_decrypt_all
+    Repository.delete_all
+    Redmine::Configuration.with 'database_cipher_key' => 'secret' do
+      Repository::Subversion.generate!(:password => 'foo')
+      Repository::Subversion.generate!(:password => 'bar')
+      
+      assert Repository.decrypt_all(:password)
+      r = Repository.first(:order => 'id DESC')
+      assert_equal 'bar', r.password
+      assert_equal 'bar', r.read_attribute(:password)
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/.svn/text-base/configuration_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,61 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.expand_path('../../../../test_helper', __FILE__)
+
+class Redmine::ConfigurationTest < ActiveSupport::TestCase
+  def setup
+    @conf = Redmine::Configuration
+  end
+
+  def test_empty
+    assert_kind_of Hash, load_conf('empty.yml', 'test')
+  end
+  
+  def test_default
+    assert_kind_of Hash, load_conf('default.yml', 'test')
+    assert_equal 'foo', @conf['somesetting']
+  end
+  
+  def test_no_default
+    assert_kind_of Hash, load_conf('no_default.yml', 'test')
+    assert_equal 'foo', @conf['somesetting']
+  end
+  
+  def test_overrides
+    assert_kind_of Hash, load_conf('overrides.yml', 'test')
+    assert_equal 'bar', @conf['somesetting']
+  end
+  
+  def test_with
+    load_conf('default.yml', 'test')
+    assert_equal 'foo', @conf['somesetting']
+    @conf.with 'somesetting' => 'bar' do
+      assert_equal 'bar', @conf['somesetting']
+    end
+    assert_equal 'foo', @conf['somesetting']
+  end
+  
+  private
+  
+  def load_conf(file, env)
+    @conf.load(
+      :file => File.join(Rails.root, 'test', 'fixtures', 'configuration', file),
+      :env => env
+    )
+  end
+end
--- a/test/unit/lib/redmine/.svn/text-base/i18n_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/.svn/text-base/i18n_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -58,13 +58,36 @@
     end
   end
   
+  def test_time_format
+    set_language_if_valid 'en'
+    now = Time.parse('2011-02-20 15:45:22')
+    with_settings :time_format => '%H:%M' do
+      with_settings :date_format => '' do
+        assert_equal '02/20/2011 15:45', format_time(now)
+        assert_equal '15:45', format_time(now, false)
+      end
+      
+      with_settings :date_format => '%Y-%m-%d' do
+        assert_equal '2011-02-20 15:45', format_time(now)
+        assert_equal '15:45', format_time(now, false)
+      end
+    end
+  end
+  
   def test_time_format_default
     set_language_if_valid 'en'
-    now = Time.now
-    Setting.date_format = ''
-    Setting.time_format = ''    
-    assert_equal I18n.l(now), format_time(now)
-    assert_equal I18n.l(now, :format => :time), format_time(now, false)
+    now = Time.parse('2011-02-20 15:45:22')
+    with_settings :time_format => '' do
+      with_settings :date_format => '' do
+        assert_equal '02/20/2011 03:45 pm', format_time(now)
+        assert_equal '03:45 pm', format_time(now, false)
+      end
+      
+      with_settings :date_format => '%Y-%m-%d' do
+        assert_equal '2011-02-20 03:45 pm', format_time(now)
+        assert_equal '03:45 pm', format_time(now, false)
+      end
+    end
   end
   
   def test_time_format
--- a/test/unit/lib/redmine/.svn/text-base/unified_diff_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/.svn/text-base/unified_diff_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -60,8 +60,39 @@
     assert_equal 1, diff.size
   end
 
+  def test_one_line_new_files
+    diff = Redmine::UnifiedDiff.new(<<-DIFF
+diff -r 000000000000 -r ea98b14f75f0 README1
+--- /dev/null
++++ b/README1
+@@ -0,0 +1,1 @@
++test1
+diff -r 000000000000 -r ea98b14f75f0 README2
+--- /dev/null
++++ b/README2
+@@ -0,0 +1,1 @@
++test2
+diff -r 000000000000 -r ea98b14f75f0 README3
+--- /dev/null
++++ b/README3
+@@ -0,0 +1,3 @@
++test4
++test5
++test6
+diff -r 000000000000 -r ea98b14f75f0 README4
+--- /dev/null
++++ b/README4
+@@ -0,0 +1,3 @@
++test4
++test5
++test6
+DIFF
+    )
+    assert_equal 4, diff.size
+  end
+
   private
-  
+
   def read_diff_fixture(filename)
     File.new(File.join(File.dirname(__FILE__), '/../../../fixtures/diffs', filename)).read
   end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/ciphering_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,84 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.expand_path('../../../../test_helper', __FILE__)
+
+class Redmine::CipheringTest < ActiveSupport::TestCase
+  
+  def test_password_should_be_encrypted
+    Redmine::Configuration.with 'database_cipher_key' => 'secret' do
+      r = Repository::Subversion.generate!(:password => 'foo')
+      assert_equal 'foo', r.password
+      assert r.read_attribute(:password).match(/\Aaes-256-cbc:.+\Z/)
+    end
+  end
+  
+  def test_password_should_be_clear_with_blank_key
+    Redmine::Configuration.with 'database_cipher_key' => '' do
+      r = Repository::Subversion.generate!(:password => 'foo')
+      assert_equal 'foo', r.password
+      assert_equal 'foo', r.read_attribute(:password)
+    end
+  end
+  
+  def test_password_should_be_clear_with_nil_key
+    Redmine::Configuration.with 'database_cipher_key' => nil do
+      r = Repository::Subversion.generate!(:password => 'foo')
+      assert_equal 'foo', r.password
+      assert_equal 'foo', r.read_attribute(:password)
+    end
+  end
+  
+  def test_unciphered_password_should_be_readable
+    Redmine::Configuration.with 'database_cipher_key' => nil do
+      r = Repository::Subversion.generate!(:password => 'clear')
+    end
+    
+    Redmine::Configuration.with 'database_cipher_key' => 'secret' do
+      r = Repository.first(:order => 'id DESC')
+      assert_equal 'clear', r.password
+    end
+  end
+  
+  def test_encrypt_all
+    Repository.delete_all
+    Redmine::Configuration.with 'database_cipher_key' => nil do
+      Repository::Subversion.generate!(:password => 'foo')
+      Repository::Subversion.generate!(:password => 'bar')
+    end
+    
+    Redmine::Configuration.with 'database_cipher_key' => 'secret' do
+      assert Repository.encrypt_all(:password)
+      r = Repository.first(:order => 'id DESC')
+      assert_equal 'bar', r.password
+      assert r.read_attribute(:password).match(/\Aaes-256-cbc:.+\Z/)
+    end
+  end
+  
+  def test_decrypt_all
+    Repository.delete_all
+    Redmine::Configuration.with 'database_cipher_key' => 'secret' do
+      Repository::Subversion.generate!(:password => 'foo')
+      Repository::Subversion.generate!(:password => 'bar')
+      
+      assert Repository.decrypt_all(:password)
+      r = Repository.first(:order => 'id DESC')
+      assert_equal 'bar', r.password
+      assert_equal 'bar', r.read_attribute(:password)
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/configuration_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,61 @@
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+require File.expand_path('../../../../test_helper', __FILE__)
+
+class Redmine::ConfigurationTest < ActiveSupport::TestCase
+  def setup
+    @conf = Redmine::Configuration
+  end
+
+  def test_empty
+    assert_kind_of Hash, load_conf('empty.yml', 'test')
+  end
+  
+  def test_default
+    assert_kind_of Hash, load_conf('default.yml', 'test')
+    assert_equal 'foo', @conf['somesetting']
+  end
+  
+  def test_no_default
+    assert_kind_of Hash, load_conf('no_default.yml', 'test')
+    assert_equal 'foo', @conf['somesetting']
+  end
+  
+  def test_overrides
+    assert_kind_of Hash, load_conf('overrides.yml', 'test')
+    assert_equal 'bar', @conf['somesetting']
+  end
+  
+  def test_with
+    load_conf('default.yml', 'test')
+    assert_equal 'foo', @conf['somesetting']
+    @conf.with 'somesetting' => 'bar' do
+      assert_equal 'bar', @conf['somesetting']
+    end
+    assert_equal 'foo', @conf['somesetting']
+  end
+  
+  private
+  
+  def load_conf(file, env)
+    @conf.load(
+      :file => File.join(Rails.root, 'test', 'fixtures', 'configuration', file),
+      :env => env
+    )
+  end
+end
--- a/test/unit/lib/redmine/helpers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/helpers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/helpers
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 1d6b4373836fef676ab3a28235c140b8
 2010-12-29T20:29:42.467534Z
 4582
--- a/test/unit/lib/redmine/i18n_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/i18n_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -58,13 +58,36 @@
     end
   end
   
+  def test_time_format
+    set_language_if_valid 'en'
+    now = Time.parse('2011-02-20 15:45:22')
+    with_settings :time_format => '%H:%M' do
+      with_settings :date_format => '' do
+        assert_equal '02/20/2011 15:45', format_time(now)
+        assert_equal '15:45', format_time(now, false)
+      end
+      
+      with_settings :date_format => '%Y-%m-%d' do
+        assert_equal '2011-02-20 15:45', format_time(now)
+        assert_equal '15:45', format_time(now, false)
+      end
+    end
+  end
+  
   def test_time_format_default
     set_language_if_valid 'en'
-    now = Time.now
-    Setting.date_format = ''
-    Setting.time_format = ''    
-    assert_equal I18n.l(now), format_time(now)
-    assert_equal I18n.l(now, :format => :time), format_time(now, false)
+    now = Time.parse('2011-02-20 15:45:22')
+    with_settings :time_format => '' do
+      with_settings :date_format => '' do
+        assert_equal '02/20/2011 03:45 pm', format_time(now)
+        assert_equal '03:45 pm', format_time(now, false)
+      end
+      
+      with_settings :date_format => '%Y-%m-%d' do
+        assert_equal '2011-02-20 03:45 pm', format_time(now)
+        assert_equal '03:45 pm', format_time(now, false)
+      end
+    end
   end
   
   def test_time_format
--- a/test/unit/lib/redmine/menu_manager/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/menu_manager/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/menu_manager
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:09:07.000000Z
+2011-03-03T11:05:08.000000Z
 fdf6a6902bb3de694d7a4fabbdfe2798
 2010-12-12T23:24:34.194336Z
 4509
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:09:07.000000Z
+2011-03-03T11:05:08.000000Z
 fdde38850555e88b18c742d7d15be035
 2010-12-12T23:24:34.194336Z
 4509
@@ -100,7 +100,7 @@
 
 
 
-2011-01-13T14:09:07.000000Z
+2011-03-03T11:05:08.000000Z
 18c96ac64de73c38eb9d766226b34ca7
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/unit/lib/redmine/scm/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/scm/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 50
-/svn/!svn/ver/4705/trunk/test/unit/lib/redmine/scm
+/svn/!svn/ver/4964/trunk/test/unit/lib/redmine/scm
 END
--- a/test/unit/lib/redmine/scm/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/scm/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/scm
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-13T12:05:11.734883Z
-4705
+2011-02-28T14:12:47.115180Z
+4964
 tmaruyama
 
 
--- a/test/unit/lib/redmine/scm/adapters/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,25 +1,31 @@
 K 25
 svn:wc:ra_dav:version-url
 V 59
-/svn/!svn/ver/4705/trunk/test/unit/lib/redmine/scm/adapters
+/svn/!svn/ver/4964/trunk/test/unit/lib/redmine/scm/adapters
 END
 subversion_adapter_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 86
-/svn/!svn/ver/4509/trunk/test/unit/lib/redmine/scm/adapters/subversion_adapter_test.rb
+/svn/!svn/ver/4825/trunk/test/unit/lib/redmine/scm/adapters/subversion_adapter_test.rb
+END
+bazaar_adapter_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 82
+/svn/!svn/ver/4836/trunk/test/unit/lib/redmine/scm/adapters/bazaar_adapter_test.rb
 END
 git_adapter_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 79
-/svn/!svn/ver/4510/trunk/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb
+/svn/!svn/ver/4964/trunk/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb
 END
 mercurial_adapter_test.rb
 K 25
 svn:wc:ra_dav:version-url
 V 85
-/svn/!svn/ver/4705/trunk/test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb
+/svn/!svn/ver/4875/trunk/test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb
 END
 filesystem_adapter_test.rb
 K 25
@@ -27,3 +33,15 @@
 V 86
 /svn/!svn/ver/4509/trunk/test/unit/lib/redmine/scm/adapters/filesystem_adapter_test.rb
 END
+cvs_adapter_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4832/trunk/test/unit/lib/redmine/scm/adapters/cvs_adapter_test.rb
+END
+darcs_adapter_test.rb
+K 25
+svn:wc:ra_dav:version-url
+V 81
+/svn/!svn/ver/4748/trunk/test/unit/lib/redmine/scm/adapters/darcs_adapter_test.rb
+END
--- a/test/unit/lib/redmine/scm/adapters/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/scm/adapters
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-13T12:05:11.734883Z
-4705
+2011-02-28T14:12:47.115180Z
+4964
 tmaruyama
 
 
@@ -32,11 +32,11 @@
 
 
 
-2011-01-13T14:08:13.000000Z
-765ef194c70144742d0b8bfcb99f6627
-2010-12-12T23:24:34.194336Z
-4509
-jbbarth
+2011-03-03T11:40:17.000000Z
+f0de1284b35555e358dcb810fff1e7e5
+2011-02-15T02:12:39.628343Z
+4825
+tmaruyama
 has-props
 
 
@@ -58,7 +58,41 @@
 
 
 
-1221
+2221
+
+bazaar_adapter_test.rb
+file
+
+
+
+
+2011-03-03T11:40:17.000000Z
+2f30e1187cf8e155707fdf3ff7925f55
+2011-02-15T11:05:33.284244Z
+4836
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1755
 
 git_adapter_test.rb
 file
@@ -66,11 +100,11 @@
 
 
 
-2011-01-13T14:08:13.000000Z
-2e3d6f99dd454ee396770a707ea169db
-2010-12-12T23:24:45.195624Z
-4510
-jbbarth
+2011-03-03T11:40:17.000000Z
+3d2db23c9a95bf5342365aa4580873c7
+2011-02-28T14:12:47.115180Z
+4964
+tmaruyama
 has-props
 
 
@@ -92,7 +126,7 @@
 
 
 
-3016
+4592
 
 mercurial_adapter_test.rb
 file
@@ -100,10 +134,10 @@
 
 
 
-2011-01-13T14:08:13.000000Z
-7af2ec05aa23ebf083f7aa58bca43f95
-2011-01-13T12:05:11.734883Z
-4705
+2011-03-03T11:40:17.000000Z
+20194ed3de36e9107b3279bb4ae596e9
+2011-02-18T07:15:58.762873Z
+4875
 tmaruyama
 has-props
 
@@ -126,7 +160,7 @@
 
 
 
-6096
+10201
 
 filesystem_adapter_test.rb
 file
@@ -134,7 +168,7 @@
 
 
 
-2011-01-13T14:08:13.000000Z
+2011-03-03T11:05:08.000000Z
 61cf9f9a3628f6766845641d99adaa83
 2010-12-12T23:24:34.194336Z
 4509
@@ -162,3 +196,71 @@
 
 1449
 
+cvs_adapter_test.rb
+file
+
+
+
+
+2011-03-03T11:40:17.000000Z
+ddf3ab1a187f29d3e377f684c2c0f18c
+2011-02-15T08:04:11.026838Z
+4832
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1844
+
+darcs_adapter_test.rb
+file
+
+
+
+
+2011-03-03T11:05:08.000000Z
+3a836e9a54b113ed5fe6490ce88ebebe
+2011-01-23T04:17:03.473127Z
+4748
+tmaruyama
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1649
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/text-base/bazaar_adapter_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,54 @@
+require File.expand_path('../../../../../../test_helper', __FILE__)
+begin
+  require 'mocha'
+
+  class BazaarAdapterTest < ActiveSupport::TestCase
+
+    REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/bazaar_repository'
+    REPOSITORY_PATH.gsub!(/\/+/, '/')
+
+    if File.directory?(REPOSITORY_PATH)  
+      def setup
+        @adapter = Redmine::Scm::Adapters::BazaarAdapter.new(REPOSITORY_PATH)
+      end
+
+      def test_scm_version
+        to_test = { "Bazaar (bzr) 2.1.2\n"             => [2,1,2],
+                    "2.1.1\n1.7\n1.8"                  => [2,1,1],
+                    "2.0.1\r\n1.8.1\r\n1.9.1"          => [2,0,1]}
+        to_test.each do |s, v|
+          test_scm_version_for(s, v)
+        end
+      end
+
+      def test_cat
+        cat = @adapter.cat('directory/document.txt')
+        assert cat =~ /Write the contents of a file as of a given revision to standard output/
+      end
+    
+      def test_annotate
+        annotate = @adapter.annotate('doc-mkdir.txt')
+        assert_equal 17, annotate.lines.size
+        assert_equal '1', annotate.revisions[0].identifier
+        assert_equal 'jsmith@', annotate.revisions[0].author
+        assert_equal 'mkdir', annotate.lines[0]
+      end
+
+      private
+
+      def test_scm_version_for(scm_command_version, version)
+        @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
+        assert_equal version, @adapter.class.scm_command_version
+      end
+    else
+      puts "Bazaar test repository NOT FOUND. Skipping unit tests !!!"
+      def test_fake; assert true end
+    end
+  end
+
+rescue LoadError
+  class BazaarMochaFake < ActiveSupport::TestCase
+    def test_fake; assert(false, "Requires mocha to run those tests")  end
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/text-base/cvs_adapter_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,59 @@
+require File.expand_path('../../../../../../test_helper', __FILE__)
+begin
+  require 'mocha'
+  
+  class CvsAdapterTest < ActiveSupport::TestCase
+    
+    REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/cvs_repository'
+    REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
+    MODULE_NAME = 'test'
+
+    if File.directory?(REPOSITORY_PATH)  
+      def setup
+        @adapter = Redmine::Scm::Adapters::CvsAdapter.new(MODULE_NAME, REPOSITORY_PATH)
+      end
+
+      def test_scm_version
+        to_test = { "\nConcurrent Versions System (CVS) 1.12.13 (client/server)\n"  => [1,12,13],
+                    "\r\n1.12.12\r\n1.12.11"                   => [1,12,12],
+                    "1.12.11\r\n1.12.10\r\n"                   => [1,12,11]}
+        to_test.each do |s, v|
+          test_scm_version_for(s, v)
+        end
+      end
+
+      def test_revisions_all
+        cnt = 0
+        @adapter.revisions('', nil, nil, :with_paths => true) do |revision|
+          cnt += 1
+        end
+        assert_equal 14, cnt
+      end
+
+      def test_revisions_from_rev3
+        rev3_committed_on = Time.gm(2007, 12, 13, 16, 27, 22)
+        cnt = 0
+        @adapter.revisions('', rev3_committed_on, nil, :with_paths => true) do |revision|
+          cnt += 1
+        end
+        assert_equal 2, cnt
+      end
+
+      private
+
+      def test_scm_version_for(scm_command_version, version)
+        @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
+        assert_equal version, @adapter.class.scm_command_version
+      end
+    else
+      puts "Cvs test repository NOT FOUND. Skipping unit tests !!!"
+      def test_fake; assert true end
+    end
+  end
+
+rescue LoadError
+  class CvsMochaFake < ActiveSupport::TestCase
+    def test_fake; assert(false, "Requires mocha to run those tests")  end
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/text-base/darcs_adapter_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,53 @@
+require File.expand_path('../../../../../../test_helper', __FILE__)
+begin
+  require 'mocha'
+  
+  class DarcsAdapterTest < ActiveSupport::TestCase
+    
+    REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/darcs_repository'
+
+    if File.directory?(REPOSITORY_PATH)
+      def setup
+        @adapter = Redmine::Scm::Adapters::DarcsAdapter.new(REPOSITORY_PATH)
+      end
+
+      def test_darcsversion
+        to_test = { "1.0.9 (release)\n"  => [1,0,9] ,
+                    "2.2.0 (release)\n"  => [2,2,0] }
+        to_test.each do |s, v|
+          test_darcsversion_for(s, v)
+        end
+      end
+
+      def test_revisions
+        id1 = '20080308225258-98289-761f654d669045eabee90b91b53a21ce5593cadf.gz'
+        revs = @adapter.revisions('', nil, nil, {:with_path => true})
+        assert_equal 6, revs.size
+        assert_equal id1, revs[5].scmid
+        paths = revs[5].paths
+        assert_equal 5, paths.size
+        assert_equal 'A', paths[0][:action]
+        assert_equal '/README', paths[0][:path]
+        assert_equal 'A', paths[1][:action]
+        assert_equal '/images', paths[1][:path]
+      end
+
+      private
+
+      def test_darcsversion_for(darcsversion, version)
+        @adapter.class.expects(:darcs_binary_version_from_command_line).returns(darcsversion)
+        assert_equal version, @adapter.class.darcs_binary_version
+      end
+
+    else
+      puts "Darcs test repository NOT FOUND. Skipping unit tests !!!"
+      def test_fake; assert true end
+    end
+  end
+
+rescue LoadError
+  class DarcsMochaFake < ActiveSupport::TestCase
+    def test_fake; assert(false, "Requires mocha to run those tests")  end
+  end
+end
+
--- a/test/unit/lib/redmine/scm/adapters/.svn/text-base/git_adapter_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/text-base/git_adapter_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -1,71 +1,120 @@
 # encoding: utf-8
 
+# This file includes UTF-8 "Felix Schäfer".
+# We need to consider Ruby 1.9 compatibility.
+
 require File.expand_path('../../../../../../test_helper', __FILE__)
+begin
+  require 'mocha'
 
-class GitAdapterTest < ActiveSupport::TestCase
-  REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
+  class GitAdapterTest < ActiveSupport::TestCase
+    REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
 
-  if File.directory?(REPOSITORY_PATH)  
-    def setup
-      @adapter = Redmine::Scm::Adapters::GitAdapter.new(REPOSITORY_PATH)
+    FELIX_UTF8 = "Felix Schäfer"
+    FELIX_HEX  = "Felix Sch\xC3\xA4fer"
+
+    if File.directory?(REPOSITORY_PATH)
+      def setup
+        @adapter = Redmine::Scm::Adapters::GitAdapter.new(REPOSITORY_PATH)
+      end
+
+      def test_scm_version
+        to_test = { "git version 1.7.3.4\n"             => [1,7,3,4],
+                    "1.6.1\n1.7\n1.8"                   => [1,6,1],
+                    "1.6.2\r\n1.8.1\r\n1.9.1"           => [1,6,2]}
+        to_test.each do |s, v|
+          test_scm_version_for(s, v)
+        end
+      end
+
+      def test_branches
+        assert_equal @adapter.branches, ['master', 'test-latin-1', 'test_branch']
+      end
+
+      def test_getting_all_revisions
+        assert_equal 16, @adapter.revisions('',nil,nil,:all => true).length
+      end
+
+      def test_getting_certain_revisions
+        assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length
+      end
+
+      def test_getting_revisions_with_spaces_in_filename
+        assert_equal 1, @adapter.revisions("filemane with spaces.txt",
+                                           nil, nil, :all => true).length
+      end
+
+      def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
+        assert_equal " filename with a leading space.txt ",
+           @adapter.revisions(" filename with a leading space.txt ",
+                               nil, nil, :all => true)[0].paths[0][:path]
+      end
+
+      def test_getting_entries_with_leading_and_trailing_spaces_in_filename
+        assert_equal " filename with a leading space.txt ",
+           @adapter.entries('',
+                   '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
+      end
+
+      def test_annotate
+        annotate = @adapter.annotate('sources/watchers_controller.rb')
+        assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
+        assert_equal 41, annotate.lines.size
+        assert_equal "# This program is free software; you can redistribute it and/or", annotate.lines[4].strip
+        assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
+                      annotate.revisions[4].identifier
+        assert_equal "jsmith", annotate.revisions[4].author
+      end
+
+      def test_annotate_moved_file
+        annotate = @adapter.annotate('renamed_test.txt')
+        assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
+        assert_equal 2, annotate.lines.size
+      end
+
+      def test_last_rev
+        last_rev = @adapter.lastrev("README",
+                                    "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
+        assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
+        assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
+        assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
+        assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
+      end
+
+      def test_last_rev_with_spaces_in_filename
+        last_rev = @adapter.lastrev("filemane with spaces.txt",
+                                    "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
+        str_felix_utf8 = FELIX_UTF8
+        str_felix_hex  = FELIX_HEX
+        last_rev_author = last_rev.author
+        if last_rev_author.respond_to?(:force_encoding)
+          last_rev_author.force_encoding('UTF-8')
+        end
+        assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
+        assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
+        assert_equal "#{str_felix_utf8} <felix@fachschaften.org>",
+                       last_rev.author
+        assert_equal "#{str_felix_hex} <felix@fachschaften.org>",
+                       last_rev.author
+        assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
+      end
+
+      private
+
+      def test_scm_version_for(scm_command_version, version)
+        @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
+        assert_equal version, @adapter.class.scm_command_version
+      end
+
+    else
+      puts "Git test repository NOT FOUND. Skipping unit tests !!!"
+      def test_fake; assert true end
     end
+  end
 
-    def test_branches
-      assert_equal @adapter.branches, ['master', 'test_branch']
-    end
-
-    def test_getting_all_revisions
-      assert_equal 15, @adapter.revisions('',nil,nil,:all => true).length
-    end
-    
-    def test_getting_certain_revisions
-      assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length
-    end
-    
-    def test_getting_revisions_with_spaces_in_filename
-      assert_equal 1, @adapter.revisions("filemane with spaces.txt", nil, nil, :all => true).length
-    end
-    
-    def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
-      assert_equal " filename with a leading space.txt ", @adapter.revisions(" filename with a leading space.txt ", nil, nil, :all => true)[0].paths[0][:path]
-    end
-    
-    def test_getting_entries_with_leading_and_trailing_spaces_in_filename
-      assert_equal " filename with a leading space.txt ", @adapter.entries('', '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
-    end
-    
-    def test_annotate
-      annotate = @adapter.annotate('sources/watchers_controller.rb')
-      assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
-      assert_equal 41, annotate.lines.size
-      assert_equal "# This program is free software; you can redistribute it and/or", annotate.lines[4].strip
-      assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", annotate.revisions[4].identifier
-      assert_equal "jsmith", annotate.revisions[4].author
-    end
-    
-    def test_annotate_moved_file
-      annotate = @adapter.annotate('renamed_test.txt')
-      assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
-      assert_equal 2, annotate.lines.size
-    end
-    
-    def test_last_rev
-      last_rev = @adapter.lastrev("README", "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
-      assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
-      assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
-      assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
-      assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
-    end
-    
-    def test_last_rev_with_spaces_in_filename
-      last_rev = @adapter.lastrev("filemane with spaces.txt", "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
-      assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
-      assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
-      assert_equal "Felix Schäfer <felix@fachschaften.org>", last_rev.author
-      assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
-    end
-  else
-    puts "Git test repository NOT FOUND. Skipping unit tests !!!"
-    def test_fake; assert true end
+rescue LoadError
+  class GitMochaFake < ActiveSupport::TestCase
+    def test_fake; assert(false, "Requires mocha to run those tests")  end
   end
 end
+
--- a/test/unit/lib/redmine/scm/adapters/.svn/text-base/mercurial_adapter_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/text-base/mercurial_adapter_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -4,7 +4,7 @@
 
   class MercurialAdapterTest < ActiveSupport::TestCase
 
-    TEMPLATES_DIR = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATES_DIR
+    HELPERS_DIR = Redmine::Scm::Adapters::MercurialAdapter::HELPERS_DIR
     TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
     TEMPLATE_EXTENSION = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_EXTENSION
 
@@ -13,6 +13,7 @@
     if File.directory?(REPOSITORY_PATH)
       def setup
         @adapter = Redmine::Scm::Adapters::MercurialAdapter.new(REPOSITORY_PATH)
+        @diff_c_support = true
       end
 
       def test_hgversion
@@ -42,6 +43,31 @@
         end
       end
 
+      def test_info
+        [REPOSITORY_PATH, REPOSITORY_PATH + "/",
+             REPOSITORY_PATH + "//"].each do |repo|
+          adp = Redmine::Scm::Adapters::MercurialAdapter.new(repo)
+          repo_path =  adp.info.root_url.gsub(/\\/, "/")
+          assert_equal REPOSITORY_PATH, repo_path
+          assert_equal '16', adp.info.lastrev.revision
+          assert_equal '4cddb4e45f52',adp.info.lastrev.scmid
+        end
+      end
+
+      def test_revisions
+        revisions = @adapter.revisions(nil, 2, 4)
+        assert_equal 3, revisions.size
+        assert_equal '2', revisions[0].revision
+        assert_equal '400bb8672109', revisions[0].scmid
+        assert_equal '4', revisions[2].revision
+        assert_equal 'def6d2f1254a', revisions[2].scmid
+
+        revisions = @adapter.revisions(nil, 2, 4, {:limit => 2})
+        assert_equal 2, revisions.size
+        assert_equal '2', revisions[0].revision
+        assert_equal '400bb8672109', revisions[0].scmid
+      end
+
       def test_diff
         if @adapter.class.client_version_above?([1, 2])
           assert_nil @adapter.diff(nil, '100000')
@@ -49,7 +75,7 @@
         assert_nil @adapter.diff(nil, '100000', '200000')
         [2, '400bb8672109', '400', 400].each do |r1|
           diff1 = @adapter.diff(nil, r1)
-          if @adapter.class.client_version_above?([1, 2])
+          if @diff_c_support
             assert_equal 28, diff1.size
             buf = diff1[24].gsub(/\r\n|\r|\n/, "")
             assert_equal "+    return true unless klass.respond_to?('watched_by')", buf
@@ -69,6 +95,17 @@
         end
       end
 
+      def test_diff_made_by_revision
+        if @diff_c_support
+          [16, '16', '4cddb4e45f52'].each do |r1|
+            diff1 = @adapter.diff(nil, r1)
+            assert_equal 5, diff1.size
+            buf = diff1[4].gsub(/\r\n|\r|\n/, "")
+            assert_equal '+0885933ad4f68d77c2649cd11f8311276e7ef7ce tag-init-revision', buf
+          end
+        end
+      end
+
       def test_cat
         [2, '400bb8672109', '400', 400].each do |r|
           buf = @adapter.cat('sources/welcome_controller.rb', r)
@@ -93,9 +130,12 @@
         end
       end
 
-      # TODO filesize etc.
       def test_entries
         assert_nil @adapter.entries(nil, '100000')
+
+        assert_equal 1, @adapter.entries("sources", 3).size
+        assert_equal 1, @adapter.entries("sources", 'b3a615152df8').size
+
         [2, '400bb8672109', '400', 400].each do |r|
           entries1 = @adapter.entries(nil, r)
           assert entries1
@@ -103,9 +143,15 @@
           assert_equal 'sources', entries1[1].name
           assert_equal 'sources', entries1[1].path
           assert_equal 'dir', entries1[1].kind
-          assert_equal 'README', entries1[2].name
-          assert_equal 'README', entries1[2].path
-          assert_equal 'file', entries1[2].kind
+          readme = entries1[2]
+          assert_equal 'README', readme.name
+          assert_equal 'README', readme.path
+          assert_equal 'file', readme.kind
+          assert_equal 27, readme.size
+          assert_equal '1', readme.lastrev.revision
+          assert_equal '9d5b5b004199', readme.lastrev.identifier
+          # 2007-12-14 10:24:01 +0100
+          assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
 
           entries2 = @adapter.entries('sources', r)
           assert entries2
@@ -119,6 +165,48 @@
         end
       end
 
+      def test_entries_tag
+        entries1 = @adapter.entries(nil, 'tag_test.00')
+        assert entries1
+        assert_equal 3, entries1.size
+        assert_equal 'sources', entries1[1].name
+        assert_equal 'sources', entries1[1].path
+        assert_equal 'dir', entries1[1].kind
+        readme = entries1[2]
+        assert_equal 'README', readme.name
+        assert_equal 'README', readme.path
+        assert_equal 'file', readme.kind
+        assert_equal 21, readme.size
+        assert_equal '0', readme.lastrev.revision
+        assert_equal '0885933ad4f6', readme.lastrev.identifier
+        # 2007-12-14 10:22:52 +0100
+        assert_equal Time.gm(2007, 12, 14, 9, 22, 52), readme.lastrev.time
+      end
+
+      def test_entries_branch
+        entries1 = @adapter.entries(nil, 'test-branch-00')
+        assert entries1
+        assert_equal 5, entries1.size
+        assert_equal 'sql_escape', entries1[2].name
+        assert_equal 'sql_escape', entries1[2].path
+        assert_equal 'dir', entries1[2].kind
+        readme = entries1[4]
+        assert_equal 'README', readme.name
+        assert_equal 'README', readme.path
+        assert_equal 'file', readme.kind
+        assert_equal 365, readme.size
+        assert_equal '8', readme.lastrev.revision
+        assert_equal 'c51f5bb613cd', readme.lastrev.identifier
+        # 2001-02-01 00:00:00 -0900
+        assert_equal Time.gm(2001, 2, 1, 9, 0, 0), readme.lastrev.time
+      end
+
+      def test_locate_on_outdated_repository
+        assert_equal 1, @adapter.entries("images", 0).size
+        assert_equal 2, @adapter.entries("images").size
+        assert_equal 2, @adapter.entries("images", 2).size
+      end
+
       def test_access_by_nodeid
         path = 'sources/welcome_controller.rb'
         assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400bb8672109')
@@ -130,6 +218,28 @@
         assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400')
       end
 
+      def test_tags
+        assert_equal ['tag_test.00', 'tag-init-revision'], @adapter.tags
+      end
+
+      def test_tagmap
+        tm = { 'tag_test.00'       => '6987191f453a',
+               'tag-init-revision' => '0885933ad4f6' }
+        assert_equal tm, @adapter.tagmap
+      end
+
+      def test_branches
+        assert_equal ['default', 'branch (1)[2]&,%.-3_4', 'test-branch-00'],
+                     @adapter.branches
+      end
+
+      def test_branchmap
+        bm = { 'default'               => '4cddb4e45f52',
+               'branch (1)[2]&,%.-3_4' => '933ca60293d7',
+               'test-branch-00'        => '3a330eb32958' }
+        assert_equal bm, @adapter.branchmap
+      end
+
       private
 
       def test_hgversion_for(hgversion, version)
@@ -138,7 +248,7 @@
       end
 
       def test_template_path_for(version, template)
-        assert_equal "#{TEMPLATES_DIR}/#{TEMPLATE_NAME}-#{template}.#{TEMPLATE_EXTENSION}",
+        assert_equal "#{HELPERS_DIR}/#{TEMPLATE_NAME}-#{template}.#{TEMPLATE_EXTENSION}",
                      @adapter.class.template_path_for(version)
         assert File.exist?(@adapter.class.template_path_for(version))
       end
--- a/test/unit/lib/redmine/scm/adapters/.svn/text-base/subversion_adapter_test.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/.svn/text-base/subversion_adapter_test.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -17,15 +17,47 @@
 
 require File.expand_path('../../../../../../test_helper', __FILE__)
 
-class SubversionAdapterTest < ActiveSupport::TestCase
+begin
+  require 'mocha'
+
+  class SubversionAdapterTest < ActiveSupport::TestCase
   
-  if repository_configured?('subversion')
-    def test_client_version
-      v = Redmine::Scm::Adapters::SubversionAdapter.client_version
-      assert v.is_a?(Array)
+    if repository_configured?('subversion')
+      def setup
+        repo_path = "file://#{self.class.repository_path('subversion')}"
+        @adapter = Redmine::Scm::Adapters::SubversionAdapter.new(repo_path)
+      end
+
+      def test_client_version
+        v = Redmine::Scm::Adapters::SubversionAdapter.client_version
+        assert v.is_a?(Array)
+      end
+
+      def test_scm_version
+        to_test = { "svn, version 1.6.13 (r1002816)\n"  => [1,6,13],
+                    "svn, versione 1.6.13 (r1002816)\n" => [1,6,13],
+                    "1.6.1\n1.7\n1.8"                   => [1,6,1],
+                    "1.6.2\r\n1.8.1\r\n1.9.1"           => [1,6,2]}
+        to_test.each do |s, v|
+          test_scm_version_for(s, v)
+        end
+      end
+
+      private
+
+      def test_scm_version_for(scm_version, version)
+        @adapter.class.expects(:scm_version_from_command_line).returns(scm_version)
+        assert_equal version, @adapter.class.svn_binary_version
+      end
+
+    else
+      puts "Subversion test repository NOT FOUND. Skipping unit tests !!!"
+      def test_fake; assert true end
     end
-  else
-    puts "Subversion test repository NOT FOUND. Skipping unit tests !!!"
-    def test_fake; assert true end
+  end
+
+rescue LoadError
+  class SubversionMochaFake < ActiveSupport::TestCase
+    def test_fake; assert(false, "Requires mocha to run those tests")  end
   end
 end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/scm/adapters/bazaar_adapter_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,54 @@
+require File.expand_path('../../../../../../test_helper', __FILE__)
+begin
+  require 'mocha'
+
+  class BazaarAdapterTest < ActiveSupport::TestCase
+
+    REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/bazaar_repository'
+    REPOSITORY_PATH.gsub!(/\/+/, '/')
+
+    if File.directory?(REPOSITORY_PATH)  
+      def setup
+        @adapter = Redmine::Scm::Adapters::BazaarAdapter.new(REPOSITORY_PATH)
+      end
+
+      def test_scm_version
+        to_test = { "Bazaar (bzr) 2.1.2\n"             => [2,1,2],
+                    "2.1.1\n1.7\n1.8"                  => [2,1,1],
+                    "2.0.1\r\n1.8.1\r\n1.9.1"          => [2,0,1]}
+        to_test.each do |s, v|
+          test_scm_version_for(s, v)
+        end
+      end
+
+      def test_cat
+        cat = @adapter.cat('directory/document.txt')
+        assert cat =~ /Write the contents of a file as of a given revision to standard output/
+      end
+    
+      def test_annotate
+        annotate = @adapter.annotate('doc-mkdir.txt')
+        assert_equal 17, annotate.lines.size
+        assert_equal '1', annotate.revisions[0].identifier
+        assert_equal 'jsmith@', annotate.revisions[0].author
+        assert_equal 'mkdir', annotate.lines[0]
+      end
+
+      private
+
+      def test_scm_version_for(scm_command_version, version)
+        @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
+        assert_equal version, @adapter.class.scm_command_version
+      end
+    else
+      puts "Bazaar test repository NOT FOUND. Skipping unit tests !!!"
+      def test_fake; assert true end
+    end
+  end
+
+rescue LoadError
+  class BazaarMochaFake < ActiveSupport::TestCase
+    def test_fake; assert(false, "Requires mocha to run those tests")  end
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/scm/adapters/cvs_adapter_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,59 @@
+require File.expand_path('../../../../../../test_helper', __FILE__)
+begin
+  require 'mocha'
+  
+  class CvsAdapterTest < ActiveSupport::TestCase
+    
+    REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/cvs_repository'
+    REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
+    MODULE_NAME = 'test'
+
+    if File.directory?(REPOSITORY_PATH)  
+      def setup
+        @adapter = Redmine::Scm::Adapters::CvsAdapter.new(MODULE_NAME, REPOSITORY_PATH)
+      end
+
+      def test_scm_version
+        to_test = { "\nConcurrent Versions System (CVS) 1.12.13 (client/server)\n"  => [1,12,13],
+                    "\r\n1.12.12\r\n1.12.11"                   => [1,12,12],
+                    "1.12.11\r\n1.12.10\r\n"                   => [1,12,11]}
+        to_test.each do |s, v|
+          test_scm_version_for(s, v)
+        end
+      end
+
+      def test_revisions_all
+        cnt = 0
+        @adapter.revisions('', nil, nil, :with_paths => true) do |revision|
+          cnt += 1
+        end
+        assert_equal 14, cnt
+      end
+
+      def test_revisions_from_rev3
+        rev3_committed_on = Time.gm(2007, 12, 13, 16, 27, 22)
+        cnt = 0
+        @adapter.revisions('', rev3_committed_on, nil, :with_paths => true) do |revision|
+          cnt += 1
+        end
+        assert_equal 2, cnt
+      end
+
+      private
+
+      def test_scm_version_for(scm_command_version, version)
+        @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
+        assert_equal version, @adapter.class.scm_command_version
+      end
+    else
+      puts "Cvs test repository NOT FOUND. Skipping unit tests !!!"
+      def test_fake; assert true end
+    end
+  end
+
+rescue LoadError
+  class CvsMochaFake < ActiveSupport::TestCase
+    def test_fake; assert(false, "Requires mocha to run those tests")  end
+  end
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/lib/redmine/scm/adapters/darcs_adapter_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,53 @@
+require File.expand_path('../../../../../../test_helper', __FILE__)
+begin
+  require 'mocha'
+  
+  class DarcsAdapterTest < ActiveSupport::TestCase
+    
+    REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/darcs_repository'
+
+    if File.directory?(REPOSITORY_PATH)
+      def setup
+        @adapter = Redmine::Scm::Adapters::DarcsAdapter.new(REPOSITORY_PATH)
+      end
+
+      def test_darcsversion
+        to_test = { "1.0.9 (release)\n"  => [1,0,9] ,
+                    "2.2.0 (release)\n"  => [2,2,0] }
+        to_test.each do |s, v|
+          test_darcsversion_for(s, v)
+        end
+      end
+
+      def test_revisions
+        id1 = '20080308225258-98289-761f654d669045eabee90b91b53a21ce5593cadf.gz'
+        revs = @adapter.revisions('', nil, nil, {:with_path => true})
+        assert_equal 6, revs.size
+        assert_equal id1, revs[5].scmid
+        paths = revs[5].paths
+        assert_equal 5, paths.size
+        assert_equal 'A', paths[0][:action]
+        assert_equal '/README', paths[0][:path]
+        assert_equal 'A', paths[1][:action]
+        assert_equal '/images', paths[1][:path]
+      end
+
+      private
+
+      def test_darcsversion_for(darcsversion, version)
+        @adapter.class.expects(:darcs_binary_version_from_command_line).returns(darcsversion)
+        assert_equal version, @adapter.class.darcs_binary_version
+      end
+
+    else
+      puts "Darcs test repository NOT FOUND. Skipping unit tests !!!"
+      def test_fake; assert true end
+    end
+  end
+
+rescue LoadError
+  class DarcsMochaFake < ActiveSupport::TestCase
+    def test_fake; assert(false, "Requires mocha to run those tests")  end
+  end
+end
+
--- a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -1,71 +1,120 @@
 # encoding: utf-8
 
+# This file includes UTF-8 "Felix Schäfer".
+# We need to consider Ruby 1.9 compatibility.
+
 require File.expand_path('../../../../../../test_helper', __FILE__)
+begin
+  require 'mocha'
 
-class GitAdapterTest < ActiveSupport::TestCase
-  REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
+  class GitAdapterTest < ActiveSupport::TestCase
+    REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
 
-  if File.directory?(REPOSITORY_PATH)  
-    def setup
-      @adapter = Redmine::Scm::Adapters::GitAdapter.new(REPOSITORY_PATH)
+    FELIX_UTF8 = "Felix Schäfer"
+    FELIX_HEX  = "Felix Sch\xC3\xA4fer"
+
+    if File.directory?(REPOSITORY_PATH)
+      def setup
+        @adapter = Redmine::Scm::Adapters::GitAdapter.new(REPOSITORY_PATH)
+      end
+
+      def test_scm_version
+        to_test = { "git version 1.7.3.4\n"             => [1,7,3,4],
+                    "1.6.1\n1.7\n1.8"                   => [1,6,1],
+                    "1.6.2\r\n1.8.1\r\n1.9.1"           => [1,6,2]}
+        to_test.each do |s, v|
+          test_scm_version_for(s, v)
+        end
+      end
+
+      def test_branches
+        assert_equal @adapter.branches, ['master', 'test-latin-1', 'test_branch']
+      end
+
+      def test_getting_all_revisions
+        assert_equal 16, @adapter.revisions('',nil,nil,:all => true).length
+      end
+
+      def test_getting_certain_revisions
+        assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length
+      end
+
+      def test_getting_revisions_with_spaces_in_filename
+        assert_equal 1, @adapter.revisions("filemane with spaces.txt",
+                                           nil, nil, :all => true).length
+      end
+
+      def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
+        assert_equal " filename with a leading space.txt ",
+           @adapter.revisions(" filename with a leading space.txt ",
+                               nil, nil, :all => true)[0].paths[0][:path]
+      end
+
+      def test_getting_entries_with_leading_and_trailing_spaces_in_filename
+        assert_equal " filename with a leading space.txt ",
+           @adapter.entries('',
+                   '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
+      end
+
+      def test_annotate
+        annotate = @adapter.annotate('sources/watchers_controller.rb')
+        assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
+        assert_equal 41, annotate.lines.size
+        assert_equal "# This program is free software; you can redistribute it and/or", annotate.lines[4].strip
+        assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
+                      annotate.revisions[4].identifier
+        assert_equal "jsmith", annotate.revisions[4].author
+      end
+
+      def test_annotate_moved_file
+        annotate = @adapter.annotate('renamed_test.txt')
+        assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
+        assert_equal 2, annotate.lines.size
+      end
+
+      def test_last_rev
+        last_rev = @adapter.lastrev("README",
+                                    "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
+        assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
+        assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
+        assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
+        assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
+      end
+
+      def test_last_rev_with_spaces_in_filename
+        last_rev = @adapter.lastrev("filemane with spaces.txt",
+                                    "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
+        str_felix_utf8 = FELIX_UTF8
+        str_felix_hex  = FELIX_HEX
+        last_rev_author = last_rev.author
+        if last_rev_author.respond_to?(:force_encoding)
+          last_rev_author.force_encoding('UTF-8')
+        end
+        assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
+        assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
+        assert_equal "#{str_felix_utf8} <felix@fachschaften.org>",
+                       last_rev.author
+        assert_equal "#{str_felix_hex} <felix@fachschaften.org>",
+                       last_rev.author
+        assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
+      end
+
+      private
+
+      def test_scm_version_for(scm_command_version, version)
+        @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
+        assert_equal version, @adapter.class.scm_command_version
+      end
+
+    else
+      puts "Git test repository NOT FOUND. Skipping unit tests !!!"
+      def test_fake; assert true end
     end
+  end
 
-    def test_branches
-      assert_equal @adapter.branches, ['master', 'test_branch']
-    end
-
-    def test_getting_all_revisions
-      assert_equal 15, @adapter.revisions('',nil,nil,:all => true).length
-    end
-    
-    def test_getting_certain_revisions
-      assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length
-    end
-    
-    def test_getting_revisions_with_spaces_in_filename
-      assert_equal 1, @adapter.revisions("filemane with spaces.txt", nil, nil, :all => true).length
-    end
-    
-    def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
-      assert_equal " filename with a leading space.txt ", @adapter.revisions(" filename with a leading space.txt ", nil, nil, :all => true)[0].paths[0][:path]
-    end
-    
-    def test_getting_entries_with_leading_and_trailing_spaces_in_filename
-      assert_equal " filename with a leading space.txt ", @adapter.entries('', '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
-    end
-    
-    def test_annotate
-      annotate = @adapter.annotate('sources/watchers_controller.rb')
-      assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
-      assert_equal 41, annotate.lines.size
-      assert_equal "# This program is free software; you can redistribute it and/or", annotate.lines[4].strip
-      assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", annotate.revisions[4].identifier
-      assert_equal "jsmith", annotate.revisions[4].author
-    end
-    
-    def test_annotate_moved_file
-      annotate = @adapter.annotate('renamed_test.txt')
-      assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
-      assert_equal 2, annotate.lines.size
-    end
-    
-    def test_last_rev
-      last_rev = @adapter.lastrev("README", "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
-      assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
-      assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
-      assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
-      assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
-    end
-    
-    def test_last_rev_with_spaces_in_filename
-      last_rev = @adapter.lastrev("filemane with spaces.txt", "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
-      assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
-      assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
-      assert_equal "Felix Schäfer <felix@fachschaften.org>", last_rev.author
-      assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
-    end
-  else
-    puts "Git test repository NOT FOUND. Skipping unit tests !!!"
-    def test_fake; assert true end
+rescue LoadError
+  class GitMochaFake < ActiveSupport::TestCase
+    def test_fake; assert(false, "Requires mocha to run those tests")  end
   end
 end
+
--- a/test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -4,7 +4,7 @@
 
   class MercurialAdapterTest < ActiveSupport::TestCase
 
-    TEMPLATES_DIR = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATES_DIR
+    HELPERS_DIR = Redmine::Scm::Adapters::MercurialAdapter::HELPERS_DIR
     TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
     TEMPLATE_EXTENSION = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_EXTENSION
 
@@ -13,6 +13,7 @@
     if File.directory?(REPOSITORY_PATH)
       def setup
         @adapter = Redmine::Scm::Adapters::MercurialAdapter.new(REPOSITORY_PATH)
+        @diff_c_support = true
       end
 
       def test_hgversion
@@ -42,6 +43,31 @@
         end
       end
 
+      def test_info
+        [REPOSITORY_PATH, REPOSITORY_PATH + "/",
+             REPOSITORY_PATH + "//"].each do |repo|
+          adp = Redmine::Scm::Adapters::MercurialAdapter.new(repo)
+          repo_path =  adp.info.root_url.gsub(/\\/, "/")
+          assert_equal REPOSITORY_PATH, repo_path
+          assert_equal '16', adp.info.lastrev.revision
+          assert_equal '4cddb4e45f52',adp.info.lastrev.scmid
+        end
+      end
+
+      def test_revisions
+        revisions = @adapter.revisions(nil, 2, 4)
+        assert_equal 3, revisions.size
+        assert_equal '2', revisions[0].revision
+        assert_equal '400bb8672109', revisions[0].scmid
+        assert_equal '4', revisions[2].revision
+        assert_equal 'def6d2f1254a', revisions[2].scmid
+
+        revisions = @adapter.revisions(nil, 2, 4, {:limit => 2})
+        assert_equal 2, revisions.size
+        assert_equal '2', revisions[0].revision
+        assert_equal '400bb8672109', revisions[0].scmid
+      end
+
       def test_diff
         if @adapter.class.client_version_above?([1, 2])
           assert_nil @adapter.diff(nil, '100000')
@@ -49,7 +75,7 @@
         assert_nil @adapter.diff(nil, '100000', '200000')
         [2, '400bb8672109', '400', 400].each do |r1|
           diff1 = @adapter.diff(nil, r1)
-          if @adapter.class.client_version_above?([1, 2])
+          if @diff_c_support
             assert_equal 28, diff1.size
             buf = diff1[24].gsub(/\r\n|\r|\n/, "")
             assert_equal "+    return true unless klass.respond_to?('watched_by')", buf
@@ -69,6 +95,17 @@
         end
       end
 
+      def test_diff_made_by_revision
+        if @diff_c_support
+          [16, '16', '4cddb4e45f52'].each do |r1|
+            diff1 = @adapter.diff(nil, r1)
+            assert_equal 5, diff1.size
+            buf = diff1[4].gsub(/\r\n|\r|\n/, "")
+            assert_equal '+0885933ad4f68d77c2649cd11f8311276e7ef7ce tag-init-revision', buf
+          end
+        end
+      end
+
       def test_cat
         [2, '400bb8672109', '400', 400].each do |r|
           buf = @adapter.cat('sources/welcome_controller.rb', r)
@@ -93,9 +130,12 @@
         end
       end
 
-      # TODO filesize etc.
       def test_entries
         assert_nil @adapter.entries(nil, '100000')
+
+        assert_equal 1, @adapter.entries("sources", 3).size
+        assert_equal 1, @adapter.entries("sources", 'b3a615152df8').size
+
         [2, '400bb8672109', '400', 400].each do |r|
           entries1 = @adapter.entries(nil, r)
           assert entries1
@@ -103,9 +143,15 @@
           assert_equal 'sources', entries1[1].name
           assert_equal 'sources', entries1[1].path
           assert_equal 'dir', entries1[1].kind
-          assert_equal 'README', entries1[2].name
-          assert_equal 'README', entries1[2].path
-          assert_equal 'file', entries1[2].kind
+          readme = entries1[2]
+          assert_equal 'README', readme.name
+          assert_equal 'README', readme.path
+          assert_equal 'file', readme.kind
+          assert_equal 27, readme.size
+          assert_equal '1', readme.lastrev.revision
+          assert_equal '9d5b5b004199', readme.lastrev.identifier
+          # 2007-12-14 10:24:01 +0100
+          assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
 
           entries2 = @adapter.entries('sources', r)
           assert entries2
@@ -119,6 +165,48 @@
         end
       end
 
+      def test_entries_tag
+        entries1 = @adapter.entries(nil, 'tag_test.00')
+        assert entries1
+        assert_equal 3, entries1.size
+        assert_equal 'sources', entries1[1].name
+        assert_equal 'sources', entries1[1].path
+        assert_equal 'dir', entries1[1].kind
+        readme = entries1[2]
+        assert_equal 'README', readme.name
+        assert_equal 'README', readme.path
+        assert_equal 'file', readme.kind
+        assert_equal 21, readme.size
+        assert_equal '0', readme.lastrev.revision
+        assert_equal '0885933ad4f6', readme.lastrev.identifier
+        # 2007-12-14 10:22:52 +0100
+        assert_equal Time.gm(2007, 12, 14, 9, 22, 52), readme.lastrev.time
+      end
+
+      def test_entries_branch
+        entries1 = @adapter.entries(nil, 'test-branch-00')
+        assert entries1
+        assert_equal 5, entries1.size
+        assert_equal 'sql_escape', entries1[2].name
+        assert_equal 'sql_escape', entries1[2].path
+        assert_equal 'dir', entries1[2].kind
+        readme = entries1[4]
+        assert_equal 'README', readme.name
+        assert_equal 'README', readme.path
+        assert_equal 'file', readme.kind
+        assert_equal 365, readme.size
+        assert_equal '8', readme.lastrev.revision
+        assert_equal 'c51f5bb613cd', readme.lastrev.identifier
+        # 2001-02-01 00:00:00 -0900
+        assert_equal Time.gm(2001, 2, 1, 9, 0, 0), readme.lastrev.time
+      end
+
+      def test_locate_on_outdated_repository
+        assert_equal 1, @adapter.entries("images", 0).size
+        assert_equal 2, @adapter.entries("images").size
+        assert_equal 2, @adapter.entries("images", 2).size
+      end
+
       def test_access_by_nodeid
         path = 'sources/welcome_controller.rb'
         assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400bb8672109')
@@ -130,6 +218,28 @@
         assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400')
       end
 
+      def test_tags
+        assert_equal ['tag_test.00', 'tag-init-revision'], @adapter.tags
+      end
+
+      def test_tagmap
+        tm = { 'tag_test.00'       => '6987191f453a',
+               'tag-init-revision' => '0885933ad4f6' }
+        assert_equal tm, @adapter.tagmap
+      end
+
+      def test_branches
+        assert_equal ['default', 'branch (1)[2]&,%.-3_4', 'test-branch-00'],
+                     @adapter.branches
+      end
+
+      def test_branchmap
+        bm = { 'default'               => '4cddb4e45f52',
+               'branch (1)[2]&,%.-3_4' => '933ca60293d7',
+               'test-branch-00'        => '3a330eb32958' }
+        assert_equal bm, @adapter.branchmap
+      end
+
       private
 
       def test_hgversion_for(hgversion, version)
@@ -138,7 +248,7 @@
       end
 
       def test_template_path_for(version, template)
-        assert_equal "#{TEMPLATES_DIR}/#{TEMPLATE_NAME}-#{template}.#{TEMPLATE_EXTENSION}",
+        assert_equal "#{HELPERS_DIR}/#{TEMPLATE_NAME}-#{template}.#{TEMPLATE_EXTENSION}",
                      @adapter.class.template_path_for(version)
         assert File.exist?(@adapter.class.template_path_for(version))
       end
--- a/test/unit/lib/redmine/scm/adapters/subversion_adapter_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/scm/adapters/subversion_adapter_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -17,15 +17,47 @@
 
 require File.expand_path('../../../../../../test_helper', __FILE__)
 
-class SubversionAdapterTest < ActiveSupport::TestCase
+begin
+  require 'mocha'
+
+  class SubversionAdapterTest < ActiveSupport::TestCase
   
-  if repository_configured?('subversion')
-    def test_client_version
-      v = Redmine::Scm::Adapters::SubversionAdapter.client_version
-      assert v.is_a?(Array)
+    if repository_configured?('subversion')
+      def setup
+        repo_path = "file://#{self.class.repository_path('subversion')}"
+        @adapter = Redmine::Scm::Adapters::SubversionAdapter.new(repo_path)
+      end
+
+      def test_client_version
+        v = Redmine::Scm::Adapters::SubversionAdapter.client_version
+        assert v.is_a?(Array)
+      end
+
+      def test_scm_version
+        to_test = { "svn, version 1.6.13 (r1002816)\n"  => [1,6,13],
+                    "svn, versione 1.6.13 (r1002816)\n" => [1,6,13],
+                    "1.6.1\n1.7\n1.8"                   => [1,6,1],
+                    "1.6.2\r\n1.8.1\r\n1.9.1"           => [1,6,2]}
+        to_test.each do |s, v|
+          test_scm_version_for(s, v)
+        end
+      end
+
+      private
+
+      def test_scm_version_for(scm_version, version)
+        @adapter.class.expects(:scm_version_from_command_line).returns(scm_version)
+        assert_equal version, @adapter.class.svn_binary_version
+      end
+
+    else
+      puts "Subversion test repository NOT FOUND. Skipping unit tests !!!"
+      def test_fake; assert true end
     end
-  else
-    puts "Subversion test repository NOT FOUND. Skipping unit tests !!!"
-    def test_fake; assert true end
+  end
+
+rescue LoadError
+  class SubversionMochaFake < ActiveSupport::TestCase
+    def test_fake; assert(false, "Requires mocha to run those tests")  end
   end
 end
--- a/test/unit/lib/redmine/unified_diff_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/unified_diff_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -60,8 +60,39 @@
     assert_equal 1, diff.size
   end
 
+  def test_one_line_new_files
+    diff = Redmine::UnifiedDiff.new(<<-DIFF
+diff -r 000000000000 -r ea98b14f75f0 README1
+--- /dev/null
++++ b/README1
+@@ -0,0 +1,1 @@
++test1
+diff -r 000000000000 -r ea98b14f75f0 README2
+--- /dev/null
++++ b/README2
+@@ -0,0 +1,1 @@
++test2
+diff -r 000000000000 -r ea98b14f75f0 README3
+--- /dev/null
++++ b/README3
+@@ -0,0 +1,3 @@
++test4
++test5
++test6
+diff -r 000000000000 -r ea98b14f75f0 README4
+--- /dev/null
++++ b/README4
+@@ -0,0 +1,3 @@
++test4
++test5
++test6
+DIFF
+    )
+    assert_equal 4, diff.size
+  end
+
   private
-  
+
   def read_diff_fixture(filename)
     File.new(File.join(File.dirname(__FILE__), '/../../../fixtures/diffs', filename)).read
   end
--- a/test/unit/lib/redmine/views/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/views/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/views
 http://redmine.rubyforge.org/svn
 
--- a/test/unit/lib/redmine/views/builders/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/views/builders/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/views/builders
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 0eb241e5c91856b3340cf4d848c39119
 2010-12-12T23:24:34.194336Z
 4509
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:09:08.000000Z
+2011-03-03T11:05:08.000000Z
 aed14e6bc3e5bb08380fe6954d273a6c
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/unit/lib/redmine/wiki_formatting/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/lib/redmine/wiki_formatting/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/test/unit/lib/redmine/wiki_formatting
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2011-01-13T14:09:07.000000Z
+2011-03-03T11:05:08.000000Z
 5acd95498f8f2e52e8ad2b70961a21ad
 2010-12-12T23:24:34.194336Z
 4509
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:09:07.000000Z
+2011-03-03T11:05:08.000000Z
 41000dcb1febd4ce59305bb36a369cf0
 2010-12-12T23:24:34.194336Z
 4509
--- a/test/unit/query_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/query_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -484,7 +484,6 @@
         # Users not in a group
         assert_query_statement_includes @query, "#{Issue.table_name}.assigned_to_id IS NULL OR #{Issue.table_name}.assigned_to_id NOT IN ('#{@user_in_group.id}','#{@second_user_in_group.id}','#{@user_in_group2.id}')"
         assert_find_issues_with_query_is_successful @query
-
       end
 
       should "search assigned to any group member (all)" do
@@ -494,7 +493,22 @@
         # Only users in a group
         assert_query_statement_includes @query, "#{Issue.table_name}.assigned_to_id IN ('#{@user_in_group.id}','#{@second_user_in_group.id}','#{@user_in_group2.id}')"
         assert_find_issues_with_query_is_successful @query
-
+      end
+      
+      should "return an empty set with = empty group" do
+        @empty_group = Group.generate!
+        @query = Query.new(:name => '_')
+        @query.add_filter('member_of_group', '=', [@empty_group.id.to_s])
+        
+        assert_equal [], find_issues_with_query(@query)
+      end
+      
+      should "return issues with ! empty group" do
+        @empty_group = Group.generate!
+        @query = Query.new(:name => '_')
+        @query.add_filter('member_of_group', '!', [@empty_group.id.to_s])
+        
+        assert_find_issues_with_query_is_successful @query
       end
     end
 
@@ -540,6 +554,22 @@
         assert_query_statement_includes @query, "#{Issue.table_name}.assigned_to_id IN ('#{@manager.id}','#{@developer.id}','#{@boss.id}')"
         assert_find_issues_with_query_is_successful @query
       end
+      
+      should "return an empty set with empty role" do
+        @empty_role = Role.generate!
+        @query = Query.new(:name => '_')
+        @query.add_filter('assigned_to_role', '=', [@empty_role.id.to_s])
+        
+        assert_equal [], find_issues_with_query(@query)
+      end
+      
+      should "return issues with ! empty role" do
+        @empty_role = Role.generate!
+        @query = Query.new(:name => '_')
+        @query.add_filter('member_of_group', '!', [@empty_role.id.to_s])
+        
+        assert_find_issues_with_query_is_successful @query
+      end
     end
   end
   
--- a/test/unit/repository_bazaar_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/repository_bazaar_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -19,16 +19,19 @@
 
 class RepositoryBazaarTest < ActiveSupport::TestCase
   fixtures :projects
-  
+
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/bazaar_repository'
   REPOSITORY_PATH.gsub!(/\/+/, '/')
 
   def setup
-    @project = Project.find(1)
-    assert @repository = Repository::Bazaar.create(:project => @project, :url => "file:///#{REPOSITORY_PATH}")
+    @project = Project.find(3)
+    @repository = Repository::Bazaar.create(
+              :project => @project, :url => "file:///#{REPOSITORY_PATH}",
+              :log_encoding => 'UTF-8')
+    assert @repository
   end
-  
+
   if File.directory?(REPOSITORY_PATH)  
     def test_fetch_changesets_from_scratch
       @repository.fetch_changesets
@@ -38,7 +41,7 @@
       assert_equal 9, @repository.changes.count
       assert_equal 'Initial import', @repository.changesets.find_by_revision('1').comments
     end
-    
+
     def test_fetch_changesets_incremental
       @repository.fetch_changesets
       # Remove changesets with revision > 5
@@ -49,7 +52,7 @@
       @repository.fetch_changesets
       assert_equal 4, @repository.changesets.count
     end
-    
+
     def test_entries
       entries = @repository.entries
       assert_equal 2, entries.size
@@ -68,19 +71,6 @@
       assert_equal 'file', entries.last.kind
       assert_equal 'edit.png', entries.last.name
     end
-    
-    def test_cat
-      cat = @repository.scm.cat('directory/document.txt')
-      assert cat =~ /Write the contents of a file as of a given revision to standard output/
-    end
-    
-    def test_annotate
-      annotate = @repository.scm.annotate('doc-mkdir.txt')
-      assert_equal 17, annotate.lines.size
-      assert_equal '1', annotate.revisions[0].identifier
-      assert_equal 'jsmith@', annotate.revisions[0].author
-      assert_equal 'mkdir', annotate.lines[0]
-    end
   else
     puts "Bazaar test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/repository_cvs_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/repository_cvs_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -27,34 +27,64 @@
   MODULE_NAME = 'test'
   
   def setup
-    @project = Project.find(1)
-    assert @repository = Repository::Cvs.create(:project => @project, 
-                                                :root_url => REPOSITORY_PATH,
-                                                :url => MODULE_NAME)
+    @project = Project.find(3)
+    @repository = Repository::Cvs.create(:project => @project, 
+                                         :root_url => REPOSITORY_PATH,
+                                         :url => MODULE_NAME,
+                                         :log_encoding => 'UTF-8')
+    assert @repository
   end
   
   if File.directory?(REPOSITORY_PATH)  
     def test_fetch_changesets_from_scratch
+      assert_equal 0, @repository.changesets.count
       @repository.fetch_changesets
       @repository.reload
       
       assert_equal 5, @repository.changesets.count
       assert_equal 14, @repository.changes.count
       assert_not_nil @repository.changesets.find_by_comments('Two files changed')
+
+      r2 = @repository.changesets.find_by_revision('2')
+      assert_equal 'v1-20071213-162510', r2.scmid
     end
     
     def test_fetch_changesets_incremental
+      assert_equal 0, @repository.changesets.count
       @repository.fetch_changesets
-      # Remove the 3 latest changesets
-      @repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy)
+      # Remove changesets with revision > 3
+      @repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 3}
       @repository.reload
-      assert_equal 2, @repository.changesets.count
-      
+      assert_equal 3, @repository.changesets.count
+      assert_equal %w|3 2 1|, @repository.changesets.collect(&:revision)
+
+      rev3_commit = @repository.changesets.find(:first, :order => 'committed_on DESC')
+      assert_equal '3', rev3_commit.revision
+       # 2007-12-14 01:27:22 +0900
+      rev3_committed_on = Time.gm(2007, 12, 13, 16, 27, 22)
+      assert_equal 'HEAD-20071213-162722', rev3_commit.scmid
+      assert_equal rev3_committed_on, rev3_commit.committed_on
+      latest_rev = @repository.latest_changeset
+      assert_equal rev3_committed_on, latest_rev.committed_on
+
       @repository.fetch_changesets
+      @repository.reload
       assert_equal 5, @repository.changesets.count
+
+      assert_equal %w|5 4 3 2 1|, @repository.changesets.collect(&:revision)
+      rev5_commit = @repository.changesets.find(:first, :order => 'committed_on DESC')
+      assert_equal 'HEAD-20071213-163001', rev5_commit.scmid
+       # 2007-12-14 01:30:01 +0900
+      rev5_committed_on = Time.gm(2007, 12, 13, 16, 30, 1)
+      assert_equal rev5_committed_on, rev5_commit.committed_on
     end
     
     def test_deleted_files_should_not_be_listed
+      assert_equal 0, @repository.changesets.count
+      @repository.fetch_changesets
+      @repository.reload
+      assert_equal 5, @repository.changesets.count
+
       entries = @repository.entries('sources')
       assert entries.detect {|e| e.name == 'watchers_controller.rb'}
       assert_nil entries.detect {|e| e.name == 'welcome_controller.rb'}
--- a/test/unit/repository_darcs_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/repository_darcs_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -19,25 +19,28 @@
 
 class RepositoryDarcsTest < ActiveSupport::TestCase
   fixtures :projects
-  
+
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/darcs_repository'
-  
+
   def setup
-    @project = Project.find(1)
-    assert @repository = Repository::Darcs.create(:project => @project, :url => REPOSITORY_PATH)
+    @project = Project.find(3)
+    @repository = Repository::Darcs.create(
+                      :project => @project, :url => REPOSITORY_PATH,
+                      :log_encoding => 'UTF-8')
+    assert @repository
   end
-  
+
   if File.directory?(REPOSITORY_PATH)  
     def test_fetch_changesets_from_scratch
       @repository.fetch_changesets
       @repository.reload
-      
+
       assert_equal 6, @repository.changesets.count
       assert_equal 13, @repository.changes.count
       assert_equal "Initial commit.", @repository.changesets.find_by_revision('1').comments
     end
-    
+
     def test_fetch_changesets_incremental
       @repository.fetch_changesets
       # Remove changesets with revision > 3
@@ -48,8 +51,10 @@
       @repository.fetch_changesets
       assert_equal 6, @repository.changesets.count
     end
-    
+
     def test_deleted_files_should_not_be_listed
+      @repository.fetch_changesets
+      @repository.reload
       entries = @repository.entries('sources')
       assert entries.detect {|e| e.name == 'watchers_controller.rb'}
       assert_nil entries.detect {|e| e.name == 'welcome_controller.rb'}
--- a/test/unit/repository_git_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/repository_git_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -18,25 +18,29 @@
 require File.expand_path('../../test_helper', __FILE__)
 
 class RepositoryGitTest < ActiveSupport::TestCase
-  fixtures :projects, :repositories, :enabled_modules, :users, :roles 
-  
+  fixtures :projects, :repositories, :enabled_modules, :users, :roles
+
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
   REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
-  
+
+  FELIX_HEX  = "Felix Sch\xC3\xA4fer"
+
   def setup
-    @project = Project.find(1)
-    assert @repository = Repository::Git.create(:project => @project, :url => REPOSITORY_PATH)
+    Setting.commit_logs_encoding = 'UTF-8'
+    @project = Project.find(3)
+    @repository = Repository::Git.create(:project => @project, :url => REPOSITORY_PATH)
+    assert @repository
   end
-  
+
   if File.directory?(REPOSITORY_PATH)  
     def test_fetch_changesets_from_scratch
       @repository.fetch_changesets
       @repository.reload
-      
-      assert_equal 15, @repository.changesets.count
-      assert_equal 24, @repository.changes.count
-      
+
+      assert_equal 16, @repository.changesets.count
+      assert_equal 25, @repository.changes.count
+
       commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
       assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
       assert_equal "jsmith <jsmith@foo.bar>", commit.committer
@@ -57,10 +61,20 @@
       # Remove the 3 latest changesets
       @repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy)
       @repository.reload
-      assert_equal 12, @repository.changesets.count
-      
+      cs1 = @repository.changesets
+      assert_equal 13, cs1.count
+
+      rev_a_commit = @repository.changesets.find(:first, :order => 'committed_on DESC')
+      assert_equal '4f26664364207fa8b1af9f8722647ab2d4ac5d43', rev_a_commit.revision
+      # Mon Jul 5 22:34:26 2010 +0200
+      rev_a_committed_on = Time.gm(2010, 7, 5, 20, 34, 26)
+      assert_equal '4f26664364207fa8b1af9f8722647ab2d4ac5d43', rev_a_commit.scmid
+      assert_equal rev_a_committed_on, rev_a_commit.committed_on
+      latest_rev = @repository.latest_changeset
+      assert_equal rev_a_committed_on, latest_rev.committed_on
+
       @repository.fetch_changesets
-      assert_equal 15, @repository.changesets.count
+      assert_equal 16, @repository.changesets.count
     end
 
     def test_find_changeset_by_name
@@ -103,6 +117,17 @@
       assert c.event_title.include?('abc7234c:')
       assert_equal 'abc7234cb2750b63f47bff735edc50a1c0a433c2', c.event_url[:rev]
     end
+
+    def test_log_utf8
+      @repository.fetch_changesets
+      @repository.reload
+      str_felix_hex  = FELIX_HEX
+      if str_felix_hex.respond_to?(:force_encoding)
+          str_felix_hex.force_encoding('UTF-8')
+      end
+      c = @repository.changesets.find_by_revision('ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
+      assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
+    end
   else
     puts "Git test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/repository_mercurial_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/repository_mercurial_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -22,23 +22,23 @@
   
   # No '..' in the repository path
   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
-  
+
   def setup
-    @project = Project.find(1)
-    assert @repository = Repository::Mercurial.create(:project => @project, :url => REPOSITORY_PATH)
+    @project = Project.find(3)
+    @repository = Repository::Mercurial.create(:project => @project, :url => REPOSITORY_PATH)
+    assert @repository
   end
-  
+
   if File.directory?(REPOSITORY_PATH)  
     def test_fetch_changesets_from_scratch
       @repository.fetch_changesets
       @repository.reload
-      
       assert_equal 17, @repository.changesets.count
       assert_equal 25, @repository.changes.count
       assert_equal "Initial import.\nThe repository contains 3 files.",
                    @repository.changesets.find_by_revision('0').comments
     end
-    
+
     def test_fetch_changesets_incremental
       @repository.fetch_changesets
       # Remove changesets with revision > 2
@@ -49,19 +49,6 @@
       @repository.fetch_changesets
       assert_equal 17, @repository.changesets.count
     end
-    
-    def test_entries
-      assert_equal 2, @repository.entries("sources", 2).size
-      assert_equal 2, @repository.entries("sources", '400bb8672109').size
-      assert_equal 1, @repository.entries("sources", 3).size
-      assert_equal 1, @repository.entries("sources", 'b3a615152df8').size
-    end
-
-    def test_locate_on_outdated_repository
-      assert_equal 1, @repository.entries("images", 0).size
-      assert_equal 2, @repository.entries("images").size
-      assert_equal 2, @repository.entries("images", 2).size
-    end
 
     def test_isodatesec
       # Template keyword 'isodatesec' supported in Mercurial 1.0 and higher
@@ -171,6 +158,43 @@
       assert c.event_title.include?('123:abc400bb8672:')
       assert_equal 'abc400bb8672', c.event_url[:rev]
     end
+
+    def test_latest_changesets_with_limit
+      @repository.fetch_changesets
+      @repository.reload
+      changesets = @repository.latest_changesets('', nil, 2)
+      assert_equal @repository.latest_changesets('', nil)[0, 2], changesets
+    end
+
+    def test_latest_changesets_with_filepath
+      @repository.fetch_changesets
+      @repository.reload
+      changesets = @repository.latest_changesets('README', nil)
+      assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
+
+      path = 'sql_escape/percent%dir/percent%file1.txt'
+      changesets = @repository.latest_changesets(path, nil)
+      assert_equal %w|11 10 9|, changesets.collect(&:revision)
+
+      path = 'sql_escape/underscore_dir/understrike_file.txt'
+      changesets = @repository.latest_changesets(path, nil)
+      assert_equal %w|12 9|, changesets.collect(&:revision)
+    end
+
+    def test_latest_changesets_with_dirpath
+      @repository.fetch_changesets
+      @repository.reload
+      changesets = @repository.latest_changesets('images', nil)
+      assert_equal %w|1 0|, changesets.collect(&:revision)
+
+      path = 'sql_escape/percent%dir'
+      changesets = @repository.latest_changesets(path, nil)
+      assert_equal %w|13 11 10 9|, changesets.collect(&:revision)
+
+      path = 'sql_escape/underscore_dir'
+      changesets = @repository.latest_changesets(path, nil)
+      assert_equal %w|13 12 9|, changesets.collect(&:revision)
+    end
   else
     puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/repository_subversion_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/repository_subversion_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -21,8 +21,9 @@
   fixtures :projects, :repositories, :enabled_modules, :users, :roles 
   
   def setup
-    @project = Project.find(1)
-    assert @repository = Repository::Subversion.create(:project => @project, :url => "file:///#{self.class.repository_path('subversion')}")
+    @project = Project.find(3)
+    assert @repository = Repository::Subversion.create(:project => @project,
+             :url => "file://#{self.class.repository_path('subversion')}")
   end
   
   if repository_configured?('subversion')
@@ -74,7 +75,7 @@
     end
 
     def test_directory_listing_with_square_brackets_in_base
-      @project = Project.find(1)
+      @project = Project.find(3)
       @repository = Repository::Subversion.create(:project => @project, :url => "file:///#{self.class.repository_path('subversion')}/subversion_test/[folder_with_brackets]")
 
       @repository.fetch_changesets
@@ -136,6 +137,56 @@
       assert c.event_title.include?('123456789:')
       assert_equal '123456789', c.event_url[:rev]
     end
+
+    def test_log_encoding_ignore_setting
+      with_settings :commit_logs_encoding => 'windows-1252' do
+        s1 = "\xC2\x80"
+        s2 = "\xc3\x82\xc2\x80"
+        if s1.respond_to?(:force_encoding)
+          s3 = s1
+          s4 = s2
+          s1.force_encoding('ASCII-8BIT')
+          s2.force_encoding('ASCII-8BIT')
+          s3.force_encoding('ISO-8859-1')
+          s4.force_encoding('UTF-8')
+          assert_equal s3.encode('UTF-8'), s4
+        end
+        c = Changeset.new(:repository => @repository,
+                          :comments=>s2,
+                          :revision=>'123',
+                          :committed_on => Time.now)
+        assert c.save
+        assert_equal s2, c.comments
+      end
+    end
+
+    def test_previous
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('3')
+      assert_equal @repository.find_changeset_by_name('2'), changeset.previous
+    end
+
+    def test_previous_nil
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('1')
+      assert_nil changeset.previous
+    end
+
+    def test_next
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('2')
+      assert_equal @repository.find_changeset_by_name('3'), changeset.next
+    end
+
+    def test_next_nil
+      @repository.fetch_changesets
+      @repository.reload
+      changeset = @repository.find_changeset_by_name('11')
+      assert_nil changeset.next
+    end
   else
     puts "Subversion test repository NOT FOUND. Skipping unit tests !!!"
     def test_fake; assert true end
--- a/test/unit/repository_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/repository_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -125,16 +125,19 @@
     assert_not_equal( comment, changeset.comments )
     assert_equal( 'This is a loooooooooooooooooooooooooooong comment', changeset.comments )
   end
-  
+
   def test_for_urls_strip
-    repository = Repository::Cvs.create(:project => Project.find(4), :url => ' :pserver:login:password@host:/path/to/the/repository',
-                                                                     :root_url => 'foo  ')
+    repository = Repository::Cvs.create(
+        :project => Project.find(4),
+        :url => ' :pserver:login:password@host:/path/to/the/repository',
+        :root_url => 'foo  ',
+        :log_encoding => 'UTF-8')
     assert repository.save
     repository.reload
     assert_equal ':pserver:login:password@host:/path/to/the/repository', repository.url
     assert_equal 'foo', repository.root_url
   end
-  
+
   def test_manual_user_mapping
     assert_no_difference "Changeset.count(:conditions => 'user_id <> 2')" do
       c = Changeset.create!(:repository => @repository, :committer => 'foo', :committed_on => Time.now, :revision => 100, :comments => 'Committed by foo.')
--- a/test/unit/user_test.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/test/unit/user_test.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -361,7 +361,6 @@
     user = User.try_to_login("admin", "hello")
     assert_kind_of User, user
     assert_equal "admin", user.login
-    assert_equal User.hash_password("hello"), user.hashed_password    
   end
   
   def test_name_format
@@ -383,6 +382,22 @@
     assert_equal nil, user  
   end
   
+  context ".try_to_login" do
+    context "with good credentials" do
+      should "return the user" do
+        user = User.try_to_login("admin", "admin")
+        assert_kind_of User, user
+        assert_equal "admin", user.login
+      end
+    end
+    
+    context "with wrong credentials" do
+      should "return nil" do
+        assert_nil User.try_to_login("admin", "foo")
+      end
+    end
+  end
+  
   if ldap_configured?
     context "#try_to_login using LDAP" do
       context "with failed connection to the LDAP server" do
@@ -672,6 +687,7 @@
       
       should "be false for a user with :only_my_events and isn't an author, creator, or assignee" do
         @user = User.generate_with_protected!(:mail_notification => 'only_my_events')
+        Member.create!(:user => @user, :project => @project, :role_ids => [1])
         assert ! @user.notify_about?(@issue)
       end
       
@@ -704,12 +720,45 @@
         @assignee.update_attribute(:mail_notification, 'only_owner')
         assert ! @assignee.notify_about?(@issue)
       end
+      
+      should "be true for a user with :selected and is the author" do
+        @author.update_attribute(:mail_notification, 'selected')
+        assert @author.notify_about?(@issue)
+      end
+      
+      should "be true for a user with :selected and is the assignee" do
+        @assignee.update_attribute(:mail_notification, 'selected')
+        assert @assignee.notify_about?(@issue)
+      end
+      
+      should "be false for a user with :selected and is not the author or assignee" do
+        @user = User.generate_with_protected!(:mail_notification => 'selected')
+        Member.create!(:user => @user, :project => @project, :role_ids => [1])
+        assert ! @user.notify_about?(@issue)
+      end
     end
 
     context "other events" do
       should 'be added and tested'
     end
   end
+
+  def test_salt_unsalted_passwords
+    # Restore a user with an unsalted password
+    user = User.find(1)
+    user.salt = nil
+    user.hashed_password = User.hash_password("unsalted")
+    user.save!
+    
+    User.salt_unsalted_passwords!
+    
+    user.reload
+    # Salt added
+    assert !user.salt.blank?
+    # Password still valid
+    assert user.check_password?("unsalted")
+    assert_equal user, User.try_to_login(user.login, "unsalted")
+  end
   
   if Object.const_defined?(:OpenID)
     
--- a/tmp/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/tmp/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/tmp
+4993
+http://redmine.rubyforge.org/svn/trunk/tmp
 http://redmine.rubyforge.org/svn
 
 
--- a/tmp/cache/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/tmp/cache/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/tmp/cache
+4993
+http://redmine.rubyforge.org/svn/trunk/tmp/cache
 http://redmine.rubyforge.org/svn
 
 
--- a/tmp/sessions/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/tmp/sessions/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/tmp/sessions
+4993
+http://redmine.rubyforge.org/svn/trunk/tmp/sessions
 http://redmine.rubyforge.org/svn
 
 
--- a/tmp/sockets/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/tmp/sockets/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/tmp/sockets
+4993
+http://redmine.rubyforge.org/svn/trunk/tmp/sockets
 http://redmine.rubyforge.org/svn
 
 
--- a/tmp/test/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/tmp/test/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/tmp/test
+4993
+http://redmine.rubyforge.org/svn/trunk/tmp/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-06-08T02:07:30.275769Z
 2784
--- a/vendor/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 31
-/svn/!svn/ver/4602/trunk/vendor
+/svn/!svn/ver/4891/trunk/vendor
 END
--- a/vendor/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/vendor
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-01T11:45:12.617336Z
-4602
+2011-02-20T14:26:23.957459Z
+4891
 jplang
 has-props
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 36
+/svn/!svn/ver/4739/trunk/vendor/gems
+END
--- a/vendor/gems/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/gems/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,15 +1,15 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/gems
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems
 http://redmine.rubyforge.org/svn
 
 
 
-2009-11-25T05:36:44.792571Z
-3090
-edavis10
+2011-01-22T13:18:01.557255Z
+4739
+jplang
 
 
 
@@ -26,6 +26,9 @@
 
 e93f8b46-1217-0410-a6f0-8f06a7374b81
 
+coderay-0.9.7
+dir
+
 rubytree-0.5.2
 dir
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/.specification	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,155 @@
+--- !ruby/object:Gem::Specification 
+name: coderay
+version: !ruby/object:Gem::Version 
+  hash: 53
+  prerelease: false
+  segments: 
+  - 0
+  - 9
+  - 7
+  version: 0.9.7
+platform: ruby
+authors: 
+- murphy
+autorequire: 
+bindir: bin
+cert_chain: []
+
+date: 2011-01-15 00:00:00 +01:00
+default_executable: 
+dependencies: []
+
+description: |
+  Fast and easy syntax highlighting for selected languages, written in Ruby.
+  Comes with RedCloth integration and LOC counter.
+
+email: murphy@rubychan.de
+executables: 
+- coderay
+- coderay_stylesheet
+extensions: []
+
+extra_rdoc_files: 
+- lib/README
+- FOLDERS
+files: 
+- ./lib/coderay/duo.rb
+- ./lib/coderay/encoder.rb
+- ./lib/coderay/encoders/_map.rb
+- ./lib/coderay/encoders/comment_filter.rb
+- ./lib/coderay/encoders/count.rb
+- ./lib/coderay/encoders/debug.rb
+- ./lib/coderay/encoders/div.rb
+- ./lib/coderay/encoders/filter.rb
+- ./lib/coderay/encoders/html/css.rb
+- ./lib/coderay/encoders/html/numerization.rb
+- ./lib/coderay/encoders/html/output.rb
+- ./lib/coderay/encoders/html.rb
+- ./lib/coderay/encoders/json.rb
+- ./lib/coderay/encoders/lines_of_code.rb
+- ./lib/coderay/encoders/null.rb
+- ./lib/coderay/encoders/page.rb
+- ./lib/coderay/encoders/span.rb
+- ./lib/coderay/encoders/statistic.rb
+- ./lib/coderay/encoders/term.rb
+- ./lib/coderay/encoders/text.rb
+- ./lib/coderay/encoders/token_class_filter.rb
+- ./lib/coderay/encoders/xml.rb
+- ./lib/coderay/encoders/yaml.rb
+- ./lib/coderay/for_redcloth.rb
+- ./lib/coderay/helpers/file_type.rb
+- ./lib/coderay/helpers/gzip_simple.rb
+- ./lib/coderay/helpers/plugin.rb
+- ./lib/coderay/helpers/word_list.rb
+- ./lib/coderay/scanner.rb
+- ./lib/coderay/scanners/_map.rb
+- ./lib/coderay/scanners/c.rb
+- ./lib/coderay/scanners/cpp.rb
+- ./lib/coderay/scanners/css.rb
+- ./lib/coderay/scanners/debug.rb
+- ./lib/coderay/scanners/delphi.rb
+- ./lib/coderay/scanners/diff.rb
+- ./lib/coderay/scanners/groovy.rb
+- ./lib/coderay/scanners/html.rb
+- ./lib/coderay/scanners/java/builtin_types.rb
+- ./lib/coderay/scanners/java.rb
+- ./lib/coderay/scanners/java_script-0.9.6.rb
+- ./lib/coderay/scanners/java_script.rb
+- ./lib/coderay/scanners/json.rb
+- ./lib/coderay/scanners/nitro_xhtml.rb
+- ./lib/coderay/scanners/php.rb
+- ./lib/coderay/scanners/plaintext.rb
+- ./lib/coderay/scanners/python.rb
+- ./lib/coderay/scanners/rhtml.rb
+- ./lib/coderay/scanners/ruby/patterns.rb
+- ./lib/coderay/scanners/ruby.rb
+- ./lib/coderay/scanners/scheme.rb
+- ./lib/coderay/scanners/sql.rb
+- ./lib/coderay/scanners/xml.rb
+- ./lib/coderay/scanners/yaml.rb
+- ./lib/coderay/style.rb
+- ./lib/coderay/styles/_map.rb
+- ./lib/coderay/styles/cycnus.rb
+- ./lib/coderay/styles/murphy.rb
+- ./lib/coderay/token_classes.rb
+- ./lib/coderay/tokens.rb
+- ./lib/coderay.rb
+- ./Rakefile
+- ./test/functional/basic.rb
+- ./test/functional/basic.rbc
+- ./test/functional/for_redcloth.rb
+- ./test/functional/for_redcloth.rbc
+- ./test/functional/load_plugin_scanner.rb
+- ./test/functional/load_plugin_scanner.rbc
+- ./test/functional/suite.rb
+- ./test/functional/suite.rbc
+- ./test/functional/vhdl.rb
+- ./test/functional/vhdl.rbc
+- ./test/functional/word_list.rb
+- ./test/functional/word_list.rbc
+- ./lib/README
+- ./LICENSE
+- lib/README
+- FOLDERS
+- bin/coderay
+- bin/coderay_stylesheet
+has_rdoc: true
+homepage: http://coderay.rubychan.de
+licenses: []
+
+post_install_message: 
+rdoc_options: 
+- -SNw2
+- -mlib/README
+- -t CodeRay Documentation
+require_paths: 
+- lib
+required_ruby_version: !ruby/object:Gem::Requirement 
+  none: false
+  requirements: 
+  - - ">="
+    - !ruby/object:Gem::Version 
+      hash: 51
+      segments: 
+      - 1
+      - 8
+      - 2
+      version: 1.8.2
+required_rubygems_version: !ruby/object:Gem::Requirement 
+  none: false
+  requirements: 
+  - - ">="
+    - !ruby/object:Gem::Version 
+      hash: 3
+      segments: 
+      - 0
+      version: "0"
+requirements: []
+
+rubyforge_project: coderay
+rubygems_version: 1.3.7
+signing_key: 
+specification_version: 3
+summary: Fast syntax highlighting for selected languages.
+test_files: 
+- ./test/functional/suite.rb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,29 @@
+K 25
+svn:wc:ra_dav:version-url
+V 50
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7
+END
+LICENSE
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/LICENSE
+END
+Rakefile
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/Rakefile
+END
+.specification
+K 25
+svn:wc:ra_dav:version-url
+V 65
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/.specification
+END
+FOLDERS
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/FOLDERS
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,173 @@
+10
+
+dir
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7
+http://redmine.rubyforge.org/svn
+
+
+
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+test
+dir
+
+LICENSE
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+071d975e884a936b40eab0b865ea4da1
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+26534
+
+Rakefile
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+18ea6850e44c2180fe121b906b0ce27a
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+771
+
+lib
+dir
+
+bin
+dir
+
+.specification
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+a3bbd9c0481e784e38ef28afc8aa3242
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4138
+
+FOLDERS
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+f11c3e40d9b35de767926748e7278f47
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1133
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/.svn/text-base/.specification.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,155 @@
+--- !ruby/object:Gem::Specification 
+name: coderay
+version: !ruby/object:Gem::Version 
+  hash: 53
+  prerelease: false
+  segments: 
+  - 0
+  - 9
+  - 7
+  version: 0.9.7
+platform: ruby
+authors: 
+- murphy
+autorequire: 
+bindir: bin
+cert_chain: []
+
+date: 2011-01-15 00:00:00 +01:00
+default_executable: 
+dependencies: []
+
+description: |
+  Fast and easy syntax highlighting for selected languages, written in Ruby.
+  Comes with RedCloth integration and LOC counter.
+
+email: murphy@rubychan.de
+executables: 
+- coderay
+- coderay_stylesheet
+extensions: []
+
+extra_rdoc_files: 
+- lib/README
+- FOLDERS
+files: 
+- ./lib/coderay/duo.rb
+- ./lib/coderay/encoder.rb
+- ./lib/coderay/encoders/_map.rb
+- ./lib/coderay/encoders/comment_filter.rb
+- ./lib/coderay/encoders/count.rb
+- ./lib/coderay/encoders/debug.rb
+- ./lib/coderay/encoders/div.rb
+- ./lib/coderay/encoders/filter.rb
+- ./lib/coderay/encoders/html/css.rb
+- ./lib/coderay/encoders/html/numerization.rb
+- ./lib/coderay/encoders/html/output.rb
+- ./lib/coderay/encoders/html.rb
+- ./lib/coderay/encoders/json.rb
+- ./lib/coderay/encoders/lines_of_code.rb
+- ./lib/coderay/encoders/null.rb
+- ./lib/coderay/encoders/page.rb
+- ./lib/coderay/encoders/span.rb
+- ./lib/coderay/encoders/statistic.rb
+- ./lib/coderay/encoders/term.rb
+- ./lib/coderay/encoders/text.rb
+- ./lib/coderay/encoders/token_class_filter.rb
+- ./lib/coderay/encoders/xml.rb
+- ./lib/coderay/encoders/yaml.rb
+- ./lib/coderay/for_redcloth.rb
+- ./lib/coderay/helpers/file_type.rb
+- ./lib/coderay/helpers/gzip_simple.rb
+- ./lib/coderay/helpers/plugin.rb
+- ./lib/coderay/helpers/word_list.rb
+- ./lib/coderay/scanner.rb
+- ./lib/coderay/scanners/_map.rb
+- ./lib/coderay/scanners/c.rb
+- ./lib/coderay/scanners/cpp.rb
+- ./lib/coderay/scanners/css.rb
+- ./lib/coderay/scanners/debug.rb
+- ./lib/coderay/scanners/delphi.rb
+- ./lib/coderay/scanners/diff.rb
+- ./lib/coderay/scanners/groovy.rb
+- ./lib/coderay/scanners/html.rb
+- ./lib/coderay/scanners/java/builtin_types.rb
+- ./lib/coderay/scanners/java.rb
+- ./lib/coderay/scanners/java_script-0.9.6.rb
+- ./lib/coderay/scanners/java_script.rb
+- ./lib/coderay/scanners/json.rb
+- ./lib/coderay/scanners/nitro_xhtml.rb
+- ./lib/coderay/scanners/php.rb
+- ./lib/coderay/scanners/plaintext.rb
+- ./lib/coderay/scanners/python.rb
+- ./lib/coderay/scanners/rhtml.rb
+- ./lib/coderay/scanners/ruby/patterns.rb
+- ./lib/coderay/scanners/ruby.rb
+- ./lib/coderay/scanners/scheme.rb
+- ./lib/coderay/scanners/sql.rb
+- ./lib/coderay/scanners/xml.rb
+- ./lib/coderay/scanners/yaml.rb
+- ./lib/coderay/style.rb
+- ./lib/coderay/styles/_map.rb
+- ./lib/coderay/styles/cycnus.rb
+- ./lib/coderay/styles/murphy.rb
+- ./lib/coderay/token_classes.rb
+- ./lib/coderay/tokens.rb
+- ./lib/coderay.rb
+- ./Rakefile
+- ./test/functional/basic.rb
+- ./test/functional/basic.rbc
+- ./test/functional/for_redcloth.rb
+- ./test/functional/for_redcloth.rbc
+- ./test/functional/load_plugin_scanner.rb
+- ./test/functional/load_plugin_scanner.rbc
+- ./test/functional/suite.rb
+- ./test/functional/suite.rbc
+- ./test/functional/vhdl.rb
+- ./test/functional/vhdl.rbc
+- ./test/functional/word_list.rb
+- ./test/functional/word_list.rbc
+- ./lib/README
+- ./LICENSE
+- lib/README
+- FOLDERS
+- bin/coderay
+- bin/coderay_stylesheet
+has_rdoc: true
+homepage: http://coderay.rubychan.de
+licenses: []
+
+post_install_message: 
+rdoc_options: 
+- -SNw2
+- -mlib/README
+- -t CodeRay Documentation
+require_paths: 
+- lib
+required_ruby_version: !ruby/object:Gem::Requirement 
+  none: false
+  requirements: 
+  - - ">="
+    - !ruby/object:Gem::Version 
+      hash: 51
+      segments: 
+      - 1
+      - 8
+      - 2
+      version: 1.8.2
+required_rubygems_version: !ruby/object:Gem::Requirement 
+  none: false
+  requirements: 
+  - - ">="
+    - !ruby/object:Gem::Version 
+      hash: 3
+      segments: 
+      - 0
+      version: "0"
+requirements: []
+
+rubyforge_project: coderay
+rubygems_version: 1.3.7
+signing_key: 
+specification_version: 3
+summary: Fast syntax highlighting for selected languages.
+test_files: 
+- ./test/functional/suite.rb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/.svn/text-base/FOLDERS.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,53 @@
+= CodeRay - Trunk folder structure
+
+== bench - Benchmarking system
+
+All benchmarking stuff goes here.
+
+Test inputs are stored in files named <code>example.<lang></code>.
+Test outputs go to <code>bench/test.<encoder-default-file-extension></code>.
+
+Run <code>bench/bench.rb</code> to get a usage description.
+
+Run <code>rake bench</code> to perform an example benchmark.
+
+
+== bin - Scripts
+
+Executional files for CodeRay.
+
+
+== demo - Demos and functional tests
+
+Demonstrational scripts to show of CodeRay's features.
+
+Run them as functional tests with <code>rake test:demos</code>.
+
+
+== etc - Lots of stuff
+
+Some addidtional files for CodeRay, mainly graphics and Vim scripts.
+
+
+== gem_server - Gem output folder
+
+For <code>rake gem</code>.
+
+
+== lib - CodeRay library code
+
+This is the base directory for the CodeRay library.
+
+
+== rake_helpers - Rake helper libraries
+
+Some files to enhance Rake, including the Autumnal Rdoc template and some scripts.
+
+
+== test - Tests
+
+Tests for the scanners.
+
+Each language has its own subfolder and sub-suite.
+
+Run with <code>rake test</code>.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/.svn/text-base/LICENSE.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,504 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/.svn/text-base/Rakefile.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,35 @@
+require 'rake/rdoctask'
+
+ROOT = '.'
+LIB_ROOT = File.join ROOT, 'lib'
+EXTRA_RDOC_FILES = %w(lib/README FOLDERS)
+
+task :default => :test
+
+if File.directory? 'rake_tasks'
+  
+  # load rake tasks from subfolder
+  for task_file in Dir['rake_tasks/*.rake'].sort
+    load task_file
+  end
+  
+else
+  
+  # fallback tasks when rake_tasks folder is not present
+  desc 'Run CodeRay tests (basic)'
+  task :test do
+    ruby './test/functional/suite.rb'
+    ruby './test/functional/for_redcloth.rb'
+  end
+  
+  desc 'Generate documentation for CodeRay'
+  Rake::RDocTask.new :doc do |rd|
+    rd.title = 'CodeRay Documentation'
+    rd.main = 'lib/README'
+    rd.rdoc_files.add Dir['lib']
+    rd.rdoc_files.add 'lib/README'
+    rd.rdoc_files.add 'FOLDERS'
+    rd.rdoc_dir = 'doc'
+  end
+  
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/FOLDERS	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,53 @@
+= CodeRay - Trunk folder structure
+
+== bench - Benchmarking system
+
+All benchmarking stuff goes here.
+
+Test inputs are stored in files named <code>example.<lang></code>.
+Test outputs go to <code>bench/test.<encoder-default-file-extension></code>.
+
+Run <code>bench/bench.rb</code> to get a usage description.
+
+Run <code>rake bench</code> to perform an example benchmark.
+
+
+== bin - Scripts
+
+Executional files for CodeRay.
+
+
+== demo - Demos and functional tests
+
+Demonstrational scripts to show of CodeRay's features.
+
+Run them as functional tests with <code>rake test:demos</code>.
+
+
+== etc - Lots of stuff
+
+Some addidtional files for CodeRay, mainly graphics and Vim scripts.
+
+
+== gem_server - Gem output folder
+
+For <code>rake gem</code>.
+
+
+== lib - CodeRay library code
+
+This is the base directory for the CodeRay library.
+
+
+== rake_helpers - Rake helper libraries
+
+Some files to enhance Rake, including the Autumnal Rdoc template and some scripts.
+
+
+== test - Tests
+
+Tests for the scanners.
+
+Each language has its own subfolder and sub-suite.
+
+Run with <code>rake test</code>.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/LICENSE	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,504 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/Rakefile	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,35 @@
+require 'rake/rdoctask'
+
+ROOT = '.'
+LIB_ROOT = File.join ROOT, 'lib'
+EXTRA_RDOC_FILES = %w(lib/README FOLDERS)
+
+task :default => :test
+
+if File.directory? 'rake_tasks'
+  
+  # load rake tasks from subfolder
+  for task_file in Dir['rake_tasks/*.rake'].sort
+    load task_file
+  end
+  
+else
+  
+  # fallback tasks when rake_tasks folder is not present
+  desc 'Run CodeRay tests (basic)'
+  task :test do
+    ruby './test/functional/suite.rb'
+    ruby './test/functional/for_redcloth.rb'
+  end
+  
+  desc 'Generate documentation for CodeRay'
+  Rake::RDocTask.new :doc do |rd|
+    rd.title = 'CodeRay Documentation'
+    rd.main = 'lib/README'
+    rd.rdoc_files.add Dir['lib']
+    rd.rdoc_files.add 'lib/README'
+    rd.rdoc_files.add 'FOLDERS'
+    rd.rdoc_dir = 'doc'
+  end
+  
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/bin/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/bin
+END
+coderay_stylesheet
+K 25
+svn:wc:ra_dav:version-url
+V 73
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/bin/coderay_stylesheet
+END
+coderay
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/bin/coderay
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/bin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,96 @@
+10
+
+dir
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/bin
+http://redmine.rubyforge.org/svn
+
+
+
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+coderay_stylesheet
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+b20628204e37bb6fd444b1f1992d2c1a
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+93
+
+coderay
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+db4ee9313184e2922a606b55ff92f4f7
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1975
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/bin/.svn/text-base/coderay.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,86 @@
+#!/usr/bin/env ruby
+# CodeRay Executable
+#
+# Version: 0.2
+# Author: murphy
+
+require 'coderay'
+
+if ARGV.empty?
+  $stderr.puts <<-USAGE
+CodeRay #{CodeRay::VERSION} (http://coderay.rubychan.de)
+
+Usage:
+  coderay file [-<format>]
+  coderay -<lang> [-<format>] [< file] [> output]
+
+Defaults:
+  lang:   based on file extension
+  format: ANSI colorized output for terminal, HTML page for files
+
+Examples:
+  coderay foo.rb                         # colorized output to terminal, based on file extension
+  coderay foo.rb -loc                    # print LOC count, based on file extension and format
+  coderay foo.rb > foo.html              # HTML page output to file, based on extension
+  coderay -ruby < foo.rb                 # colorized output to terminal, based on lang
+  coderay -ruby -loc < foo.rb            # print LOC count, based on lang
+  coderay -ruby -page foo.rb             # HTML page output to terminal, based on lang and format
+  coderay -ruby -page foo.rb > foo.html  # HTML page output to file, based on lang and format
+  USAGE
+end
+
+first, second = ARGV
+
+def read
+  file = ARGV.grep(/^(?!-)/).last
+  if file
+    if File.exist?(file)
+      File.read file
+    else
+      $stderr.puts "No such file: #{file}"
+    end
+  else
+    $stdin.read
+  end
+end
+
+if first
+  if first[/-(\w+)/] == first
+    lang = $1
+    input = read
+    tokens = :scan
+  else
+    file = first
+    unless File.exist? file
+      $stderr.puts "No such file: #{file}"
+      exit 2
+    end
+    tokens = CodeRay.scan_file file
+  end
+else
+  $stderr.puts 'No lang/file given.'
+  exit 1
+end
+
+if second
+  if second[/-(\w+)/] == second
+    format = $1.to_sym
+  else
+    raise 'invalid format (must be -xxx)'
+  end
+else
+  if $stdout.tty?
+    format = :term
+  else
+    $stderr.puts 'No format given; setting to default (HTML Page).'
+    format = :page
+  end
+end
+
+if tokens == :scan
+  output = CodeRay::Duo[lang => format].highlight input
+else
+  output = tokens.encode format
+end
+out = $stdout
+out.puts output
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/bin/.svn/text-base/coderay_stylesheet.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,4 @@
+#!/usr/bin/env ruby
+require 'coderay'
+
+puts CodeRay::Encoders[:html]::CSS.new.stylesheet
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/bin/coderay	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,86 @@
+#!/usr/bin/env ruby
+# CodeRay Executable
+#
+# Version: 0.2
+# Author: murphy
+
+require 'coderay'
+
+if ARGV.empty?
+  $stderr.puts <<-USAGE
+CodeRay #{CodeRay::VERSION} (http://coderay.rubychan.de)
+
+Usage:
+  coderay file [-<format>]
+  coderay -<lang> [-<format>] [< file] [> output]
+
+Defaults:
+  lang:   based on file extension
+  format: ANSI colorized output for terminal, HTML page for files
+
+Examples:
+  coderay foo.rb                         # colorized output to terminal, based on file extension
+  coderay foo.rb -loc                    # print LOC count, based on file extension and format
+  coderay foo.rb > foo.html              # HTML page output to file, based on extension
+  coderay -ruby < foo.rb                 # colorized output to terminal, based on lang
+  coderay -ruby -loc < foo.rb            # print LOC count, based on lang
+  coderay -ruby -page foo.rb             # HTML page output to terminal, based on lang and format
+  coderay -ruby -page foo.rb > foo.html  # HTML page output to file, based on lang and format
+  USAGE
+end
+
+first, second = ARGV
+
+def read
+  file = ARGV.grep(/^(?!-)/).last
+  if file
+    if File.exist?(file)
+      File.read file
+    else
+      $stderr.puts "No such file: #{file}"
+    end
+  else
+    $stdin.read
+  end
+end
+
+if first
+  if first[/-(\w+)/] == first
+    lang = $1
+    input = read
+    tokens = :scan
+  else
+    file = first
+    unless File.exist? file
+      $stderr.puts "No such file: #{file}"
+      exit 2
+    end
+    tokens = CodeRay.scan_file file
+  end
+else
+  $stderr.puts 'No lang/file given.'
+  exit 1
+end
+
+if second
+  if second[/-(\w+)/] == second
+    format = $1.to_sym
+  else
+    raise 'invalid format (must be -xxx)'
+  end
+else
+  if $stdout.tty?
+    format = :term
+  else
+    $stderr.puts 'No format given; setting to default (HTML Page).'
+    format = :page
+  end
+end
+
+if tokens == :scan
+  output = CodeRay::Duo[lang => format].highlight input
+else
+  output = tokens.encode format
+end
+out = $stdout
+out.puts output
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/bin/coderay_stylesheet	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,4 @@
+#!/usr/bin/env ruby
+require 'coderay'
+
+puts CodeRay::Encoders[:html]::CSS.new.stylesheet
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib
+END
+coderay.rb
+K 25
+svn:wc:ra_dav:version-url
+V 65
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay.rb
+END
+README
+K 25
+svn:wc:ra_dav:version-url
+V 61
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/README
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,99 @@
+10
+
+dir
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib
+http://redmine.rubyforge.org/svn
+
+
+
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+coderay
+dir
+
+coderay.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+30374cf2e229cc996eaba18502af97c5
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+10050
+
+README
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+046bf12ae0bcbb0b55fc3c4c993680d2
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5065
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/.svn/text-base/README.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,134 @@
+= CodeRay
+
+[- Tired of blue'n'gray? Try the original version of this documentation on
+coderay.rubychan.de[http://coderay.rubychan.de/doc/] (use Ctrl+Click to open it in its own frame.) -]
+
+== About
+CodeRay is a Ruby library for syntax highlighting.
+
+Syntax highlighting means: You put your code in, and you get it back colored;
+Keywords, strings, floats, comments - all in different colors.
+And with line numbers.
+
+*Syntax* *Highlighting*...
+* makes code easier to read and maintain
+* lets you detect syntax errors faster
+* helps you to understand the syntax of a language
+* looks nice
+* is what everybody should have on their website
+* solves all your problems and makes the girls run after you
+
+Version: 0.9.7
+Author:: murphy (Kornelius Kalnbach)
+Contact:: murphy rubychan de
+Website:: coderay.rubychan.de[http://coderay.rubychan.de]
+License:: GNU LGPL; see LICENSE file in the main directory.
+
+== Installation
+
+You need RubyGems[http://rubyforge.org/frs/?group_id=126].
+
+ % gem install coderay
+
+
+=== Dependencies
+
+CodeRay needs Ruby 1.8.6 or later. It also runs with Ruby 1.9.1+ and JRuby 1.1+.
+
+
+== Example Usage
+(Forgive me, but this is not highlighted.)
+
+ require 'coderay'
+ 
+ tokens = CodeRay.scan "puts 'Hello, world!'", :ruby
+ page = tokens.html :line_numbers => :inline, :wrap => :page
+ puts page
+
+
+== Documentation
+
+See CodeRay.
+
+Please report errors in this documentation to <murphy rubychan de>.
+
+
+== Credits
+
+=== Special Thanks to
+
+* licenser (Heinz N. Gies) for ending my QBasic career, inventing the Coder
+  project and the input/output plugin system.
+  CodeRay would not exist without him.
+* bovi (Daniel Bovensiepen) for helping me out on various occasions.
+
+=== Thanks to
+
+* Caleb Clausen for writing RubyLexer (see
+  http://rubyforge.org/projects/rubylexer) and lots of very interesting mail
+  traffic
+* birkenfeld (Georg Brandl) and mitsuhiku (Arnim Ronacher) for PyKleur, now pygments.
+  You guys rock!
+* Jamis Buck for writing Syntax (see http://rubyforge.org/projects/syntax)
+  I got some useful ideas from it.
+* Doug Kearns and everyone else who worked on ruby.vim - it not only helped me
+  coding CodeRay, but also gave me a wonderful target to reach for the Ruby
+  scanner.
+* everyone who uses CodeBB on http://www.rubyforen.de and http://www.python-forum.de
+* iGEL, magichisoka, manveru, WoNáDo and everyone I forgot from rubyforen.de
+* Dethix from ruby-mine.de
+* zickzackw
+* Dookie (who is no longer with us...) and Leonidas from http://www.python-forum.de
+* Andreas Schwarz for finding out that CaseIgnoringWordList was not case
+  ignoring! Such things really make you write tests.
+* closure for the first version of the Scheme scanner.
+* Stefan Walk for the first version of the JavaScript and PHP scanners.
+* Josh Goebel for another version of the JavaScript scanner, a SQL and a Diff scanner.
+* Jonathan Younger for pointing out the licence confusion caused by wrong LICENSE file.
+* Jeremy Hinegardner for finding the shebang-on-empty-file bug in FileType.
+* Charles Oliver Nutter and Yehuda Katz for helping me benchmark CodeRay on JRuby.
+* Andreas Neuhaus for pointing out a markup bug in coderay/for_redcloth.
+* 0xf30fc7 for the FileType patch concerning Delphi file extensions.
+* The folks at redmine.org - thank you for using and fixing CodeRay!
+* Keith Pitt for his SQL scanners
+* Rob Aldred for the terminal encoder
+* Trans for pointing out $DEBUG dependencies
+* Flameeyes for finding that Term::ANSIColor was obsolete
+* Etienne Massip for reporting a serious bug in JavaScript scanner
+* matz and all Ruby gods and gurus
+* The inventors of: the computer, the internet, the true color display, HTML &
+  CSS, VIM, Ruby, pizza, microwaves, guitars, scouting, programming, anime, 
+  manga, coke and green ice tea.
+
+Where would we be without all those people?
+
+=== Created using
+
+* Ruby[http://ruby-lang.org/]
+* Chihiro (my Sony VAIO laptop); Henrietta (my old MacBook);
+  Triella, born Rico (my new MacBook); as well as
+  Seras and Hikari (my PCs)
+* RDE[http://homepage2.nifty.com/sakazuki/rde_e.html],
+  VIM[http://vim.org] and TextMate[http://macromates.com]
+* Subversion[http://subversion.tigris.org/]
+* Redmine[http://redmine.org/]
+* Firefox[http://www.mozilla.org/products/firefox/],
+  Firebug[http://getfirebug.com/], Safari[http://www.apple.com/safari/], and
+  Thunderbird[http://www.mozilla.org/products/thunderbird/]
+* RubyGems[http://docs.rubygems.org/] and Rake[http://rake.rubyforge.org/]
+* TortoiseSVN[http://tortoisesvn.tigris.org/] using Apache via
+  XAMPP[http://www.apachefriends.org/en/xampp.html]
+* RDoc (though I'm quite unsatisfied with it)
+* Microsoft Windows (yes, I confess!) and MacOS X
+* GNUWin32, MinGW and some other tools to make the shell under windows a bit
+  less useless
+* Term::ANSIColor[http://term-ansicolor.rubyforge.org/]
+* PLEAC[http://pleac.sourceforge.net/] code examples
+
+=== Free
+
+* As you can see, CodeRay was created under heavy use of *free* software.
+* So CodeRay is also *free*.
+* If you use CodeRay to create software, think about making this software
+  *free*, too.
+* Thanks :)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/.svn/text-base/coderay.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,322 @@
+# = CodeRay Library
+#
+# CodeRay is a Ruby library for syntax highlighting.
+#
+# I try to make CodeRay easy to use and intuitive, but at the same time fully featured, complete,
+# fast and efficient.
+# 
+# See README.
+# 
+# It consists mainly of
+# * the main engine: CodeRay (Scanners::Scanner, Tokens/TokenStream, Encoders::Encoder), PluginHost
+# * the scanners in CodeRay::Scanners
+# * the encoders in CodeRay::Encoders
+# 
+# Here's a fancy graphic to light up this gray docu:
+# 
+# http://cycnus.de/raindark/coderay/scheme.png
+# 
+# == Documentation
+#
+# See CodeRay, Encoders, Scanners, Tokens.
+#
+# == Usage
+#
+# Remember you need RubyGems to use CodeRay, unless you have it in your load path. Run Ruby with
+# -rubygems option if required.
+#
+# === Highlight Ruby code in a string as html
+# 
+#   require 'coderay'
+#   print CodeRay.scan('puts "Hello, world!"', :ruby).html
+#
+#   # prints something like this:
+#   puts <span class="s">&quot;Hello, world!&quot;</span>
+# 
+# 
+# === Highlight C code from a file in a html div
+# 
+#   require 'coderay'
+#   print CodeRay.scan(File.read('ruby.h'), :c).div
+#   print CodeRay.scan_file('ruby.h').html.div
+# 
+# You can include this div in your page. The used CSS styles can be printed with
+# 
+#   % coderay_stylesheet
+# 
+# === Highlight without typing too much
+# 
+# If you are one of the hasty (or lazy, or extremely curious) people, just run this file:
+# 
+#   % ruby -rubygems /path/to/coderay/coderay.rb > example.html
+# 
+# and look at the file it created in your browser.
+# 
+# = CodeRay Module
+#
+# The CodeRay module provides convenience methods for the engine.
+#
+# * The +lang+ and +format+ arguments select Scanner and Encoder to use. These are
+#   simply lower-case symbols, like <tt>:python</tt> or <tt>:html</tt>.
+# * All methods take an optional hash as last parameter, +options+, that is send to
+#   the Encoder / Scanner.
+# * Input and language are always sorted in this order: +code+, +lang+.
+#   (This is in alphabetical order, if you need a mnemonic ;)
+# 
+# You should be able to highlight everything you want just using these methods;
+# so there is no need to dive into CodeRay's deep class hierarchy.
+#
+# The examples in the demo directory demonstrate common cases using this interface.
+#  
+# = Basic Access Ways
+#
+# Read this to get a general view what CodeRay provides.
+# 
+# == Scanning
+#  
+#  Scanning means analysing an input string, splitting it up into Tokens.
+#  Each Token knows about what type it is: string, comment, class name, etc.
+#
+#  Each +lang+ (language) has its own Scanner; for example, <tt>:ruby</tt> code is
+#  handled by CodeRay::Scanners::Ruby.
+# 
+# CodeRay.scan:: Scan a string in a given language into Tokens.
+#                This is the most common method to use.
+# CodeRay.scan_file:: Scan a file and guess the language using FileType.
+# 
+# The Tokens object you get from these methods can encode itself; see Tokens.
+# 
+# == Encoding
+#
+# Encoding means compiling Tokens into an output. This can be colored HTML or
+# LaTeX, a textual statistic or just the number of non-whitespace tokens.
+# 
+# Each Encoder provides output in a specific +format+, so you select Encoders via
+# formats like <tt>:html</tt> or <tt>:statistic</tt>.
+# 
+# CodeRay.encode:: Scan and encode a string in a given language.
+# CodeRay.encode_tokens:: Encode the given tokens.
+# CodeRay.encode_file:: Scan a file, guess the language using FileType and encode it.
+#
+# == Streaming
+#
+# Streaming saves RAM by running Scanner and Encoder in some sort of
+# pipe mode; see TokenStream.
+#
+# CodeRay.scan_stream:: Scan in stream mode.
+#
+# == All-in-One Encoding
+#
+# CodeRay.encode:: Highlight a string with a given input and output format.
+#
+# == Instanciating
+#
+# You can use an Encoder instance to highlight multiple inputs. This way, the setup
+# for this Encoder must only be done once.
+#
+# CodeRay.encoder:: Create an Encoder instance with format and options.
+# CodeRay.scanner:: Create an Scanner instance for lang, with '' as default code.
+#
+# To make use of CodeRay.scanner, use CodeRay::Scanner::code=.
+#
+# The scanning methods provide more flexibility; we recommend to use these.
+# 
+# == Reusing Scanners and Encoders
+# 
+# If you want to re-use scanners and encoders (because that is faster), see
+# CodeRay::Duo for the most convenient (and recommended) interface.
+module CodeRay
+  
+  $CODERAY_DEBUG ||= false
+  
+  # Version: Major.Minor.Teeny[.Revision]
+  # Major: 0 for pre-stable, 1 for stable
+  # Minor: feature milestone
+  # Teeny: development state, 0 for pre-release
+  # Revision: Subversion Revision number (generated on rake gem:make)
+  VERSION = '0.9.7'
+
+  require 'coderay/tokens'
+  require 'coderay/token_classes'
+  require 'coderay/scanner'
+  require 'coderay/encoder'
+  require 'coderay/duo'
+  require 'coderay/style'
+
+
+  class << self
+
+    # Scans the given +code+ (a String) with the Scanner for +lang+.
+    #
+    # This is a simple way to use CodeRay. Example:
+    #  require 'coderay'
+    #  page = CodeRay.scan("puts 'Hello, world!'", :ruby).html
+    #
+    # See also demo/demo_simple.
+    def scan code, lang, options = {}, &block
+      scanner = Scanners[lang].new code, options, &block
+      scanner.tokenize
+    end
+
+    # Scans +filename+ (a path to a code file) with the Scanner for +lang+.
+    #
+    # If +lang+ is :auto or omitted, the CodeRay::FileType module is used to
+    # determine it. If it cannot find out what type it is, it uses
+    # CodeRay::Scanners::Plaintext.
+    #
+    # Calls CodeRay.scan.
+    #
+    # Example:
+    #  require 'coderay'
+    #  page = CodeRay.scan_file('some_c_code.c').html
+    def scan_file filename, lang = :auto, options = {}, &block
+      file = IO.read filename
+      if lang == :auto
+        require 'coderay/helpers/file_type'
+        lang = FileType.fetch filename, :plaintext, true
+      end
+      scan file, lang, options = {}, &block
+    end
+
+    # Scan the +code+ (a string) with the scanner for +lang+.
+    #
+    # Calls scan.
+    #
+    # See CodeRay.scan.
+    def scan_stream code, lang, options = {}, &block
+      options[:stream] = true
+      scan code, lang, options, &block
+    end
+
+    # Encode a string in Streaming mode.
+    #
+    # This starts scanning +code+ with the the Scanner for +lang+
+    # while encodes the output with the Encoder for +format+.
+    # +options+ will be passed to the Encoder.
+    #
+    # See CodeRay::Encoder.encode_stream
+    def encode_stream code, lang, format, options = {}
+      encoder(format, options).encode_stream code, lang, options
+    end
+
+    # Encode a string.
+    #
+    # This scans +code+ with the the Scanner for +lang+ and then
+    # encodes it with the Encoder for +format+.
+    # +options+ will be passed to the Encoder.
+    #
+    # See CodeRay::Encoder.encode
+    def encode code, lang, format, options = {}
+      encoder(format, options).encode code, lang, options
+    end
+
+    # Highlight a string into a HTML <div>.
+    #
+    # CSS styles use classes, so you have to include a stylesheet
+    # in your output.
+    #
+    # See encode.
+    def highlight code, lang, options = { :css => :class }, format = :div
+      encode code, lang, format, options
+    end
+
+    # Encode pre-scanned Tokens.
+    # Use this together with CodeRay.scan:
+    #
+    #  require 'coderay'
+    #  
+    #  # Highlight a short Ruby code example in a HTML span
+    #  tokens = CodeRay.scan '1 + 2', :ruby
+    #  puts CodeRay.encode_tokens(tokens, :span)
+    #
+    def encode_tokens tokens, format, options = {}
+      encoder(format, options).encode_tokens tokens, options
+    end
+
+    # Encodes +filename+ (a path to a code file) with the Scanner for +lang+.
+    #
+    # See CodeRay.scan_file.
+    # Notice that the second argument is the output +format+, not the input language.
+    #
+    # Example:
+    #  require 'coderay'
+    #  page = CodeRay.encode_file 'some_c_code.c', :html
+    def encode_file filename, format, options = {}
+      tokens = scan_file filename, :auto, get_scanner_options(options)
+      encode_tokens tokens, format, options
+    end
+
+    # Highlight a file into a HTML <div>.
+    #
+    # CSS styles use classes, so you have to include a stylesheet
+    # in your output.
+    #
+    # See encode.
+    def highlight_file filename, options = { :css => :class }, format = :div
+      encode_file filename, format, options
+    end
+
+    # Finds the Encoder class for +format+ and creates an instance, passing
+    # +options+ to it.
+    #
+    # Example:
+    #  require 'coderay'
+    #  
+    #  stats = CodeRay.encoder(:statistic)
+    #  stats.encode("puts 17 + 4\n", :ruby)
+    #  
+    #  puts '%d out of %d tokens have the kind :integer.' % [
+    #    stats.type_stats[:integer].count,
+    #    stats.real_token_count
+    #  ]
+    #  #-> 2 out of 4 tokens have the kind :integer.
+    def encoder format, options = {}
+      Encoders[format].new options
+    end
+
+    # Finds the Scanner class for +lang+ and creates an instance, passing
+    # +options+ to it.
+    #
+    # See Scanner.new.
+    def scanner lang, options = {}
+      Scanners[lang].new '', options
+    end
+
+    # Extract the options for the scanner from the +options+ hash.
+    #
+    # Returns an empty Hash if <tt>:scanner_options</tt> is not set.
+    #
+    # This is used if a method like CodeRay.encode has to provide options
+    # for Encoder _and_ scanner.
+    def get_scanner_options options
+      options.fetch :scanner_options, {}
+    end
+
+  end
+
+  # This Exception is raised when you try to stream with something that is not
+  # capable of streaming.
+  class NotStreamableError < Exception
+    def initialize obj
+      @obj = obj
+    end
+
+    def to_s
+      '%s is not Streamable!' % @obj.class
+    end
+  end
+
+  # A dummy module that is included by subclasses of CodeRay::Scanner an CodeRay::Encoder
+  # to show that they are able to handle streams.
+  module Streamable
+  end
+
+end
+
+# Run a test script.
+if $0 == __FILE__
+  $stderr.print 'Press key to print demo.'; gets
+  # Just use this file as an example of Ruby code.
+  code = File.read(__FILE__)[/module CodeRay.*/m]
+  print CodeRay.scan(code, :ruby).html
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/README	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,134 @@
+= CodeRay
+
+[- Tired of blue'n'gray? Try the original version of this documentation on
+coderay.rubychan.de[http://coderay.rubychan.de/doc/] (use Ctrl+Click to open it in its own frame.) -]
+
+== About
+CodeRay is a Ruby library for syntax highlighting.
+
+Syntax highlighting means: You put your code in, and you get it back colored;
+Keywords, strings, floats, comments - all in different colors.
+And with line numbers.
+
+*Syntax* *Highlighting*...
+* makes code easier to read and maintain
+* lets you detect syntax errors faster
+* helps you to understand the syntax of a language
+* looks nice
+* is what everybody should have on their website
+* solves all your problems and makes the girls run after you
+
+Version: 0.9.7
+Author:: murphy (Kornelius Kalnbach)
+Contact:: murphy rubychan de
+Website:: coderay.rubychan.de[http://coderay.rubychan.de]
+License:: GNU LGPL; see LICENSE file in the main directory.
+
+== Installation
+
+You need RubyGems[http://rubyforge.org/frs/?group_id=126].
+
+ % gem install coderay
+
+
+=== Dependencies
+
+CodeRay needs Ruby 1.8.6 or later. It also runs with Ruby 1.9.1+ and JRuby 1.1+.
+
+
+== Example Usage
+(Forgive me, but this is not highlighted.)
+
+ require 'coderay'
+ 
+ tokens = CodeRay.scan "puts 'Hello, world!'", :ruby
+ page = tokens.html :line_numbers => :inline, :wrap => :page
+ puts page
+
+
+== Documentation
+
+See CodeRay.
+
+Please report errors in this documentation to <murphy rubychan de>.
+
+
+== Credits
+
+=== Special Thanks to
+
+* licenser (Heinz N. Gies) for ending my QBasic career, inventing the Coder
+  project and the input/output plugin system.
+  CodeRay would not exist without him.
+* bovi (Daniel Bovensiepen) for helping me out on various occasions.
+
+=== Thanks to
+
+* Caleb Clausen for writing RubyLexer (see
+  http://rubyforge.org/projects/rubylexer) and lots of very interesting mail
+  traffic
+* birkenfeld (Georg Brandl) and mitsuhiku (Arnim Ronacher) for PyKleur, now pygments.
+  You guys rock!
+* Jamis Buck for writing Syntax (see http://rubyforge.org/projects/syntax)
+  I got some useful ideas from it.
+* Doug Kearns and everyone else who worked on ruby.vim - it not only helped me
+  coding CodeRay, but also gave me a wonderful target to reach for the Ruby
+  scanner.
+* everyone who uses CodeBB on http://www.rubyforen.de and http://www.python-forum.de
+* iGEL, magichisoka, manveru, WoNáDo and everyone I forgot from rubyforen.de
+* Dethix from ruby-mine.de
+* zickzackw
+* Dookie (who is no longer with us...) and Leonidas from http://www.python-forum.de
+* Andreas Schwarz for finding out that CaseIgnoringWordList was not case
+  ignoring! Such things really make you write tests.
+* closure for the first version of the Scheme scanner.
+* Stefan Walk for the first version of the JavaScript and PHP scanners.
+* Josh Goebel for another version of the JavaScript scanner, a SQL and a Diff scanner.
+* Jonathan Younger for pointing out the licence confusion caused by wrong LICENSE file.
+* Jeremy Hinegardner for finding the shebang-on-empty-file bug in FileType.
+* Charles Oliver Nutter and Yehuda Katz for helping me benchmark CodeRay on JRuby.
+* Andreas Neuhaus for pointing out a markup bug in coderay/for_redcloth.
+* 0xf30fc7 for the FileType patch concerning Delphi file extensions.
+* The folks at redmine.org - thank you for using and fixing CodeRay!
+* Keith Pitt for his SQL scanners
+* Rob Aldred for the terminal encoder
+* Trans for pointing out $DEBUG dependencies
+* Flameeyes for finding that Term::ANSIColor was obsolete
+* Etienne Massip for reporting a serious bug in JavaScript scanner
+* matz and all Ruby gods and gurus
+* The inventors of: the computer, the internet, the true color display, HTML &
+  CSS, VIM, Ruby, pizza, microwaves, guitars, scouting, programming, anime, 
+  manga, coke and green ice tea.
+
+Where would we be without all those people?
+
+=== Created using
+
+* Ruby[http://ruby-lang.org/]
+* Chihiro (my Sony VAIO laptop); Henrietta (my old MacBook);
+  Triella, born Rico (my new MacBook); as well as
+  Seras and Hikari (my PCs)
+* RDE[http://homepage2.nifty.com/sakazuki/rde_e.html],
+  VIM[http://vim.org] and TextMate[http://macromates.com]
+* Subversion[http://subversion.tigris.org/]
+* Redmine[http://redmine.org/]
+* Firefox[http://www.mozilla.org/products/firefox/],
+  Firebug[http://getfirebug.com/], Safari[http://www.apple.com/safari/], and
+  Thunderbird[http://www.mozilla.org/products/thunderbird/]
+* RubyGems[http://docs.rubygems.org/] and Rake[http://rake.rubyforge.org/]
+* TortoiseSVN[http://tortoisesvn.tigris.org/] using Apache via
+  XAMPP[http://www.apachefriends.org/en/xampp.html]
+* RDoc (though I'm quite unsatisfied with it)
+* Microsoft Windows (yes, I confess!) and MacOS X
+* GNUWin32, MinGW and some other tools to make the shell under windows a bit
+  less useless
+* Term::ANSIColor[http://term-ansicolor.rubyforge.org/]
+* PLEAC[http://pleac.sourceforge.net/] code examples
+
+=== Free
+
+* As you can see, CodeRay was created under heavy use of *free* software.
+* So CodeRay is also *free*.
+* If you use CodeRay to create software, think about making this software
+  *free*, too.
+* Thanks :)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,322 @@
+# = CodeRay Library
+#
+# CodeRay is a Ruby library for syntax highlighting.
+#
+# I try to make CodeRay easy to use and intuitive, but at the same time fully featured, complete,
+# fast and efficient.
+# 
+# See README.
+# 
+# It consists mainly of
+# * the main engine: CodeRay (Scanners::Scanner, Tokens/TokenStream, Encoders::Encoder), PluginHost
+# * the scanners in CodeRay::Scanners
+# * the encoders in CodeRay::Encoders
+# 
+# Here's a fancy graphic to light up this gray docu:
+# 
+# http://cycnus.de/raindark/coderay/scheme.png
+# 
+# == Documentation
+#
+# See CodeRay, Encoders, Scanners, Tokens.
+#
+# == Usage
+#
+# Remember you need RubyGems to use CodeRay, unless you have it in your load path. Run Ruby with
+# -rubygems option if required.
+#
+# === Highlight Ruby code in a string as html
+# 
+#   require 'coderay'
+#   print CodeRay.scan('puts "Hello, world!"', :ruby).html
+#
+#   # prints something like this:
+#   puts <span class="s">&quot;Hello, world!&quot;</span>
+# 
+# 
+# === Highlight C code from a file in a html div
+# 
+#   require 'coderay'
+#   print CodeRay.scan(File.read('ruby.h'), :c).div
+#   print CodeRay.scan_file('ruby.h').html.div
+# 
+# You can include this div in your page. The used CSS styles can be printed with
+# 
+#   % coderay_stylesheet
+# 
+# === Highlight without typing too much
+# 
+# If you are one of the hasty (or lazy, or extremely curious) people, just run this file:
+# 
+#   % ruby -rubygems /path/to/coderay/coderay.rb > example.html
+# 
+# and look at the file it created in your browser.
+# 
+# = CodeRay Module
+#
+# The CodeRay module provides convenience methods for the engine.
+#
+# * The +lang+ and +format+ arguments select Scanner and Encoder to use. These are
+#   simply lower-case symbols, like <tt>:python</tt> or <tt>:html</tt>.
+# * All methods take an optional hash as last parameter, +options+, that is send to
+#   the Encoder / Scanner.
+# * Input and language are always sorted in this order: +code+, +lang+.
+#   (This is in alphabetical order, if you need a mnemonic ;)
+# 
+# You should be able to highlight everything you want just using these methods;
+# so there is no need to dive into CodeRay's deep class hierarchy.
+#
+# The examples in the demo directory demonstrate common cases using this interface.
+#  
+# = Basic Access Ways
+#
+# Read this to get a general view what CodeRay provides.
+# 
+# == Scanning
+#  
+#  Scanning means analysing an input string, splitting it up into Tokens.
+#  Each Token knows about what type it is: string, comment, class name, etc.
+#
+#  Each +lang+ (language) has its own Scanner; for example, <tt>:ruby</tt> code is
+#  handled by CodeRay::Scanners::Ruby.
+# 
+# CodeRay.scan:: Scan a string in a given language into Tokens.
+#                This is the most common method to use.
+# CodeRay.scan_file:: Scan a file and guess the language using FileType.
+# 
+# The Tokens object you get from these methods can encode itself; see Tokens.
+# 
+# == Encoding
+#
+# Encoding means compiling Tokens into an output. This can be colored HTML or
+# LaTeX, a textual statistic or just the number of non-whitespace tokens.
+# 
+# Each Encoder provides output in a specific +format+, so you select Encoders via
+# formats like <tt>:html</tt> or <tt>:statistic</tt>.
+# 
+# CodeRay.encode:: Scan and encode a string in a given language.
+# CodeRay.encode_tokens:: Encode the given tokens.
+# CodeRay.encode_file:: Scan a file, guess the language using FileType and encode it.
+#
+# == Streaming
+#
+# Streaming saves RAM by running Scanner and Encoder in some sort of
+# pipe mode; see TokenStream.
+#
+# CodeRay.scan_stream:: Scan in stream mode.
+#
+# == All-in-One Encoding
+#
+# CodeRay.encode:: Highlight a string with a given input and output format.
+#
+# == Instanciating
+#
+# You can use an Encoder instance to highlight multiple inputs. This way, the setup
+# for this Encoder must only be done once.
+#
+# CodeRay.encoder:: Create an Encoder instance with format and options.
+# CodeRay.scanner:: Create an Scanner instance for lang, with '' as default code.
+#
+# To make use of CodeRay.scanner, use CodeRay::Scanner::code=.
+#
+# The scanning methods provide more flexibility; we recommend to use these.
+# 
+# == Reusing Scanners and Encoders
+# 
+# If you want to re-use scanners and encoders (because that is faster), see
+# CodeRay::Duo for the most convenient (and recommended) interface.
+module CodeRay
+  
+  $CODERAY_DEBUG ||= false
+  
+  # Version: Major.Minor.Teeny[.Revision]
+  # Major: 0 for pre-stable, 1 for stable
+  # Minor: feature milestone
+  # Teeny: development state, 0 for pre-release
+  # Revision: Subversion Revision number (generated on rake gem:make)
+  VERSION = '0.9.7'
+
+  require 'coderay/tokens'
+  require 'coderay/token_classes'
+  require 'coderay/scanner'
+  require 'coderay/encoder'
+  require 'coderay/duo'
+  require 'coderay/style'
+
+
+  class << self
+
+    # Scans the given +code+ (a String) with the Scanner for +lang+.
+    #
+    # This is a simple way to use CodeRay. Example:
+    #  require 'coderay'
+    #  page = CodeRay.scan("puts 'Hello, world!'", :ruby).html
+    #
+    # See also demo/demo_simple.
+    def scan code, lang, options = {}, &block
+      scanner = Scanners[lang].new code, options, &block
+      scanner.tokenize
+    end
+
+    # Scans +filename+ (a path to a code file) with the Scanner for +lang+.
+    #
+    # If +lang+ is :auto or omitted, the CodeRay::FileType module is used to
+    # determine it. If it cannot find out what type it is, it uses
+    # CodeRay::Scanners::Plaintext.
+    #
+    # Calls CodeRay.scan.
+    #
+    # Example:
+    #  require 'coderay'
+    #  page = CodeRay.scan_file('some_c_code.c').html
+    def scan_file filename, lang = :auto, options = {}, &block
+      file = IO.read filename
+      if lang == :auto
+        require 'coderay/helpers/file_type'
+        lang = FileType.fetch filename, :plaintext, true
+      end
+      scan file, lang, options = {}, &block
+    end
+
+    # Scan the +code+ (a string) with the scanner for +lang+.
+    #
+    # Calls scan.
+    #
+    # See CodeRay.scan.
+    def scan_stream code, lang, options = {}, &block
+      options[:stream] = true
+      scan code, lang, options, &block
+    end
+
+    # Encode a string in Streaming mode.
+    #
+    # This starts scanning +code+ with the the Scanner for +lang+
+    # while encodes the output with the Encoder for +format+.
+    # +options+ will be passed to the Encoder.
+    #
+    # See CodeRay::Encoder.encode_stream
+    def encode_stream code, lang, format, options = {}
+      encoder(format, options).encode_stream code, lang, options
+    end
+
+    # Encode a string.
+    #
+    # This scans +code+ with the the Scanner for +lang+ and then
+    # encodes it with the Encoder for +format+.
+    # +options+ will be passed to the Encoder.
+    #
+    # See CodeRay::Encoder.encode
+    def encode code, lang, format, options = {}
+      encoder(format, options).encode code, lang, options
+    end
+
+    # Highlight a string into a HTML <div>.
+    #
+    # CSS styles use classes, so you have to include a stylesheet
+    # in your output.
+    #
+    # See encode.
+    def highlight code, lang, options = { :css => :class }, format = :div
+      encode code, lang, format, options
+    end
+
+    # Encode pre-scanned Tokens.
+    # Use this together with CodeRay.scan:
+    #
+    #  require 'coderay'
+    #  
+    #  # Highlight a short Ruby code example in a HTML span
+    #  tokens = CodeRay.scan '1 + 2', :ruby
+    #  puts CodeRay.encode_tokens(tokens, :span)
+    #
+    def encode_tokens tokens, format, options = {}
+      encoder(format, options).encode_tokens tokens, options
+    end
+
+    # Encodes +filename+ (a path to a code file) with the Scanner for +lang+.
+    #
+    # See CodeRay.scan_file.
+    # Notice that the second argument is the output +format+, not the input language.
+    #
+    # Example:
+    #  require 'coderay'
+    #  page = CodeRay.encode_file 'some_c_code.c', :html
+    def encode_file filename, format, options = {}
+      tokens = scan_file filename, :auto, get_scanner_options(options)
+      encode_tokens tokens, format, options
+    end
+
+    # Highlight a file into a HTML <div>.
+    #
+    # CSS styles use classes, so you have to include a stylesheet
+    # in your output.
+    #
+    # See encode.
+    def highlight_file filename, options = { :css => :class }, format = :div
+      encode_file filename, format, options
+    end
+
+    # Finds the Encoder class for +format+ and creates an instance, passing
+    # +options+ to it.
+    #
+    # Example:
+    #  require 'coderay'
+    #  
+    #  stats = CodeRay.encoder(:statistic)
+    #  stats.encode("puts 17 + 4\n", :ruby)
+    #  
+    #  puts '%d out of %d tokens have the kind :integer.' % [
+    #    stats.type_stats[:integer].count,
+    #    stats.real_token_count
+    #  ]
+    #  #-> 2 out of 4 tokens have the kind :integer.
+    def encoder format, options = {}
+      Encoders[format].new options
+    end
+
+    # Finds the Scanner class for +lang+ and creates an instance, passing
+    # +options+ to it.
+    #
+    # See Scanner.new.
+    def scanner lang, options = {}
+      Scanners[lang].new '', options
+    end
+
+    # Extract the options for the scanner from the +options+ hash.
+    #
+    # Returns an empty Hash if <tt>:scanner_options</tt> is not set.
+    #
+    # This is used if a method like CodeRay.encode has to provide options
+    # for Encoder _and_ scanner.
+    def get_scanner_options options
+      options.fetch :scanner_options, {}
+    end
+
+  end
+
+  # This Exception is raised when you try to stream with something that is not
+  # capable of streaming.
+  class NotStreamableError < Exception
+    def initialize obj
+      @obj = obj
+    end
+
+    def to_s
+      '%s is not Streamable!' % @obj.class
+    end
+  end
+
+  # A dummy module that is included by subclasses of CodeRay::Scanner an CodeRay::Encoder
+  # to show that they are able to handle streams.
+  module Streamable
+  end
+
+end
+
+# Run a test script.
+if $0 == __FILE__
+  $stderr.print 'Press key to print demo.'; gets
+  # Just use this file as an example of Ruby code.
+  code = File.read(__FILE__)[/module CodeRay.*/m]
+  print CodeRay.scan(code, :ruby).html
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,47 @@
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay
+END
+token_classes.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/token_classes.rb
+END
+encoder.rb
+K 25
+svn:wc:ra_dav:version-url
+V 73
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoder.rb
+END
+style.rb
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/style.rb
+END
+tokens.rb
+K 25
+svn:wc:ra_dav:version-url
+V 72
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/tokens.rb
+END
+duo.rb
+K 25
+svn:wc:ra_dav:version-url
+V 69
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/duo.rb
+END
+scanner.rb
+K 25
+svn:wc:ra_dav:version-url
+V 73
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanner.rb
+END
+for_redcloth.rb
+K 25
+svn:wc:ra_dav:version-url
+V 78
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/for_redcloth.rb
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,278 @@
+10
+
+dir
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay
+http://redmine.rubyforge.org/svn
+
+
+
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+token_classes.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+4f17211f3874899049db6111ef282a3b
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2287
+
+encoder.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+f0ead48eaa86c8b4d6a5587e9b5450ca
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6565
+
+encoders
+dir
+
+helpers
+dir
+
+style.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+409fa492a5470a8bed5ae969f270decf
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+293
+
+styles
+dir
+
+tokens.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+d45c9094dd69e538d44b7099955b9fda
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+10325
+
+duo.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+b33e5b83e354c09655f46d37ae662f64
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2549
+
+scanner.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+ec67701318cc8701d0554802f07ee6e1
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8165
+
+scanners
+dir
+
+for_redcloth.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+d216c2f1c7a84a23ce3feff0b1358d60
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3001
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/.svn/text-base/duo.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,85 @@
+module CodeRay
+  
+  # = Duo
+  #
+  # A Duo is a convenient way to use CodeRay. You just create a Duo,
+  # giving it a lang (language of the input code) and a format (desired
+  # output format), and call Duo#highlight with the code.
+  # 
+  # Duo makes it easy to re-use both scanner and encoder for a repetitive
+  # task. It also provides a very easy interface syntax:
+  # 
+  #   require 'coderay'
+  #   CodeRay::Duo[:python, :div].highlight 'import this'
+  # 
+  # Until you want to do uncommon things with CodeRay, I recommend to use
+  # this method, since it takes care of everything.
+  class Duo
+
+    attr_accessor :lang, :format, :options
+    
+    # Create a new Duo, holding a lang and a format to highlight code.
+    # 
+    # simple:
+    #   CodeRay::Duo[:ruby, :page].highlight 'bla 42'
+    # 
+    # streaming:
+    #   CodeRay::Duo[:ruby, :page].highlight 'bar 23', :stream => true
+    # 
+    # with options:
+    #   CodeRay::Duo[:ruby, :html, :hint => :debug].highlight '????::??'
+    # 
+    # alternative syntax without options:
+    #   CodeRay::Duo[:ruby => :statistic].encode 'class << self; end'
+    # 
+    # alternative syntax with options:
+    #   CodeRay::Duo[{ :ruby => :statistic }, :do => :something].encode 'abc'
+    # 
+    # The options are forwarded to scanner and encoder
+    # (see CodeRay.get_scanner_options).
+    def initialize lang = nil, format = nil, options = {}
+      if format == nil and lang.is_a? Hash and lang.size == 1
+        @lang = lang.keys.first
+        @format = lang[@lang]
+      else
+        @lang = lang
+        @format = format
+      end
+      @options = options
+    end
+
+    class << self
+      # To allow calls like Duo[:ruby, :html].highlight.
+      alias [] new
+    end
+
+    # The scanner of the duo. Only created once.
+    def scanner
+      @scanner ||= CodeRay.scanner @lang, CodeRay.get_scanner_options(@options)
+    end
+    
+    # The encoder of the duo. Only created once.
+    def encoder
+      @encoder ||= CodeRay.encoder @format, @options
+    end
+    
+    # Tokenize and highlight the code using +scanner+ and +encoder+.
+    #
+    # If the :stream option is set, the Duo will go into streaming mode,
+    # saving memory for the cost of time.
+    def encode code, options = { :stream => false }
+      stream = options.delete :stream
+      options = @options.merge options
+      if stream
+        encoder.encode_stream(code, @lang, options)
+      else
+        scanner.code = code
+        encoder.encode_tokens(scanner.tokenize, options)
+      end
+    end
+    alias highlight encode
+
+  end
+
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/.svn/text-base/encoder.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,213 @@
+module CodeRay
+
+  # This module holds the Encoder class and its subclasses.
+  # For example, the HTML encoder is named CodeRay::Encoders::HTML
+  # can be found in coderay/encoders/html.
+  #
+  # Encoders also provides methods and constants for the register
+  # mechanism and the [] method that returns the Encoder class
+  # belonging to the given format.
+  module Encoders
+    extend PluginHost
+    plugin_path File.dirname(__FILE__), 'encoders'
+
+    # = Encoder
+    #
+    # The Encoder base class. Together with Scanner and
+    # Tokens, it forms the highlighting triad.
+    #
+    # Encoder instances take a Tokens object and do something with it.
+    #
+    # The most common Encoder is surely the HTML encoder
+    # (CodeRay::Encoders::HTML). It highlights the code in a colorful
+    # html page.
+    # If you want the highlighted code in a div or a span instead,
+    # use its subclasses Div and Span.
+    class Encoder
+      extend Plugin
+      plugin_host Encoders
+
+      attr_reader :token_stream
+
+      class << self
+
+        # Returns if the Encoder can be used in streaming mode.
+        def streamable?
+          is_a? Streamable
+        end
+
+        # If FILE_EXTENSION isn't defined, this method returns the
+        # downcase class name instead.
+        def const_missing sym
+          if sym == :FILE_EXTENSION
+            plugin_id
+          else
+            super
+          end
+        end
+
+      end
+
+      # Subclasses are to store their default options in this constant.
+      DEFAULT_OPTIONS = { :stream => false }
+
+      # The options you gave the Encoder at creating.
+      attr_accessor :options
+
+      # Creates a new Encoder.
+      # +options+ is saved and used for all encode operations, as long
+      # as you don't overwrite it there by passing additional options.
+      #
+      # Encoder objects provide three encode methods:
+      # - encode simply takes a +code+ string and a +lang+
+      # - encode_tokens expects a +tokens+ object instead
+      # - encode_stream is like encode, but uses streaming mode.
+      #
+      # Each method has an optional +options+ parameter. These are
+      # added to the options you passed at creation.
+      def initialize options = {}
+        @options = self.class::DEFAULT_OPTIONS.merge options
+        raise "I am only the basic Encoder class. I can't encode "\
+          "anything. :( Use my subclasses." if self.class == Encoder
+      end
+
+      # Encode a Tokens object.
+      def encode_tokens tokens, options = {}
+        options = @options.merge options
+        setup options
+        compile tokens, options
+        finish options
+      end
+
+      # Encode the given +code+ after tokenizing it using the Scanner
+      # for +lang+.
+      def encode code, lang, options = {}
+        options = @options.merge options
+        scanner_options = CodeRay.get_scanner_options(options)
+        tokens = CodeRay.scan code, lang, scanner_options
+        encode_tokens tokens, options
+      end
+
+      # You can use highlight instead of encode, if that seems
+      # more clear to you.
+      alias highlight encode
+
+      # Encode the given +code+ using the Scanner for +lang+ in
+      # streaming mode.
+      def encode_stream code, lang, options = {}
+        raise NotStreamableError, self unless kind_of? Streamable
+        options = @options.merge options
+        setup options
+        scanner_options = CodeRay.get_scanner_options options
+        @token_stream =
+          CodeRay.scan_stream code, lang, scanner_options, &self
+        finish options
+      end
+
+      # Behave like a proc. The token method is converted to a proc.
+      def to_proc
+        method(:token).to_proc
+      end
+
+      # Return the default file extension for outputs of this encoder.
+      def file_extension
+        self.class::FILE_EXTENSION
+      end
+
+    protected
+
+      # Called with merged options before encoding starts.
+      # Sets @out to an empty string.
+      #
+      # See the HTML Encoder for an example of option caching.
+      def setup options
+        @out = ''
+      end
+
+      # Called with +content+ and +kind+ of the currently scanned token.
+      # For simple scanners, it's enougth to implement this method.
+      #
+      # By default, it calls text_token or block_token, depending on
+      # whether +content+ is a String.
+      def token content, kind
+        encoded_token =
+          if content.is_a? ::String
+            text_token content, kind
+          elsif content.is_a? ::Symbol
+            block_token content, kind
+          else
+            raise 'Unknown token content type: %p' % [content]
+          end
+        append_encoded_token_to_output encoded_token
+      end
+      
+      def append_encoded_token_to_output encoded_token
+        @out << encoded_token if encoded_token && defined?(@out) && @out
+      end
+      
+      # Called for each text token ([text, kind]), where text is a String.
+      def text_token text, kind
+      end
+      
+      # Called for each block (non-text) token ([action, kind]),
+      # where +action+ is a Symbol.
+      # 
+      # Calls open_token, close_token, begin_line, and end_line according to
+      # the value of +action+.
+      def block_token action, kind
+        case action
+        when :open
+          open_token kind
+        when :close
+          close_token kind
+        when :begin_line
+          begin_line kind
+        when :end_line
+          end_line kind
+        else
+          raise 'unknown block action: %p' % action
+        end
+      end
+      
+      # Called for each block token at the start of the block ([:open, kind]).
+      def open_token kind
+      end
+      
+      # Called for each block token end of the block ([:close, kind]).
+      def close_token kind
+      end
+      
+      # Called for each line token block at the start of the line ([:begin_line, kind]).
+      def begin_line kind
+      end
+      
+      # Called for each line token block at the end of the line ([:end_line, kind]).
+      def end_line kind
+      end
+
+      # Called with merged options after encoding starts.
+      # The return value is the result of encoding, typically @out.
+      def finish options
+        @out
+      end
+
+      # Do the encoding.
+      #
+      # The already created +tokens+ object must be used; it can be a
+      # TokenStream or a Tokens object.
+      if RUBY_VERSION >= '1.9'
+        def compile tokens, options
+          for text, kind in tokens
+            token text, kind
+          end
+        end
+      else
+        def compile tokens, options
+          tokens.each(&self)
+        end
+      end
+
+    end
+
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/.svn/text-base/for_redcloth.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,95 @@
+module CodeRay
+  
+  # A little hack to enable CodeRay highlighting in RedCloth.
+  # 
+  # Usage:
+  #  require 'coderay'
+  #  require 'coderay/for_redcloth'
+  #  RedCloth.new('@[ruby]puts "Hello, World!"@').to_html
+  # 
+  # Make sure you have RedCloth 4.0.3 activated, for example by calling
+  #  require 'rubygems'
+  # before RedCloth is loaded and before calling CodeRay.for_redcloth.
+  module ForRedCloth
+    
+    def self.install
+      gem 'RedCloth', '>= 4.0.3' if defined? gem
+      require 'redcloth'
+      unless RedCloth::VERSION.to_s >= '4.0.3'
+        if defined? gem
+          raise 'CodeRay.for_redcloth needs RedCloth version 4.0.3 or later. ' +
+            "You have #{RedCloth::VERSION}. Please gem install RedCloth."
+        else
+          $".delete 'redcloth.rb'  # sorry, but it works
+          require 'rubygems'
+          return install  # retry
+        end
+      end
+      unless RedCloth::VERSION.to_s >= '4.2.2'
+        warn 'CodeRay.for_redcloth works best with RedCloth version 4.2.2 or later.'
+      end
+      RedCloth::TextileDoc.send :include, ForRedCloth::TextileDoc
+      RedCloth::Formatters::HTML.module_eval do
+        def unescape(html)
+          replacements = {
+            '&amp;' => '&',
+            '&quot;' => '"',
+            '&gt;' => '>',
+            '&lt;' => '<',
+          }
+          html.gsub(/&(?:amp|quot|[gl]t);/) { |entity| replacements[entity] }
+        end
+        undef code, bc_open, bc_close, escape_pre
+        def code(opts)  # :nodoc:
+          opts[:block] = true
+          if !opts[:lang] && RedCloth::VERSION.to_s >= '4.2.0'
+            # simulating pre-4.2 behavior
+            if opts[:text].sub!(/\A\[(\w+)\]/, '')
+              if CodeRay::Scanners[$1].plugin_id == 'plaintext'
+                opts[:text] = $& + opts[:text]
+              else
+                opts[:lang] = $1
+              end
+            end
+          end
+          if opts[:lang] && !filter_coderay
+            require 'coderay'
+            @in_bc ||= nil
+            format = @in_bc ? :div : :span
+            opts[:text] = unescape(opts[:text]) unless @in_bc
+            highlighted_code = CodeRay.encode opts[:text], opts[:lang], format, :stream => true
+            highlighted_code.sub!(/\A<(span|div)/) { |m| m + pba(@in_bc || opts) }
+            highlighted_code
+          else
+            "<code#{pba(opts)}>#{opts[:text]}</code>"
+          end
+        end
+        def bc_open(opts)  # :nodoc:
+          opts[:block] = true
+          @in_bc = opts
+          opts[:lang] ? '' : "<pre#{pba(opts)}>"
+        end
+        def bc_close(opts)  # :nodoc:
+          opts = @in_bc
+          @in_bc = nil
+          opts[:lang] ? '' : "</pre>\n"
+        end
+        def escape_pre(text)
+          if @in_bc ||= nil
+            text
+          else
+            html_esc(text, :html_escape_preformatted)
+          end
+        end
+      end
+    end
+
+    module TextileDoc  # :nodoc:
+      attr_accessor :filter_coderay
+    end
+    
+  end
+  
+end
+
+CodeRay::ForRedCloth.install
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/.svn/text-base/scanner.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,298 @@
+module CodeRay
+
+  require 'coderay/helpers/plugin'
+
+  # = Scanners
+  #
+  # This module holds the Scanner class and its subclasses.
+  # For example, the Ruby scanner is named CodeRay::Scanners::Ruby
+  # can be found in coderay/scanners/ruby.
+  #
+  # Scanner also provides methods and constants for the register
+  # mechanism and the [] method that returns the Scanner class
+  # belonging to the given lang.
+  #
+  # See PluginHost.
+  module Scanners
+    extend PluginHost
+    plugin_path File.dirname(__FILE__), 'scanners'
+
+    require 'strscan'
+
+    # = Scanner
+    #
+    # The base class for all Scanners.
+    #
+    # It is a subclass of Ruby's great +StringScanner+, which
+    # makes it easy to access the scanning methods inside.
+    #
+    # It is also +Enumerable+, so you can use it like an Array of
+    # Tokens:
+    #
+    #   require 'coderay'
+    #   
+    #   c_scanner = CodeRay::Scanners[:c].new "if (*p == '{') nest++;"
+    #   
+    #   for text, kind in c_scanner
+    #     puts text if kind == :operator
+    #   end
+    #   
+    #   # prints: (*==)++;
+    #
+    # OK, this is a very simple example :)
+    # You can also use +map+, +any?+, +find+ and even +sort_by+,
+    # if you want.
+    class Scanner < StringScanner
+      
+      extend Plugin
+      plugin_host Scanners
+
+      # Raised if a Scanner fails while scanning
+      ScanError = Class.new(Exception)
+
+      require 'coderay/helpers/word_list'
+
+      # The default options for all scanner classes.
+      #
+      # Define @default_options for subclasses.
+      DEFAULT_OPTIONS = { :stream => false }
+      
+      KINDS_NOT_LOC = [:comment, :doctype]
+
+      class << self
+
+        # Returns if the Scanner can be used in streaming mode.
+        def streamable?
+          is_a? Streamable
+        end
+
+        def normify code
+          code = code.to_s
+          if code.respond_to?(:encoding) && (code.encoding.name != 'UTF-8' || !code.valid_encoding?)
+            code = code.dup
+            original_encoding = code.encoding
+            code.force_encoding 'Windows-1252'
+            unless code.valid_encoding?
+              code.force_encoding original_encoding
+              if code.encoding.name == 'UTF-8'
+                code.encode! 'UTF-16BE', :invalid => :replace, :undef => :replace, :replace => '?'
+              end
+              code.encode! 'UTF-8', :invalid => :replace, :undef => :replace, :replace => '?'
+            end
+          end
+          code.to_unix
+        end
+        
+        def file_extension extension = nil
+          if extension
+            @file_extension = extension.to_s
+          else
+            @file_extension ||= plugin_id.to_s
+          end
+        end
+
+      end
+
+=begin
+## Excluded for speed reasons; protected seems to make methods slow.
+
+  # Save the StringScanner methods from being called.
+  # This would not be useful for highlighting.
+  strscan_public_methods =
+    StringScanner.instance_methods -
+    StringScanner.ancestors[1].instance_methods
+  protected(*strscan_public_methods)
+=end
+
+      # Create a new Scanner.
+      #
+      # * +code+ is the input String and is handled by the superclass
+      #   StringScanner.
+      # * +options+ is a Hash with Symbols as keys.
+      #   It is merged with the default options of the class (you can
+      #   overwrite default options here.)
+      # * +block+ is the callback for streamed highlighting.
+      #
+      # If you set :stream to +true+ in the options, the Scanner uses a
+      # TokenStream with the +block+ as callback to handle the tokens.
+      #
+      # Else, a Tokens object is used.
+      def initialize code='', options = {}, &block
+        raise "I am only the basic Scanner class. I can't scan "\
+          "anything. :( Use my subclasses." if self.class == Scanner
+        
+        @options = self.class::DEFAULT_OPTIONS.merge options
+
+        super Scanner.normify(code)
+
+        @tokens = options[:tokens]
+        if @options[:stream]
+          warn "warning in CodeRay::Scanner.new: :stream is set, "\
+            "but no block was given" unless block_given?
+          raise NotStreamableError, self unless kind_of? Streamable
+          @tokens ||= TokenStream.new(&block)
+        else
+          warn "warning in CodeRay::Scanner.new: Block given, "\
+            "but :stream is #{@options[:stream]}" if block_given?
+          @tokens ||= Tokens.new
+        end
+        @tokens.scanner = self
+
+        setup
+      end
+
+      def reset
+        super
+        reset_instance
+      end
+
+      def string= code
+        code = Scanner.normify(code)
+        if defined?(RUBY_DESCRIPTION) && RUBY_DESCRIPTION['rubinius 1.0.1']
+          reset_state
+          @string = code
+        else
+          super code
+        end
+        reset_instance
+      end
+
+      # More mnemonic accessor name for the input string.
+      alias code string
+      alias code= string=
+
+      # Returns the Plugin ID for this scanner.
+      def lang
+        self.class.plugin_id
+      end
+
+      # Scans the code and returns all tokens in a Tokens object.
+      def tokenize new_string=nil, options = {}
+        options = @options.merge(options)
+        self.string = new_string if new_string
+        @cached_tokens =
+          if @options[:stream]  # :stream must have been set already
+            reset unless new_string
+            scan_tokens @tokens, options
+            @tokens
+          else
+            scan_tokens @tokens, options
+          end
+      end
+
+      def tokens
+        @cached_tokens ||= tokenize
+      end
+      
+      # Whether the scanner is in streaming mode.
+      def streaming?
+        !!@options[:stream]
+      end
+
+      # Traverses the tokens.
+      def each &block
+        raise ArgumentError,
+          'Cannot traverse TokenStream.' if @options[:stream]
+        tokens.each(&block)
+      end
+      include Enumerable
+
+      # The current line position of the scanner.
+      #
+      # Beware, this is implemented inefficiently. It should be used
+      # for debugging only.
+      def line
+        string[0..pos].count("\n") + 1
+      end
+      
+      def column pos = self.pos
+        return 0 if pos <= 0
+        string = string()
+        if string.respond_to?(:bytesize) && (defined?(@bin_string) || string.bytesize != string.size)
+          @bin_string ||= string.dup.force_encoding('binary')
+          string = @bin_string
+        end
+        pos - (string.rindex(?\n, pos) || 0)
+      end
+      
+      def marshal_dump
+        @options
+      end
+      
+      def marshal_load options
+        @options = options
+      end
+
+    protected
+
+      # Can be implemented by subclasses to do some initialization
+      # that has to be done once per instance.
+      #
+      # Use reset for initialization that has to be done once per
+      # scan.
+      def setup
+      end
+
+      # This is the central method, and commonly the only one a
+      # subclass implements.
+      #
+      # Subclasses must implement this method; it must return +tokens+
+      # and must only use Tokens#<< for storing scanned tokens!
+      def scan_tokens tokens, options
+        raise NotImplementedError,
+          "#{self.class}#scan_tokens not implemented."
+      end
+
+      def reset_instance
+        @tokens.clear unless @options[:keep_tokens]
+        @cached_tokens = nil
+        @bin_string = nil if defined? @bin_string
+      end
+
+      # Scanner error with additional status information
+      def raise_inspect msg, tokens, state = 'No state given!', ambit = 30
+        raise ScanError, <<-EOE % [
+
+
+***ERROR in %s: %s (after %d tokens)
+
+tokens:
+%s
+
+current line: %d  column: %d  pos: %d
+matched: %p  state: %p
+bol? = %p,  eos? = %p
+
+surrounding code:
+%p  ~~  %p
+
+
+***ERROR***
+
+        EOE
+          File.basename(caller[0]),
+          msg,
+          tokens.size,
+          tokens.last(10).map { |t| t.inspect }.join("\n"),
+          line, column, pos,
+          matched, state, bol?, eos?,
+          string[pos - ambit, ambit],
+          string[pos, ambit],
+        ]
+      end
+
+    end
+
+  end
+end
+
+class String
+  # I love this hack. It seems to silence all dos/unix/mac newline problems.
+  def to_unix
+    if index ?\r
+      gsub(/\r\n?/, "\n")
+    else
+      self
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/.svn/text-base/style.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,20 @@
+module CodeRay
+
+  # This module holds the Style class and its subclasses.
+  #
+  # See Plugin.
+  module Styles
+    extend PluginHost
+    plugin_path File.dirname(__FILE__), 'styles'
+
+    class Style
+      extend Plugin
+      plugin_host Styles
+
+      DEFAULT_OPTIONS = { }
+
+    end
+
+  end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/.svn/text-base/token_classes.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,86 @@
+module CodeRay
+  class Tokens
+    ClassOfKind = Hash.new do |h, k|
+      h[k] = k.to_s
+    end
+    ClassOfKind.update with = {
+      :annotation => 'at',
+      :attribute_name => 'an',
+      :attribute_name_fat => 'af',
+      :attribute_value => 'av',
+      :attribute_value_fat => 'aw',
+      :bin => 'bi',
+      :char => 'ch',
+      :class => 'cl',
+      :class_variable => 'cv',
+      :color => 'cr',
+      :comment => 'c',
+      :complex => 'cm',
+      :constant => 'co',
+      :content => 'k',
+      :decorator => 'de',
+      :definition => 'df',
+      :delimiter => 'dl',
+      :directive => 'di',
+      :doc => 'do',
+      :doctype => 'dt',
+      :doc_string => 'ds',
+      :entity => 'en',
+      :error => 'er',
+      :escape => 'e',
+      :exception => 'ex',
+      :float => 'fl',
+      :function => 'fu',
+      :global_variable => 'gv',
+      :hex => 'hx',
+      :imaginary => 'cm',
+      :important => 'im',
+      :include => 'ic',
+      :inline => 'il',
+      :inline_delimiter => 'idl',
+      :instance_variable => 'iv',
+      :integer => 'i',
+      :interpreted => 'in',
+      :keyword => 'kw',
+      :key => 'ke',
+      :label => 'la',
+      :local_variable => 'lv',
+      :modifier => 'mod',
+      :oct => 'oc',
+      :operator_fat => 'of',
+      :pre_constant => 'pc',
+      :pre_type => 'pt',
+      :predefined => 'pd',
+      :preprocessor => 'pp',
+      :pseudo_class => 'ps',
+      :regexp => 'rx',
+      :reserved => 'r',
+      :shell => 'sh',
+      :string => 's',
+      :symbol => 'sy',
+      :tag => 'ta',
+      :tag_fat => 'tf',
+      :tag_special => 'ts',
+      :type => 'ty',
+      :variable => 'v',
+      :value => 'vl',
+      :xml_text => 'xt',
+      
+      :insert => 'ins',
+      :delete => 'del',
+      :change => 'chg',
+      :head => 'head',
+
+      :ident => :NO_HIGHLIGHT, # 'id'
+      #:operator => 'op',
+      :operator => :NO_HIGHLIGHT,  # 'op'
+      :space => :NO_HIGHLIGHT,  # 'sp'
+      :plain => :NO_HIGHLIGHT,
+    }
+    ClassOfKind[:method] = ClassOfKind[:function]
+    ClassOfKind[:open] = ClassOfKind[:close] = ClassOfKind[:delimiter]
+    ClassOfKind[:nesting_delimiter] = ClassOfKind[:delimiter]
+    ClassOfKind[:escape] = ClassOfKind[:delimiter]
+    #ClassOfKind.default = ClassOfKind[:error] or raise 'no class found for :error!'
+  end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/.svn/text-base/tokens.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,390 @@
+module CodeRay
+
+  # = Tokens
+  #
+  # The Tokens class represents a list of tokens returnd from
+  # a Scanner.
+  #
+  # A token is not a special object, just a two-element Array
+  # consisting of
+  # * the _token_ _text_ (the original source of the token in a String) or
+  #   a _token_ _action_ (:open, :close, :begin_line, :end_line)
+  # * the _token_ _kind_ (a Symbol representing the type of the token)
+  #
+  # A token looks like this:
+  #
+  #   ['# It looks like this', :comment]
+  #   ['3.1415926', :float]
+  #   ['$^', :error]
+  #
+  # Some scanners also yield sub-tokens, represented by special
+  # token actions, namely :open and :close.
+  #
+  # The Ruby scanner, for example, splits "a string" into:
+  #
+  #  [
+  #   [:open, :string],
+  #   ['"', :delimiter],
+  #   ['a string', :content],
+  #   ['"', :delimiter],
+  #   [:close, :string]
+  #  ]
+  #
+  # Tokens is the interface between Scanners and Encoders:
+  # The input is split and saved into a Tokens object. The Encoder
+  # then builds the output from this object.
+  #
+  # Thus, the syntax below becomes clear:
+  #
+  #   CodeRay.scan('price = 2.59', :ruby).html
+  #   # the Tokens object is here -------^
+  #
+  # See how small it is? ;)
+  #
+  # Tokens gives you the power to handle pre-scanned code very easily:
+  # You can convert it to a webpage, a YAML file, or dump it into a gzip'ed string
+  # that you put in your DB.
+  # 
+  # It also allows you to generate tokens directly (without using a scanner),
+  # to load them from a file, and still use any Encoder that CodeRay provides.
+  #
+  # Tokens' subclass TokenStream allows streaming to save memory.
+  class Tokens < Array
+    
+    # The Scanner instance that created the tokens.
+    attr_accessor :scanner
+    
+    # Whether the object is a TokenStream.
+    #
+    # Returns false.
+    def stream?
+      false
+    end
+
+    # Iterates over all tokens.
+    #
+    # If a filter is given, only tokens of that kind are yielded.
+    def each kind_filter = nil, &block
+      unless kind_filter
+        super(&block)
+      else
+        super() do |text, kind|
+          next unless kind == kind_filter
+          yield text, kind
+        end
+      end
+    end
+
+    # Iterates over all text tokens.
+    # Range tokens like [:open, :string] are left out.
+    #
+    # Example:
+    #   tokens.each_text_token { |text, kind| text.replace html_escape(text) }
+    def each_text_token
+      each do |text, kind|
+        next unless text.is_a? ::String
+        yield text, kind
+      end
+    end
+
+    # Encode the tokens using encoder.
+    #
+    # encoder can be
+    # * a symbol like :html oder :statistic
+    # * an Encoder class
+    # * an Encoder object
+    #
+    # options are passed to the encoder.
+    def encode encoder, options = {}
+      unless encoder.is_a? Encoders::Encoder
+        unless encoder.is_a? Class
+          encoder_class = Encoders[encoder]
+        end
+        encoder = encoder_class.new options
+      end
+      encoder.encode_tokens self, options
+    end
+
+
+    # Turn into a string using Encoders::Text.
+    #
+    # +options+ are passed to the encoder if given.
+    def to_s options = {}
+      encode :text, options
+    end
+
+    # Redirects unknown methods to encoder calls.
+    #
+    # For example, if you call +tokens.html+, the HTML encoder
+    # is used to highlight the tokens.
+    def method_missing meth, options = {}
+      Encoders[meth].new(options).encode_tokens self
+    end
+
+    # Returns the tokens compressed by joining consecutive
+    # tokens of the same kind.
+    #
+    # This can not be undone, but should yield the same output
+    # in most Encoders.  It basically makes the output smaller.
+    #
+    # Combined with dump, it saves space for the cost of time.
+    #
+    # If the scanner is written carefully, this is not required -
+    # for example, consecutive //-comment lines could already be
+    # joined in one comment token by the Scanner.
+    def optimize
+      last_kind = last_text = nil
+      new = self.class.new
+      for text, kind in self
+        if text.is_a? String
+          if kind == last_kind
+            last_text << text
+          else
+            new << [last_text, last_kind] if last_kind
+            last_text = text
+            last_kind = kind
+          end
+        else
+          new << [last_text, last_kind] if last_kind
+          last_kind = last_text = nil
+          new << [text, kind]
+        end
+      end
+      new << [last_text, last_kind] if last_kind
+      new
+    end
+
+    # Compact the object itself; see optimize.
+    def optimize!
+      replace optimize
+    end
+    
+    # Ensure that all :open tokens have a correspondent :close one.
+    #
+    # TODO: Test this!
+    def fix
+      tokens = self.class.new
+      # Check token nesting using a stack of kinds.
+      opened = []
+      for type, kind in self
+        case type
+        when :open
+          opened.push [:close, kind]
+        when :begin_line
+          opened.push [:end_line, kind]
+        when :close, :end_line
+          expected = opened.pop
+          if [type, kind] != expected
+            # Unexpected :close; decide what to do based on the kind:
+            # - token was never opened: delete the :close (just skip it)
+            next unless opened.rindex expected
+            # - token was opened earlier: also close tokens in between
+            tokens << token until (token = opened.pop) == expected
+          end
+        end
+        tokens << [type, kind]
+      end
+      # Close remaining opened tokens
+      tokens << token while token = opened.pop
+      tokens
+    end
+    
+    def fix!
+      replace fix
+    end
+    
+    # TODO: Scanner#split_into_lines
+    # 
+    # Makes sure that:
+    # - newlines are single tokens
+    #   (which means all other token are single-line)
+    # - there are no open tokens at the end the line
+    #
+    # This makes it simple for encoders that work line-oriented,
+    # like HTML with list-style numeration.
+    def split_into_lines
+      raise NotImplementedError
+    end
+
+    def split_into_lines!
+      replace split_into_lines
+    end
+
+    # Dumps the object into a String that can be saved
+    # in files or databases.
+    #
+    # The dump is created with Marshal.dump;
+    # In addition, it is gzipped using GZip.gzip.
+    #
+    # The returned String object includes Undumping
+    # so it has an #undump method. See Tokens.load.
+    #
+    # You can configure the level of compression,
+    # but the default value 7 should be what you want
+    # in most cases as it is a good compromise between
+    # speed and compression rate.
+    #
+    # See GZip module.
+    def dump gzip_level = 7
+      require 'coderay/helpers/gzip_simple'
+      dump = Marshal.dump self
+      dump = dump.gzip gzip_level
+      dump.extend Undumping
+    end
+
+    # The total size of the tokens.
+    # Should be equal to the input size before
+    # scanning.
+    def text_size
+      size = 0
+      each_text_token do |t, k|
+        size + t.size
+      end
+      size
+    end
+
+    # Return all text tokens joined into a single string.
+    def text
+      map { |t, k| t if t.is_a? ::String }.join
+    end
+
+    # Include this module to give an object an #undump
+    # method.
+    #
+    # The string returned by Tokens.dump includes Undumping.
+    module Undumping
+      # Calls Tokens.load with itself.
+      def undump
+        Tokens.load self
+      end
+    end
+
+    # Undump the object using Marshal.load, then
+    # unzip it using GZip.gunzip.
+    #
+    # The result is commonly a Tokens object, but
+    # this is not guaranteed.
+    def Tokens.load dump
+      require 'coderay/helpers/gzip_simple'
+      dump = dump.gunzip
+      @dump = Marshal.load dump
+    end
+
+  end
+
+
+  # = TokenStream
+  #
+  # The TokenStream class is a fake Array without elements.
+  #
+  # It redirects the method << to a block given at creation.
+  #
+  # This allows scanners and Encoders to use streaming (no
+  # tokens are saved, the input is highlighted the same time it
+  # is scanned) with the same code.
+  #
+  # See CodeRay.encode_stream and CodeRay.scan_stream
+  class TokenStream < Tokens
+
+    # Whether the object is a TokenStream.
+    #
+    # Returns true.
+    def stream?
+      true
+    end
+
+    # The Array is empty, but size counts the tokens given by <<.
+    attr_reader :size
+
+    # Creates a new TokenStream that calls +block+ whenever
+    # its << method is called.
+    #
+    # Example:
+    #
+    #   require 'coderay'
+    #   
+    #   token_stream = CodeRay::TokenStream.new do |text, kind|
+    #     puts 'kind: %s, text size: %d.' % [kind, text.size]
+    #   end
+    #   
+    #   token_stream << ['/\d+/', :regexp]
+    #   #-> kind: rexpexp, text size: 5.
+    #
+    def initialize &block
+      raise ArgumentError, 'Block expected for streaming.' unless block
+      @callback = block
+      @size = 0
+    end
+
+    # Calls +block+ with +token+ and increments size.
+    #
+    # Returns self.
+    def << token
+      @callback.call(*token)
+      @size += 1
+      self
+    end
+
+    # This method is not implemented due to speed reasons. Use Tokens.
+    def text_size
+      raise NotImplementedError,
+        'This method is not implemented due to speed reasons.'
+    end
+
+    # A TokenStream cannot be dumped. Use Tokens.
+    def dump
+      raise NotImplementedError, 'A TokenStream cannot be dumped.'
+    end
+
+    # A TokenStream cannot be optimized. Use Tokens.
+    def optimize
+      raise NotImplementedError, 'A TokenStream cannot be optimized.'
+    end
+
+  end
+
+end
+
+if $0 == __FILE__
+  $VERBOSE = true
+  $: << File.join(File.dirname(__FILE__), '..')
+  eval DATA.read, nil, $0, __LINE__ + 4
+end
+
+__END__
+require 'test/unit'
+
+class TokensTest < Test::Unit::TestCase
+  
+  def test_creation
+    assert CodeRay::Tokens < Array
+    tokens = nil
+    assert_nothing_raised do
+      tokens = CodeRay::Tokens.new
+    end
+    assert_kind_of Array, tokens
+  end
+  
+  def test_adding_tokens
+    tokens = CodeRay::Tokens.new
+    assert_nothing_raised do
+      tokens << ['string', :type]
+      tokens << ['()', :operator]
+    end
+    assert_equal tokens.size, 2
+  end
+  
+  def test_dump_undump
+    tokens = CodeRay::Tokens.new
+    assert_nothing_raised do
+      tokens << ['string', :type]
+      tokens << ['()', :operator]
+    end
+    tokens2 = nil
+    assert_nothing_raised do
+      tokens2 = tokens.dump.undump
+    end
+    assert_equal tokens, tokens2
+  end
+  
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/duo.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,85 @@
+module CodeRay
+  
+  # = Duo
+  #
+  # A Duo is a convenient way to use CodeRay. You just create a Duo,
+  # giving it a lang (language of the input code) and a format (desired
+  # output format), and call Duo#highlight with the code.
+  # 
+  # Duo makes it easy to re-use both scanner and encoder for a repetitive
+  # task. It also provides a very easy interface syntax:
+  # 
+  #   require 'coderay'
+  #   CodeRay::Duo[:python, :div].highlight 'import this'
+  # 
+  # Until you want to do uncommon things with CodeRay, I recommend to use
+  # this method, since it takes care of everything.
+  class Duo
+
+    attr_accessor :lang, :format, :options
+    
+    # Create a new Duo, holding a lang and a format to highlight code.
+    # 
+    # simple:
+    #   CodeRay::Duo[:ruby, :page].highlight 'bla 42'
+    # 
+    # streaming:
+    #   CodeRay::Duo[:ruby, :page].highlight 'bar 23', :stream => true
+    # 
+    # with options:
+    #   CodeRay::Duo[:ruby, :html, :hint => :debug].highlight '????::??'
+    # 
+    # alternative syntax without options:
+    #   CodeRay::Duo[:ruby => :statistic].encode 'class << self; end'
+    # 
+    # alternative syntax with options:
+    #   CodeRay::Duo[{ :ruby => :statistic }, :do => :something].encode 'abc'
+    # 
+    # The options are forwarded to scanner and encoder
+    # (see CodeRay.get_scanner_options).
+    def initialize lang = nil, format = nil, options = {}
+      if format == nil and lang.is_a? Hash and lang.size == 1
+        @lang = lang.keys.first
+        @format = lang[@lang]
+      else
+        @lang = lang
+        @format = format
+      end
+      @options = options
+    end
+
+    class << self
+      # To allow calls like Duo[:ruby, :html].highlight.
+      alias [] new
+    end
+
+    # The scanner of the duo. Only created once.
+    def scanner
+      @scanner ||= CodeRay.scanner @lang, CodeRay.get_scanner_options(@options)
+    end
+    
+    # The encoder of the duo. Only created once.
+    def encoder
+      @encoder ||= CodeRay.encoder @format, @options
+    end
+    
+    # Tokenize and highlight the code using +scanner+ and +encoder+.
+    #
+    # If the :stream option is set, the Duo will go into streaming mode,
+    # saving memory for the cost of time.
+    def encode code, options = { :stream => false }
+      stream = options.delete :stream
+      options = @options.merge options
+      if stream
+        encoder.encode_stream(code, @lang, options)
+      else
+        scanner.code = code
+        encoder.encode_tokens(scanner.tokenize, options)
+      end
+    end
+    alias highlight encode
+
+  end
+
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoder.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,213 @@
+module CodeRay
+
+  # This module holds the Encoder class and its subclasses.
+  # For example, the HTML encoder is named CodeRay::Encoders::HTML
+  # can be found in coderay/encoders/html.
+  #
+  # Encoders also provides methods and constants for the register
+  # mechanism and the [] method that returns the Encoder class
+  # belonging to the given format.
+  module Encoders
+    extend PluginHost
+    plugin_path File.dirname(__FILE__), 'encoders'
+
+    # = Encoder
+    #
+    # The Encoder base class. Together with Scanner and
+    # Tokens, it forms the highlighting triad.
+    #
+    # Encoder instances take a Tokens object and do something with it.
+    #
+    # The most common Encoder is surely the HTML encoder
+    # (CodeRay::Encoders::HTML). It highlights the code in a colorful
+    # html page.
+    # If you want the highlighted code in a div or a span instead,
+    # use its subclasses Div and Span.
+    class Encoder
+      extend Plugin
+      plugin_host Encoders
+
+      attr_reader :token_stream
+
+      class << self
+
+        # Returns if the Encoder can be used in streaming mode.
+        def streamable?
+          is_a? Streamable
+        end
+
+        # If FILE_EXTENSION isn't defined, this method returns the
+        # downcase class name instead.
+        def const_missing sym
+          if sym == :FILE_EXTENSION
+            plugin_id
+          else
+            super
+          end
+        end
+
+      end
+
+      # Subclasses are to store their default options in this constant.
+      DEFAULT_OPTIONS = { :stream => false }
+
+      # The options you gave the Encoder at creating.
+      attr_accessor :options
+
+      # Creates a new Encoder.
+      # +options+ is saved and used for all encode operations, as long
+      # as you don't overwrite it there by passing additional options.
+      #
+      # Encoder objects provide three encode methods:
+      # - encode simply takes a +code+ string and a +lang+
+      # - encode_tokens expects a +tokens+ object instead
+      # - encode_stream is like encode, but uses streaming mode.
+      #
+      # Each method has an optional +options+ parameter. These are
+      # added to the options you passed at creation.
+      def initialize options = {}
+        @options = self.class::DEFAULT_OPTIONS.merge options
+        raise "I am only the basic Encoder class. I can't encode "\
+          "anything. :( Use my subclasses." if self.class == Encoder
+      end
+
+      # Encode a Tokens object.
+      def encode_tokens tokens, options = {}
+        options = @options.merge options
+        setup options
+        compile tokens, options
+        finish options
+      end
+
+      # Encode the given +code+ after tokenizing it using the Scanner
+      # for +lang+.
+      def encode code, lang, options = {}
+        options = @options.merge options
+        scanner_options = CodeRay.get_scanner_options(options)
+        tokens = CodeRay.scan code, lang, scanner_options
+        encode_tokens tokens, options
+      end
+
+      # You can use highlight instead of encode, if that seems
+      # more clear to you.
+      alias highlight encode
+
+      # Encode the given +code+ using the Scanner for +lang+ in
+      # streaming mode.
+      def encode_stream code, lang, options = {}
+        raise NotStreamableError, self unless kind_of? Streamable
+        options = @options.merge options
+        setup options
+        scanner_options = CodeRay.get_scanner_options options
+        @token_stream =
+          CodeRay.scan_stream code, lang, scanner_options, &self
+        finish options
+      end
+
+      # Behave like a proc. The token method is converted to a proc.
+      def to_proc
+        method(:token).to_proc
+      end
+
+      # Return the default file extension for outputs of this encoder.
+      def file_extension
+        self.class::FILE_EXTENSION
+      end
+
+    protected
+
+      # Called with merged options before encoding starts.
+      # Sets @out to an empty string.
+      #
+      # See the HTML Encoder for an example of option caching.
+      def setup options
+        @out = ''
+      end
+
+      # Called with +content+ and +kind+ of the currently scanned token.
+      # For simple scanners, it's enougth to implement this method.
+      #
+      # By default, it calls text_token or block_token, depending on
+      # whether +content+ is a String.
+      def token content, kind
+        encoded_token =
+          if content.is_a? ::String
+            text_token content, kind
+          elsif content.is_a? ::Symbol
+            block_token content, kind
+          else
+            raise 'Unknown token content type: %p' % [content]
+          end
+        append_encoded_token_to_output encoded_token
+      end
+      
+      def append_encoded_token_to_output encoded_token
+        @out << encoded_token if encoded_token && defined?(@out) && @out
+      end
+      
+      # Called for each text token ([text, kind]), where text is a String.
+      def text_token text, kind
+      end
+      
+      # Called for each block (non-text) token ([action, kind]),
+      # where +action+ is a Symbol.
+      # 
+      # Calls open_token, close_token, begin_line, and end_line according to
+      # the value of +action+.
+      def block_token action, kind
+        case action
+        when :open
+          open_token kind
+        when :close
+          close_token kind
+        when :begin_line
+          begin_line kind
+        when :end_line
+          end_line kind
+        else
+          raise 'unknown block action: %p' % action
+        end
+      end
+      
+      # Called for each block token at the start of the block ([:open, kind]).
+      def open_token kind
+      end
+      
+      # Called for each block token end of the block ([:close, kind]).
+      def close_token kind
+      end
+      
+      # Called for each line token block at the start of the line ([:begin_line, kind]).
+      def begin_line kind
+      end
+      
+      # Called for each line token block at the end of the line ([:end_line, kind]).
+      def end_line kind
+      end
+
+      # Called with merged options after encoding starts.
+      # The return value is the result of encoding, typically @out.
+      def finish options
+        @out
+      end
+
+      # Do the encoding.
+      #
+      # The already created +tokens+ object must be used; it can be a
+      # TokenStream or a Tokens object.
+      if RUBY_VERSION >= '1.9'
+        def compile tokens, options
+          for text, kind in tokens
+            token text, kind
+          end
+        end
+      else
+        def compile tokens, options
+          tokens.each(&self)
+        end
+      end
+
+    end
+
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,113 @@
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders
+END
+div.rb
+K 25
+svn:wc:ra_dav:version-url
+V 78
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/div.rb
+END
+text.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/text.rb
+END
+filter.rb
+K 25
+svn:wc:ra_dav:version-url
+V 81
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/filter.rb
+END
+debug.rb
+K 25
+svn:wc:ra_dav:version-url
+V 80
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/debug.rb
+END
+lines_of_code.rb
+K 25
+svn:wc:ra_dav:version-url
+V 88
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/lines_of_code.rb
+END
+count.rb
+K 25
+svn:wc:ra_dav:version-url
+V 80
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/count.rb
+END
+xml.rb
+K 25
+svn:wc:ra_dav:version-url
+V 78
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/xml.rb
+END
+span.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/span.rb
+END
+yaml.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/yaml.rb
+END
+html.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html.rb
+END
+term.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/term.rb
+END
+statistic.rb
+K 25
+svn:wc:ra_dav:version-url
+V 84
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/statistic.rb
+END
+comment_filter.rb
+K 25
+svn:wc:ra_dav:version-url
+V 89
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/comment_filter.rb
+END
+json.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/json.rb
+END
+token_class_filter.rb
+K 25
+svn:wc:ra_dav:version-url
+V 93
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/token_class_filter.rb
+END
+null.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/null.rb
+END
+page.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/page.rb
+END
+_map.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/_map.rb
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,643 @@
+10
+
+dir
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders
+http://redmine.rubyforge.org/svn
+
+
+
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+div.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+f0c5be15265facadc46889fbbc2613f1
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+232
+
+text.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+2914ed90921556a01a79f3fb6d549b09
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+400
+
+filter.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+08591bbd1f20dc7dce67030a294d1636
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1595
+
+debug.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+9e878089035fe9ad88c808bd1a15cf7a
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+835
+
+lines_of_code.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+966e154458fb6c665b6d62aa90d07e18
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2395
+
+count.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+c262d84ddbdf37e99ff6bcf6dd6a66c2
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+230
+
+xml.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+ada7effba81bbc28f41efeaef69dcc51
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1367
+
+span.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+e4228be45ad0f818a0e125caee838d56
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+236
+
+yaml.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+04c428b240ef44de896ad15827cf51df
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+264
+
+html
+dir
+
+html.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+e672d4f425422c57f935f24df3df9a0d
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7995
+
+term.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+422a51cd181de3cc0a55aba7f9915c18
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4324
+
+statistic.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+49017735ef679f73dd65795e30d8e5c7
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1800
+
+comment_filter.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+32f2d1a9db6f58636d3946a43b5a60f0
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+808
+
+json.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+86a2dcae2ef0a971f70386c3b794469f
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1570
+
+null.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+9c9dcf3ba3f2effa5ebd4cd37417db36
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+320
+
+token_class_filter.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+e59791dbcdce328f09240e7e5c8b3d0e
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2546
+
+page.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+26da5aef43dc8731fbd63dcffea259bf
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+262
+
+_map.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+964d7ee16d213ab2e41418257f1eb8aa
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+167
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/_map.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,12 @@
+module CodeRay
+module Encoders
+
+  map \
+    :loc => :lines_of_code,
+    :plain => :text,
+    :stats => :statistic,
+    :terminal => :term,
+    :tex => :latex
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/comment_filter.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,43 @@
+($:.unshift '../..'; require 'coderay') unless defined? CodeRay
+module CodeRay
+module Encoders
+  
+  load :token_class_filter
+  
+  class CommentFilter < TokenClassFilter
+    
+    register_for :comment_filter
+    
+    DEFAULT_OPTIONS = superclass::DEFAULT_OPTIONS.merge \
+      :exclude => [:comment]
+    
+  end
+  
+end
+end
+
+if $0 == __FILE__
+  $VERBOSE = true
+  $: << File.join(File.dirname(__FILE__), '..')
+  eval DATA.read, nil, $0, __LINE__ + 4
+end
+
+__END__
+require 'test/unit'
+
+class CommentFilterTest < Test::Unit::TestCase
+  
+  def test_filtering_comments
+    tokens = CodeRay.scan <<-RUBY, :ruby
+#!/usr/bin/env ruby
+# a minimal Ruby program
+puts "Hello world!"
+    RUBY
+    assert_equal <<-RUBY_FILTERED, tokens.comment_filter.text
+#!/usr/bin/env ruby
+
+puts "Hello world!"
+    RUBY_FILTERED
+  end
+  
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/count.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,21 @@
+module CodeRay
+module Encoders
+
+  class Count < Encoder
+
+    include Streamable
+    register_for :count
+
+    protected
+
+    def setup options
+      @out = 0
+    end
+
+    def token text, kind
+      @out += 1
+    end
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/debug.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,49 @@
+module CodeRay
+module Encoders
+
+  # = Debug Encoder
+  #
+  # Fast encoder producing simple debug output.
+  #
+  # It is readable and diff-able and is used for testing.
+  #
+  # You cannot fully restore the tokens information from the
+  # output, because consecutive :space tokens are merged.
+  # Use Tokens#dump for caching purposes.
+  class Debug < Encoder
+
+    include Streamable
+    register_for :debug
+
+    FILE_EXTENSION = 'raydebug'
+
+  protected
+    def text_token text, kind
+      if kind == :space
+        text
+      else
+        text = text.gsub(/[)\\]/, '\\\\\0')  # escape ) and \
+        "#{kind}(#{text})"
+      end
+    end
+
+    def open_token kind
+      "#{kind}<"
+    end
+
+    def close_token kind
+      ">"
+    end
+
+    def begin_line kind
+      "#{kind}["
+    end
+
+    def end_line kind
+      "]"
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/div.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,19 @@
+module CodeRay
+module Encoders
+
+  load :html
+
+  class Div < HTML
+
+    FILE_EXTENSION = 'div.html'
+
+    register_for :div
+
+    DEFAULT_OPTIONS = HTML::DEFAULT_OPTIONS.merge \
+      :css => :style,
+      :wrap => :div
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/filter.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,75 @@
+($:.unshift '../..'; require 'coderay') unless defined? CodeRay
+module CodeRay
+module Encoders
+  
+  class Filter < Encoder
+    
+    register_for :filter
+    
+  protected
+    def setup options
+      @out = Tokens.new
+    end
+    
+    def text_token text, kind
+      [text, kind] if include_text_token? text, kind
+    end
+    
+    def include_text_token? text, kind
+      true
+    end
+    
+    def block_token action, kind
+      [action, kind] if include_block_token? action, kind
+    end
+    
+    def include_block_token? action, kind
+      true
+    end
+    
+  end
+  
+end
+end
+
+if $0 == __FILE__
+  $VERBOSE = true
+  $: << File.join(File.dirname(__FILE__), '..')
+  eval DATA.read, nil, $0, __LINE__ + 4
+end
+
+__END__
+require 'test/unit'
+
+class FilterTest < Test::Unit::TestCase
+  
+  def test_creation
+    assert CodeRay::Encoders::Filter < CodeRay::Encoders::Encoder
+    filter = nil
+    assert_nothing_raised do
+      filter = CodeRay.encoder :filter
+    end
+    assert_kind_of CodeRay::Encoders::Encoder, filter
+  end
+  
+  def test_filtering_text_tokens
+    tokens = CodeRay::Tokens.new
+    10.times do |i|
+      tokens << [i.to_s, :index]
+    end
+    assert_equal tokens, CodeRay::Encoders::Filter.new.encode_tokens(tokens)
+    assert_equal tokens, tokens.filter
+  end
+  
+  def test_filtering_block_tokens
+    tokens = CodeRay::Tokens.new
+    10.times do |i|
+      tokens << [:open, :index]
+      tokens << [i.to_s, :content]
+      tokens << [:close, :index]
+    end
+    assert_equal tokens, CodeRay::Encoders::Filter.new.encode_tokens(tokens)
+    assert_equal tokens, tokens.filter
+  end
+  
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/html.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,309 @@
+require 'set'
+
+module CodeRay
+module Encoders
+
+  # = HTML Encoder
+  #
+  # This is CodeRay's most important highlighter:
+  # It provides save, fast XHTML generation and CSS support.
+  #
+  # == Usage
+  #
+  #  require 'coderay'
+  #  puts CodeRay.scan('Some /code/', :ruby).html  #-> a HTML page
+  #  puts CodeRay.scan('Some /code/', :ruby).html(:wrap => :span)
+  #  #-> <span class="CodeRay"><span class="co">Some</span> /code/</span>
+  #  puts CodeRay.scan('Some /code/', :ruby).span  #-> the same
+  #  
+  #  puts CodeRay.scan('Some code', :ruby).html(
+  #    :wrap => nil,
+  #    :line_numbers => :inline,
+  #    :css => :style
+  #  )
+  #  #-> <span class="no">1</span>  <span style="color:#036; font-weight:bold;">Some</span> code
+  #
+  # == Options
+  #
+  # === :tab_width
+  # Convert \t characters to +n+ spaces (a number.)
+  # Default: 8
+  #
+  # === :css
+  # How to include the styles; can be :class or :style.
+  #
+  # Default: :class
+  #
+  # === :wrap
+  # Wrap in :page, :div, :span or nil.
+  #
+  # You can also use Encoders::Div and Encoders::Span.
+  #
+  # Default: nil
+  #
+  # === :title
+  # 
+  # The title of the HTML page (works only when :wrap is set to :page.)
+  #
+  # Default: 'CodeRay output'
+  #
+  # === :line_numbers
+  # Include line numbers in :table, :inline, :list or nil (no line numbers)
+  #
+  # Default: nil
+  #
+  # === :line_number_start
+  # Where to start with line number counting.
+  #
+  # Default: 1
+  #
+  # === :bold_every
+  # Make every +n+-th number appear bold.
+  #
+  # Default: 10
+  #
+  # === :highlight_lines
+  # 
+  # Highlights certain line numbers.
+  # Can be any Enumerable, typically just an Array or Range, of numbers.
+  # 
+  # Bolding is deactivated when :highlight_lines is set. It only makes sense
+  # in combination with :line_numbers.
+  #
+  # Default: nil
+  #
+  # === :hint
+  # Include some information into the output using the title attribute.
+  # Can be :info (show token type on mouse-over), :info_long (with full path)
+  # or :debug (via inspect).
+  #
+  # Default: false
+  class HTML < Encoder
+
+    include Streamable
+    register_for :html
+
+    FILE_EXTENSION = 'html'
+
+    DEFAULT_OPTIONS = {
+      :tab_width => 8,
+
+      :css => :class,
+
+      :style => :cycnus,
+      :wrap => nil,
+      :title => 'CodeRay output',
+
+      :line_numbers => nil,
+      :line_number_start => 1,
+      :bold_every => 10,
+      :highlight_lines => nil,
+
+      :hint => false,
+    }
+
+    helper :output, :css
+
+    attr_reader :css
+
+  protected
+
+    HTML_ESCAPE = {  #:nodoc:
+      '&' => '&amp;',
+      '"' => '&quot;',
+      '>' => '&gt;',
+      '<' => '&lt;',
+    }
+
+    # This was to prevent illegal HTML.
+    # Strange chars should still be avoided in codes.
+    evil_chars = Array(0x00...0x20) - [?\n, ?\t, ?\s]
+    evil_chars.each { |i| HTML_ESCAPE[i.chr] = ' ' }
+    #ansi_chars = Array(0x7f..0xff)
+    #ansi_chars.each { |i| HTML_ESCAPE[i.chr] = '&#%d;' % i }
+    # \x9 (\t) and \xA (\n) not included
+    #HTML_ESCAPE_PATTERN = /[\t&"><\0-\x8\xB-\x1f\x7f-\xff]/
+    HTML_ESCAPE_PATTERN = /[\t"&><\0-\x8\xB-\x1f]/
+
+    TOKEN_KIND_TO_INFO = Hash.new { |h, kind|
+      h[kind] =
+        case kind
+        when :pre_constant
+          'Predefined constant'
+        else
+          kind.to_s.gsub(/_/, ' ').gsub(/\b\w/) { $&.capitalize }
+        end
+    }
+
+    TRANSPARENT_TOKEN_KINDS = [
+      :delimiter, :modifier, :content, :escape, :inline_delimiter,
+    ].to_set
+
+    # Generate a hint about the given +classes+ in a +hint+ style.
+    #
+    # +hint+ may be :info, :info_long or :debug.
+    def self.token_path_to_hint hint, classes
+      title =
+        case hint
+        when :info
+          TOKEN_KIND_TO_INFO[classes.first]
+        when :info_long
+          classes.reverse.map { |kind| TOKEN_KIND_TO_INFO[kind] }.join('/')
+        when :debug
+          classes.inspect
+        end
+      title ? " title=\"#{title}\"" : ''
+    end
+
+    def setup options
+      super
+
+      @HTML_ESCAPE = HTML_ESCAPE.dup
+      @HTML_ESCAPE["\t"] = ' ' * options[:tab_width]
+
+      @opened = [nil]
+      @css = CSS.new options[:style]
+
+      hint = options[:hint]
+      if hint and not [:debug, :info, :info_long].include? hint
+        raise ArgumentError, "Unknown value %p for :hint; \
+          expected :info, :debug, false, or nil." % hint
+      end
+
+      case options[:css]
+
+      when :class
+        @css_style = Hash.new do |h, k|
+          c = CodeRay::Tokens::ClassOfKind[k.first]
+          if c == :NO_HIGHLIGHT and not hint
+            h[k.dup] = false
+          else
+            title = if hint
+              HTML.token_path_to_hint(hint, k[1..-1] << k.first)
+            else
+              ''
+            end
+            if c == :NO_HIGHLIGHT
+              h[k.dup] = '<span%s>' % [title]
+            else
+              h[k.dup] = '<span%s class="%s">' % [title, c]
+            end
+          end
+        end
+
+      when :style
+        @css_style = Hash.new do |h, k|
+          if k.is_a? ::Array
+            styles = k.dup
+          else
+            styles = [k]
+          end
+          type = styles.first
+          classes = styles.map { |c| Tokens::ClassOfKind[c] }
+          if classes.first == :NO_HIGHLIGHT and not hint
+            h[k] = false
+          else
+            styles.shift if TRANSPARENT_TOKEN_KINDS.include? styles.first
+            title = HTML.token_path_to_hint hint, styles
+            style = @css[*classes]
+            h[k] =
+              if style
+                '<span%s style="%s">' % [title, style]
+              else
+                false
+              end
+          end
+        end
+
+      else
+        raise ArgumentError, "Unknown value %p for :css." % options[:css]
+
+      end
+    end
+
+    def finish options
+      not_needed = @opened.shift
+      @out << '</span>' * @opened.size
+      unless @opened.empty?
+        warn '%d tokens still open: %p' % [@opened.size, @opened]
+      end
+
+      @out.extend Output
+      @out.css = @css
+      @out.numerize! options[:line_numbers], options
+      @out.wrap! options[:wrap]
+      @out.apply_title! options[:title]
+
+      super
+    end
+
+    def token text, type = :plain
+      case text
+      
+      when nil
+        # raise 'Token with nil as text was given: %p' % [[text, type]] 
+      
+      when String
+        if text =~ /#{HTML_ESCAPE_PATTERN}/o
+          text = text.gsub(/#{HTML_ESCAPE_PATTERN}/o) { |m| @HTML_ESCAPE[m] }
+        end
+        @opened[0] = type
+        if text != "\n" && style = @css_style[@opened]
+          @out << style << text << '</span>'
+        else
+          @out << text
+        end
+        
+      
+      # token groups, eg. strings
+      when :open
+        @opened[0] = type
+        @out << (@css_style[@opened] || '<span>')
+        @opened << type
+      when :close
+        if @opened.empty?
+          # nothing to close
+        else
+          if $CODERAY_DEBUG and (@opened.size == 1 or @opened.last != type)
+            raise 'Malformed token stream: Trying to close a token (%p) \
+              that is not open. Open are: %p.' % [type, @opened[1..-1]]
+          end
+          @out << '</span>'
+          @opened.pop
+        end
+      
+      # whole lines to be highlighted, eg. a deleted line in a diff
+      when :begin_line
+        @opened[0] = type
+        if style = @css_style[@opened]
+          if style['class="']
+            @out << style.sub('class="', 'class="line ')
+          else
+            @out << style.sub('>', ' class="line">')
+          end
+        else
+          @out << '<span class="line">'
+        end
+        @opened << type
+      when :end_line
+        if @opened.empty?
+          # nothing to close
+        else
+          if $CODERAY_DEBUG and (@opened.size == 1 or @opened.last != type)
+            raise 'Malformed token stream: Trying to close a line (%p) \
+              that is not open. Open are: %p.' % [type, @opened[1..-1]]
+          end
+          @out << '</span>'
+          @opened.pop
+        end
+      
+      else
+        raise 'unknown token kind: %p' % [text]
+        
+      end
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/json.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,69 @@
+($:.unshift '../..'; require 'coderay') unless defined? CodeRay
+module CodeRay
+module Encoders
+  
+  # = JSON Encoder
+  class JSON < Encoder
+    
+    register_for :json
+    FILE_EXTENSION = 'json'
+    
+  protected
+    def setup options
+      begin
+        require 'json'
+      rescue LoadError
+        require 'rubygems'
+        require 'json'
+      end
+      @out = []
+    end
+    
+    def text_token text, kind
+      { :type => 'text', :text => text, :kind => kind }
+    end
+    
+    def block_token action, kind
+      { :type => 'block', :action => action, :kind => kind }
+    end
+    
+    def finish options
+      @out.to_json
+    end
+    
+  end
+  
+end
+end
+
+if $0 == __FILE__
+  $VERBOSE = true
+  $: << File.join(File.dirname(__FILE__), '..')
+  eval DATA.read, nil, $0, __LINE__ + 4
+end
+
+__END__
+require 'test/unit'
+$:.delete '.'
+require 'rubygems' if RUBY_VERSION < '1.9'
+
+class JSONEncoderTest < Test::Unit::TestCase
+  
+  def test_json_output
+    tokens = CodeRay.scan <<-RUBY, :ruby
+puts "Hello world!"
+    RUBY
+    require 'json'
+    assert_equal [
+      {"type"=>"text", "text"=>"puts", "kind"=>"ident"},
+      {"type"=>"text", "text"=>" ", "kind"=>"space"},
+      {"type"=>"block", "action"=>"open", "kind"=>"string"},
+      {"type"=>"text", "text"=>"\"", "kind"=>"delimiter"},
+      {"type"=>"text", "text"=>"Hello world!", "kind"=>"content"},
+      {"type"=>"text", "text"=>"\"", "kind"=>"delimiter"},
+      {"type"=>"block", "action"=>"close", "kind"=>"string"},
+      {"type"=>"text", "text"=>"\n", "kind"=>"space"}
+    ], JSON.load(tokens.json)
+  end
+  
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/lines_of_code.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,90 @@
+($:.unshift '../..'; require 'coderay') unless defined? CodeRay
+module CodeRay
+module Encoders
+  
+  # Counts the LoC (Lines of Code). Returns an Integer >= 0.
+  # 
+  # Alias: :loc
+  # 
+  # Everything that is not comment, markup, doctype/shebang, or an empty line,
+  # is considered to be code.
+  # 
+  # For example,
+  # * HTML files not containing JavaScript have 0 LoC
+  # * in a Java class without comments, LoC is the number of non-empty lines
+  # 
+  # A Scanner class should define the token kinds that are not code in the
+  # KINDS_NOT_LOC constant, which defaults to [:comment, :doctype].
+  class LinesOfCode < Encoder
+    
+    register_for :lines_of_code
+    
+    NON_EMPTY_LINE = /^\s*\S.*$/
+    
+    def compile tokens, options
+      if scanner = tokens.scanner
+        kinds_not_loc = scanner.class::KINDS_NOT_LOC
+      else
+        warn ArgumentError, 'Tokens have no scanner.' if $VERBOSE
+        kinds_not_loc = CodeRay::Scanners::Scanner::KINDS_NOT_LOC
+      end
+      code = tokens.token_class_filter :exclude => kinds_not_loc
+      @loc = code.text.scan(NON_EMPTY_LINE).size
+    end
+    
+    def finish options
+      @loc
+    end
+    
+  end
+  
+end
+end
+
+if $0 == __FILE__
+  $VERBOSE = true
+  $: << File.join(File.dirname(__FILE__), '..')
+  eval DATA.read, nil, $0, __LINE__ + 4
+end
+
+__END__
+require 'test/unit'
+
+class LinesOfCodeTest < Test::Unit::TestCase
+  
+  def test_creation
+    assert CodeRay::Encoders::LinesOfCode < CodeRay::Encoders::Encoder
+    filter = nil
+    assert_nothing_raised do
+      filter = CodeRay.encoder :loc
+    end
+    assert_kind_of CodeRay::Encoders::LinesOfCode, filter
+    assert_nothing_raised do
+      filter = CodeRay.encoder :lines_of_code
+    end
+    assert_kind_of CodeRay::Encoders::LinesOfCode, filter
+  end
+  
+  def test_lines_of_code
+    tokens = CodeRay.scan <<-RUBY, :ruby
+#!/usr/bin/env ruby
+
+# a minimal Ruby program
+puts "Hello world!"
+    RUBY
+    assert_equal 1, CodeRay::Encoders::LinesOfCode.new.encode_tokens(tokens)
+    assert_equal 1, tokens.lines_of_code
+    assert_equal 1, tokens.loc
+  end
+  
+  def test_filtering_block_tokens
+    tokens = CodeRay::Tokens.new
+    tokens << ["Hello\n", :world]
+    tokens << ["Hello\n", :space]
+    tokens << ["Hello\n", :comment]
+    assert_equal 2, CodeRay::Encoders::LinesOfCode.new.encode_tokens(tokens)
+    assert_equal 2, tokens.lines_of_code
+    assert_equal 2, tokens.loc
+  end
+  
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/null.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,26 @@
+module CodeRay
+module Encoders
+
+  # = Null Encoder
+  #
+  # Does nothing and returns an empty string.
+  class Null < Encoder
+
+    include Streamable
+    register_for :null
+
+    # Defined for faster processing
+    def to_proc
+      proc {}
+    end
+
+  protected
+
+    def token(*)
+      # do nothing
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/page.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,20 @@
+module CodeRay
+module Encoders
+
+  load :html
+
+  class Page < HTML
+
+    FILE_EXTENSION = 'html'
+
+    register_for :page
+
+    DEFAULT_OPTIONS = HTML::DEFAULT_OPTIONS.merge \
+      :css => :class,
+      :wrap => :page,
+      :line_numbers => :table
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/span.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,19 @@
+module CodeRay
+module Encoders
+
+  load :html
+
+  class Span < HTML
+
+    FILE_EXTENSION = 'span.html'
+
+    register_for :span
+
+    DEFAULT_OPTIONS = HTML::DEFAULT_OPTIONS.merge \
+      :css => :style,
+      :wrap => :span
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/statistic.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,77 @@
+module CodeRay
+module Encoders
+
+  # Makes a statistic for the given tokens.
+  class Statistic < Encoder
+
+    include Streamable
+    register_for :stats, :statistic
+
+    attr_reader :type_stats, :real_token_count
+
+  protected
+
+    TypeStats = Struct.new :count, :size
+
+    def setup options
+      @type_stats = Hash.new { |h, k| h[k] = TypeStats.new 0, 0 }
+      @real_token_count = 0
+    end
+
+    def generate tokens, options
+      @tokens = tokens
+      super
+    end
+
+    def text_token text, kind
+      @real_token_count += 1 unless kind == :space
+      @type_stats[kind].count += 1
+      @type_stats[kind].size += text.size
+      @type_stats['TOTAL'].size += text.size
+      @type_stats['TOTAL'].count += 1
+    end
+
+    # TODO Hierarchy handling
+    def block_token action, kind
+      @type_stats['TOTAL'].count += 1
+      @type_stats['open/close'].count += 1
+    end
+
+    STATS = <<-STATS
+
+Code Statistics
+
+Tokens            %8d
+  Non-Whitespace  %8d
+Bytes Total       %8d
+
+Token Types (%d):
+  type                     count     ratio    size (average)
+-------------------------------------------------------------
+%s
+      STATS
+# space                    12007   33.81 %     1.7
+    TOKEN_TYPES_ROW = <<-TKR
+  %-20s  %8d  %6.2f %%   %5.1f
+      TKR
+
+    def finish options
+      all = @type_stats['TOTAL']
+      all_count, all_size = all.count, all.size
+      @type_stats.each do |type, stat|
+        stat.size /= stat.count.to_f
+      end
+      types_stats = @type_stats.sort_by { |k, v| [-v.count, k.to_s] }.map do |k, v|
+        TOKEN_TYPES_ROW % [k, v.count, 100.0 * v.count / all_count, v.size]
+      end.join
+      STATS % [
+        all_count, @real_token_count, all_size,
+        @type_stats.delete_if { |k, v| k.is_a? String }.size,
+        types_stats
+      ]
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/term.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,158 @@
+# encoders/term.rb
+# By Rob Aldred (http://robaldred.co.uk)
+# Based on idea by Nathan Weizenbaum (http://nex-3.com)
+# MIT License (http://www.opensource.org/licenses/mit-license.php)
+#
+# A CodeRay encoder that outputs code highlighted for a color terminal.
+# Check out http://robaldred.co.uk
+
+module CodeRay
+  module Encoders
+    class Term < Encoder
+      register_for :term
+
+      TOKEN_COLORS = {
+        :annotation => '35',
+        :attribute_name => '33',
+        :attribute_name_fat => '33',
+        :attribute_value => '31',
+        :attribute_value_fat => '31',
+        :bin => '1;35',
+        :char => {:self => '36', :delimiter => '34'},
+        :class => '1;35',
+        :class_variable => '36',
+        :color => '32',
+        :comment => '37',
+        :complex => '34',
+        :constant => ['34', '4'],
+        :decoration => '35',
+        :definition => '1;32',
+        :directive => ['32', '4'],
+        :doc => '46',
+        :doctype => '1;30',
+        :doc_string => ['31', '4'],
+        :entity => '33',
+        :error => ['1;33', '41'],
+        :exception => '1;31',
+        :float => '1;35',
+        :function => '1;34',
+        :global_variable => '42',
+        :hex => '1;36',
+        :important => '1;31',
+        :include => '33',
+        :integer => '1;34',
+        :interpreted => '1;35',
+        :key => '35',
+        :label => '1;4',
+        :local_variable => '33',
+        :oct => '1;35',
+        :operator_name => '1;29',
+        :pre_constant => '1;36',
+        :pre_type => '1;30',
+        :predefined => ['4', '1;34'],
+        :preprocessor => '36',
+        :pseudo_class => '34',
+        :regexp => {
+          :content => '31',
+          :delimiter => '1;29',
+          :modifier => '35',
+          :function => '1;29'
+        },
+        :reserved => '1;31',
+        :shell => {
+          :self => '42',
+          :content => '1;29',
+          :delimiter => '37',
+        },
+        :string => {
+          :self => '32',
+          :modifier => '1;32',
+          :escape => '1;36',
+          :delimiter => '1;32',
+        },
+        :symbol => '1;32',
+        :tag => '34',
+        :tag_fat => '1;34',
+        :tag_special => ['34', '4'],
+        :type => '1;34',
+        :value => '36',
+        :variable => '34',
+        :insert => '42',
+        :delete => '41',
+        :change => '44',
+        :head => '45',
+      }
+      TOKEN_COLORS[:keyword] = TOKEN_COLORS[:reserved]
+      TOKEN_COLORS[:method] = TOKEN_COLORS[:function]
+      TOKEN_COLORS[:imaginary] = TOKEN_COLORS[:complex]
+      TOKEN_COLORS[:open] = TOKEN_COLORS[:close] = TOKEN_COLORS[:nesting_delimiter] = TOKEN_COLORS[:escape] = TOKEN_COLORS[:delimiter]
+
+      protected
+
+      def setup(options)
+        @out = ''
+        @opened = [nil]
+        @subcolors = nil
+      end
+
+      def finish(options)
+        super
+      end
+    
+      def token text, type = :plain
+        case text
+      
+        when nil
+          # raise 'Token with nil as text was given: %p' % [[text, type]] 
+      
+        when String
+        
+          if color = (@subcolors || TOKEN_COLORS)[type]
+            color = color[:self] || return if Hash === color
+
+            @out << col(color) + text.gsub("\n", col(0) + "\n" + col(color)) + col(0)
+            @out << col(@subcolors[:self]) if @subcolors && @subcolors[:self]
+          else
+            @out << text
+          end
+      
+        # token groups, eg. strings
+        when :open
+          @opened[0] = type
+          if color = TOKEN_COLORS[type]
+            if Hash === color
+              @subcolors = color
+              @out << col(color[:self]) if color[:self]
+            else
+              @subcolors = {}
+              @out << col(color)
+            end
+          end
+          @opened << type
+        when :close
+          if @opened.empty?
+            # nothing to close
+          else
+            @out << col(0) if (@subcolors || {})[:self]
+            @subcolors = nil
+            @opened.pop
+          end
+      
+        # whole lines to be highlighted, eg. a added/modified/deleted lines in a diff
+        when :begin_line
+        
+        when :end_line        
+      
+        else
+          raise 'unknown token kind: %p' % [text]
+        end
+      end
+
+      private
+
+      def col(color)
+        Array(color).map { |c| "\e[#{c}m" }.join
+      end
+    end
+  end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/text.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,32 @@
+module CodeRay
+module Encoders
+
+  class Text < Encoder
+
+    include Streamable
+    register_for :text
+
+    FILE_EXTENSION = 'txt'
+
+    DEFAULT_OPTIONS = {
+      :separator => ''
+    }
+
+  protected
+    def setup options
+      super
+      @sep = options[:separator]
+    end
+
+    def text_token text, kind
+      text + @sep
+    end
+
+    def finish options
+      super.chomp @sep
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/token_class_filter.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,84 @@
+($:.unshift '../..'; require 'coderay') unless defined? CodeRay
+module CodeRay
+module Encoders
+  
+  load :filter
+  
+  class TokenClassFilter < Filter
+
+    include Streamable
+    register_for :token_class_filter
+
+    DEFAULT_OPTIONS = {
+      :exclude => [],
+      :include => :all
+    }
+
+  protected
+    def setup options
+      super
+      @exclude = options[:exclude]
+      @exclude = Array(@exclude) unless @exclude == :all
+      @include = options[:include]
+      @include = Array(@include) unless @include == :all
+    end
+    
+    def include_text_token? text, kind
+       (@include == :all || @include.include?(kind)) &&
+      !(@exclude == :all || @exclude.include?(kind))
+    end
+    
+  end
+
+end
+end
+
+if $0 == __FILE__
+  $VERBOSE = true
+  $: << File.join(File.dirname(__FILE__), '..')
+  eval DATA.read, nil, $0, __LINE__ + 4
+end
+
+__END__
+require 'test/unit'
+
+class TokenClassFilterTest < Test::Unit::TestCase
+  
+  def test_creation
+    assert CodeRay::Encoders::TokenClassFilter < CodeRay::Encoders::Encoder
+    assert CodeRay::Encoders::TokenClassFilter < CodeRay::Encoders::Filter
+    filter = nil
+    assert_nothing_raised do
+      filter = CodeRay.encoder :token_class_filter
+    end
+    assert_instance_of CodeRay::Encoders::TokenClassFilter, filter
+  end
+  
+  def test_filtering_text_tokens
+    tokens = CodeRay::Tokens.new
+    for i in 1..10
+      tokens << [i.to_s, :index]
+      tokens << [' ', :space] if i < 10
+    end
+    assert_equal 10, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :exclude => :space).size
+    assert_equal 10, tokens.token_class_filter(:exclude => :space).size
+    assert_equal 9, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :include => :space).size
+    assert_equal 9, tokens.token_class_filter(:include => :space).size
+    assert_equal 0, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :exclude => :all).size
+    assert_equal 0, tokens.token_class_filter(:exclude => :all).size
+  end
+  
+  def test_filtering_block_tokens
+    tokens = CodeRay::Tokens.new
+    10.times do |i|
+      tokens << [:open, :index]
+      tokens << [i.to_s, :content]
+      tokens << [:close, :index]
+    end
+    assert_equal 20, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :include => :blubb).size
+    assert_equal 20, tokens.token_class_filter(:include => :blubb).size
+    assert_equal 30, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :exclude => :index).size
+    assert_equal 30, tokens.token_class_filter(:exclude => :index).size
+  end
+  
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/xml.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,71 @@
+module CodeRay
+module Encoders
+
+  # = XML Encoder
+  #
+  # Uses REXML. Very slow.
+  class XML < Encoder
+
+    include Streamable
+    register_for :xml
+
+    FILE_EXTENSION = 'xml'
+
+    require 'rexml/document'
+
+    DEFAULT_OPTIONS = {
+      :tab_width => 8,
+      :pretty => -1,
+      :transitive => false,
+    }
+
+  protected
+
+    def setup options
+      @doc = REXML::Document.new
+      @doc << REXML::XMLDecl.new
+      @tab_width = options[:tab_width]
+      @root = @node = @doc.add_element('coderay-tokens')
+    end
+
+    def finish options
+      @out = ''
+      @doc.write @out, options[:pretty], options[:transitive], true
+      @out
+    end
+    
+    def text_token text, kind
+      if kind == :space
+        token = @node
+      else
+        token = @node.add_element kind.to_s
+      end
+      text.scan(/(\x20+)|(\t+)|(\n)|[^\x20\t\n]+/) do |space, tab, nl|
+        case
+        when space
+          token << REXML::Text.new(space, true)
+        when tab
+          token << REXML::Text.new(tab, true)
+        when nl
+          token << REXML::Text.new(nl, true)
+        else
+          token << REXML::Text.new($&)
+        end
+      end
+    end
+
+    def open_token kind
+      @node = @node.add_element kind.to_s
+    end
+
+    def close_token kind
+      if @node == @root
+        raise 'no token to close!'
+      end
+      @node = @node.parent
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/yaml.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,22 @@
+module CodeRay
+module Encoders
+
+  # = YAML Encoder
+  #
+  # Slow.
+  class YAML < Encoder
+
+    register_for :yaml
+
+    FILE_EXTENSION = 'yaml'
+
+  protected
+    def compile tokens, options
+      require 'yaml'
+      @out = tokens.to_a.to_yaml
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/_map.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,12 @@
+module CodeRay
+module Encoders
+
+  map \
+    :loc => :lines_of_code,
+    :plain => :text,
+    :stats => :statistic,
+    :terminal => :term,
+    :tex => :latex
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/comment_filter.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,43 @@
+($:.unshift '../..'; require 'coderay') unless defined? CodeRay
+module CodeRay
+module Encoders
+  
+  load :token_class_filter
+  
+  class CommentFilter < TokenClassFilter
+    
+    register_for :comment_filter
+    
+    DEFAULT_OPTIONS = superclass::DEFAULT_OPTIONS.merge \
+      :exclude => [:comment]
+    
+  end
+  
+end
+end
+
+if $0 == __FILE__
+  $VERBOSE = true
+  $: << File.join(File.dirname(__FILE__), '..')
+  eval DATA.read, nil, $0, __LINE__ + 4
+end
+
+__END__
+require 'test/unit'
+
+class CommentFilterTest < Test::Unit::TestCase
+  
+  def test_filtering_comments
+    tokens = CodeRay.scan <<-RUBY, :ruby
+#!/usr/bin/env ruby
+# a minimal Ruby program
+puts "Hello world!"
+    RUBY
+    assert_equal <<-RUBY_FILTERED, tokens.comment_filter.text
+#!/usr/bin/env ruby
+
+puts "Hello world!"
+    RUBY_FILTERED
+  end
+  
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/count.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,21 @@
+module CodeRay
+module Encoders
+
+  class Count < Encoder
+
+    include Streamable
+    register_for :count
+
+    protected
+
+    def setup options
+      @out = 0
+    end
+
+    def token text, kind
+      @out += 1
+    end
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/debug.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,49 @@
+module CodeRay
+module Encoders
+
+  # = Debug Encoder
+  #
+  # Fast encoder producing simple debug output.
+  #
+  # It is readable and diff-able and is used for testing.
+  #
+  # You cannot fully restore the tokens information from the
+  # output, because consecutive :space tokens are merged.
+  # Use Tokens#dump for caching purposes.
+  class Debug < Encoder
+
+    include Streamable
+    register_for :debug
+
+    FILE_EXTENSION = 'raydebug'
+
+  protected
+    def text_token text, kind
+      if kind == :space
+        text
+      else
+        text = text.gsub(/[)\\]/, '\\\\\0')  # escape ) and \
+        "#{kind}(#{text})"
+      end
+    end
+
+    def open_token kind
+      "#{kind}<"
+    end
+
+    def close_token kind
+      ">"
+    end
+
+    def begin_line kind
+      "#{kind}["
+    end
+
+    def end_line kind
+      "]"
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/div.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,19 @@
+module CodeRay
+module Encoders
+
+  load :html
+
+  class Div < HTML
+
+    FILE_EXTENSION = 'div.html'
+
+    register_for :div
+
+    DEFAULT_OPTIONS = HTML::DEFAULT_OPTIONS.merge \
+      :css => :style,
+      :wrap => :div
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/filter.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,75 @@
+($:.unshift '../..'; require 'coderay') unless defined? CodeRay
+module CodeRay
+module Encoders
+  
+  class Filter < Encoder
+    
+    register_for :filter
+    
+  protected
+    def setup options
+      @out = Tokens.new
+    end
+    
+    def text_token text, kind
+      [text, kind] if include_text_token? text, kind
+    end
+    
+    def include_text_token? text, kind
+      true
+    end
+    
+    def block_token action, kind
+      [action, kind] if include_block_token? action, kind
+    end
+    
+    def include_block_token? action, kind
+      true
+    end
+    
+  end
+  
+end
+end
+
+if $0 == __FILE__
+  $VERBOSE = true
+  $: << File.join(File.dirname(__FILE__), '..')
+  eval DATA.read, nil, $0, __LINE__ + 4
+end
+
+__END__
+require 'test/unit'
+
+class FilterTest < Test::Unit::TestCase
+  
+  def test_creation
+    assert CodeRay::Encoders::Filter < CodeRay::Encoders::Encoder
+    filter = nil
+    assert_nothing_raised do
+      filter = CodeRay.encoder :filter
+    end
+    assert_kind_of CodeRay::Encoders::Encoder, filter
+  end
+  
+  def test_filtering_text_tokens
+    tokens = CodeRay::Tokens.new
+    10.times do |i|
+      tokens << [i.to_s, :index]
+    end
+    assert_equal tokens, CodeRay::Encoders::Filter.new.encode_tokens(tokens)
+    assert_equal tokens, tokens.filter
+  end
+  
+  def test_filtering_block_tokens
+    tokens = CodeRay::Tokens.new
+    10.times do |i|
+      tokens << [:open, :index]
+      tokens << [i.to_s, :content]
+      tokens << [:close, :index]
+    end
+    assert_equal tokens, CodeRay::Encoders::Filter.new.encode_tokens(tokens)
+    assert_equal tokens, tokens.filter
+  end
+  
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,309 @@
+require 'set'
+
+module CodeRay
+module Encoders
+
+  # = HTML Encoder
+  #
+  # This is CodeRay's most important highlighter:
+  # It provides save, fast XHTML generation and CSS support.
+  #
+  # == Usage
+  #
+  #  require 'coderay'
+  #  puts CodeRay.scan('Some /code/', :ruby).html  #-> a HTML page
+  #  puts CodeRay.scan('Some /code/', :ruby).html(:wrap => :span)
+  #  #-> <span class="CodeRay"><span class="co">Some</span> /code/</span>
+  #  puts CodeRay.scan('Some /code/', :ruby).span  #-> the same
+  #  
+  #  puts CodeRay.scan('Some code', :ruby).html(
+  #    :wrap => nil,
+  #    :line_numbers => :inline,
+  #    :css => :style
+  #  )
+  #  #-> <span class="no">1</span>  <span style="color:#036; font-weight:bold;">Some</span> code
+  #
+  # == Options
+  #
+  # === :tab_width
+  # Convert \t characters to +n+ spaces (a number.)
+  # Default: 8
+  #
+  # === :css
+  # How to include the styles; can be :class or :style.
+  #
+  # Default: :class
+  #
+  # === :wrap
+  # Wrap in :page, :div, :span or nil.
+  #
+  # You can also use Encoders::Div and Encoders::Span.
+  #
+  # Default: nil
+  #
+  # === :title
+  # 
+  # The title of the HTML page (works only when :wrap is set to :page.)
+  #
+  # Default: 'CodeRay output'
+  #
+  # === :line_numbers
+  # Include line numbers in :table, :inline, :list or nil (no line numbers)
+  #
+  # Default: nil
+  #
+  # === :line_number_start
+  # Where to start with line number counting.
+  #
+  # Default: 1
+  #
+  # === :bold_every
+  # Make every +n+-th number appear bold.
+  #
+  # Default: 10
+  #
+  # === :highlight_lines
+  # 
+  # Highlights certain line numbers.
+  # Can be any Enumerable, typically just an Array or Range, of numbers.
+  # 
+  # Bolding is deactivated when :highlight_lines is set. It only makes sense
+  # in combination with :line_numbers.
+  #
+  # Default: nil
+  #
+  # === :hint
+  # Include some information into the output using the title attribute.
+  # Can be :info (show token type on mouse-over), :info_long (with full path)
+  # or :debug (via inspect).
+  #
+  # Default: false
+  class HTML < Encoder
+
+    include Streamable
+    register_for :html
+
+    FILE_EXTENSION = 'html'
+
+    DEFAULT_OPTIONS = {
+      :tab_width => 8,
+
+      :css => :class,
+
+      :style => :cycnus,
+      :wrap => nil,
+      :title => 'CodeRay output',
+
+      :line_numbers => nil,
+      :line_number_start => 1,
+      :bold_every => 10,
+      :highlight_lines => nil,
+
+      :hint => false,
+    }
+
+    helper :output, :css
+
+    attr_reader :css
+
+  protected
+
+    HTML_ESCAPE = {  #:nodoc:
+      '&' => '&amp;',
+      '"' => '&quot;',
+      '>' => '&gt;',
+      '<' => '&lt;',
+    }
+
+    # This was to prevent illegal HTML.
+    # Strange chars should still be avoided in codes.
+    evil_chars = Array(0x00...0x20) - [?\n, ?\t, ?\s]
+    evil_chars.each { |i| HTML_ESCAPE[i.chr] = ' ' }
+    #ansi_chars = Array(0x7f..0xff)
+    #ansi_chars.each { |i| HTML_ESCAPE[i.chr] = '&#%d;' % i }
+    # \x9 (\t) and \xA (\n) not included
+    #HTML_ESCAPE_PATTERN = /[\t&"><\0-\x8\xB-\x1f\x7f-\xff]/
+    HTML_ESCAPE_PATTERN = /[\t"&><\0-\x8\xB-\x1f]/
+
+    TOKEN_KIND_TO_INFO = Hash.new { |h, kind|
+      h[kind] =
+        case kind
+        when :pre_constant
+          'Predefined constant'
+        else
+          kind.to_s.gsub(/_/, ' ').gsub(/\b\w/) { $&.capitalize }
+        end
+    }
+
+    TRANSPARENT_TOKEN_KINDS = [
+      :delimiter, :modifier, :content, :escape, :inline_delimiter,
+    ].to_set
+
+    # Generate a hint about the given +classes+ in a +hint+ style.
+    #
+    # +hint+ may be :info, :info_long or :debug.
+    def self.token_path_to_hint hint, classes
+      title =
+        case hint
+        when :info
+          TOKEN_KIND_TO_INFO[classes.first]
+        when :info_long
+          classes.reverse.map { |kind| TOKEN_KIND_TO_INFO[kind] }.join('/')
+        when :debug
+          classes.inspect
+        end
+      title ? " title=\"#{title}\"" : ''
+    end
+
+    def setup options
+      super
+
+      @HTML_ESCAPE = HTML_ESCAPE.dup
+      @HTML_ESCAPE["\t"] = ' ' * options[:tab_width]
+
+      @opened = [nil]
+      @css = CSS.new options[:style]
+
+      hint = options[:hint]
+      if hint and not [:debug, :info, :info_long].include? hint
+        raise ArgumentError, "Unknown value %p for :hint; \
+          expected :info, :debug, false, or nil." % hint
+      end
+
+      case options[:css]
+
+      when :class
+        @css_style = Hash.new do |h, k|
+          c = CodeRay::Tokens::ClassOfKind[k.first]
+          if c == :NO_HIGHLIGHT and not hint
+            h[k.dup] = false
+          else
+            title = if hint
+              HTML.token_path_to_hint(hint, k[1..-1] << k.first)
+            else
+              ''
+            end
+            if c == :NO_HIGHLIGHT
+              h[k.dup] = '<span%s>' % [title]
+            else
+              h[k.dup] = '<span%s class="%s">' % [title, c]
+            end
+          end
+        end
+
+      when :style
+        @css_style = Hash.new do |h, k|
+          if k.is_a? ::Array
+            styles = k.dup
+          else
+            styles = [k]
+          end
+          type = styles.first
+          classes = styles.map { |c| Tokens::ClassOfKind[c] }
+          if classes.first == :NO_HIGHLIGHT and not hint
+            h[k] = false
+          else
+            styles.shift if TRANSPARENT_TOKEN_KINDS.include? styles.first
+            title = HTML.token_path_to_hint hint, styles
+            style = @css[*classes]
+            h[k] =
+              if style
+                '<span%s style="%s">' % [title, style]
+              else
+                false
+              end
+          end
+        end
+
+      else
+        raise ArgumentError, "Unknown value %p for :css." % options[:css]
+
+      end
+    end
+
+    def finish options
+      not_needed = @opened.shift
+      @out << '</span>' * @opened.size
+      unless @opened.empty?
+        warn '%d tokens still open: %p' % [@opened.size, @opened]
+      end
+
+      @out.extend Output
+      @out.css = @css
+      @out.numerize! options[:line_numbers], options
+      @out.wrap! options[:wrap]
+      @out.apply_title! options[:title]
+
+      super
+    end
+
+    def token text, type = :plain
+      case text
+      
+      when nil
+        # raise 'Token with nil as text was given: %p' % [[text, type]] 
+      
+      when String
+        if text =~ /#{HTML_ESCAPE_PATTERN}/o
+          text = text.gsub(/#{HTML_ESCAPE_PATTERN}/o) { |m| @HTML_ESCAPE[m] }
+        end
+        @opened[0] = type
+        if text != "\n" && style = @css_style[@opened]
+          @out << style << text << '</span>'
+        else
+          @out << text
+        end
+        
+      
+      # token groups, eg. strings
+      when :open
+        @opened[0] = type
+        @out << (@css_style[@opened] || '<span>')
+        @opened << type
+      when :close
+        if @opened.empty?
+          # nothing to close
+        else
+          if $CODERAY_DEBUG and (@opened.size == 1 or @opened.last != type)
+            raise 'Malformed token stream: Trying to close a token (%p) \
+              that is not open. Open are: %p.' % [type, @opened[1..-1]]
+          end
+          @out << '</span>'
+          @opened.pop
+        end
+      
+      # whole lines to be highlighted, eg. a deleted line in a diff
+      when :begin_line
+        @opened[0] = type
+        if style = @css_style[@opened]
+          if style['class="']
+            @out << style.sub('class="', 'class="line ')
+          else
+            @out << style.sub('>', ' class="line">')
+          end
+        else
+          @out << '<span class="line">'
+        end
+        @opened << type
+      when :end_line
+        if @opened.empty?
+          # nothing to close
+        else
+          if $CODERAY_DEBUG and (@opened.size == 1 or @opened.last != type)
+            raise 'Malformed token stream: Trying to close a line (%p) \
+              that is not open. Open are: %p.' % [type, @opened[1..-1]]
+          end
+          @out << '</span>'
+          @opened.pop
+        end
+      
+      else
+        raise 'unknown token kind: %p' % [text]
+        
+      end
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,23 @@
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html
+END
+output.rb
+K 25
+svn:wc:ra_dav:version-url
+V 86
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/output.rb
+END
+numerization.rb
+K 25
+svn:wc:ra_dav:version-url
+V 92
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/numerization.rb
+END
+css.rb
+K 25
+svn:wc:ra_dav:version-url
+V 83
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/css.rb
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,130 @@
+10
+
+dir
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html
+http://redmine.rubyforge.org/svn
+
+
+
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+output.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+8d0cea50dc9e6743bd10a8e0c6f1db17
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5271
+
+numerization.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+a5e204ed674c970d0aea6d1d9dbfd18e
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4219
+
+css.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+aa931c09ed5f16abfed3b7c99f0f684d
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1626
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/.svn/text-base/css.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,70 @@
+module CodeRay
+module Encoders
+
+  class HTML
+    class CSS
+
+      attr :stylesheet
+
+      def CSS.load_stylesheet style = nil
+        CodeRay::Styles[style]
+      end
+
+      def initialize style = :default
+        @classes = Hash.new
+        style = CSS.load_stylesheet style
+        @stylesheet = [
+          style::CSS_MAIN_STYLES,
+          style::TOKEN_COLORS.gsub(/^(?!$)/, '.CodeRay ')
+        ].join("\n")
+        parse style::TOKEN_COLORS
+      end
+
+      def [] *styles
+        cl = @classes[styles.first]
+        return '' unless cl
+        style = ''
+        1.upto(styles.size) do |offset|
+          break if style = cl[styles[offset .. -1]]
+        end
+        # warn 'Style not found: %p' % [styles] if style.empty?
+        return style
+      end
+
+    private
+
+      CSS_CLASS_PATTERN = /
+        (                    # $1 = selectors
+          (?:
+            (?: \s* \. [-\w]+ )+
+            \s* ,?
+          )+
+        )
+        \s* \{ \s*
+        ( [^\}]+ )?          # $2 = style
+        \s* \} \s*
+      |
+        ( . )                # $3 = error
+      /mx
+      def parse stylesheet
+        stylesheet.scan CSS_CLASS_PATTERN do |selectors, style, error|
+          raise "CSS parse error: '#{error.inspect}' not recognized" if error
+          for selector in selectors.split(',')
+            classes = selector.scan(/[-\w]+/)
+            cl = classes.pop
+            @classes[cl] ||= Hash.new
+            @classes[cl][classes] = style.to_s.strip.delete(' ').chomp(';')
+          end
+        end
+      end
+
+    end
+  end
+
+end
+end
+
+if $0 == __FILE__
+  require 'pp'
+  pp CodeRay::Encoders::HTML::CSS.new
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/.svn/text-base/numerization.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,133 @@
+module CodeRay
+module Encoders
+
+  class HTML
+
+    module Output
+
+      def numerize *args
+        clone.numerize!(*args)
+      end
+
+=begin      NUMERIZABLE_WRAPPINGS = {
+        :table => [:div, :page, nil],
+        :inline => :all,
+        :list => [:div, :page, nil]
+      }
+      NUMERIZABLE_WRAPPINGS.default = :all
+=end
+      def numerize! mode = :table, options = {}
+        return self unless mode
+
+        options = DEFAULT_OPTIONS.merge options
+
+        start = options[:line_number_start]
+        unless start.is_a? Integer
+          raise ArgumentError, "Invalid value %p for :line_number_start; Integer expected." % start
+        end
+
+        #allowed_wrappings = NUMERIZABLE_WRAPPINGS[mode]
+        #unless allowed_wrappings == :all or allowed_wrappings.include? options[:wrap]
+        #  raise ArgumentError, "Can't numerize, :wrap must be in %p, but is %p" % [NUMERIZABLE_WRAPPINGS, options[:wrap]]
+        #end
+
+        bold_every = options[:bold_every]
+        highlight_lines = options[:highlight_lines]
+        bolding =
+          if bold_every == false && highlight_lines == nil
+            proc { |line| line.to_s }
+          elsif highlight_lines.is_a? Enumerable
+            highlight_lines = highlight_lines.to_set
+            proc do |line|
+              if highlight_lines.include? line
+                "<strong class=\"highlighted\">#{line}</strong>"  # highlighted line numbers in bold
+              else
+                line.to_s
+              end
+            end
+          elsif bold_every.is_a? Integer
+            raise ArgumentError, ":bolding can't be 0." if bold_every == 0
+            proc do |line|
+              if line % bold_every == 0
+                "<strong>#{line}</strong>"  # every bold_every-th number in bold
+              else
+                line.to_s
+              end
+            end
+          else
+            raise ArgumentError, 'Invalid value %p for :bolding; false or Integer expected.' % bold_every
+          end
+
+        case mode
+        when :inline
+          max_width = (start + line_count).to_s.size
+          line_number = start
+          gsub!(/^/) do
+            line_number_text = bolding.call line_number
+            indent = ' ' * (max_width - line_number.to_s.size)  # TODO: Optimize (10^x)
+            res = "<span class=\"no\">#{indent}#{line_number_text}</span> "
+            line_number += 1
+            res
+          end
+
+        when :table
+          # This is really ugly.
+          # Because even monospace fonts seem to have different heights when bold,
+          # I make the newline bold, both in the code and the line numbers.
+          # FIXME Still not working perfect for Mr. Internet Exploder
+          line_numbers = (start ... start + line_count).to_a.map(&bolding).join("\n")
+          line_numbers << "\n"  # also for Mr. MS Internet Exploder :-/
+          line_numbers.gsub!(/\n/) { "<tt>\n</tt>" }
+
+          line_numbers_table_tpl = TABLE.apply('LINE_NUMBERS', line_numbers)
+          gsub!("</div>\n", '</div>')
+          gsub!("\n", "<tt>\n</tt>")
+          wrap_in! line_numbers_table_tpl
+          @wrapped_in = :div
+
+        when :list
+          opened_tags = []
+          gsub!(/^.*$\n?/) do |line|
+            line.chomp!
+
+            open = opened_tags.join
+            line.scan(%r!<(/)?span[^>]*>?!) do |close,|
+              if close
+                opened_tags.pop
+              else
+                opened_tags << $&
+              end
+            end
+            close = '</span>' * opened_tags.size
+
+            "<li>#{open}#{line}#{close}</li>\n"
+          end
+          chomp!("\n")
+          wrap_in! LIST
+          @wrapped_in = :div
+
+        else
+          raise ArgumentError, 'Unknown value %p for mode: expected one of %p' %
+            [mode, [:table, :list, :inline]]
+        end
+
+        self
+      end
+
+      def line_count
+        line_count = count("\n")
+        position_of_last_newline = rindex(?\n)
+        if position_of_last_newline
+          after_last_newline = self[position_of_last_newline + 1 .. -1]
+          ends_with_newline = after_last_newline[/\A(?:<\/span>)*\z/]
+          line_count += 1 if not ends_with_newline
+        end
+        line_count
+      end
+
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/.svn/text-base/output.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,206 @@
+module CodeRay
+module Encoders
+
+  class HTML
+
+    # This module is included in the output String from thew HTML Encoder.
+    #
+    # It provides methods like wrap, div, page etc.
+    #
+    # Remember to use #clone instead of #dup to keep the modules the object was
+    # extended with.
+    #
+    # TODO: more doc.
+    module Output
+
+      require 'coderay/encoders/html/numerization.rb'
+
+      attr_accessor :css
+
+      class << self
+
+        # This makes Output look like a class.
+        #
+        # Example:
+        #
+        #  a = Output.new '<span class="co">Code</span>'
+        #  a.wrap! :page
+        def new string, css = CSS.new, element = nil
+          output = string.clone.extend self
+          output.wrapped_in = element
+          output.css = css
+          output
+        end
+
+        # Raises an exception if an object that doesn't respond to to_str is extended by Output,
+        # to prevent users from misuse. Use Module#remove_method to disable.
+        def extended o
+          warn "The Output module is intended to extend instances of String, not #{o.class}." unless o.respond_to? :to_str
+        end
+
+        def make_stylesheet css, in_tag = false
+          sheet = css.stylesheet
+          sheet = <<-CSS if in_tag
+<style type="text/css">
+#{sheet}
+</style>
+          CSS
+          sheet
+        end
+
+        def page_template_for_css css
+          sheet = make_stylesheet css
+          PAGE.apply 'CSS', sheet
+        end
+
+        # Define a new wrapper. This is meta programming.
+        def wrapper *wrappers
+          wrappers.each do |wrapper|
+            define_method wrapper do |*args|
+              wrap wrapper, *args
+            end
+            define_method "#{wrapper}!".to_sym do |*args|
+              wrap! wrapper, *args
+            end
+          end
+        end
+
+      end
+
+      wrapper :div, :span, :page
+
+      def wrapped_in? element
+        wrapped_in == element
+      end
+
+      def wrapped_in
+        @wrapped_in ||= nil
+      end
+      attr_writer :wrapped_in
+
+      def wrap_in template
+        clone.wrap_in! template
+      end
+
+      def wrap_in! template
+        Template.wrap! self, template, 'CONTENT'
+        self
+      end
+      
+      def apply_title! title
+        self.sub!(/(<title>)(<\/title>)/) { $1 + title + $2 }
+        self
+      end
+
+      def wrap! element, *args
+        return self if not element or element == wrapped_in
+        case element
+        when :div
+          raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? nil
+          wrap_in! DIV
+        when :span
+          raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? nil
+          wrap_in! SPAN
+        when :page
+          wrap! :div if wrapped_in? nil
+          raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? :div
+          wrap_in! Output.page_template_for_css(@css)
+          if args.first.is_a?(Hash) && title = args.first[:title]
+            apply_title! title
+          end
+          self
+        when nil
+          return self
+        else
+          raise "Unknown value %p for :wrap" % element
+        end
+        @wrapped_in = element
+        self
+      end
+
+      def wrap *args
+        clone.wrap!(*args)
+      end
+
+      def stylesheet in_tag = false
+        Output.make_stylesheet @css, in_tag
+      end
+
+      class Template < String
+
+        def self.wrap! str, template, target
+          target = Regexp.new(Regexp.escape("<%#{target}%>"))
+          if template =~ target
+            str[0,0] = $`
+            str << $'
+          else
+            raise "Template target <%%%p%%> not found" % target
+          end
+        end
+
+        def apply target, replacement
+          target = Regexp.new(Regexp.escape("<%#{target}%>"))
+          if self =~ target
+            Template.new($` + replacement + $')
+          else
+            raise "Template target <%%%p%%> not found" % target
+          end
+        end
+
+        module Simple
+          def ` str  #` <-- for stupid editors
+            Template.new str
+          end
+        end
+      end
+
+      extend Template::Simple
+
+#-- don't include the templates in docu
+
+      SPAN = `<span class="CodeRay"><%CONTENT%></span>`
+
+      DIV = <<-`DIV`
+<div class="CodeRay">
+  <div class="code"><pre><%CONTENT%></pre></div>
+</div>
+      DIV
+
+      TABLE = <<-`TABLE`
+<table class="CodeRay"><tr>
+  <td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"><pre><%LINE_NUMBERS%></pre></td>
+  <td class="code"><pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"><%CONTENT%></pre></td>
+</tr></table>
+      TABLE
+      # title="double click to expand"
+
+      LIST = <<-`LIST`
+<ol class="CodeRay">
+<%CONTENT%>
+</ol>
+      LIST
+
+      PAGE = <<-`PAGE`
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="de">
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+  <title></title>
+  <style type="text/css">
+<%CSS%>
+  </style>
+</head>
+<body style="background-color: white;">
+
+<%CONTENT%>
+</body>
+</html>
+      PAGE
+
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/css.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,70 @@
+module CodeRay
+module Encoders
+
+  class HTML
+    class CSS
+
+      attr :stylesheet
+
+      def CSS.load_stylesheet style = nil
+        CodeRay::Styles[style]
+      end
+
+      def initialize style = :default
+        @classes = Hash.new
+        style = CSS.load_stylesheet style
+        @stylesheet = [
+          style::CSS_MAIN_STYLES,
+          style::TOKEN_COLORS.gsub(/^(?!$)/, '.CodeRay ')
+        ].join("\n")
+        parse style::TOKEN_COLORS
+      end
+
+      def [] *styles
+        cl = @classes[styles.first]
+        return '' unless cl
+        style = ''
+        1.upto(styles.size) do |offset|
+          break if style = cl[styles[offset .. -1]]
+        end
+        # warn 'Style not found: %p' % [styles] if style.empty?
+        return style
+      end
+
+    private
+
+      CSS_CLASS_PATTERN = /
+        (                    # $1 = selectors
+          (?:
+            (?: \s* \. [-\w]+ )+
+            \s* ,?
+          )+
+        )
+        \s* \{ \s*
+        ( [^\}]+ )?          # $2 = style
+        \s* \} \s*
+      |
+        ( . )                # $3 = error
+      /mx
+      def parse stylesheet
+        stylesheet.scan CSS_CLASS_PATTERN do |selectors, style, error|
+          raise "CSS parse error: '#{error.inspect}' not recognized" if error
+          for selector in selectors.split(',')
+            classes = selector.scan(/[-\w]+/)
+            cl = classes.pop
+            @classes[cl] ||= Hash.new
+            @classes[cl][classes] = style.to_s.strip.delete(' ').chomp(';')
+          end
+        end
+      end
+
+    end
+  end
+
+end
+end
+
+if $0 == __FILE__
+  require 'pp'
+  pp CodeRay::Encoders::HTML::CSS.new
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/numerization.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,133 @@
+module CodeRay
+module Encoders
+
+  class HTML
+
+    module Output
+
+      def numerize *args
+        clone.numerize!(*args)
+      end
+
+=begin      NUMERIZABLE_WRAPPINGS = {
+        :table => [:div, :page, nil],
+        :inline => :all,
+        :list => [:div, :page, nil]
+      }
+      NUMERIZABLE_WRAPPINGS.default = :all
+=end
+      def numerize! mode = :table, options = {}
+        return self unless mode
+
+        options = DEFAULT_OPTIONS.merge options
+
+        start = options[:line_number_start]
+        unless start.is_a? Integer
+          raise ArgumentError, "Invalid value %p for :line_number_start; Integer expected." % start
+        end
+
+        #allowed_wrappings = NUMERIZABLE_WRAPPINGS[mode]
+        #unless allowed_wrappings == :all or allowed_wrappings.include? options[:wrap]
+        #  raise ArgumentError, "Can't numerize, :wrap must be in %p, but is %p" % [NUMERIZABLE_WRAPPINGS, options[:wrap]]
+        #end
+
+        bold_every = options[:bold_every]
+        highlight_lines = options[:highlight_lines]
+        bolding =
+          if bold_every == false && highlight_lines == nil
+            proc { |line| line.to_s }
+          elsif highlight_lines.is_a? Enumerable
+            highlight_lines = highlight_lines.to_set
+            proc do |line|
+              if highlight_lines.include? line
+                "<strong class=\"highlighted\">#{line}</strong>"  # highlighted line numbers in bold
+              else
+                line.to_s
+              end
+            end
+          elsif bold_every.is_a? Integer
+            raise ArgumentError, ":bolding can't be 0." if bold_every == 0
+            proc do |line|
+              if line % bold_every == 0
+                "<strong>#{line}</strong>"  # every bold_every-th number in bold
+              else
+                line.to_s
+              end
+            end
+          else
+            raise ArgumentError, 'Invalid value %p for :bolding; false or Integer expected.' % bold_every
+          end
+
+        case mode
+        when :inline
+          max_width = (start + line_count).to_s.size
+          line_number = start
+          gsub!(/^/) do
+            line_number_text = bolding.call line_number
+            indent = ' ' * (max_width - line_number.to_s.size)  # TODO: Optimize (10^x)
+            res = "<span class=\"no\">#{indent}#{line_number_text}</span> "
+            line_number += 1
+            res
+          end
+
+        when :table
+          # This is really ugly.
+          # Because even monospace fonts seem to have different heights when bold,
+          # I make the newline bold, both in the code and the line numbers.
+          # FIXME Still not working perfect for Mr. Internet Exploder
+          line_numbers = (start ... start + line_count).to_a.map(&bolding).join("\n")
+          line_numbers << "\n"  # also for Mr. MS Internet Exploder :-/
+          line_numbers.gsub!(/\n/) { "<tt>\n</tt>" }
+
+          line_numbers_table_tpl = TABLE.apply('LINE_NUMBERS', line_numbers)
+          gsub!("</div>\n", '</div>')
+          gsub!("\n", "<tt>\n</tt>")
+          wrap_in! line_numbers_table_tpl
+          @wrapped_in = :div
+
+        when :list
+          opened_tags = []
+          gsub!(/^.*$\n?/) do |line|
+            line.chomp!
+
+            open = opened_tags.join
+            line.scan(%r!<(/)?span[^>]*>?!) do |close,|
+              if close
+                opened_tags.pop
+              else
+                opened_tags << $&
+              end
+            end
+            close = '</span>' * opened_tags.size
+
+            "<li>#{open}#{line}#{close}</li>\n"
+          end
+          chomp!("\n")
+          wrap_in! LIST
+          @wrapped_in = :div
+
+        else
+          raise ArgumentError, 'Unknown value %p for mode: expected one of %p' %
+            [mode, [:table, :list, :inline]]
+        end
+
+        self
+      end
+
+      def line_count
+        line_count = count("\n")
+        position_of_last_newline = rindex(?\n)
+        if position_of_last_newline
+          after_last_newline = self[position_of_last_newline + 1 .. -1]
+          ends_with_newline = after_last_newline[/\A(?:<\/span>)*\z/]
+          line_count += 1 if not ends_with_newline
+        end
+        line_count
+      end
+
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/html/output.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,206 @@
+module CodeRay
+module Encoders
+
+  class HTML
+
+    # This module is included in the output String from thew HTML Encoder.
+    #
+    # It provides methods like wrap, div, page etc.
+    #
+    # Remember to use #clone instead of #dup to keep the modules the object was
+    # extended with.
+    #
+    # TODO: more doc.
+    module Output
+
+      require 'coderay/encoders/html/numerization.rb'
+
+      attr_accessor :css
+
+      class << self
+
+        # This makes Output look like a class.
+        #
+        # Example:
+        #
+        #  a = Output.new '<span class="co">Code</span>'
+        #  a.wrap! :page
+        def new string, css = CSS.new, element = nil
+          output = string.clone.extend self
+          output.wrapped_in = element
+          output.css = css
+          output
+        end
+
+        # Raises an exception if an object that doesn't respond to to_str is extended by Output,
+        # to prevent users from misuse. Use Module#remove_method to disable.
+        def extended o
+          warn "The Output module is intended to extend instances of String, not #{o.class}." unless o.respond_to? :to_str
+        end
+
+        def make_stylesheet css, in_tag = false
+          sheet = css.stylesheet
+          sheet = <<-CSS if in_tag
+<style type="text/css">
+#{sheet}
+</style>
+          CSS
+          sheet
+        end
+
+        def page_template_for_css css
+          sheet = make_stylesheet css
+          PAGE.apply 'CSS', sheet
+        end
+
+        # Define a new wrapper. This is meta programming.
+        def wrapper *wrappers
+          wrappers.each do |wrapper|
+            define_method wrapper do |*args|
+              wrap wrapper, *args
+            end
+            define_method "#{wrapper}!".to_sym do |*args|
+              wrap! wrapper, *args
+            end
+          end
+        end
+
+      end
+
+      wrapper :div, :span, :page
+
+      def wrapped_in? element
+        wrapped_in == element
+      end
+
+      def wrapped_in
+        @wrapped_in ||= nil
+      end
+      attr_writer :wrapped_in
+
+      def wrap_in template
+        clone.wrap_in! template
+      end
+
+      def wrap_in! template
+        Template.wrap! self, template, 'CONTENT'
+        self
+      end
+      
+      def apply_title! title
+        self.sub!(/(<title>)(<\/title>)/) { $1 + title + $2 }
+        self
+      end
+
+      def wrap! element, *args
+        return self if not element or element == wrapped_in
+        case element
+        when :div
+          raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? nil
+          wrap_in! DIV
+        when :span
+          raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? nil
+          wrap_in! SPAN
+        when :page
+          wrap! :div if wrapped_in? nil
+          raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? :div
+          wrap_in! Output.page_template_for_css(@css)
+          if args.first.is_a?(Hash) && title = args.first[:title]
+            apply_title! title
+          end
+          self
+        when nil
+          return self
+        else
+          raise "Unknown value %p for :wrap" % element
+        end
+        @wrapped_in = element
+        self
+      end
+
+      def wrap *args
+        clone.wrap!(*args)
+      end
+
+      def stylesheet in_tag = false
+        Output.make_stylesheet @css, in_tag
+      end
+
+      class Template < String
+
+        def self.wrap! str, template, target
+          target = Regexp.new(Regexp.escape("<%#{target}%>"))
+          if template =~ target
+            str[0,0] = $`
+            str << $'
+          else
+            raise "Template target <%%%p%%> not found" % target
+          end
+        end
+
+        def apply target, replacement
+          target = Regexp.new(Regexp.escape("<%#{target}%>"))
+          if self =~ target
+            Template.new($` + replacement + $')
+          else
+            raise "Template target <%%%p%%> not found" % target
+          end
+        end
+
+        module Simple
+          def ` str  #` <-- for stupid editors
+            Template.new str
+          end
+        end
+      end
+
+      extend Template::Simple
+
+#-- don't include the templates in docu
+
+      SPAN = `<span class="CodeRay"><%CONTENT%></span>`
+
+      DIV = <<-`DIV`
+<div class="CodeRay">
+  <div class="code"><pre><%CONTENT%></pre></div>
+</div>
+      DIV
+
+      TABLE = <<-`TABLE`
+<table class="CodeRay"><tr>
+  <td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"><pre><%LINE_NUMBERS%></pre></td>
+  <td class="code"><pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"><%CONTENT%></pre></td>
+</tr></table>
+      TABLE
+      # title="double click to expand"
+
+      LIST = <<-`LIST`
+<ol class="CodeRay">
+<%CONTENT%>
+</ol>
+      LIST
+
+      PAGE = <<-`PAGE`
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="de">
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+  <title></title>
+  <style type="text/css">
+<%CSS%>
+  </style>
+</head>
+<body style="background-color: white;">
+
+<%CONTENT%>
+</body>
+</html>
+      PAGE
+
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/json.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,69 @@
+($:.unshift '../..'; require 'coderay') unless defined? CodeRay
+module CodeRay
+module Encoders
+  
+  # = JSON Encoder
+  class JSON < Encoder
+    
+    register_for :json
+    FILE_EXTENSION = 'json'
+    
+  protected
+    def setup options
+      begin
+        require 'json'
+      rescue LoadError
+        require 'rubygems'
+        require 'json'
+      end
+      @out = []
+    end
+    
+    def text_token text, kind
+      { :type => 'text', :text => text, :kind => kind }
+    end
+    
+    def block_token action, kind
+      { :type => 'block', :action => action, :kind => kind }
+    end
+    
+    def finish options
+      @out.to_json
+    end
+    
+  end
+  
+end
+end
+
+if $0 == __FILE__
+  $VERBOSE = true
+  $: << File.join(File.dirname(__FILE__), '..')
+  eval DATA.read, nil, $0, __LINE__ + 4
+end
+
+__END__
+require 'test/unit'
+$:.delete '.'
+require 'rubygems' if RUBY_VERSION < '1.9'
+
+class JSONEncoderTest < Test::Unit::TestCase
+  
+  def test_json_output
+    tokens = CodeRay.scan <<-RUBY, :ruby
+puts "Hello world!"
+    RUBY
+    require 'json'
+    assert_equal [
+      {"type"=>"text", "text"=>"puts", "kind"=>"ident"},
+      {"type"=>"text", "text"=>" ", "kind"=>"space"},
+      {"type"=>"block", "action"=>"open", "kind"=>"string"},
+      {"type"=>"text", "text"=>"\"", "kind"=>"delimiter"},
+      {"type"=>"text", "text"=>"Hello world!", "kind"=>"content"},
+      {"type"=>"text", "text"=>"\"", "kind"=>"delimiter"},
+      {"type"=>"block", "action"=>"close", "kind"=>"string"},
+      {"type"=>"text", "text"=>"\n", "kind"=>"space"}
+    ], JSON.load(tokens.json)
+  end
+  
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/lines_of_code.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,90 @@
+($:.unshift '../..'; require 'coderay') unless defined? CodeRay
+module CodeRay
+module Encoders
+  
+  # Counts the LoC (Lines of Code). Returns an Integer >= 0.
+  # 
+  # Alias: :loc
+  # 
+  # Everything that is not comment, markup, doctype/shebang, or an empty line,
+  # is considered to be code.
+  # 
+  # For example,
+  # * HTML files not containing JavaScript have 0 LoC
+  # * in a Java class without comments, LoC is the number of non-empty lines
+  # 
+  # A Scanner class should define the token kinds that are not code in the
+  # KINDS_NOT_LOC constant, which defaults to [:comment, :doctype].
+  class LinesOfCode < Encoder
+    
+    register_for :lines_of_code
+    
+    NON_EMPTY_LINE = /^\s*\S.*$/
+    
+    def compile tokens, options
+      if scanner = tokens.scanner
+        kinds_not_loc = scanner.class::KINDS_NOT_LOC
+      else
+        warn ArgumentError, 'Tokens have no scanner.' if $VERBOSE
+        kinds_not_loc = CodeRay::Scanners::Scanner::KINDS_NOT_LOC
+      end
+      code = tokens.token_class_filter :exclude => kinds_not_loc
+      @loc = code.text.scan(NON_EMPTY_LINE).size
+    end
+    
+    def finish options
+      @loc
+    end
+    
+  end
+  
+end
+end
+
+if $0 == __FILE__
+  $VERBOSE = true
+  $: << File.join(File.dirname(__FILE__), '..')
+  eval DATA.read, nil, $0, __LINE__ + 4
+end
+
+__END__
+require 'test/unit'
+
+class LinesOfCodeTest < Test::Unit::TestCase
+  
+  def test_creation
+    assert CodeRay::Encoders::LinesOfCode < CodeRay::Encoders::Encoder
+    filter = nil
+    assert_nothing_raised do
+      filter = CodeRay.encoder :loc
+    end
+    assert_kind_of CodeRay::Encoders::LinesOfCode, filter
+    assert_nothing_raised do
+      filter = CodeRay.encoder :lines_of_code
+    end
+    assert_kind_of CodeRay::Encoders::LinesOfCode, filter
+  end
+  
+  def test_lines_of_code
+    tokens = CodeRay.scan <<-RUBY, :ruby
+#!/usr/bin/env ruby
+
+# a minimal Ruby program
+puts "Hello world!"
+    RUBY
+    assert_equal 1, CodeRay::Encoders::LinesOfCode.new.encode_tokens(tokens)
+    assert_equal 1, tokens.lines_of_code
+    assert_equal 1, tokens.loc
+  end
+  
+  def test_filtering_block_tokens
+    tokens = CodeRay::Tokens.new
+    tokens << ["Hello\n", :world]
+    tokens << ["Hello\n", :space]
+    tokens << ["Hello\n", :comment]
+    assert_equal 2, CodeRay::Encoders::LinesOfCode.new.encode_tokens(tokens)
+    assert_equal 2, tokens.lines_of_code
+    assert_equal 2, tokens.loc
+  end
+  
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/null.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,26 @@
+module CodeRay
+module Encoders
+
+  # = Null Encoder
+  #
+  # Does nothing and returns an empty string.
+  class Null < Encoder
+
+    include Streamable
+    register_for :null
+
+    # Defined for faster processing
+    def to_proc
+      proc {}
+    end
+
+  protected
+
+    def token(*)
+      # do nothing
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/page.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,20 @@
+module CodeRay
+module Encoders
+
+  load :html
+
+  class Page < HTML
+
+    FILE_EXTENSION = 'html'
+
+    register_for :page
+
+    DEFAULT_OPTIONS = HTML::DEFAULT_OPTIONS.merge \
+      :css => :class,
+      :wrap => :page,
+      :line_numbers => :table
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/span.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,19 @@
+module CodeRay
+module Encoders
+
+  load :html
+
+  class Span < HTML
+
+    FILE_EXTENSION = 'span.html'
+
+    register_for :span
+
+    DEFAULT_OPTIONS = HTML::DEFAULT_OPTIONS.merge \
+      :css => :style,
+      :wrap => :span
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/statistic.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,77 @@
+module CodeRay
+module Encoders
+
+  # Makes a statistic for the given tokens.
+  class Statistic < Encoder
+
+    include Streamable
+    register_for :stats, :statistic
+
+    attr_reader :type_stats, :real_token_count
+
+  protected
+
+    TypeStats = Struct.new :count, :size
+
+    def setup options
+      @type_stats = Hash.new { |h, k| h[k] = TypeStats.new 0, 0 }
+      @real_token_count = 0
+    end
+
+    def generate tokens, options
+      @tokens = tokens
+      super
+    end
+
+    def text_token text, kind
+      @real_token_count += 1 unless kind == :space
+      @type_stats[kind].count += 1
+      @type_stats[kind].size += text.size
+      @type_stats['TOTAL'].size += text.size
+      @type_stats['TOTAL'].count += 1
+    end
+
+    # TODO Hierarchy handling
+    def block_token action, kind
+      @type_stats['TOTAL'].count += 1
+      @type_stats['open/close'].count += 1
+    end
+
+    STATS = <<-STATS
+
+Code Statistics
+
+Tokens            %8d
+  Non-Whitespace  %8d
+Bytes Total       %8d
+
+Token Types (%d):
+  type                     count     ratio    size (average)
+-------------------------------------------------------------
+%s
+      STATS
+# space                    12007   33.81 %     1.7
+    TOKEN_TYPES_ROW = <<-TKR
+  %-20s  %8d  %6.2f %%   %5.1f
+      TKR
+
+    def finish options
+      all = @type_stats['TOTAL']
+      all_count, all_size = all.count, all.size
+      @type_stats.each do |type, stat|
+        stat.size /= stat.count.to_f
+      end
+      types_stats = @type_stats.sort_by { |k, v| [-v.count, k.to_s] }.map do |k, v|
+        TOKEN_TYPES_ROW % [k, v.count, 100.0 * v.count / all_count, v.size]
+      end.join
+      STATS % [
+        all_count, @real_token_count, all_size,
+        @type_stats.delete_if { |k, v| k.is_a? String }.size,
+        types_stats
+      ]
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/term.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,158 @@
+# encoders/term.rb
+# By Rob Aldred (http://robaldred.co.uk)
+# Based on idea by Nathan Weizenbaum (http://nex-3.com)
+# MIT License (http://www.opensource.org/licenses/mit-license.php)
+#
+# A CodeRay encoder that outputs code highlighted for a color terminal.
+# Check out http://robaldred.co.uk
+
+module CodeRay
+  module Encoders
+    class Term < Encoder
+      register_for :term
+
+      TOKEN_COLORS = {
+        :annotation => '35',
+        :attribute_name => '33',
+        :attribute_name_fat => '33',
+        :attribute_value => '31',
+        :attribute_value_fat => '31',
+        :bin => '1;35',
+        :char => {:self => '36', :delimiter => '34'},
+        :class => '1;35',
+        :class_variable => '36',
+        :color => '32',
+        :comment => '37',
+        :complex => '34',
+        :constant => ['34', '4'],
+        :decoration => '35',
+        :definition => '1;32',
+        :directive => ['32', '4'],
+        :doc => '46',
+        :doctype => '1;30',
+        :doc_string => ['31', '4'],
+        :entity => '33',
+        :error => ['1;33', '41'],
+        :exception => '1;31',
+        :float => '1;35',
+        :function => '1;34',
+        :global_variable => '42',
+        :hex => '1;36',
+        :important => '1;31',
+        :include => '33',
+        :integer => '1;34',
+        :interpreted => '1;35',
+        :key => '35',
+        :label => '1;4',
+        :local_variable => '33',
+        :oct => '1;35',
+        :operator_name => '1;29',
+        :pre_constant => '1;36',
+        :pre_type => '1;30',
+        :predefined => ['4', '1;34'],
+        :preprocessor => '36',
+        :pseudo_class => '34',
+        :regexp => {
+          :content => '31',
+          :delimiter => '1;29',
+          :modifier => '35',
+          :function => '1;29'
+        },
+        :reserved => '1;31',
+        :shell => {
+          :self => '42',
+          :content => '1;29',
+          :delimiter => '37',
+        },
+        :string => {
+          :self => '32',
+          :modifier => '1;32',
+          :escape => '1;36',
+          :delimiter => '1;32',
+        },
+        :symbol => '1;32',
+        :tag => '34',
+        :tag_fat => '1;34',
+        :tag_special => ['34', '4'],
+        :type => '1;34',
+        :value => '36',
+        :variable => '34',
+        :insert => '42',
+        :delete => '41',
+        :change => '44',
+        :head => '45',
+      }
+      TOKEN_COLORS[:keyword] = TOKEN_COLORS[:reserved]
+      TOKEN_COLORS[:method] = TOKEN_COLORS[:function]
+      TOKEN_COLORS[:imaginary] = TOKEN_COLORS[:complex]
+      TOKEN_COLORS[:open] = TOKEN_COLORS[:close] = TOKEN_COLORS[:nesting_delimiter] = TOKEN_COLORS[:escape] = TOKEN_COLORS[:delimiter]
+
+      protected
+
+      def setup(options)
+        @out = ''
+        @opened = [nil]
+        @subcolors = nil
+      end
+
+      def finish(options)
+        super
+      end
+    
+      def token text, type = :plain
+        case text
+      
+        when nil
+          # raise 'Token with nil as text was given: %p' % [[text, type]] 
+      
+        when String
+        
+          if color = (@subcolors || TOKEN_COLORS)[type]
+            color = color[:self] || return if Hash === color
+
+            @out << col(color) + text.gsub("\n", col(0) + "\n" + col(color)) + col(0)
+            @out << col(@subcolors[:self]) if @subcolors && @subcolors[:self]
+          else
+            @out << text
+          end
+      
+        # token groups, eg. strings
+        when :open
+          @opened[0] = type
+          if color = TOKEN_COLORS[type]
+            if Hash === color
+              @subcolors = color
+              @out << col(color[:self]) if color[:self]
+            else
+              @subcolors = {}
+              @out << col(color)
+            end
+          end
+          @opened << type
+        when :close
+          if @opened.empty?
+            # nothing to close
+          else
+            @out << col(0) if (@subcolors || {})[:self]
+            @subcolors = nil
+            @opened.pop
+          end
+      
+        # whole lines to be highlighted, eg. a added/modified/deleted lines in a diff
+        when :begin_line
+        
+        when :end_line        
+      
+        else
+          raise 'unknown token kind: %p' % [text]
+        end
+      end
+
+      private
+
+      def col(color)
+        Array(color).map { |c| "\e[#{c}m" }.join
+      end
+    end
+  end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/text.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,32 @@
+module CodeRay
+module Encoders
+
+  class Text < Encoder
+
+    include Streamable
+    register_for :text
+
+    FILE_EXTENSION = 'txt'
+
+    DEFAULT_OPTIONS = {
+      :separator => ''
+    }
+
+  protected
+    def setup options
+      super
+      @sep = options[:separator]
+    end
+
+    def text_token text, kind
+      text + @sep
+    end
+
+    def finish options
+      super.chomp @sep
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/token_class_filter.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,84 @@
+($:.unshift '../..'; require 'coderay') unless defined? CodeRay
+module CodeRay
+module Encoders
+  
+  load :filter
+  
+  class TokenClassFilter < Filter
+
+    include Streamable
+    register_for :token_class_filter
+
+    DEFAULT_OPTIONS = {
+      :exclude => [],
+      :include => :all
+    }
+
+  protected
+    def setup options
+      super
+      @exclude = options[:exclude]
+      @exclude = Array(@exclude) unless @exclude == :all
+      @include = options[:include]
+      @include = Array(@include) unless @include == :all
+    end
+    
+    def include_text_token? text, kind
+       (@include == :all || @include.include?(kind)) &&
+      !(@exclude == :all || @exclude.include?(kind))
+    end
+    
+  end
+
+end
+end
+
+if $0 == __FILE__
+  $VERBOSE = true
+  $: << File.join(File.dirname(__FILE__), '..')
+  eval DATA.read, nil, $0, __LINE__ + 4
+end
+
+__END__
+require 'test/unit'
+
+class TokenClassFilterTest < Test::Unit::TestCase
+  
+  def test_creation
+    assert CodeRay::Encoders::TokenClassFilter < CodeRay::Encoders::Encoder
+    assert CodeRay::Encoders::TokenClassFilter < CodeRay::Encoders::Filter
+    filter = nil
+    assert_nothing_raised do
+      filter = CodeRay.encoder :token_class_filter
+    end
+    assert_instance_of CodeRay::Encoders::TokenClassFilter, filter
+  end
+  
+  def test_filtering_text_tokens
+    tokens = CodeRay::Tokens.new
+    for i in 1..10
+      tokens << [i.to_s, :index]
+      tokens << [' ', :space] if i < 10
+    end
+    assert_equal 10, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :exclude => :space).size
+    assert_equal 10, tokens.token_class_filter(:exclude => :space).size
+    assert_equal 9, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :include => :space).size
+    assert_equal 9, tokens.token_class_filter(:include => :space).size
+    assert_equal 0, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :exclude => :all).size
+    assert_equal 0, tokens.token_class_filter(:exclude => :all).size
+  end
+  
+  def test_filtering_block_tokens
+    tokens = CodeRay::Tokens.new
+    10.times do |i|
+      tokens << [:open, :index]
+      tokens << [i.to_s, :content]
+      tokens << [:close, :index]
+    end
+    assert_equal 20, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :include => :blubb).size
+    assert_equal 20, tokens.token_class_filter(:include => :blubb).size
+    assert_equal 30, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :exclude => :index).size
+    assert_equal 30, tokens.token_class_filter(:exclude => :index).size
+  end
+  
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/xml.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,71 @@
+module CodeRay
+module Encoders
+
+  # = XML Encoder
+  #
+  # Uses REXML. Very slow.
+  class XML < Encoder
+
+    include Streamable
+    register_for :xml
+
+    FILE_EXTENSION = 'xml'
+
+    require 'rexml/document'
+
+    DEFAULT_OPTIONS = {
+      :tab_width => 8,
+      :pretty => -1,
+      :transitive => false,
+    }
+
+  protected
+
+    def setup options
+      @doc = REXML::Document.new
+      @doc << REXML::XMLDecl.new
+      @tab_width = options[:tab_width]
+      @root = @node = @doc.add_element('coderay-tokens')
+    end
+
+    def finish options
+      @out = ''
+      @doc.write @out, options[:pretty], options[:transitive], true
+      @out
+    end
+    
+    def text_token text, kind
+      if kind == :space
+        token = @node
+      else
+        token = @node.add_element kind.to_s
+      end
+      text.scan(/(\x20+)|(\t+)|(\n)|[^\x20\t\n]+/) do |space, tab, nl|
+        case
+        when space
+          token << REXML::Text.new(space, true)
+        when tab
+          token << REXML::Text.new(tab, true)
+        when nl
+          token << REXML::Text.new(nl, true)
+        else
+          token << REXML::Text.new($&)
+        end
+      end
+    end
+
+    def open_token kind
+      @node = @node.add_element kind.to_s
+    end
+
+    def close_token kind
+      if @node == @root
+        raise 'no token to close!'
+      end
+      @node = @node.parent
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/encoders/yaml.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,22 @@
+module CodeRay
+module Encoders
+
+  # = YAML Encoder
+  #
+  # Slow.
+  class YAML < Encoder
+
+    register_for :yaml
+
+    FILE_EXTENSION = 'yaml'
+
+  protected
+    def compile tokens, options
+      require 'yaml'
+      @out = tokens.to_a.to_yaml
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/for_redcloth.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,95 @@
+module CodeRay
+  
+  # A little hack to enable CodeRay highlighting in RedCloth.
+  # 
+  # Usage:
+  #  require 'coderay'
+  #  require 'coderay/for_redcloth'
+  #  RedCloth.new('@[ruby]puts "Hello, World!"@').to_html
+  # 
+  # Make sure you have RedCloth 4.0.3 activated, for example by calling
+  #  require 'rubygems'
+  # before RedCloth is loaded and before calling CodeRay.for_redcloth.
+  module ForRedCloth
+    
+    def self.install
+      gem 'RedCloth', '>= 4.0.3' if defined? gem
+      require 'redcloth'
+      unless RedCloth::VERSION.to_s >= '4.0.3'
+        if defined? gem
+          raise 'CodeRay.for_redcloth needs RedCloth version 4.0.3 or later. ' +
+            "You have #{RedCloth::VERSION}. Please gem install RedCloth."
+        else
+          $".delete 'redcloth.rb'  # sorry, but it works
+          require 'rubygems'
+          return install  # retry
+        end
+      end
+      unless RedCloth::VERSION.to_s >= '4.2.2'
+        warn 'CodeRay.for_redcloth works best with RedCloth version 4.2.2 or later.'
+      end
+      RedCloth::TextileDoc.send :include, ForRedCloth::TextileDoc
+      RedCloth::Formatters::HTML.module_eval do
+        def unescape(html)
+          replacements = {
+            '&amp;' => '&',
+            '&quot;' => '"',
+            '&gt;' => '>',
+            '&lt;' => '<',
+          }
+          html.gsub(/&(?:amp|quot|[gl]t);/) { |entity| replacements[entity] }
+        end
+        undef code, bc_open, bc_close, escape_pre
+        def code(opts)  # :nodoc:
+          opts[:block] = true
+          if !opts[:lang] && RedCloth::VERSION.to_s >= '4.2.0'
+            # simulating pre-4.2 behavior
+            if opts[:text].sub!(/\A\[(\w+)\]/, '')
+              if CodeRay::Scanners[$1].plugin_id == 'plaintext'
+                opts[:text] = $& + opts[:text]
+              else
+                opts[:lang] = $1
+              end
+            end
+          end
+          if opts[:lang] && !filter_coderay
+            require 'coderay'
+            @in_bc ||= nil
+            format = @in_bc ? :div : :span
+            opts[:text] = unescape(opts[:text]) unless @in_bc
+            highlighted_code = CodeRay.encode opts[:text], opts[:lang], format, :stream => true
+            highlighted_code.sub!(/\A<(span|div)/) { |m| m + pba(@in_bc || opts) }
+            highlighted_code
+          else
+            "<code#{pba(opts)}>#{opts[:text]}</code>"
+          end
+        end
+        def bc_open(opts)  # :nodoc:
+          opts[:block] = true
+          @in_bc = opts
+          opts[:lang] ? '' : "<pre#{pba(opts)}>"
+        end
+        def bc_close(opts)  # :nodoc:
+          opts = @in_bc
+          @in_bc = nil
+          opts[:lang] ? '' : "</pre>\n"
+        end
+        def escape_pre(text)
+          if @in_bc ||= nil
+            text
+          else
+            html_esc(text, :html_escape_preformatted)
+          end
+        end
+      end
+    end
+
+    module TextileDoc  # :nodoc:
+      attr_accessor :filter_coderay
+    end
+    
+  end
+  
+end
+
+CodeRay::ForRedCloth.install
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,29 @@
+K 25
+svn:wc:ra_dav:version-url
+V 70
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/helpers
+END
+plugin.rb
+K 25
+svn:wc:ra_dav:version-url
+V 80
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/helpers/plugin.rb
+END
+file_type.rb
+K 25
+svn:wc:ra_dav:version-url
+V 83
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/helpers/file_type.rb
+END
+gzip_simple.rb
+K 25
+svn:wc:ra_dav:version-url
+V 85
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/helpers/gzip_simple.rb
+END
+word_list.rb
+K 25
+svn:wc:ra_dav:version-url
+V 83
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/helpers/word_list.rb
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,164 @@
+10
+
+dir
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay/helpers
+http://redmine.rubyforge.org/svn
+
+
+
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+plugin.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+a8ef4aea22392cc4012ee679fc1d15ba
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7926
+
+file_type.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+107e3d46dc60830e87b1a4ce4d467ce8
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6494
+
+gzip_simple.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+ffacc98651f60a6fe698427bbc3c3c86
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2701
+
+word_list.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+86d05af27cbe342789f28ed543956aa5
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3229
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/text-base/file_type.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,255 @@
+#!/usr/bin/env ruby
+module CodeRay
+
+# = FileType
+#
+# A simple filetype recognizer.
+#
+# Copyright (c) 2006 by murphy (Kornelius Kalnbach) <murphy rubychan de>
+#
+# License:: LGPL / ask the author
+# Version:: 0.1 (2005-09-01)
+#
+# == Documentation
+#
+#  # determine the type of the given
+#   lang = FileType[ARGV.first]
+#  
+#   # return :plaintext if the file type is unknown
+#   lang = FileType.fetch ARGV.first, :plaintext
+#  
+#   # try the shebang line, too
+#   lang = FileType.fetch ARGV.first, :plaintext, true
+module FileType
+
+  UnknownFileType = Class.new Exception
+
+  class << self
+
+    # Try to determine the file type of the file.
+    #
+    # +filename+ is a relative or absolute path to a file.
+    #
+    # The file itself is only accessed when +read_shebang+ is set to true.
+    # That means you can get filetypes from files that don't exist.
+    def [] filename, read_shebang = false
+      name = File.basename filename
+      ext = File.extname(name).sub(/^\./, '')  # from last dot, delete the leading dot
+      ext2 = filename.to_s[/\.(.*)/, 1]  # from first dot
+
+      type =
+        TypeFromExt[ext] ||
+        TypeFromExt[ext.downcase] ||
+        (TypeFromExt[ext2] if ext2) ||
+        (TypeFromExt[ext2.downcase] if ext2) ||
+        TypeFromName[name] ||
+        TypeFromName[name.downcase]
+      type ||= shebang(filename) if read_shebang
+
+      type
+    end
+
+    def shebang filename
+      begin
+        File.open filename, 'r' do |f|
+          if first_line = f.gets
+            if type = first_line[TypeFromShebang]
+              type.to_sym
+            end
+          end
+        end
+      rescue IOError
+        nil
+      end
+    end
+
+    # This works like Hash#fetch.
+    #
+    # If the filetype cannot be found, the +default+ value
+    # is returned.
+    def fetch filename, default = nil, read_shebang = false
+      if default and block_given?
+        warn 'block supersedes default value argument'
+      end
+
+      unless type = self[filename, read_shebang]
+        return yield if block_given?
+        return default if default
+        raise UnknownFileType, 'Could not determine type of %p.' % filename
+      end
+      type
+    end
+
+  end
+
+  TypeFromExt = {
+    'c' => :c,
+    'css' => :css,
+    'diff' => :diff,
+    'dpr' => :delphi,
+    'groovy' => :groovy,
+    'gvy' => :groovy,
+    'h' => :c,
+    'htm' => :html,
+    'html' => :html,
+    'html.erb' => :rhtml,
+    'java' => :java,
+    'js' => :java_script,
+    'json' => :json,
+    'mab' => :ruby,
+    'pas' => :delphi,
+    'patch' => :diff,
+    'php' => :php,
+    'php3' => :php,
+    'php4' => :php,
+    'php5' => :php,
+    'py' => :python,
+    'py3' => :python,
+    'pyw' => :python,
+    'rake' => :ruby,
+    'raydebug' => :debug,
+    'rb' => :ruby,
+    'rbw' => :ruby,
+    'rhtml' => :rhtml,
+    'rxml' => :ruby,
+    'sch' => :scheme,
+    'sql' => :sql,
+    'ss' => :scheme,
+    'xhtml' => :xhtml,
+    'xml' => :xml,
+    'yaml' => :yaml,
+    'yml' => :yaml,
+  }
+  for cpp_alias in %w[cc cpp cp cxx c++ C hh hpp h++ cu]
+    TypeFromExt[cpp_alias] = :cpp
+  end
+
+  TypeFromShebang = /\b(?:ruby|perl|python|sh)\b/
+
+  TypeFromName = {
+    'Rakefile' => :ruby,
+    'Rantfile' => :ruby,
+  }
+
+end
+
+end
+
+if $0 == __FILE__
+  $VERBOSE = true
+  eval DATA.read, nil, $0, __LINE__ + 4
+end
+
+__END__
+require 'test/unit'
+
+class FileTypeTests < Test::Unit::TestCase
+  
+  include CodeRay
+  
+  def test_fetch
+    assert_raise FileType::UnknownFileType do
+      FileType.fetch ''
+    end
+
+    assert_throws :not_found do
+      FileType.fetch '.' do
+        throw :not_found
+      end
+    end
+
+    assert_equal :default, FileType.fetch('c', :default)
+
+    stderr, fake_stderr = $stderr, Object.new
+    $err = ''
+    def fake_stderr.write x
+      $err << x
+    end
+    $stderr = fake_stderr
+    FileType.fetch('c', :default) { }
+    assert_equal "block supersedes default value argument\n", $err
+    $stderr = stderr
+  end
+
+  def test_ruby
+    assert_equal :ruby, FileType['test.rb']
+    assert_equal :ruby, FileType['test.java.rb']
+    assert_equal :java, FileType['test.rb.java']
+    assert_equal :ruby, FileType['C:\\Program Files\\x\\y\\c\\test.rbw']
+    assert_equal :ruby, FileType['/usr/bin/something/Rakefile']
+    assert_equal :ruby, FileType['~/myapp/gem/Rantfile']
+    assert_equal :ruby, FileType['./lib/tasks\repository.rake']
+    assert_not_equal :ruby, FileType['test_rb']
+    assert_not_equal :ruby, FileType['Makefile']
+    assert_not_equal :ruby, FileType['set.rb/set']
+    assert_not_equal :ruby, FileType['~/projects/blabla/rb']
+  end
+
+  def test_c
+    assert_equal :c, FileType['test.c']
+    assert_equal :c, FileType['C:\\Program Files\\x\\y\\c\\test.h']
+    assert_not_equal :c, FileType['test_c']
+    assert_not_equal :c, FileType['Makefile']
+    assert_not_equal :c, FileType['set.h/set']
+    assert_not_equal :c, FileType['~/projects/blabla/c']
+  end
+
+  def test_cpp
+    assert_equal :cpp, FileType['test.c++']
+    assert_equal :cpp, FileType['test.cxx']
+    assert_equal :cpp, FileType['test.hh']
+    assert_equal :cpp, FileType['test.hpp']
+    assert_equal :cpp, FileType['test.cu']
+    assert_equal :cpp, FileType['test.C']
+    assert_not_equal :cpp, FileType['test.c']
+    assert_not_equal :cpp, FileType['test.h']
+  end
+
+  def test_html
+    assert_equal :html, FileType['test.htm']
+    assert_equal :xhtml, FileType['test.xhtml']
+    assert_equal :xhtml, FileType['test.html.xhtml']
+    assert_equal :rhtml, FileType['_form.rhtml']
+    assert_equal :rhtml, FileType['_form.html.erb']
+  end
+
+  def test_yaml
+    assert_equal :yaml, FileType['test.yml']
+    assert_equal :yaml, FileType['test.yaml']
+    assert_equal :yaml, FileType['my.html.yaml']
+    assert_not_equal :yaml, FileType['YAML']
+  end
+
+  def test_pathname
+    require 'pathname'
+    pn = Pathname.new 'test.rb'
+    assert_equal :ruby, FileType[pn]
+    dir = Pathname.new '/etc/var/blubb'
+    assert_equal :ruby, FileType[dir + pn]
+    assert_equal :cpp, FileType[dir + 'test.cpp']
+  end
+
+  def test_no_shebang
+    dir = './test'
+    if File.directory? dir
+      Dir.chdir dir do
+        assert_equal :c, FileType['test.c']
+      end
+    end
+  end
+  
+  def test_shebang_empty_file
+    require 'tmpdir'
+    tmpfile = File.join(Dir.tmpdir, 'bla')
+    File.open(tmpfile, 'w') { }  # touch
+    assert_equal nil, FileType[tmpfile]
+  end
+  
+  def test_shebang
+    require 'tmpdir'
+    tmpfile = File.join(Dir.tmpdir, 'bla')
+    File.open(tmpfile, 'w') { |f| f.puts '#!/usr/bin/env ruby' }
+    assert_equal :ruby, FileType[tmpfile, true]
+  end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/text-base/gzip_simple.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,123 @@
+# =GZip Simple
+#
+# A simplified interface to the gzip library +zlib+ (from the Ruby Standard Library.)
+#
+# Author: murphy (mail to murphy rubychan de)
+#
+# Version: 0.2 (2005.may.28)
+#
+# ==Documentation
+#
+# See +GZip+ module and the +String+ extensions.
+#
+module GZip
+
+  require 'zlib'
+
+  # The default zipping level. 7 zips good and fast.
+  DEFAULT_GZIP_LEVEL = 7
+
+  # Unzips the given string +s+.
+  #
+  # Example:
+  #   require 'gzip_simple'
+  #   print GZip.gunzip(File.read('adresses.gz'))
+  def GZip.gunzip s
+    Zlib::Inflate.inflate s
+  end
+
+  # Zips the given string +s+.
+  #
+  # Example:
+  #   require 'gzip_simple'
+  #   File.open('adresses.gz', 'w') do |file
+  #     file.write GZip.gzip('Mum: 0123 456 789', 9)
+  #   end
+  #
+  # If you provide a +level+, you can control how strong
+  # the string is compressed:
+  # - 0: no compression, only convert to gzip format
+  # - 1: compress fast
+  # - 7: compress more, but still fast (default)
+  # - 8: compress more, slower
+  # - 9: compress best, very slow
+  def GZip.gzip s, level = DEFAULT_GZIP_LEVEL
+    Zlib::Deflate.new(level).deflate s, Zlib::FINISH
+  end
+end
+
+
+# String extensions to use the GZip module.
+#
+# The methods gzip and gunzip provide an even more simple
+# interface to the ZLib:
+#
+#   # create a big string
+#   x = 'a' * 1000
+#   
+#   # zip it
+#   x_gz = x.gzip
+#   
+#   # test the result
+#   puts 'Zipped %d bytes to %d bytes.' % [x.size, x_gz.size]
+#   #-> Zipped 1000 bytes to 19 bytes.
+#   
+#   # unzipping works
+#   p x_gz.gunzip == x  #-> true
+class String
+  # Returns the string, unzipped.
+  # See GZip.gunzip
+  def gunzip
+    GZip.gunzip self
+  end
+  # Replaces the string with its unzipped value.
+  # See GZip.gunzip
+  def gunzip!
+    replace gunzip
+  end
+
+  # Returns the string, zipped.
+  # +level+ is the gzip compression level, see GZip.gzip.
+  def gzip level = GZip::DEFAULT_GZIP_LEVEL
+    GZip.gzip self, level
+  end
+  # Replaces the string with its zipped value.
+  # See GZip.gzip.
+  def gzip!(*args)
+    replace gzip(*args)
+  end
+end
+
+if $0 == __FILE__
+  eval DATA.read, nil, $0, __LINE__+4
+end
+
+__END__
+#CODE
+
+# Testing / Benchmark
+x = 'a' * 1000
+x_gz = x.gzip
+puts 'Zipped %d bytes to %d bytes.' % [x.size, x_gz.size]  #-> Zipped 1000 bytes to 19 bytes.
+p x_gz.gunzip == x  #-> true
+
+require 'benchmark'
+
+INFO = 'packed to %0.3f%%'  # :nodoc:
+
+x = Array.new(100000) { rand(255).chr + 'aaaaaaaaa' + rand(255).chr }.join
+Benchmark.bm(10) do |bm|
+  for level in 0..9
+    bm.report "zip #{level}" do
+      $x = x.gzip level
+    end
+    puts INFO % [100.0 * $x.size / x.size]
+  end
+  bm.report 'zip' do
+    $x = x.gzip
+  end
+  puts INFO % [100.0 * $x.size / x.size]
+  bm.report 'unzip' do
+    $x.gunzip
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/text-base/plugin.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,349 @@
+module CodeRay
+  
+# = PluginHost
+#
+# A simple subclass plugin system.
+#
+#  Example:
+#    class Generators < PluginHost
+#      plugin_path 'app/generators'
+#    end
+#    
+#    class Generator
+#      extend Plugin
+#      PLUGIN_HOST = Generators
+#    end
+#    
+#    class FancyGenerator < Generator
+#      register_for :fancy
+#    end
+#
+#    Generators[:fancy]  #-> FancyGenerator
+#    # or
+#    CodeRay.require_plugin 'Generators/fancy'
+module PluginHost
+
+  # Raised if Encoders::[] fails because:
+  # * a file could not be found
+  # * the requested Encoder is not registered
+  PluginNotFound = Class.new Exception
+  HostNotFound = Class.new Exception
+
+  PLUGIN_HOSTS = []
+  PLUGIN_HOSTS_BY_ID = {}  # dummy hash
+
+  # Loads all plugins using list and load.
+  def load_all
+    for plugin in list
+      load plugin
+    end
+  end
+
+  # Returns the Plugin for +id+.
+  #
+  # Example:
+  #  yaml_plugin = MyPluginHost[:yaml]
+  def [] id, *args, &blk
+    plugin = validate_id(id)
+    begin
+      plugin = plugin_hash.[] plugin, *args, &blk
+    end while plugin.is_a? Symbol
+    plugin
+  end
+
+  # Alias for +[]+.
+  alias load []
+
+  def require_helper plugin_id, helper_name
+    path = path_to File.join(plugin_id, helper_name)
+    require path
+  end
+
+  class << self
+
+    # Adds the module/class to the PLUGIN_HOSTS list.
+    def extended mod
+      PLUGIN_HOSTS << mod
+    end
+
+    # Warns you that you should not #include this module.
+    def included mod
+      warn "#{name} should not be included. Use extend."
+    end
+
+    # Find the PluginHost for host_id.
+    def host_by_id host_id
+      unless PLUGIN_HOSTS_BY_ID.default_proc
+        ph = Hash.new do |h, a_host_id|
+          for host in PLUGIN_HOSTS
+            h[host.host_id] = host
+          end
+          h.fetch a_host_id, nil
+        end
+        PLUGIN_HOSTS_BY_ID.replace ph
+      end
+      PLUGIN_HOSTS_BY_ID[host_id]
+    end
+
+  end
+
+  # The path where the plugins can be found.
+  def plugin_path *args
+    unless args.empty?
+      @plugin_path = File.expand_path File.join(*args)
+      load_map
+    end
+    @plugin_path
+  end
+
+  # The host's ID.
+  #
+  # If PLUGIN_HOST_ID is not set, it is simply the class name.
+  def host_id
+    if self.const_defined? :PLUGIN_HOST_ID
+      self::PLUGIN_HOST_ID
+    else
+      name
+    end
+  end
+
+  # Map a plugin_id to another.
+  #
+  # Usage: Put this in a file plugin_path/_map.rb.
+  #
+  #  class MyColorHost < PluginHost
+  #    map :navy => :dark_blue,
+  #      :maroon => :brown,
+  #      :luna => :moon
+  #  end
+  def map hash
+    for from, to in hash
+      from = validate_id from
+      to = validate_id to
+      plugin_hash[from] = to unless plugin_hash.has_key? from
+    end
+  end
+
+  # Define the default plugin to use when no plugin is found
+  # for a given id.
+  #
+  # See also map.
+  #
+  #  class MyColorHost < PluginHost
+  #    map :navy => :dark_blue
+  #    default :gray
+  #  end
+  def default id = nil
+    if id
+      id = validate_id id
+      plugin_hash[nil] = id
+    else
+      plugin_hash[nil]
+    end
+  end
+
+  # Every plugin must register itself for one or more
+  # +ids+ by calling register_for, which calls this method.
+  #
+  # See Plugin#register_for.
+  def register plugin, *ids
+    for id in ids
+      unless id.is_a? Symbol
+        raise ArgumentError,
+          "id must be a Symbol, but it was a #{id.class}"
+      end
+      plugin_hash[validate_id(id)] = plugin
+    end
+  end
+
+  # A Hash of plugion_id => Plugin pairs.
+  def plugin_hash
+    @plugin_hash ||= create_plugin_hash
+  end
+
+  # Returns an array of all .rb files in the plugin path.
+  #
+  # The extension .rb is not included.
+  def list
+    Dir[path_to('*')].select do |file|
+      File.basename(file)[/^(?!_)\w+\.rb$/]
+    end.map do |file|
+      File.basename file, '.rb'
+    end
+  end
+
+  # Makes a map of all loaded plugins.
+  def inspect
+    map = plugin_hash.dup
+    map.each do |id, plugin|
+      map[id] = plugin.to_s[/(?>\w+)$/]
+    end
+    "#{name}[#{host_id}]#{map.inspect}"
+  end
+
+protected
+  # Created a new plugin list and stores it to @plugin_hash.
+  def create_plugin_hash
+    @plugin_hash =
+      Hash.new do |h, plugin_id|
+        id = validate_id(plugin_id)
+        path = path_to id
+        begin
+          require path
+        rescue LoadError => boom
+          if h.has_key? nil  # default plugin
+            h[id] = h[nil]
+          else
+            raise PluginNotFound, 'Could not load plugin %p: %s' % [id, boom]
+          end
+        else
+          # Plugin should have registered by now
+          unless h.has_key? id
+            raise PluginNotFound,
+              "No #{self.name} plugin for #{id.inspect} found in #{path}."
+          end
+        end
+        h[id]
+      end
+  end
+
+  # Loads the map file (see map).
+  #
+  # This is done automatically when plugin_path is called.
+  def load_map
+    mapfile = path_to '_map'
+    if File.exist? mapfile
+      require mapfile
+    elsif $VERBOSE
+      warn 'no _map.rb found for %s' % name
+    end
+  end
+
+  # Returns the Plugin for +id+.
+  # Use it like Hash#fetch.
+  #
+  # Example:
+  #  yaml_plugin = MyPluginHost[:yaml, :default]
+  def fetch id, *args, &blk
+    plugin_hash.fetch validate_id(id), *args, &blk
+  end
+
+  # Returns the expected path to the plugin file for the given id.
+  def path_to plugin_id
+    File.join plugin_path, "#{plugin_id}.rb"
+  end
+
+  # Converts +id+ to a Symbol if it is a String,
+  # or returns +id+ if it already is a Symbol.
+  #
+  # Raises +ArgumentError+ for all other objects, or if the
+  # given String includes non-alphanumeric characters (\W).
+  def validate_id id
+    if id.is_a? Symbol or id.nil?
+      id
+    elsif id.is_a? String
+      if id[/\w+/] == id
+        id.downcase.to_sym
+      else
+        raise ArgumentError, "Invalid id: '#{id}' given."
+      end
+    else
+      raise ArgumentError,
+        "String or Symbol expected, but #{id.class} given."
+    end
+  end
+
+end
+
+
+# = Plugin
+#
+#  Plugins have to include this module.
+#
+#  IMPORTANT: use extend for this module.
+#
+#  Example: see PluginHost.
+module Plugin
+
+  def included mod
+    warn "#{name} should not be included. Use extend."
+  end
+
+  # Register this class for the given langs.
+  # Example:
+  #   class MyPlugin < PluginHost::BaseClass
+  #     register_for :my_id
+  #     ...
+  #   end
+  #
+  # See PluginHost.register.
+  def register_for *ids
+    plugin_host.register self, *ids
+  end
+  
+  # Returns the title of the plugin, or sets it to the
+  # optional argument +title+.
+  def title title = nil
+    if title
+      @title = title.to_s
+    else
+      @title ||= name[/([^:]+)$/, 1]
+    end
+  end
+
+  # The host for this Plugin class.
+  def plugin_host host = nil
+    if host and not host.is_a? PluginHost
+      raise ArgumentError,
+        "PluginHost expected, but #{host.class} given."
+    end
+    self.const_set :PLUGIN_HOST, host if host
+    self::PLUGIN_HOST
+  end
+
+  # Require some helper files.
+  #
+  # Example:
+  #
+  #  class MyPlugin < PluginHost::BaseClass
+  #     register_for :my_id
+  #     helper :my_helper
+  #
+  # The above example loads the file myplugin/my_helper.rb relative to the
+  # file in which MyPlugin was defined.
+  # 
+  # You can also load a helper from a different plugin:
+  # 
+  #  helper 'other_plugin/helper_name'
+  def helper *helpers
+    for helper in helpers
+      if helper.is_a?(String) && helper[/\//]
+        self::PLUGIN_HOST.require_helper $`, $'
+      else
+        self::PLUGIN_HOST.require_helper plugin_id, helper.to_s
+      end
+    end
+  end
+
+  # Returns the pulgin id used by the engine.
+  def plugin_id
+    name[/\w+$/].downcase
+  end
+
+end
+
+# Convenience method for plugin loading.
+# The syntax used is:
+#
+#  CodeRay.require_plugin '<Host ID>/<Plugin ID>'
+#
+# Returns the loaded plugin.
+def self.require_plugin path
+  host_id, plugin_id = path.split '/', 2
+  host = PluginHost.host_by_id(host_id)
+  raise PluginHost::HostNotFound,
+    "No host for #{host_id.inspect} found." unless host
+  host.load plugin_id
+end
+
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/.svn/text-base/word_list.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,138 @@
+module CodeRay
+
+# = WordList
+# 
+# <b>A Hash subclass designed for mapping word lists to token types.</b>
+# 
+# Copyright (c) 2006 by murphy (Kornelius Kalnbach) <murphy rubychan de>
+#
+# License:: LGPL / ask the author
+# Version:: 1.1 (2006-Oct-19)
+#
+# A WordList is a Hash with some additional features.
+# It is intended to be used for keyword recognition.
+#
+# WordList is highly optimized to be used in Scanners,
+# typically to decide whether a given ident is a special token.
+#
+# For case insensitive words use CaseIgnoringWordList.
+#
+# Example:
+#
+#  # define word arrays
+#  RESERVED_WORDS = %w[
+#    asm break case continue default do else
+#    ...
+#  ]
+#  
+#  PREDEFINED_TYPES = %w[
+#    int long short char void
+#    ...
+#  ]
+#  
+#  PREDEFINED_CONSTANTS = %w[
+#    EOF NULL ...
+#  ]
+#  
+#  # make a WordList
+#  IDENT_KIND = WordList.new(:ident).
+#    add(RESERVED_WORDS, :reserved).
+#    add(PREDEFINED_TYPES, :pre_type).
+#    add(PREDEFINED_CONSTANTS, :pre_constant)
+#
+#  ...
+#
+#  def scan_tokens tokens, options
+#    ...
+#    
+#    elsif scan(/[A-Za-z_][A-Za-z_0-9]*/)
+#      # use it
+#      kind = IDENT_KIND[match]
+#      ...
+class WordList < Hash
+
+  # Creates a new WordList with +default+ as default value.
+  # 
+  # You can activate +caching+ to store the results for every [] request.
+  # 
+  # With caching, methods like +include?+ or +delete+ may no longer behave
+  # as you expect. Therefore, it is recommended to use the [] method only.
+  def initialize default = false, caching = false, &block
+    if block
+      raise ArgumentError, 'Can\'t combine block with caching.' if caching
+      super(&block)
+    else
+      if caching
+        super() do |h, k|
+          h[k] = h.fetch k, default
+        end
+      else
+        super default
+      end
+    end
+  end
+
+  # Add words to the list and associate them with +kind+.
+  # 
+  # Returns +self+, so you can concat add calls.
+  def add words, kind = true
+    words.each do |word|
+      self[word] = kind
+    end
+    self
+  end
+
+end
+
+
+# A CaseIgnoringWordList is like a WordList, only that
+# keys are compared case-insensitively.
+# 
+# Ignoring the text case is realized by sending the +downcase+ message to
+# all keys.
+# 
+# Caching usually makes a CaseIgnoringWordList faster, but it has to be
+# activated explicitely.
+class CaseIgnoringWordList < WordList
+
+  # Creates a new case-insensitive WordList with +default+ as default value.
+  # 
+  # You can activate caching to store the results for every [] request.
+  # This speeds up subsequent lookups for the same word, but also
+  # uses memory.
+  def initialize default = false, caching = false
+    if caching
+      super(default, false) do |h, k|
+        h[k] = h.fetch k.downcase, default
+      end
+    else
+      super(default, false)
+      extend Uncached
+    end
+  end
+  
+  module Uncached  # :nodoc:
+    def [] key
+      super(key.downcase)
+    end
+  end
+
+  # Add +words+ to the list and associate them with +kind+.
+  def add words, kind = true
+    words.each do |word|
+      self[word.downcase] = kind
+    end
+    self
+  end
+
+end
+
+end
+
+__END__
+# check memory consumption
+END {
+  ObjectSpace.each_object(CodeRay::CaseIgnoringWordList) do |wl|
+    p wl.inject(0) { |memo, key, value| memo + key.size + 24 }
+  end
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/file_type.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,255 @@
+#!/usr/bin/env ruby
+module CodeRay
+
+# = FileType
+#
+# A simple filetype recognizer.
+#
+# Copyright (c) 2006 by murphy (Kornelius Kalnbach) <murphy rubychan de>
+#
+# License:: LGPL / ask the author
+# Version:: 0.1 (2005-09-01)
+#
+# == Documentation
+#
+#  # determine the type of the given
+#   lang = FileType[ARGV.first]
+#  
+#   # return :plaintext if the file type is unknown
+#   lang = FileType.fetch ARGV.first, :plaintext
+#  
+#   # try the shebang line, too
+#   lang = FileType.fetch ARGV.first, :plaintext, true
+module FileType
+
+  UnknownFileType = Class.new Exception
+
+  class << self
+
+    # Try to determine the file type of the file.
+    #
+    # +filename+ is a relative or absolute path to a file.
+    #
+    # The file itself is only accessed when +read_shebang+ is set to true.
+    # That means you can get filetypes from files that don't exist.
+    def [] filename, read_shebang = false
+      name = File.basename filename
+      ext = File.extname(name).sub(/^\./, '')  # from last dot, delete the leading dot
+      ext2 = filename.to_s[/\.(.*)/, 1]  # from first dot
+
+      type =
+        TypeFromExt[ext] ||
+        TypeFromExt[ext.downcase] ||
+        (TypeFromExt[ext2] if ext2) ||
+        (TypeFromExt[ext2.downcase] if ext2) ||
+        TypeFromName[name] ||
+        TypeFromName[name.downcase]
+      type ||= shebang(filename) if read_shebang
+
+      type
+    end
+
+    def shebang filename
+      begin
+        File.open filename, 'r' do |f|
+          if first_line = f.gets
+            if type = first_line[TypeFromShebang]
+              type.to_sym
+            end
+          end
+        end
+      rescue IOError
+        nil
+      end
+    end
+
+    # This works like Hash#fetch.
+    #
+    # If the filetype cannot be found, the +default+ value
+    # is returned.
+    def fetch filename, default = nil, read_shebang = false
+      if default and block_given?
+        warn 'block supersedes default value argument'
+      end
+
+      unless type = self[filename, read_shebang]
+        return yield if block_given?
+        return default if default
+        raise UnknownFileType, 'Could not determine type of %p.' % filename
+      end
+      type
+    end
+
+  end
+
+  TypeFromExt = {
+    'c' => :c,
+    'css' => :css,
+    'diff' => :diff,
+    'dpr' => :delphi,
+    'groovy' => :groovy,
+    'gvy' => :groovy,
+    'h' => :c,
+    'htm' => :html,
+    'html' => :html,
+    'html.erb' => :rhtml,
+    'java' => :java,
+    'js' => :java_script,
+    'json' => :json,
+    'mab' => :ruby,
+    'pas' => :delphi,
+    'patch' => :diff,
+    'php' => :php,
+    'php3' => :php,
+    'php4' => :php,
+    'php5' => :php,
+    'py' => :python,
+    'py3' => :python,
+    'pyw' => :python,
+    'rake' => :ruby,
+    'raydebug' => :debug,
+    'rb' => :ruby,
+    'rbw' => :ruby,
+    'rhtml' => :rhtml,
+    'rxml' => :ruby,
+    'sch' => :scheme,
+    'sql' => :sql,
+    'ss' => :scheme,
+    'xhtml' => :xhtml,
+    'xml' => :xml,
+    'yaml' => :yaml,
+    'yml' => :yaml,
+  }
+  for cpp_alias in %w[cc cpp cp cxx c++ C hh hpp h++ cu]
+    TypeFromExt[cpp_alias] = :cpp
+  end
+
+  TypeFromShebang = /\b(?:ruby|perl|python|sh)\b/
+
+  TypeFromName = {
+    'Rakefile' => :ruby,
+    'Rantfile' => :ruby,
+  }
+
+end
+
+end
+
+if $0 == __FILE__
+  $VERBOSE = true
+  eval DATA.read, nil, $0, __LINE__ + 4
+end
+
+__END__
+require 'test/unit'
+
+class FileTypeTests < Test::Unit::TestCase
+  
+  include CodeRay
+  
+  def test_fetch
+    assert_raise FileType::UnknownFileType do
+      FileType.fetch ''
+    end
+
+    assert_throws :not_found do
+      FileType.fetch '.' do
+        throw :not_found
+      end
+    end
+
+    assert_equal :default, FileType.fetch('c', :default)
+
+    stderr, fake_stderr = $stderr, Object.new
+    $err = ''
+    def fake_stderr.write x
+      $err << x
+    end
+    $stderr = fake_stderr
+    FileType.fetch('c', :default) { }
+    assert_equal "block supersedes default value argument\n", $err
+    $stderr = stderr
+  end
+
+  def test_ruby
+    assert_equal :ruby, FileType['test.rb']
+    assert_equal :ruby, FileType['test.java.rb']
+    assert_equal :java, FileType['test.rb.java']
+    assert_equal :ruby, FileType['C:\\Program Files\\x\\y\\c\\test.rbw']
+    assert_equal :ruby, FileType['/usr/bin/something/Rakefile']
+    assert_equal :ruby, FileType['~/myapp/gem/Rantfile']
+    assert_equal :ruby, FileType['./lib/tasks\repository.rake']
+    assert_not_equal :ruby, FileType['test_rb']
+    assert_not_equal :ruby, FileType['Makefile']
+    assert_not_equal :ruby, FileType['set.rb/set']
+    assert_not_equal :ruby, FileType['~/projects/blabla/rb']
+  end
+
+  def test_c
+    assert_equal :c, FileType['test.c']
+    assert_equal :c, FileType['C:\\Program Files\\x\\y\\c\\test.h']
+    assert_not_equal :c, FileType['test_c']
+    assert_not_equal :c, FileType['Makefile']
+    assert_not_equal :c, FileType['set.h/set']
+    assert_not_equal :c, FileType['~/projects/blabla/c']
+  end
+
+  def test_cpp
+    assert_equal :cpp, FileType['test.c++']
+    assert_equal :cpp, FileType['test.cxx']
+    assert_equal :cpp, FileType['test.hh']
+    assert_equal :cpp, FileType['test.hpp']
+    assert_equal :cpp, FileType['test.cu']
+    assert_equal :cpp, FileType['test.C']
+    assert_not_equal :cpp, FileType['test.c']
+    assert_not_equal :cpp, FileType['test.h']
+  end
+
+  def test_html
+    assert_equal :html, FileType['test.htm']
+    assert_equal :xhtml, FileType['test.xhtml']
+    assert_equal :xhtml, FileType['test.html.xhtml']
+    assert_equal :rhtml, FileType['_form.rhtml']
+    assert_equal :rhtml, FileType['_form.html.erb']
+  end
+
+  def test_yaml
+    assert_equal :yaml, FileType['test.yml']
+    assert_equal :yaml, FileType['test.yaml']
+    assert_equal :yaml, FileType['my.html.yaml']
+    assert_not_equal :yaml, FileType['YAML']
+  end
+
+  def test_pathname
+    require 'pathname'
+    pn = Pathname.new 'test.rb'
+    assert_equal :ruby, FileType[pn]
+    dir = Pathname.new '/etc/var/blubb'
+    assert_equal :ruby, FileType[dir + pn]
+    assert_equal :cpp, FileType[dir + 'test.cpp']
+  end
+
+  def test_no_shebang
+    dir = './test'
+    if File.directory? dir
+      Dir.chdir dir do
+        assert_equal :c, FileType['test.c']
+      end
+    end
+  end
+  
+  def test_shebang_empty_file
+    require 'tmpdir'
+    tmpfile = File.join(Dir.tmpdir, 'bla')
+    File.open(tmpfile, 'w') { }  # touch
+    assert_equal nil, FileType[tmpfile]
+  end
+  
+  def test_shebang
+    require 'tmpdir'
+    tmpfile = File.join(Dir.tmpdir, 'bla')
+    File.open(tmpfile, 'w') { |f| f.puts '#!/usr/bin/env ruby' }
+    assert_equal :ruby, FileType[tmpfile, true]
+  end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/gzip_simple.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,123 @@
+# =GZip Simple
+#
+# A simplified interface to the gzip library +zlib+ (from the Ruby Standard Library.)
+#
+# Author: murphy (mail to murphy rubychan de)
+#
+# Version: 0.2 (2005.may.28)
+#
+# ==Documentation
+#
+# See +GZip+ module and the +String+ extensions.
+#
+module GZip
+
+  require 'zlib'
+
+  # The default zipping level. 7 zips good and fast.
+  DEFAULT_GZIP_LEVEL = 7
+
+  # Unzips the given string +s+.
+  #
+  # Example:
+  #   require 'gzip_simple'
+  #   print GZip.gunzip(File.read('adresses.gz'))
+  def GZip.gunzip s
+    Zlib::Inflate.inflate s
+  end
+
+  # Zips the given string +s+.
+  #
+  # Example:
+  #   require 'gzip_simple'
+  #   File.open('adresses.gz', 'w') do |file
+  #     file.write GZip.gzip('Mum: 0123 456 789', 9)
+  #   end
+  #
+  # If you provide a +level+, you can control how strong
+  # the string is compressed:
+  # - 0: no compression, only convert to gzip format
+  # - 1: compress fast
+  # - 7: compress more, but still fast (default)
+  # - 8: compress more, slower
+  # - 9: compress best, very slow
+  def GZip.gzip s, level = DEFAULT_GZIP_LEVEL
+    Zlib::Deflate.new(level).deflate s, Zlib::FINISH
+  end
+end
+
+
+# String extensions to use the GZip module.
+#
+# The methods gzip and gunzip provide an even more simple
+# interface to the ZLib:
+#
+#   # create a big string
+#   x = 'a' * 1000
+#   
+#   # zip it
+#   x_gz = x.gzip
+#   
+#   # test the result
+#   puts 'Zipped %d bytes to %d bytes.' % [x.size, x_gz.size]
+#   #-> Zipped 1000 bytes to 19 bytes.
+#   
+#   # unzipping works
+#   p x_gz.gunzip == x  #-> true
+class String
+  # Returns the string, unzipped.
+  # See GZip.gunzip
+  def gunzip
+    GZip.gunzip self
+  end
+  # Replaces the string with its unzipped value.
+  # See GZip.gunzip
+  def gunzip!
+    replace gunzip
+  end
+
+  # Returns the string, zipped.
+  # +level+ is the gzip compression level, see GZip.gzip.
+  def gzip level = GZip::DEFAULT_GZIP_LEVEL
+    GZip.gzip self, level
+  end
+  # Replaces the string with its zipped value.
+  # See GZip.gzip.
+  def gzip!(*args)
+    replace gzip(*args)
+  end
+end
+
+if $0 == __FILE__
+  eval DATA.read, nil, $0, __LINE__+4
+end
+
+__END__
+#CODE
+
+# Testing / Benchmark
+x = 'a' * 1000
+x_gz = x.gzip
+puts 'Zipped %d bytes to %d bytes.' % [x.size, x_gz.size]  #-> Zipped 1000 bytes to 19 bytes.
+p x_gz.gunzip == x  #-> true
+
+require 'benchmark'
+
+INFO = 'packed to %0.3f%%'  # :nodoc:
+
+x = Array.new(100000) { rand(255).chr + 'aaaaaaaaa' + rand(255).chr }.join
+Benchmark.bm(10) do |bm|
+  for level in 0..9
+    bm.report "zip #{level}" do
+      $x = x.gzip level
+    end
+    puts INFO % [100.0 * $x.size / x.size]
+  end
+  bm.report 'zip' do
+    $x = x.gzip
+  end
+  puts INFO % [100.0 * $x.size / x.size]
+  bm.report 'unzip' do
+    $x.gunzip
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/plugin.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,349 @@
+module CodeRay
+  
+# = PluginHost
+#
+# A simple subclass plugin system.
+#
+#  Example:
+#    class Generators < PluginHost
+#      plugin_path 'app/generators'
+#    end
+#    
+#    class Generator
+#      extend Plugin
+#      PLUGIN_HOST = Generators
+#    end
+#    
+#    class FancyGenerator < Generator
+#      register_for :fancy
+#    end
+#
+#    Generators[:fancy]  #-> FancyGenerator
+#    # or
+#    CodeRay.require_plugin 'Generators/fancy'
+module PluginHost
+
+  # Raised if Encoders::[] fails because:
+  # * a file could not be found
+  # * the requested Encoder is not registered
+  PluginNotFound = Class.new Exception
+  HostNotFound = Class.new Exception
+
+  PLUGIN_HOSTS = []
+  PLUGIN_HOSTS_BY_ID = {}  # dummy hash
+
+  # Loads all plugins using list and load.
+  def load_all
+    for plugin in list
+      load plugin
+    end
+  end
+
+  # Returns the Plugin for +id+.
+  #
+  # Example:
+  #  yaml_plugin = MyPluginHost[:yaml]
+  def [] id, *args, &blk
+    plugin = validate_id(id)
+    begin
+      plugin = plugin_hash.[] plugin, *args, &blk
+    end while plugin.is_a? Symbol
+    plugin
+  end
+
+  # Alias for +[]+.
+  alias load []
+
+  def require_helper plugin_id, helper_name
+    path = path_to File.join(plugin_id, helper_name)
+    require path
+  end
+
+  class << self
+
+    # Adds the module/class to the PLUGIN_HOSTS list.
+    def extended mod
+      PLUGIN_HOSTS << mod
+    end
+
+    # Warns you that you should not #include this module.
+    def included mod
+      warn "#{name} should not be included. Use extend."
+    end
+
+    # Find the PluginHost for host_id.
+    def host_by_id host_id
+      unless PLUGIN_HOSTS_BY_ID.default_proc
+        ph = Hash.new do |h, a_host_id|
+          for host in PLUGIN_HOSTS
+            h[host.host_id] = host
+          end
+          h.fetch a_host_id, nil
+        end
+        PLUGIN_HOSTS_BY_ID.replace ph
+      end
+      PLUGIN_HOSTS_BY_ID[host_id]
+    end
+
+  end
+
+  # The path where the plugins can be found.
+  def plugin_path *args
+    unless args.empty?
+      @plugin_path = File.expand_path File.join(*args)
+      load_map
+    end
+    @plugin_path
+  end
+
+  # The host's ID.
+  #
+  # If PLUGIN_HOST_ID is not set, it is simply the class name.
+  def host_id
+    if self.const_defined? :PLUGIN_HOST_ID
+      self::PLUGIN_HOST_ID
+    else
+      name
+    end
+  end
+
+  # Map a plugin_id to another.
+  #
+  # Usage: Put this in a file plugin_path/_map.rb.
+  #
+  #  class MyColorHost < PluginHost
+  #    map :navy => :dark_blue,
+  #      :maroon => :brown,
+  #      :luna => :moon
+  #  end
+  def map hash
+    for from, to in hash
+      from = validate_id from
+      to = validate_id to
+      plugin_hash[from] = to unless plugin_hash.has_key? from
+    end
+  end
+
+  # Define the default plugin to use when no plugin is found
+  # for a given id.
+  #
+  # See also map.
+  #
+  #  class MyColorHost < PluginHost
+  #    map :navy => :dark_blue
+  #    default :gray
+  #  end
+  def default id = nil
+    if id
+      id = validate_id id
+      plugin_hash[nil] = id
+    else
+      plugin_hash[nil]
+    end
+  end
+
+  # Every plugin must register itself for one or more
+  # +ids+ by calling register_for, which calls this method.
+  #
+  # See Plugin#register_for.
+  def register plugin, *ids
+    for id in ids
+      unless id.is_a? Symbol
+        raise ArgumentError,
+          "id must be a Symbol, but it was a #{id.class}"
+      end
+      plugin_hash[validate_id(id)] = plugin
+    end
+  end
+
+  # A Hash of plugion_id => Plugin pairs.
+  def plugin_hash
+    @plugin_hash ||= create_plugin_hash
+  end
+
+  # Returns an array of all .rb files in the plugin path.
+  #
+  # The extension .rb is not included.
+  def list
+    Dir[path_to('*')].select do |file|
+      File.basename(file)[/^(?!_)\w+\.rb$/]
+    end.map do |file|
+      File.basename file, '.rb'
+    end
+  end
+
+  # Makes a map of all loaded plugins.
+  def inspect
+    map = plugin_hash.dup
+    map.each do |id, plugin|
+      map[id] = plugin.to_s[/(?>\w+)$/]
+    end
+    "#{name}[#{host_id}]#{map.inspect}"
+  end
+
+protected
+  # Created a new plugin list and stores it to @plugin_hash.
+  def create_plugin_hash
+    @plugin_hash =
+      Hash.new do |h, plugin_id|
+        id = validate_id(plugin_id)
+        path = path_to id
+        begin
+          require path
+        rescue LoadError => boom
+          if h.has_key? nil  # default plugin
+            h[id] = h[nil]
+          else
+            raise PluginNotFound, 'Could not load plugin %p: %s' % [id, boom]
+          end
+        else
+          # Plugin should have registered by now
+          unless h.has_key? id
+            raise PluginNotFound,
+              "No #{self.name} plugin for #{id.inspect} found in #{path}."
+          end
+        end
+        h[id]
+      end
+  end
+
+  # Loads the map file (see map).
+  #
+  # This is done automatically when plugin_path is called.
+  def load_map
+    mapfile = path_to '_map'
+    if File.exist? mapfile
+      require mapfile
+    elsif $VERBOSE
+      warn 'no _map.rb found for %s' % name
+    end
+  end
+
+  # Returns the Plugin for +id+.
+  # Use it like Hash#fetch.
+  #
+  # Example:
+  #  yaml_plugin = MyPluginHost[:yaml, :default]
+  def fetch id, *args, &blk
+    plugin_hash.fetch validate_id(id), *args, &blk
+  end
+
+  # Returns the expected path to the plugin file for the given id.
+  def path_to plugin_id
+    File.join plugin_path, "#{plugin_id}.rb"
+  end
+
+  # Converts +id+ to a Symbol if it is a String,
+  # or returns +id+ if it already is a Symbol.
+  #
+  # Raises +ArgumentError+ for all other objects, or if the
+  # given String includes non-alphanumeric characters (\W).
+  def validate_id id
+    if id.is_a? Symbol or id.nil?
+      id
+    elsif id.is_a? String
+      if id[/\w+/] == id
+        id.downcase.to_sym
+      else
+        raise ArgumentError, "Invalid id: '#{id}' given."
+      end
+    else
+      raise ArgumentError,
+        "String or Symbol expected, but #{id.class} given."
+    end
+  end
+
+end
+
+
+# = Plugin
+#
+#  Plugins have to include this module.
+#
+#  IMPORTANT: use extend for this module.
+#
+#  Example: see PluginHost.
+module Plugin
+
+  def included mod
+    warn "#{name} should not be included. Use extend."
+  end
+
+  # Register this class for the given langs.
+  # Example:
+  #   class MyPlugin < PluginHost::BaseClass
+  #     register_for :my_id
+  #     ...
+  #   end
+  #
+  # See PluginHost.register.
+  def register_for *ids
+    plugin_host.register self, *ids
+  end
+  
+  # Returns the title of the plugin, or sets it to the
+  # optional argument +title+.
+  def title title = nil
+    if title
+      @title = title.to_s
+    else
+      @title ||= name[/([^:]+)$/, 1]
+    end
+  end
+
+  # The host for this Plugin class.
+  def plugin_host host = nil
+    if host and not host.is_a? PluginHost
+      raise ArgumentError,
+        "PluginHost expected, but #{host.class} given."
+    end
+    self.const_set :PLUGIN_HOST, host if host
+    self::PLUGIN_HOST
+  end
+
+  # Require some helper files.
+  #
+  # Example:
+  #
+  #  class MyPlugin < PluginHost::BaseClass
+  #     register_for :my_id
+  #     helper :my_helper
+  #
+  # The above example loads the file myplugin/my_helper.rb relative to the
+  # file in which MyPlugin was defined.
+  # 
+  # You can also load a helper from a different plugin:
+  # 
+  #  helper 'other_plugin/helper_name'
+  def helper *helpers
+    for helper in helpers
+      if helper.is_a?(String) && helper[/\//]
+        self::PLUGIN_HOST.require_helper $`, $'
+      else
+        self::PLUGIN_HOST.require_helper plugin_id, helper.to_s
+      end
+    end
+  end
+
+  # Returns the pulgin id used by the engine.
+  def plugin_id
+    name[/\w+$/].downcase
+  end
+
+end
+
+# Convenience method for plugin loading.
+# The syntax used is:
+#
+#  CodeRay.require_plugin '<Host ID>/<Plugin ID>'
+#
+# Returns the loaded plugin.
+def self.require_plugin path
+  host_id, plugin_id = path.split '/', 2
+  host = PluginHost.host_by_id(host_id)
+  raise PluginHost::HostNotFound,
+    "No host for #{host_id.inspect} found." unless host
+  host.load plugin_id
+end
+
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/helpers/word_list.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,138 @@
+module CodeRay
+
+# = WordList
+# 
+# <b>A Hash subclass designed for mapping word lists to token types.</b>
+# 
+# Copyright (c) 2006 by murphy (Kornelius Kalnbach) <murphy rubychan de>
+#
+# License:: LGPL / ask the author
+# Version:: 1.1 (2006-Oct-19)
+#
+# A WordList is a Hash with some additional features.
+# It is intended to be used for keyword recognition.
+#
+# WordList is highly optimized to be used in Scanners,
+# typically to decide whether a given ident is a special token.
+#
+# For case insensitive words use CaseIgnoringWordList.
+#
+# Example:
+#
+#  # define word arrays
+#  RESERVED_WORDS = %w[
+#    asm break case continue default do else
+#    ...
+#  ]
+#  
+#  PREDEFINED_TYPES = %w[
+#    int long short char void
+#    ...
+#  ]
+#  
+#  PREDEFINED_CONSTANTS = %w[
+#    EOF NULL ...
+#  ]
+#  
+#  # make a WordList
+#  IDENT_KIND = WordList.new(:ident).
+#    add(RESERVED_WORDS, :reserved).
+#    add(PREDEFINED_TYPES, :pre_type).
+#    add(PREDEFINED_CONSTANTS, :pre_constant)
+#
+#  ...
+#
+#  def scan_tokens tokens, options
+#    ...
+#    
+#    elsif scan(/[A-Za-z_][A-Za-z_0-9]*/)
+#      # use it
+#      kind = IDENT_KIND[match]
+#      ...
+class WordList < Hash
+
+  # Creates a new WordList with +default+ as default value.
+  # 
+  # You can activate +caching+ to store the results for every [] request.
+  # 
+  # With caching, methods like +include?+ or +delete+ may no longer behave
+  # as you expect. Therefore, it is recommended to use the [] method only.
+  def initialize default = false, caching = false, &block
+    if block
+      raise ArgumentError, 'Can\'t combine block with caching.' if caching
+      super(&block)
+    else
+      if caching
+        super() do |h, k|
+          h[k] = h.fetch k, default
+        end
+      else
+        super default
+      end
+    end
+  end
+
+  # Add words to the list and associate them with +kind+.
+  # 
+  # Returns +self+, so you can concat add calls.
+  def add words, kind = true
+    words.each do |word|
+      self[word] = kind
+    end
+    self
+  end
+
+end
+
+
+# A CaseIgnoringWordList is like a WordList, only that
+# keys are compared case-insensitively.
+# 
+# Ignoring the text case is realized by sending the +downcase+ message to
+# all keys.
+# 
+# Caching usually makes a CaseIgnoringWordList faster, but it has to be
+# activated explicitely.
+class CaseIgnoringWordList < WordList
+
+  # Creates a new case-insensitive WordList with +default+ as default value.
+  # 
+  # You can activate caching to store the results for every [] request.
+  # This speeds up subsequent lookups for the same word, but also
+  # uses memory.
+  def initialize default = false, caching = false
+    if caching
+      super(default, false) do |h, k|
+        h[k] = h.fetch k.downcase, default
+      end
+    else
+      super(default, false)
+      extend Uncached
+    end
+  end
+  
+  module Uncached  # :nodoc:
+    def [] key
+      super(key.downcase)
+    end
+  end
+
+  # Add +words+ to the list and associate them with +kind+.
+  def add words, kind = true
+    words.each do |word|
+      self[word.downcase] = kind
+    end
+    self
+  end
+
+end
+
+end
+
+__END__
+# check memory consumption
+END {
+  ObjectSpace.each_object(CodeRay::CaseIgnoringWordList) do |wl|
+    p wl.inject(0) { |memo, key, value| memo + key.size + 24 }
+  end
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanner.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,298 @@
+module CodeRay
+
+  require 'coderay/helpers/plugin'
+
+  # = Scanners
+  #
+  # This module holds the Scanner class and its subclasses.
+  # For example, the Ruby scanner is named CodeRay::Scanners::Ruby
+  # can be found in coderay/scanners/ruby.
+  #
+  # Scanner also provides methods and constants for the register
+  # mechanism and the [] method that returns the Scanner class
+  # belonging to the given lang.
+  #
+  # See PluginHost.
+  module Scanners
+    extend PluginHost
+    plugin_path File.dirname(__FILE__), 'scanners'
+
+    require 'strscan'
+
+    # = Scanner
+    #
+    # The base class for all Scanners.
+    #
+    # It is a subclass of Ruby's great +StringScanner+, which
+    # makes it easy to access the scanning methods inside.
+    #
+    # It is also +Enumerable+, so you can use it like an Array of
+    # Tokens:
+    #
+    #   require 'coderay'
+    #   
+    #   c_scanner = CodeRay::Scanners[:c].new "if (*p == '{') nest++;"
+    #   
+    #   for text, kind in c_scanner
+    #     puts text if kind == :operator
+    #   end
+    #   
+    #   # prints: (*==)++;
+    #
+    # OK, this is a very simple example :)
+    # You can also use +map+, +any?+, +find+ and even +sort_by+,
+    # if you want.
+    class Scanner < StringScanner
+      
+      extend Plugin
+      plugin_host Scanners
+
+      # Raised if a Scanner fails while scanning
+      ScanError = Class.new(Exception)
+
+      require 'coderay/helpers/word_list'
+
+      # The default options for all scanner classes.
+      #
+      # Define @default_options for subclasses.
+      DEFAULT_OPTIONS = { :stream => false }
+      
+      KINDS_NOT_LOC = [:comment, :doctype]
+
+      class << self
+
+        # Returns if the Scanner can be used in streaming mode.
+        def streamable?
+          is_a? Streamable
+        end
+
+        def normify code
+          code = code.to_s
+          if code.respond_to?(:encoding) && (code.encoding.name != 'UTF-8' || !code.valid_encoding?)
+            code = code.dup
+            original_encoding = code.encoding
+            code.force_encoding 'Windows-1252'
+            unless code.valid_encoding?
+              code.force_encoding original_encoding
+              if code.encoding.name == 'UTF-8'
+                code.encode! 'UTF-16BE', :invalid => :replace, :undef => :replace, :replace => '?'
+              end
+              code.encode! 'UTF-8', :invalid => :replace, :undef => :replace, :replace => '?'
+            end
+          end
+          code.to_unix
+        end
+        
+        def file_extension extension = nil
+          if extension
+            @file_extension = extension.to_s
+          else
+            @file_extension ||= plugin_id.to_s
+          end
+        end
+
+      end
+
+=begin
+## Excluded for speed reasons; protected seems to make methods slow.
+
+  # Save the StringScanner methods from being called.
+  # This would not be useful for highlighting.
+  strscan_public_methods =
+    StringScanner.instance_methods -
+    StringScanner.ancestors[1].instance_methods
+  protected(*strscan_public_methods)
+=end
+
+      # Create a new Scanner.
+      #
+      # * +code+ is the input String and is handled by the superclass
+      #   StringScanner.
+      # * +options+ is a Hash with Symbols as keys.
+      #   It is merged with the default options of the class (you can
+      #   overwrite default options here.)
+      # * +block+ is the callback for streamed highlighting.
+      #
+      # If you set :stream to +true+ in the options, the Scanner uses a
+      # TokenStream with the +block+ as callback to handle the tokens.
+      #
+      # Else, a Tokens object is used.
+      def initialize code='', options = {}, &block
+        raise "I am only the basic Scanner class. I can't scan "\
+          "anything. :( Use my subclasses." if self.class == Scanner
+        
+        @options = self.class::DEFAULT_OPTIONS.merge options
+
+        super Scanner.normify(code)
+
+        @tokens = options[:tokens]
+        if @options[:stream]
+          warn "warning in CodeRay::Scanner.new: :stream is set, "\
+            "but no block was given" unless block_given?
+          raise NotStreamableError, self unless kind_of? Streamable
+          @tokens ||= TokenStream.new(&block)
+        else
+          warn "warning in CodeRay::Scanner.new: Block given, "\
+            "but :stream is #{@options[:stream]}" if block_given?
+          @tokens ||= Tokens.new
+        end
+        @tokens.scanner = self
+
+        setup
+      end
+
+      def reset
+        super
+        reset_instance
+      end
+
+      def string= code
+        code = Scanner.normify(code)
+        if defined?(RUBY_DESCRIPTION) && RUBY_DESCRIPTION['rubinius 1.0.1']
+          reset_state
+          @string = code
+        else
+          super code
+        end
+        reset_instance
+      end
+
+      # More mnemonic accessor name for the input string.
+      alias code string
+      alias code= string=
+
+      # Returns the Plugin ID for this scanner.
+      def lang
+        self.class.plugin_id
+      end
+
+      # Scans the code and returns all tokens in a Tokens object.
+      def tokenize new_string=nil, options = {}
+        options = @options.merge(options)
+        self.string = new_string if new_string
+        @cached_tokens =
+          if @options[:stream]  # :stream must have been set already
+            reset unless new_string
+            scan_tokens @tokens, options
+            @tokens
+          else
+            scan_tokens @tokens, options
+          end
+      end
+
+      def tokens
+        @cached_tokens ||= tokenize
+      end
+      
+      # Whether the scanner is in streaming mode.
+      def streaming?
+        !!@options[:stream]
+      end
+
+      # Traverses the tokens.
+      def each &block
+        raise ArgumentError,
+          'Cannot traverse TokenStream.' if @options[:stream]
+        tokens.each(&block)
+      end
+      include Enumerable
+
+      # The current line position of the scanner.
+      #
+      # Beware, this is implemented inefficiently. It should be used
+      # for debugging only.
+      def line
+        string[0..pos].count("\n") + 1
+      end
+      
+      def column pos = self.pos
+        return 0 if pos <= 0
+        string = string()
+        if string.respond_to?(:bytesize) && (defined?(@bin_string) || string.bytesize != string.size)
+          @bin_string ||= string.dup.force_encoding('binary')
+          string = @bin_string
+        end
+        pos - (string.rindex(?\n, pos) || 0)
+      end
+      
+      def marshal_dump
+        @options
+      end
+      
+      def marshal_load options
+        @options = options
+      end
+
+    protected
+
+      # Can be implemented by subclasses to do some initialization
+      # that has to be done once per instance.
+      #
+      # Use reset for initialization that has to be done once per
+      # scan.
+      def setup
+      end
+
+      # This is the central method, and commonly the only one a
+      # subclass implements.
+      #
+      # Subclasses must implement this method; it must return +tokens+
+      # and must only use Tokens#<< for storing scanned tokens!
+      def scan_tokens tokens, options
+        raise NotImplementedError,
+          "#{self.class}#scan_tokens not implemented."
+      end
+
+      def reset_instance
+        @tokens.clear unless @options[:keep_tokens]
+        @cached_tokens = nil
+        @bin_string = nil if defined? @bin_string
+      end
+
+      # Scanner error with additional status information
+      def raise_inspect msg, tokens, state = 'No state given!', ambit = 30
+        raise ScanError, <<-EOE % [
+
+
+***ERROR in %s: %s (after %d tokens)
+
+tokens:
+%s
+
+current line: %d  column: %d  pos: %d
+matched: %p  state: %p
+bol? = %p,  eos? = %p
+
+surrounding code:
+%p  ~~  %p
+
+
+***ERROR***
+
+        EOE
+          File.basename(caller[0]),
+          msg,
+          tokens.size,
+          tokens.last(10).map { |t| t.inspect }.join("\n"),
+          line, column, pos,
+          matched, state, bol?, eos?,
+          string[pos - ambit, ambit],
+          string[pos, ambit],
+        ]
+      end
+
+    end
+
+  end
+end
+
+class String
+  # I love this hack. It seems to silence all dos/unix/mac newline problems.
+  def to_unix
+    if index ?\r
+      gsub(/\r\n?/, "\n")
+    else
+      self
+    end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,143 @@
+K 25
+svn:wc:ra_dav:version-url
+V 71
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners
+END
+java_script-0.9.6.rb
+K 25
+svn:wc:ra_dav:version-url
+V 92
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java_script-0.9.6.rb
+END
+java.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java.rb
+END
+python.rb
+K 25
+svn:wc:ra_dav:version-url
+V 81
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/python.rb
+END
+ruby.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby.rb
+END
+cpp.rb
+K 25
+svn:wc:ra_dav:version-url
+V 78
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/cpp.rb
+END
+c.rb
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/c.rb
+END
+groovy.rb
+K 25
+svn:wc:ra_dav:version-url
+V 81
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/groovy.rb
+END
+debug.rb
+K 25
+svn:wc:ra_dav:version-url
+V 80
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/debug.rb
+END
+rhtml.rb
+K 25
+svn:wc:ra_dav:version-url
+V 80
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/rhtml.rb
+END
+php.rb
+K 25
+svn:wc:ra_dav:version-url
+V 78
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/php.rb
+END
+css.rb
+K 25
+svn:wc:ra_dav:version-url
+V 78
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/css.rb
+END
+sql.rb
+K 25
+svn:wc:ra_dav:version-url
+V 78
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/sql.rb
+END
+xml.rb
+K 25
+svn:wc:ra_dav:version-url
+V 78
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/xml.rb
+END
+yaml.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/yaml.rb
+END
+scheme.rb
+K 25
+svn:wc:ra_dav:version-url
+V 81
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/scheme.rb
+END
+html.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/html.rb
+END
+java_script.rb
+K 25
+svn:wc:ra_dav:version-url
+V 86
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java_script.rb
+END
+delphi.rb
+K 25
+svn:wc:ra_dav:version-url
+V 81
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/delphi.rb
+END
+nitro_xhtml.rb
+K 25
+svn:wc:ra_dav:version-url
+V 86
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/nitro_xhtml.rb
+END
+diff.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/diff.rb
+END
+plaintext.rb
+K 25
+svn:wc:ra_dav:version-url
+V 84
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/plaintext.rb
+END
+json.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/json.rb
+END
+_map.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/_map.rb
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,816 @@
+10
+
+dir
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners
+http://redmine.rubyforge.org/svn
+
+
+
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+java_script-0.9.6.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+a10b4406847a27622a61c041420dab5a
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6723
+
+java
+dir
+
+ruby
+dir
+
+java.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+35c0803e396fa14a42c6b8645ca7d557
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5041
+
+python.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+939e009d9b197cb6437646be82c02982
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+9190
+
+ruby.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+cb032992b032fd9cbc93500496d0b038
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+15309
+
+cpp.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+afc4a4b0842e5efdafe98f6c5a10810e
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6286
+
+c.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+299db2bdce8368d0bc6d90f5839c87ee
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5408
+
+groovy.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+7fc1acca7ff04fa00160349b3a1b543e
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+8521
+
+debug.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+94bdd6c948cb9c3d21ef94a5cec19e05
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1281
+
+rhtml.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+ff2e0cad09ef6ba12b2da44e90a25367
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1629
+
+php.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+2de3bd0694a6b52343618c14654c5366
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+23747
+
+css.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+d3c931a5468c723bd8458b4a73d44943
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5493
+
+sql.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+917467cab834f202a455ec0e8be68508
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4726
+
+xml.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+798309ac45aa9d4ccc159242f3a6f150
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+211
+
+yaml.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+f62eab25adbef42e92cad3f5463f91ac
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4261
+
+html.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+1f93d8c4375c7e7b740c42210e0c6edb
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4248
+
+scheme.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+f6c296bbb33704ec2a03725b01e06719
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4939
+
+java_script.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+31360b9ad9e408df15eb2abf84d17c8a
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6733
+
+delphi.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+182116a4525447d4faed874dfb790277
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4504
+
+nitro_xhtml.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+f7d82e60f68fe6c9d46b63e63f6ec9f6
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2858
+
+diff.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+c5932e739b44b0e92f093dfb70cf9de4
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3204
+
+plaintext.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+ae16e40b3db78a5d8c793165085f5db9
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+316
+
+json.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+c34c4d83c7c8cb15bc7209bd36da654e
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2793
+
+_map.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+b3eadcc78242cf25ba0ab3205d6a2b61
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+413
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/_map.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,23 @@
+module CodeRay
+module Scanners
+
+  map \
+    :h => :c,
+    :cplusplus => :cpp,
+    :'c++' => :cpp,
+    :ecma => :java_script,
+    :ecmascript => :java_script,
+    :ecma_script => :java_script,
+    :irb => :ruby,
+    :javascript => :java_script,
+    :js => :java_script,
+    :nitro => :nitro_xhtml,
+    :pascal => :delphi,
+    :plain => :plaintext,
+    :xhtml => :html,
+    :yml => :yaml
+
+  default :plain
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/c.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,203 @@
+module CodeRay
+module Scanners
+
+  class C < Scanner
+
+    include Streamable
+    
+    register_for :c
+    file_extension 'c'
+
+    RESERVED_WORDS = [
+      'asm', 'break', 'case', 'continue', 'default', 'do',
+      'else', 'enum', 'for', 'goto', 'if', 'return',
+      'sizeof', 'struct', 'switch', 'typedef', 'union', 'while',
+      'restrict',  # added in C99
+    ]
+
+    PREDEFINED_TYPES = [
+      'int', 'long', 'short', 'char',
+      'signed', 'unsigned', 'float', 'double',
+      'bool', 'complex',  # added in C99
+    ]
+
+    PREDEFINED_CONSTANTS = [
+      'EOF', 'NULL',
+      'true', 'false',  # added in C99
+    ]
+    DIRECTIVES = [
+      'auto', 'extern', 'register', 'static', 'void',
+      'const', 'volatile',  # added in C89
+      'inline',  # added in C99
+    ]
+
+    IDENT_KIND = WordList.new(:ident).
+      add(RESERVED_WORDS, :reserved).
+      add(PREDEFINED_TYPES, :pre_type).
+      add(DIRECTIVES, :directive).
+      add(PREDEFINED_CONSTANTS, :pre_constant)
+
+    ESCAPE = / [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
+
+    def scan_tokens tokens, options
+
+      state = :initial
+      label_expected = true
+      case_expected = false
+      label_expected_before_preproc_line = nil
+      in_preproc_line = false
+
+      until eos?
+
+        kind = nil
+        match = nil
+        
+        case state
+
+        when :initial
+
+          if match = scan(/ \s+ | \\\n /x)
+            if in_preproc_line && match != "\\\n" && match.index(?\n)
+              in_preproc_line = false
+              label_expected = label_expected_before_preproc_line
+            end
+            tokens << [match, :space]
+            next
+
+          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
+            kind = :comment
+
+          elsif match = scan(/ \# \s* if \s* 0 /x)
+            match << scan_until(/ ^\# (?:elif|else|endif) .*? $ | \z /xm) unless eos?
+            kind = :comment
+
+          elsif match = scan(/ [-+*=<>?:;,!&^|()\[\]{}~%]+ | \/=? | \.(?!\d) /x)
+            label_expected = match =~ /[;\{\}]/
+            if case_expected
+              label_expected = true if match == ':'
+              case_expected = false
+            end
+            kind = :operator
+
+          elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
+            kind = IDENT_KIND[match]
+            if kind == :ident && label_expected && !in_preproc_line && scan(/:(?!:)/)
+              kind = :label
+              match << matched
+            else
+              label_expected = false
+              if kind == :reserved
+                case match
+                when 'case', 'default'
+                  case_expected = true
+                end
+              end
+            end
+
+          elsif scan(/\$/)
+            kind = :ident
+          
+          elsif match = scan(/L?"/)
+            tokens << [:open, :string]
+            if match[0] == ?L
+              tokens << ['L', :modifier]
+              match = '"'
+            end
+            state = :string
+            kind = :delimiter
+
+          elsif scan(/#[ \t]*(\w*)/)
+            kind = :preprocessor
+            in_preproc_line = true
+            label_expected_before_preproc_line = label_expected
+            state = :include_expected if self[1] == 'include'
+
+          elsif scan(/ L?' (?: [^\'\n\\] | \\ #{ESCAPE} )? '? /ox)
+            label_expected = false
+            kind = :char
+
+          elsif scan(/0[xX][0-9A-Fa-f]+/)
+            label_expected = false
+            kind = :hex
+
+          elsif scan(/(?:0[0-7]+)(?![89.eEfF])/)
+            label_expected = false
+            kind = :oct
+
+          elsif scan(/(?:\d+)(?![.eEfF])L?L?/)
+            label_expected = false
+            kind = :integer
+
+          elsif scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
+            label_expected = false
+            kind = :float
+
+          else
+            getch
+            kind = :error
+
+          end
+
+        when :string
+          if scan(/[^\\\n"]+/)
+            kind = :content
+          elsif scan(/"/)
+            tokens << ['"', :delimiter]
+            tokens << [:close, :string]
+            state = :initial
+            label_expected = false
+            next
+          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+            kind = :char
+          elsif scan(/ \\ | $ /x)
+            tokens << [:close, :string]
+            kind = :error
+            state = :initial
+            label_expected = false
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+          end
+
+        when :include_expected
+          if scan(/<[^>\n]+>?|"[^"\n\\]*(?:\\.[^"\n\\]*)*"?/)
+            kind = :include
+            state = :initial
+
+          elsif match = scan(/\s+/)
+            kind = :space
+            state = :initial if match.index ?\n
+
+          else
+            state = :initial
+            next
+
+          end
+
+        else
+          raise_inspect 'Unknown state', tokens
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+
+        tokens << [match, kind]
+
+      end
+
+      if state == :string
+        tokens << [:close, :string]
+      end
+
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/cpp.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,228 @@
+module CodeRay
+module Scanners
+
+  class CPlusPlus < Scanner
+
+    include Streamable
+    
+    register_for :cpp
+    file_extension 'cpp'
+    title 'C++'
+    
+    # http://www.cppreference.com/wiki/keywords/start
+    RESERVED_WORDS = [
+      'and', 'and_eq', 'asm', 'bitand', 'bitor', 'break',
+      'case', 'catch', 'class', 'compl', 'const_cast',
+      'continue', 'default', 'delete', 'do', 'dynamic_cast', 'else',
+      'enum', 'export', 'for', 'goto', 'if', 'namespace', 'new',
+      'not', 'not_eq', 'or', 'or_eq', 'reinterpret_cast', 'return',
+      'sizeof', 'static_cast', 'struct', 'switch', 'template',
+      'throw', 'try', 'typedef', 'typeid', 'typename', 'union',
+      'while', 'xor', 'xor_eq'
+    ]
+
+    PREDEFINED_TYPES = [
+      'bool', 'char', 'double', 'float', 'int', 'long',
+      'short', 'signed', 'unsigned', 'wchar_t', 'string'
+    ]
+    PREDEFINED_CONSTANTS = [
+      'false', 'true',
+      'EOF', 'NULL',
+    ]
+    PREDEFINED_VARIABLES = [
+      'this'
+    ]
+    DIRECTIVES = [
+      'auto', 'const', 'explicit', 'extern', 'friend', 'inline', 'mutable', 'operator',
+      'private', 'protected', 'public', 'register', 'static', 'using', 'virtual', 'void',
+      'volatile'
+    ]
+
+    IDENT_KIND = WordList.new(:ident).
+      add(RESERVED_WORDS, :reserved).
+      add(PREDEFINED_TYPES, :pre_type).
+      add(PREDEFINED_VARIABLES, :local_variable).
+      add(DIRECTIVES, :directive).
+      add(PREDEFINED_CONSTANTS, :pre_constant)
+
+    ESCAPE = / [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
+
+    def scan_tokens tokens, options
+
+      state = :initial
+      label_expected = true
+      case_expected = false
+      label_expected_before_preproc_line = nil
+      in_preproc_line = false
+
+      until eos?
+
+        kind = nil
+        match = nil
+        
+        case state
+
+        when :initial
+
+          if match = scan(/ \s+ | \\\n /x)
+            if in_preproc_line && match != "\\\n" && match.index(?\n)
+              in_preproc_line = false
+              label_expected = label_expected_before_preproc_line
+            end
+            tokens << [match, :space]
+            next
+
+          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
+            kind = :comment
+
+          elsif match = scan(/ \# \s* if \s* 0 /x)
+            match << scan_until(/ ^\# (?:elif|else|endif) .*? $ | \z /xm) unless eos?
+            kind = :comment
+
+          elsif match = scan(/ [-+*=<>?:;,!&^|()\[\]{}~%]+ | \/=? | \.(?!\d) /x)
+            label_expected = match =~ /[;\{\}]/
+            if case_expected
+              label_expected = true if match == ':'
+              case_expected = false
+            end
+            kind = :operator
+
+          elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
+            kind = IDENT_KIND[match]
+            if kind == :ident && label_expected && !in_preproc_line && scan(/:(?!:)/)
+              kind = :label
+              match << matched
+            else
+              label_expected = false
+              if kind == :reserved
+                case match
+                when 'class'
+                  state = :class_name_expected
+                when 'case', 'default'
+                  case_expected = true
+                end
+              end
+            end
+
+          elsif scan(/\$/)
+            kind = :ident
+          
+          elsif match = scan(/L?"/)
+            tokens << [:open, :string]
+            if match[0] == ?L
+              tokens << ['L', :modifier]
+              match = '"'
+            end
+            state = :string
+            kind = :delimiter
+
+          elsif scan(/#[ \t]*(\w*)/)
+            kind = :preprocessor
+            in_preproc_line = true
+            label_expected_before_preproc_line = label_expected
+            state = :include_expected if self[1] == 'include'
+
+          elsif scan(/ L?' (?: [^\'\n\\] | \\ #{ESCAPE} )? '? /ox)
+            label_expected = false
+            kind = :char
+
+          elsif scan(/0[xX][0-9A-Fa-f]+/)
+            label_expected = false
+            kind = :hex
+
+          elsif scan(/(?:0[0-7]+)(?![89.eEfF])/)
+            label_expected = false
+            kind = :oct
+
+          elsif scan(/(?:\d+)(?![.eEfF])L?L?/)
+            label_expected = false
+            kind = :integer
+
+          elsif scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
+            label_expected = false
+            kind = :float
+
+          else
+            getch
+            kind = :error
+
+          end
+
+        when :string
+          if scan(/[^\\"]+/)
+            kind = :content
+          elsif scan(/"/)
+            tokens << ['"', :delimiter]
+            tokens << [:close, :string]
+            state = :initial
+            label_expected = false
+            next
+          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+            kind = :char
+          elsif scan(/ \\ | $ /x)
+            tokens << [:close, :string]
+            kind = :error
+            state = :initial
+            label_expected = false
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+          end
+
+        when :include_expected
+          if scan(/<[^>\n]+>?|"[^"\n\\]*(?:\\.[^"\n\\]*)*"?/)
+            kind = :include
+            state = :initial
+
+          elsif match = scan(/\s+/)
+            kind = :space
+            state = :initial if match.index ?\n
+
+          else
+            state = :initial
+            next
+
+          end
+        
+        when :class_name_expected
+          if scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
+            kind = :class
+            state = :initial
+
+          elsif match = scan(/\s+/)
+            kind = :space
+
+          else
+            getch
+            kind = :error
+            state = :initial
+
+          end
+          
+        else
+          raise_inspect 'Unknown state', tokens
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+
+        tokens << [match, kind]
+
+      end
+
+      if state == :string
+        tokens << [:close, :string]
+      end
+
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/css.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,209 @@
+module CodeRay
+module Scanners
+
+  class CSS < Scanner
+
+    register_for :css
+
+    KINDS_NOT_LOC = [
+      :comment,
+      :class, :pseudo_class, :type,
+      :constant, :directive,
+      :key, :value, :operator, :color, :float,
+      :error, :important,
+    ]
+    
+    module RE
+      Hex = /[0-9a-fA-F]/
+      Unicode = /\\#{Hex}{1,6}(?:\r\n|\s)?/ # differs from standard because it allows uppercase hex too
+      Escape = /#{Unicode}|\\[^\r\n\f0-9a-fA-F]/
+      NMChar = /[-_a-zA-Z0-9]|#{Escape}/
+      NMStart = /[_a-zA-Z]|#{Escape}/
+      NL = /\r\n|\r|\n|\f/
+      String1 = /"(?:[^\n\r\f\\"]|\\#{NL}|#{Escape})*"?/  # FIXME: buggy regexp
+      String2 = /'(?:[^\n\r\f\\']|\\#{NL}|#{Escape})*'?/  # FIXME: buggy regexp
+      String = /#{String1}|#{String2}/
+
+      HexColor = /#(?:#{Hex}{6}|#{Hex}{3})/
+      Color = /#{HexColor}/
+
+      Num = /-?(?:[0-9]+|[0-9]*\.[0-9]+)/
+      Name = /#{NMChar}+/
+      Ident = /-?#{NMStart}#{NMChar}*/
+      AtKeyword = /@#{Ident}/
+      Percentage = /#{Num}%/
+
+      reldimensions = %w[em ex px]
+      absdimensions = %w[in cm mm pt pc]
+      Unit = Regexp.union(*(reldimensions + absdimensions))
+
+      Dimension = /#{Num}#{Unit}/
+
+      Comment = %r! /\* (?: .*? \*/ | .* ) !mx
+      Function = /(?:url|alpha)\((?:[^)\n\r\f]|\\\))*\)?/
+
+      Id = /##{Name}/
+      Class = /\.#{Name}/
+      PseudoClass = /:#{Name}/
+      AttributeSelector = /\[[^\]]*\]?/
+
+    end
+
+    def scan_tokens tokens, options
+      
+      value_expected = nil
+      states = [:initial]
+
+      until eos?
+
+        kind = nil
+        match = nil
+
+        if scan(/\s+/)
+          kind = :space
+
+        elsif case states.last
+          when :initial, :media
+            if scan(/(?>#{RE::Ident})(?!\()|\*/ox)
+              kind = :type
+            elsif scan RE::Class
+              kind = :class
+            elsif scan RE::Id
+              kind = :constant
+            elsif scan RE::PseudoClass
+              kind = :pseudo_class
+            elsif match = scan(RE::AttributeSelector)
+              # TODO: Improve highlighting inside of attribute selectors.
+              tokens << [:open, :string]
+              tokens << [match[0,1], :delimiter]
+              tokens << [match[1..-2], :content] if match.size > 2
+              tokens << [match[-1,1], :delimiter] if match[-1] == ?]
+              tokens << [:close, :string]
+              next
+            elsif match = scan(/@media/)
+              kind = :directive
+              states.push :media_before_name
+            end
+          
+          when :block
+            if scan(/(?>#{RE::Ident})(?!\()/ox)
+              if value_expected
+                kind = :value
+              else
+                kind = :key
+              end
+            end
+
+          when :media_before_name
+            if scan RE::Ident
+              kind = :type
+              states[-1] = :media_after_name
+            end
+          
+          when :media_after_name
+            if scan(/\{/)
+              kind = :operator
+              states[-1] = :media
+            end
+          
+          when :comment
+            if scan(/(?:[^*\s]|\*(?!\/))+/)
+              kind = :comment
+            elsif scan(/\*\//)
+              kind = :comment
+              states.pop
+            elsif scan(/\s+/)
+              kind = :space
+            end
+
+          else
+            raise_inspect 'Unknown state', tokens
+
+          end
+
+        elsif scan(/\/\*/)
+          kind = :comment
+          states.push :comment
+
+        elsif scan(/\{/)
+          value_expected = false
+          kind = :operator
+          states.push :block
+
+        elsif scan(/\}/)
+          value_expected = false
+          if states.last == :block || states.last == :media
+            kind = :operator
+            states.pop
+          else
+            kind = :error
+          end
+
+        elsif match = scan(/#{RE::String}/o)
+          tokens << [:open, :string]
+          tokens << [match[0, 1], :delimiter]
+          tokens << [match[1..-2], :content] if match.size > 2
+          tokens << [match[-1, 1], :delimiter] if match.size >= 2
+          tokens << [:close, :string]
+          next
+
+        elsif match = scan(/#{RE::Function}/o)
+          tokens << [:open, :string]
+          start = match[/^\w+\(/]
+          tokens << [start, :delimiter]
+          if match[-1] == ?)
+            tokens << [match[start.size..-2], :content]
+            tokens << [')', :delimiter]
+          else
+            tokens << [match[start.size..-1], :content]
+          end
+          tokens << [:close, :string]
+          next
+
+        elsif scan(/(?: #{RE::Dimension} | #{RE::Percentage} | #{RE::Num} )/ox)
+          kind = :float
+
+        elsif scan(/#{RE::Color}/o)
+          kind = :color
+
+        elsif scan(/! *important/)
+          kind = :important
+
+        elsif scan(/rgb\([^()\n]*\)?/)
+          kind = :color
+
+        elsif scan(/#{RE::AtKeyword}/o)
+          kind = :directive
+
+        elsif match = scan(/ [+>:;,.=()\/] /x)
+          if match == ':'
+            value_expected = true
+          elsif match == ';'
+            value_expected = false
+          end
+          kind = :operator
+
+        else
+          getch
+          kind = :error
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+
+        tokens << [match, kind]
+
+      end
+
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/debug.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,62 @@
+module CodeRay
+module Scanners
+
+  # = Debug Scanner
+  class Debug < Scanner
+
+    include Streamable
+    register_for :debug
+    file_extension 'raydebug'
+    title 'CodeRay Token Dump'
+
+  protected
+    def scan_tokens tokens, options
+
+      opened_tokens = []
+
+      until eos?
+
+        kind = nil
+        match = nil
+
+          if scan(/\s+/)
+            tokens << [matched, :space]
+            next
+            
+          elsif scan(/ (\w+) \( ( [^\)\\]* ( \\. [^\)\\]* )* ) \) /x)
+            kind = self[1].to_sym
+            match = self[2].gsub(/\\(.)/, '\1')
+            
+          elsif scan(/ (\w+) < /x)
+            kind = self[1].to_sym
+            opened_tokens << kind
+            match = :open
+            
+          elsif !opened_tokens.empty? && scan(/ > /x)
+            kind = opened_tokens.pop || :error
+            match = :close
+            
+          else
+            kind = :error
+            getch
+
+          end
+                  
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+
+        tokens << [match, kind]
+        
+      end
+      
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/delphi.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,150 @@
+module CodeRay
+module Scanners
+  
+  class Delphi < Scanner
+
+    register_for :delphi
+    file_extension 'pas'
+    
+    RESERVED_WORDS = [
+      'and', 'array', 'as', 'at', 'asm', 'at', 'begin', 'case', 'class',
+      'const', 'constructor', 'destructor', 'dispinterface', 'div', 'do',
+      'downto', 'else', 'end', 'except', 'exports', 'file', 'finalization',
+      'finally', 'for', 'function', 'goto', 'if', 'implementation', 'in',
+      'inherited', 'initialization', 'inline', 'interface', 'is', 'label',
+      'library', 'mod', 'nil', 'not', 'object', 'of', 'or', 'out', 'packed',
+      'procedure', 'program', 'property', 'raise', 'record', 'repeat',
+      'resourcestring', 'set', 'shl', 'shr', 'string', 'then', 'threadvar',
+      'to', 'try', 'type', 'unit', 'until', 'uses', 'var', 'while', 'with',
+      'xor', 'on'
+    ]
+
+    DIRECTIVES = [
+      'absolute', 'abstract', 'assembler', 'at', 'automated', 'cdecl',
+      'contains', 'deprecated', 'dispid', 'dynamic', 'export',
+      'external', 'far', 'forward', 'implements', 'local', 
+      'near', 'nodefault', 'on', 'overload', 'override',
+      'package', 'pascal', 'platform', 'private', 'protected', 'public',
+      'published', 'read', 'readonly', 'register', 'reintroduce',
+      'requires', 'resident', 'safecall', 'stdcall', 'stored', 'varargs',
+      'virtual', 'write', 'writeonly'
+    ]
+
+    IDENT_KIND = CaseIgnoringWordList.new(:ident).
+      add(RESERVED_WORDS, :reserved).
+      add(DIRECTIVES, :directive)
+    
+    NAME_FOLLOWS = CaseIgnoringWordList.new(false).
+      add(%w(procedure function .))
+
+  private
+    def scan_tokens tokens, options
+
+      state = :initial
+      last_token = ''
+
+      until eos?
+
+        kind = nil
+        match = nil
+
+        if state == :initial
+          
+          if scan(/ \s+ /x)
+            tokens << [matched, :space]
+            next
+            
+          elsif scan(%r! \{ \$ [^}]* \}? | \(\* \$ (?: .*? \*\) | .* ) !mx)
+            tokens << [matched, :preprocessor]
+            next
+            
+          elsif scan(%r! // [^\n]* | \{ [^}]* \}? | \(\* (?: .*? \*\) | .* ) !mx)
+            tokens << [matched, :comment]
+            next
+            
+          elsif match = scan(/ <[>=]? | >=? | :=? | [-+=*\/;,@\^|\(\)\[\]] | \.\. /x)
+            kind = :operator
+          
+          elsif match = scan(/\./)
+            kind = :operator
+            if last_token == 'end'
+              tokens << [match, kind]
+              next
+            end
+            
+          elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
+            kind = NAME_FOLLOWS[last_token] ? :ident : IDENT_KIND[match]
+            
+          elsif match = scan(/ ' ( [^\n']|'' ) (?:'|$) /x)
+            tokens << [:open, :char]
+            tokens << ["'", :delimiter]
+            tokens << [self[1], :content]
+            tokens << ["'", :delimiter]
+            tokens << [:close, :char]
+            next
+            
+          elsif match = scan(/ ' /x)
+            tokens << [:open, :string]
+            state = :string
+            kind = :delimiter
+            
+          elsif scan(/ \# (?: \d+ | \$[0-9A-Fa-f]+ ) /x)
+            kind = :char
+            
+          elsif scan(/ \$ [0-9A-Fa-f]+ /x)
+            kind = :hex
+            
+          elsif scan(/ (?: \d+ ) (?![eE]|\.[^.]) /x)
+            kind = :integer
+            
+          elsif scan(/ \d+ (?: \.\d+ (?: [eE][+-]? \d+ )? | [eE][+-]? \d+ ) /x)
+            kind = :float
+
+          else
+            kind = :error
+            getch
+
+          end
+          
+        elsif state == :string
+          if scan(/[^\n']+/)
+            kind = :content
+          elsif scan(/''/)
+            kind = :char
+          elsif scan(/'/)
+            tokens << ["'", :delimiter]
+            tokens << [:close, :string]
+            state = :initial
+            next
+          elsif scan(/\n/)
+            tokens << [:close, :string]
+            kind = :error
+            state = :initial
+          else
+            raise "else case \' reached; %p not handled." % peek(1), tokens
+          end
+          
+        else
+          raise 'else-case reached', tokens
+          
+        end
+        
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens, state
+        end
+        raise_inspect 'Empty token', tokens unless match
+
+        last_token = match
+        tokens << [match, kind]
+        
+      end
+      
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/diff.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,110 @@
+module CodeRay
+module Scanners
+  
+  class Diff < Scanner
+    
+    register_for :diff
+    title 'diff output'
+    
+    def scan_tokens tokens, options
+      
+      line_kind = nil
+      state = :initial
+      
+      until eos?
+        kind = match = nil
+        
+        if match = scan(/\n/)
+          if line_kind
+            tokens << [:end_line, line_kind]
+            line_kind = nil
+          end
+          tokens << [match, :space]
+          next
+        end
+        
+        case state
+        
+        when :initial
+          if match = scan(/--- |\+\+\+ |=+|_+/)
+            tokens << [:begin_line, line_kind = :head]
+            tokens << [match, :head]
+            next unless match = scan(/.+/)
+            kind = :plain
+          elsif match = scan(/Index: |Property changes on: /)
+            tokens << [:begin_line, line_kind = :head]
+            tokens << [match, :head]
+            next unless match = scan(/.+/)
+            kind = :plain
+          elsif match = scan(/Added: /)
+            tokens << [:begin_line, line_kind = :head]
+            tokens << [match, :head]
+            next unless match = scan(/.+/)
+            kind = :plain
+            state = :added
+          elsif match = scan(/\\ /)
+            tokens << [:begin_line, line_kind = :change]
+            tokens << [match, :change]
+            next unless match = scan(/.+/)
+            kind = :plain
+          elsif match = scan(/@@(?>[^@\n]*)@@/)
+            if check(/\n|$/)
+              tokens << [:begin_line, line_kind = :change]
+            else
+              tokens << [:open, :change]
+            end
+            tokens << [match[0,2], :change]
+            tokens << [match[2...-2], :plain]
+            tokens << [match[-2,2], :change]
+            tokens << [:close, :change] unless line_kind
+            next unless match = scan(/.+/)
+            kind = :plain
+          elsif match = scan(/\+/)
+            tokens << [:begin_line, line_kind = :insert]
+            tokens << [match, :insert]
+            next unless match = scan(/.+/)
+            kind = :plain
+          elsif match = scan(/-/)
+            tokens << [:begin_line, line_kind = :delete]
+            tokens << [match, :delete]
+            next unless match = scan(/.+/)
+            kind = :plain
+          elsif scan(/ .*/)
+            kind = :comment
+          elsif scan(/.+/)
+            tokens << [:begin_line, line_kind = :comment]
+            kind = :plain
+          else
+            raise_inspect 'else case rached'
+          end
+        
+        when :added
+          if match = scan(/   \+/)
+            tokens << [:begin_line, line_kind = :insert]
+            tokens << [match, :insert]
+            next unless match = scan(/.+/)
+            kind = :plain
+          else
+            state = :initial
+            next
+          end
+        end
+        
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+        
+        tokens << [match, kind]
+      end
+      
+      tokens << [:end_line, line_kind] if line_kind
+      tokens
+    end
+    
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/groovy.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,264 @@
+module CodeRay
+module Scanners
+
+  load :java
+
+  class Groovy < Java
+
+    include Streamable
+    register_for :groovy
+    
+    # TODO: Check this!
+    GROOVY_KEYWORDS = %w[
+      as assert def in
+    ]
+    KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[
+      case instanceof new return throw typeof while as assert in
+    ]
+    GROOVY_MAGIC_VARIABLES = %w[ it ]
+    
+    IDENT_KIND = Java::IDENT_KIND.dup.
+      add(GROOVY_KEYWORDS, :keyword).
+      add(GROOVY_MAGIC_VARIABLES, :local_variable)
+    
+    ESCAPE = / [bfnrtv$\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} /x  # no 4-byte unicode chars? U[a-fA-F0-9]{8}
+    REGEXP_ESCAPE =  / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} | \d | [bBdDsSwW\/] /x
+    
+    # TODO: interpretation inside ', ", /
+    STRING_CONTENT_PATTERN = {
+      "'" => /(?>\\[^\\'\n]+|[^\\'\n]+)+/,
+      '"' => /[^\\$"\n]+/,
+      "'''" => /(?>[^\\']+|'(?!''))+/,
+      '"""' => /(?>[^\\$"]+|"(?!""))+/,
+      '/' => /[^\\$\/\n]+/,
+    }
+    
+    def scan_tokens tokens, options
+
+      state = :initial
+      inline_block_stack = []
+      inline_block_paren_depth = nil
+      string_delimiter = nil
+      import_clause = class_name_follows = last_token = after_def = false
+      value_expected = true
+
+      until eos?
+
+        kind = nil
+        match = nil
+        
+        case state
+
+        when :initial
+
+          if match = scan(/ \s+ | \\\n /x)
+            tokens << [match, :space]
+            if match.index ?\n
+              import_clause = after_def = false
+              value_expected = true unless value_expected
+            end
+            next
+          
+          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
+            value_expected = true
+            after_def = false
+            kind = :comment
+          
+          elsif bol? && scan(/ \#!.* /x)
+            kind = :doctype
+          
+          elsif import_clause && scan(/ (?!as) #{IDENT} (?: \. #{IDENT} )* (?: \.\* )? /ox)
+            after_def = value_expected = false
+            kind = :include
+          
+          elsif match = scan(/ #{IDENT} | \[\] /ox)
+            kind = IDENT_KIND[match]
+            value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match]
+            if last_token == '.'
+              kind = :ident
+            elsif class_name_follows
+              kind = :class
+              class_name_follows = false
+            elsif after_def && check(/\s*[({]/)
+              kind = :method
+              after_def = false
+            elsif kind == :ident && last_token != '?' && check(/:/)
+              kind = :key
+            else
+              class_name_follows = true if match == 'class' || (import_clause && match == 'as')
+              import_clause = match == 'import'
+              after_def = true if match == 'def'
+            end
+          
+          elsif scan(/;/)
+            import_clause = after_def = false
+            value_expected = true
+            kind = :operator
+          
+          elsif scan(/\{/)
+            class_name_follows = after_def = false
+            value_expected = true
+            kind = :operator
+            if !inline_block_stack.empty?
+              inline_block_paren_depth += 1
+            end
+          
+          # TODO: ~'...', ~"..." and ~/.../ style regexps
+          elsif match = scan(/ \.\.<? | \*?\.(?!\d)@? | \.& | \?:? | [,?:(\[] | -[->] | \+\+ |
+              && | \|\| | \*\*=? | ==?~ | <=?>? | [-+*%^~&|>=!]=? | <<<?=? | >>>?=? /x)
+            value_expected = true
+            value_expected = :regexp if match == '~'
+            after_def = false
+            kind = :operator
+          
+          elsif match = scan(/ [)\]}] /x)
+            value_expected = after_def = false
+            if !inline_block_stack.empty? && match == '}'
+              inline_block_paren_depth -= 1
+              if inline_block_paren_depth == 0  # closing brace of inline block reached
+                tokens << [match, :inline_delimiter]
+                tokens << [:close, :inline]
+                state, string_delimiter, inline_block_paren_depth = inline_block_stack.pop
+                next
+              end
+            end
+            kind = :operator
+          
+          elsif check(/[\d.]/)
+            after_def = value_expected = false
+            if scan(/0[xX][0-9A-Fa-f]+/)
+              kind = :hex
+            elsif scan(/(?>0[0-7]+)(?![89.eEfF])/)
+              kind = :oct
+            elsif scan(/\d+[fFdD]|\d*\.\d+(?:[eE][+-]?\d+)?[fFdD]?|\d+[eE][+-]?\d+[fFdD]?/)
+              kind = :float
+            elsif scan(/\d+[lLgG]?/)
+              kind = :integer
+            end
+
+          elsif match = scan(/'''|"""/)
+            after_def = value_expected = false
+            state = :multiline_string
+            tokens << [:open, :string]
+            string_delimiter = match
+            kind = :delimiter
+          
+          # TODO: record.'name'
+          elsif match = scan(/["']/)
+            after_def = value_expected = false
+            state = match == '/' ? :regexp : :string
+            tokens << [:open, state]
+            string_delimiter = match
+            kind = :delimiter
+
+          elsif value_expected && (match = scan(/\//))
+            after_def = value_expected = false
+            tokens << [:open, :regexp]
+            state = :regexp
+            string_delimiter = '/'
+            kind = :delimiter
+
+          elsif scan(/ @ #{IDENT} /ox)
+            after_def = value_expected = false
+            kind = :annotation
+
+          elsif scan(/\//)
+            after_def = false
+            value_expected = true
+            kind = :operator
+          
+          else
+            getch
+            kind = :error
+
+          end
+
+        when :string, :regexp, :multiline_string
+          if scan(STRING_CONTENT_PATTERN[string_delimiter])
+            kind = :content
+            
+          elsif match = scan(state == :multiline_string ? /'''|"""/ : /["'\/]/)
+            tokens << [match, :delimiter]
+            if state == :regexp
+              # TODO: regexp modifiers? s, m, x, i?
+              modifiers = scan(/[ix]+/)
+              tokens << [modifiers, :modifier] if modifiers && !modifiers.empty?
+            end
+            state = :string if state == :multiline_string
+            tokens << [:close, state]
+            string_delimiter = nil
+            after_def = value_expected = false
+            state = :initial
+            next
+          
+          elsif (state == :string || state == :multiline_string) &&
+              (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))
+            if string_delimiter[0] == ?' && !(match == "\\\\" || match == "\\'")
+              kind = :content
+            else
+              kind = :char
+            end
+          elsif state == :regexp && scan(/ \\ (?: #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+            kind = :char
+          
+          elsif match = scan(/ \$ #{IDENT} /mox)
+            tokens << [:open, :inline]
+            tokens << ['$', :inline_delimiter]
+            match = match[1..-1]
+            tokens << [match, IDENT_KIND[match]]
+            tokens << [:close, :inline]
+            next
+          elsif match = scan(/ \$ \{ /x)
+            tokens << [:open, :inline]
+            tokens << ['${', :inline_delimiter]
+            inline_block_stack << [state, string_delimiter, inline_block_paren_depth]
+            inline_block_paren_depth = 1
+            state = :initial
+            next
+          
+          elsif scan(/ \$ /mx)
+            kind = :content
+          
+          elsif scan(/ \\. /mx)
+            kind = :content
+          
+          elsif scan(/ \\ | \n /x)
+            tokens << [:close, state]
+            kind = :error
+            after_def = value_expected = false
+            state = :initial
+          
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+          end
+
+        else
+          raise_inspect 'Unknown state', tokens
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+        
+        last_token = match unless [:space, :comment, :doctype].include? kind
+        
+        tokens << [match, kind]
+
+      end
+
+      if [:multiline_string, :string, :regexp].include? state
+        tokens << [:close, state]
+      end
+
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/html.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,182 @@
+module CodeRay
+module Scanners
+
+  # HTML Scanner
+  class HTML < Scanner
+
+    include Streamable
+    register_for :html
+    
+    KINDS_NOT_LOC = [
+      :comment, :doctype, :preprocessor,
+      :tag, :attribute_name, :operator,
+      :attribute_value, :delimiter, :content,
+      :plain, :entity, :error
+    ]
+
+    ATTR_NAME = /[\w.:-]+/
+    ATTR_VALUE_UNQUOTED = ATTR_NAME
+    TAG_END = /\/?>/
+    HEX = /[0-9a-fA-F]/
+    ENTITY = /
+      &
+      (?:
+        \w+
+      |
+        \#
+        (?:
+          \d+
+        |
+          x#{HEX}+
+        )
+      )
+      ;
+    /ox
+
+    PLAIN_STRING_CONTENT = {
+      "'" => /[^&'>\n]+/,
+      '"' => /[^&">\n]+/,
+    }
+
+    def reset
+      super
+      @state = :initial
+    end
+
+  private
+    def setup
+      @state = :initial
+      @plain_string_content = nil
+    end
+
+    def scan_tokens tokens, options
+
+      state = @state
+      plain_string_content = @plain_string_content
+
+      until eos?
+
+        kind = nil
+        match = nil
+
+        if scan(/\s+/m)
+          kind = :space
+
+        else
+
+          case state
+
+          when :initial
+            if scan(/<!--.*?-->/m)
+              kind = :comment
+            elsif scan(/<!DOCTYPE.*?>/m)
+              kind = :doctype
+            elsif scan(/<\?xml.*?\?>/m)
+              kind = :preprocessor
+            elsif scan(/<\?.*?\?>|<%.*?%>/m)
+              kind = :comment
+            elsif scan(/<\/[-\w.:]*>/m)
+              kind = :tag
+            elsif match = scan(/<[-\w.:]+>?/m)
+              kind = :tag
+              state = :attribute unless match[-1] == ?>
+            elsif scan(/[^<>&]+/)
+              kind = :plain
+            elsif scan(/#{ENTITY}/ox)
+              kind = :entity
+            elsif scan(/[<>&]/)
+              kind = :error
+            else
+              raise_inspect '[BUG] else-case reached with state %p' % [state], tokens
+            end
+
+          when :attribute
+            if scan(/#{TAG_END}/o)
+              kind = :tag
+              state = :initial
+            elsif scan(/#{ATTR_NAME}/o)
+              kind = :attribute_name
+              state = :attribute_equal
+            else
+              kind = :error
+              getch
+            end
+
+          when :attribute_equal
+            if scan(/=/)
+              kind = :operator
+              state = :attribute_value
+            elsif scan(/#{ATTR_NAME}/o)
+              kind = :attribute_name
+            elsif scan(/#{TAG_END}/o)
+              kind = :tag
+              state = :initial
+            elsif scan(/./)
+              kind = :error
+              state = :attribute
+            end
+
+          when :attribute_value
+            if scan(/#{ATTR_VALUE_UNQUOTED}/o)
+              kind = :attribute_value
+              state = :attribute
+            elsif match = scan(/["']/)
+              tokens << [:open, :string]
+              state = :attribute_value_string
+              plain_string_content = PLAIN_STRING_CONTENT[match]
+              kind = :delimiter
+            elsif scan(/#{TAG_END}/o)
+              kind = :tag
+              state = :initial
+            else
+              kind = :error
+              getch
+            end
+
+          when :attribute_value_string
+            if scan(plain_string_content)
+              kind = :content
+            elsif scan(/['"]/)
+              tokens << [matched, :delimiter]
+              tokens << [:close, :string]
+              state = :attribute
+              next
+            elsif scan(/#{ENTITY}/ox)
+              kind = :entity
+            elsif scan(/&/)
+              kind = :content
+            elsif scan(/[\n>]/)
+              tokens << [:close, :string]
+              kind = :error
+              state = :initial
+            end
+
+          else
+            raise_inspect 'Unknown state: %p' % [state], tokens
+
+          end
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens, state
+        end
+        raise_inspect 'Empty token', tokens unless match
+
+        tokens << [match, kind]
+      end
+
+      if options[:keep_state]
+        @state = state
+        @plain_string_content = plain_string_content
+      end
+
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/java.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,176 @@
+module CodeRay
+module Scanners
+
+  class Java < Scanner
+
+    include Streamable
+    register_for :java
+    helper :builtin_types
+    
+    # http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
+    KEYWORDS = %w[
+      assert break case catch continue default do else
+      finally for if instanceof import new package
+      return switch throw try typeof while
+      debugger export
+    ]
+    RESERVED = %w[ const goto ]
+    CONSTANTS = %w[ false null true ]
+    MAGIC_VARIABLES = %w[ this super ]
+    TYPES = %w[
+      boolean byte char class double enum float int interface long
+      short void
+    ] << '[]'  # because int[] should be highlighted as a type
+    DIRECTIVES = %w[
+      abstract extends final implements native private protected public
+      static strictfp synchronized throws transient volatile
+    ]
+    
+    IDENT_KIND = WordList.new(:ident).
+      add(KEYWORDS, :keyword).
+      add(RESERVED, :reserved).
+      add(CONSTANTS, :pre_constant).
+      add(MAGIC_VARIABLES, :local_variable).
+      add(TYPES, :type).
+      add(BuiltinTypes::List, :pre_type).
+      add(BuiltinTypes::List.select { |builtin| builtin[/(Error|Exception)$/] }, :exception).
+      add(DIRECTIVES, :directive)
+
+    ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
+    STRING_CONTENT_PATTERN = {
+      "'" => /[^\\']+/,
+      '"' => /[^\\"]+/,
+      '/' => /[^\\\/]+/,
+    }
+    IDENT = /[a-zA-Z_][A-Za-z_0-9]*/
+    
+    def scan_tokens tokens, options
+
+      state = :initial
+      string_delimiter = nil
+      import_clause = class_name_follows = last_token_dot = false
+
+      until eos?
+
+        kind = nil
+        match = nil
+        
+        case state
+
+        when :initial
+
+          if match = scan(/ \s+ | \\\n /x)
+            tokens << [match, :space]
+            next
+          
+          elsif match = scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
+            tokens << [match, :comment]
+            next
+          
+          elsif import_clause && scan(/ #{IDENT} (?: \. #{IDENT} )* /ox)
+            kind = :include
+          
+          elsif match = scan(/ #{IDENT} | \[\] /ox)
+            kind = IDENT_KIND[match]
+            if last_token_dot
+              kind = :ident
+            elsif class_name_follows
+              kind = :class
+              class_name_follows = false
+            else
+              import_clause = true if match == 'import'
+              class_name_follows = true if match == 'class' || match == 'interface'
+            end
+          
+          elsif scan(/ \.(?!\d) | [,?:()\[\]}] | -- | \+\+ | && | \|\| | \*\*=? | [-+*\/%^~&|<>=!]=? | <<<?=? | >>>?=? /x)
+            kind = :operator
+          
+          elsif scan(/;/)
+            import_clause = false
+            kind = :operator
+          
+          elsif scan(/\{/)
+            class_name_follows = false
+            kind = :operator
+          
+          elsif check(/[\d.]/)
+            if scan(/0[xX][0-9A-Fa-f]+/)
+              kind = :hex
+            elsif scan(/(?>0[0-7]+)(?![89.eEfF])/)
+              kind = :oct
+            elsif scan(/\d+[fFdD]|\d*\.\d+(?:[eE][+-]?\d+)?[fFdD]?|\d+[eE][+-]?\d+[fFdD]?/)
+              kind = :float
+            elsif scan(/\d+[lL]?/)
+              kind = :integer
+            end
+
+          elsif match = scan(/["']/)
+            tokens << [:open, :string]
+            state = :string
+            string_delimiter = match
+            kind = :delimiter
+
+          elsif scan(/ @ #{IDENT} /ox)
+            kind = :annotation
+
+          else
+            getch
+            kind = :error
+
+          end
+
+        when :string
+          if scan(STRING_CONTENT_PATTERN[string_delimiter])
+            kind = :content
+          elsif match = scan(/["'\/]/)
+            tokens << [match, :delimiter]
+            tokens << [:close, state]
+            string_delimiter = nil
+            state = :initial
+            next
+          elsif state == :string && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))
+            if string_delimiter == "'" && !(match == "\\\\" || match == "\\'")
+              kind = :content
+            else
+              kind = :char
+            end
+          elsif scan(/\\./m)
+            kind = :content
+          elsif scan(/ \\ | $ /x)
+            tokens << [:close, state]
+            kind = :error
+            state = :initial
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+          end
+
+        else
+          raise_inspect 'Unknown state', tokens
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+        
+        last_token_dot = match == '.'
+        
+        tokens << [match, kind]
+
+      end
+
+      if state == :string
+        tokens << [:close, state]
+      end
+
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/java_script-0.9.6.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,224 @@
+module CodeRay
+module Scanners
+
+  class JavaScript < Scanner
+
+    include Streamable
+
+    register_for :java_script
+    file_extension 'js'
+
+    # The actual JavaScript keywords.
+    KEYWORDS = %w[
+      break case catch continue default delete do else
+      finally for function if in instanceof new
+      return switch throw try typeof var void while with
+    ]
+    PREDEFINED_CONSTANTS = %w[
+      false null true undefined
+    ]
+    
+    MAGIC_VARIABLES = %w[ this arguments ]  # arguments was introduced in JavaScript 1.4
+    
+    KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[
+      case delete in instanceof new return throw typeof with
+    ]
+    
+    # Reserved for future use.
+    RESERVED_WORDS = %w[
+      abstract boolean byte char class debugger double enum export extends
+      final float goto implements import int interface long native package
+      private protected public short static super synchronized throws transient
+      volatile
+    ]
+    
+    IDENT_KIND = WordList.new(:ident).
+      add(RESERVED_WORDS, :reserved).
+      add(PREDEFINED_CONSTANTS, :pre_constant).
+      add(MAGIC_VARIABLES, :local_variable).
+      add(KEYWORDS, :keyword)
+
+    ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
+    REGEXP_ESCAPE =  / [bBdDsSwW] /x
+    STRING_CONTENT_PATTERN = {
+      "'" => /[^\\']+/,
+      '"' => /[^\\"]+/,
+      '/' => /[^\\\/]+/,
+    }
+    KEY_CHECK_PATTERN = {
+      "'" => / [^\\']* (?: \\.? [^\\']* )* '? \s* : /x,
+      '"' => / [^\\"]* (?: \\.? [^\\"]* )* "? \s* : /x,
+    }
+
+    def scan_tokens tokens, options
+
+      state = :initial
+      string_delimiter = nil
+      value_expected = true
+      key_expected = false
+      function_expected = false
+
+      until eos?
+
+        kind = nil
+        match = nil
+        
+        case state
+
+        when :initial
+
+          if match = scan(/ \s+ | \\\n /x)
+            value_expected = true if !value_expected && match.index(?\n)
+            tokens << [match, :space]
+            next
+
+          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
+            value_expected = true
+            kind = :comment
+
+          elsif check(/\.?\d/)
+            key_expected = value_expected = false
+            if scan(/0[xX][0-9A-Fa-f]+/)
+              kind = :hex
+            elsif scan(/(?>0[0-7]+)(?![89.eEfF])/)
+              kind = :oct
+            elsif scan(/\d+[fF]|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
+              kind = :float
+            elsif scan(/\d+/)
+              kind = :integer
+            end
+          
+          elsif value_expected && match = scan(/<([[:alpha:]]\w*) (?: [^\/>]*\/> | .*?<\/\1>)/xim)
+            # FIXME: scan over nested tags
+            xml_scanner.tokenize match
+            value_expected = false
+            next
+            
+          elsif match = scan(/ [-+*=<>?:;,!&^|(\[{~%]+ | \.(?!\d) /x)
+            value_expected = true
+            last_operator = match[-1]
+            key_expected = (last_operator == ?{) || (last_operator == ?,)
+            function_expected = false
+            kind = :operator
+
+          elsif scan(/ [)\]}]+ /x)
+            function_expected = key_expected = value_expected = false
+            kind = :operator
+
+          elsif match = scan(/ [$a-zA-Z_][A-Za-z_0-9$]* /x)
+            kind = IDENT_KIND[match]
+            value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match]
+            # TODO: labels
+            if kind == :ident
+              if match.index(?$)  # $ allowed inside an identifier
+                kind = :predefined
+              elsif function_expected
+                kind = :function
+              elsif check(/\s*[=:]\s*function\b/)
+                kind = :function
+              elsif key_expected && check(/\s*:/)
+                kind = :key
+              end
+            end
+            function_expected = (kind == :keyword) && (match == 'function')
+            key_expected = false
+          
+          elsif match = scan(/["']/)
+            if key_expected && check(KEY_CHECK_PATTERN[match])
+              state = :key
+            else
+              state = :string
+            end
+            tokens << [:open, state]
+            string_delimiter = match
+            kind = :delimiter
+
+          elsif value_expected && (match = scan(/\/(?=\S)/))
+            tokens << [:open, :regexp]
+            state = :regexp
+            string_delimiter = '/'
+            kind = :delimiter
+
+          elsif scan(/ \/ /x)
+            value_expected = true
+            key_expected = false
+            kind = :operator
+
+          else
+            getch
+            kind = :error
+
+          end
+
+        when :string, :regexp, :key
+          if scan(STRING_CONTENT_PATTERN[string_delimiter])
+            kind = :content
+          elsif match = scan(/["'\/]/)
+            tokens << [match, :delimiter]
+            if state == :regexp
+              modifiers = scan(/[gim]+/)
+              tokens << [modifiers, :modifier] if modifiers && !modifiers.empty?
+            end
+            tokens << [:close, state]
+            string_delimiter = nil
+            key_expected = value_expected = false
+            state = :initial
+            next
+          elsif state != :regexp && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))
+            if string_delimiter == "'" && !(match == "\\\\" || match == "\\'")
+              kind = :content
+            else
+              kind = :char
+            end
+          elsif state == :regexp && scan(/ \\ (?: #{ESCAPE} | #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+            kind = :char
+          elsif scan(/\\./m)
+            kind = :content
+          elsif scan(/ \\ | $ /x)
+            tokens << [:close, state]
+            kind = :error
+            key_expected = value_expected = false
+            state = :initial
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+          end
+
+        else
+          raise_inspect 'Unknown state', tokens
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+        
+        tokens << [match, kind]
+
+      end
+
+      if [:string, :regexp].include? state
+        tokens << [:close, state]
+      end
+
+      tokens
+    end
+
+  protected
+
+    def reset_instance
+      super
+      @xml_scanner.reset if defined? @xml_scanner
+    end
+
+    def xml_scanner
+      @xml_scanner ||= CodeRay.scanner :xml, :tokens => @tokens, :keep_tokens => true, :keep_state => false
+    end
+
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/java_script.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,224 @@
+module CodeRay
+module Scanners
+
+  class JavaScript < Scanner
+
+    include Streamable
+
+    register_for :java_script
+    file_extension 'js'
+
+    # The actual JavaScript keywords.
+    KEYWORDS = %w[
+      break case catch continue default delete do else
+      finally for function if in instanceof new
+      return switch throw try typeof var void while with
+    ]
+    PREDEFINED_CONSTANTS = %w[
+      false null true undefined
+    ]
+    
+    MAGIC_VARIABLES = %w[ this arguments ]  # arguments was introduced in JavaScript 1.4
+    
+    KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[
+      case delete in instanceof new return throw typeof with
+    ]
+    
+    # Reserved for future use.
+    RESERVED_WORDS = %w[
+      abstract boolean byte char class debugger double enum export extends
+      final float goto implements import int interface long native package
+      private protected public short static super synchronized throws transient
+      volatile
+    ]
+    
+    IDENT_KIND = WordList.new(:ident).
+      add(RESERVED_WORDS, :reserved).
+      add(PREDEFINED_CONSTANTS, :pre_constant).
+      add(MAGIC_VARIABLES, :local_variable).
+      add(KEYWORDS, :keyword)
+
+    ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
+    REGEXP_ESCAPE =  / [bBdDsSwW] /x
+    STRING_CONTENT_PATTERN = {
+      "'" => /[^\\']+/,
+      '"' => /[^\\"]+/,
+      '/' => /[^\\\/]+/,
+    }
+    KEY_CHECK_PATTERN = {
+      "'" => / (?> [^\\']* (?: \\. [^\\']* )* ) ' \s* : /mx,
+      '"' => / (?> [^\\"]* (?: \\. [^\\"]* )* ) " \s* : /mx,
+    }
+
+    def scan_tokens tokens, options
+
+      state = :initial
+      string_delimiter = nil
+      value_expected = true
+      key_expected = false
+      function_expected = false
+
+      until eos?
+
+        kind = nil
+        match = nil
+        
+        case state
+
+        when :initial
+
+          if match = scan(/ \s+ | \\\n /x)
+            value_expected = true if !value_expected && match.index(?\n)
+            tokens << [match, :space]
+            next
+
+          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
+            value_expected = true
+            kind = :comment
+
+          elsif check(/\.?\d/)
+            key_expected = value_expected = false
+            if scan(/0[xX][0-9A-Fa-f]+/)
+              kind = :hex
+            elsif scan(/(?>0[0-7]+)(?![89.eEfF])/)
+              kind = :oct
+            elsif scan(/\d+[fF]|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
+              kind = :float
+            elsif scan(/\d+/)
+              kind = :integer
+            end
+          
+          elsif value_expected && match = scan(/<([[:alpha:]]\w*) (?: [^\/>]*\/> | .*?<\/\1>)/xim)
+            # FIXME: scan over nested tags
+            xml_scanner.tokenize match
+            value_expected = false
+            next
+            
+          elsif match = scan(/ [-+*=<>?:;,!&^|(\[{~%]+ | \.(?!\d) /x)
+            value_expected = true
+            last_operator = match[-1]
+            key_expected = (last_operator == ?{) || (last_operator == ?,)
+            function_expected = false
+            kind = :operator
+
+          elsif scan(/ [)\]}]+ /x)
+            function_expected = key_expected = value_expected = false
+            kind = :operator
+
+          elsif match = scan(/ [$a-zA-Z_][A-Za-z_0-9$]* /x)
+            kind = IDENT_KIND[match]
+            value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match]
+            # TODO: labels
+            if kind == :ident
+              if match.index(?$)  # $ allowed inside an identifier
+                kind = :predefined
+              elsif function_expected
+                kind = :function
+              elsif check(/\s*[=:]\s*function\b/)
+                kind = :function
+              elsif key_expected && check(/\s*:/)
+                kind = :key
+              end
+            end
+            function_expected = (kind == :keyword) && (match == 'function')
+            key_expected = false
+          
+          elsif match = scan(/["']/)
+            if key_expected && check(KEY_CHECK_PATTERN[match])
+              state = :key
+            else
+              state = :string
+            end
+            tokens << [:open, state]
+            string_delimiter = match
+            kind = :delimiter
+
+          elsif value_expected && (match = scan(/\/(?=\S)/))
+            tokens << [:open, :regexp]
+            state = :regexp
+            string_delimiter = '/'
+            kind = :delimiter
+
+          elsif scan(/ \/ /x)
+            value_expected = true
+            key_expected = false
+            kind = :operator
+
+          else
+            getch
+            kind = :error
+
+          end
+
+        when :string, :regexp, :key
+          if scan(STRING_CONTENT_PATTERN[string_delimiter])
+            kind = :content
+          elsif match = scan(/["'\/]/)
+            tokens << [match, :delimiter]
+            if state == :regexp
+              modifiers = scan(/[gim]+/)
+              tokens << [modifiers, :modifier] if modifiers && !modifiers.empty?
+            end
+            tokens << [:close, state]
+            string_delimiter = nil
+            key_expected = value_expected = false
+            state = :initial
+            next
+          elsif state != :regexp && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))
+            if string_delimiter == "'" && !(match == "\\\\" || match == "\\'")
+              kind = :content
+            else
+              kind = :char
+            end
+          elsif state == :regexp && scan(/ \\ (?: #{ESCAPE} | #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+            kind = :char
+          elsif scan(/\\./m)
+            kind = :content
+          elsif scan(/ \\ | $ /x)
+            tokens << [:close, state]
+            kind = :error
+            key_expected = value_expected = false
+            state = :initial
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+          end
+
+        else
+          raise_inspect 'Unknown state', tokens
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+        
+        tokens << [match, kind]
+
+      end
+
+      if [:string, :regexp].include? state
+        tokens << [:close, state]
+      end
+
+      tokens
+    end
+
+  protected
+
+    def reset_instance
+      super
+      @xml_scanner.reset if defined? @xml_scanner
+    end
+
+    def xml_scanner
+      @xml_scanner ||= CodeRay.scanner :xml, :tokens => @tokens, :keep_tokens => true, :keep_state => false
+    end
+
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/json.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,108 @@
+module CodeRay
+module Scanners
+  
+  class JSON < Scanner
+    
+    include Streamable
+    
+    register_for :json
+    file_extension 'json'
+    
+    KINDS_NOT_LOC = [
+      :float, :char, :content, :delimiter,
+      :error, :integer, :operator, :value,
+    ]
+    
+    ESCAPE = / [bfnrt\\"\/] /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} /x
+    
+    def scan_tokens tokens, options
+      
+      state = :initial
+      stack = []
+      key_expected = false
+      
+      until eos?
+        
+        kind = nil
+        match = nil
+        
+        case state
+        
+        when :initial
+          if match = scan(/ \s+ | \\\n /x)
+            tokens << [match, :space]
+            next
+          elsif match = scan(/ [:,\[{\]}] /x)
+            kind = :operator
+            case match
+            when '{' then stack << :object; key_expected = true
+            when '[' then stack << :array
+            when ':' then key_expected = false
+            when ',' then key_expected = true if stack.last == :object
+            when '}', ']' then stack.pop  # no error recovery, but works for valid JSON
+            end
+          elsif match = scan(/ true | false | null /x)
+            kind = :value
+          elsif match = scan(/-?(?:0|[1-9]\d*)/)
+            kind = :integer
+            if scan(/\.\d+(?:[eE][-+]?\d+)?|[eE][-+]?\d+/)
+              match << matched
+              kind = :float
+            end
+          elsif match = scan(/"/)
+            state = key_expected ? :key : :string
+            tokens << [:open, state]
+            kind = :delimiter
+          else
+            getch
+            kind = :error
+          end
+          
+        when :string, :key
+          if scan(/[^\\"]+/)
+            kind = :content
+          elsif scan(/"/)
+            tokens << ['"', :delimiter]
+            tokens << [:close, state]
+            state = :initial
+            next
+          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+            kind = :char
+          elsif scan(/\\./m)
+            kind = :content
+          elsif scan(/ \\ | $ /x)
+            tokens << [:close, state]
+            kind = :error
+            state = :initial
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+          end
+          
+        else
+          raise_inspect 'Unknown state', tokens
+          
+        end
+        
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+        
+        tokens << [match, kind]
+        
+      end
+      
+      if [:string, :key].include? state
+        tokens << [:close, state]
+      end
+      
+      tokens
+    end
+    
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/nitro_xhtml.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,136 @@
+module CodeRay
+module Scanners
+
+  load :html
+  load :ruby
+
+  # Nitro XHTML Scanner
+  class NitroXHTML < Scanner
+
+    include Streamable
+    register_for :nitro_xhtml
+    file_extension :xhtml
+    title 'Nitro XHTML'
+
+    KINDS_NOT_LOC = HTML::KINDS_NOT_LOC
+    
+    NITRO_RUBY_BLOCK = /
+      <\?r
+      (?>
+        [^\?]*
+        (?> \?(?!>) [^\?]* )*
+      )
+      (?: \?> )?
+    |
+      <ruby>
+      (?>
+        [^<]*
+        (?> <(?!\/ruby>) [^<]* )*
+      )
+      (?: <\/ruby> )?
+    |
+      <%
+      (?>
+        [^%]*
+        (?> %(?!>) [^%]* )*
+      )
+      (?: %> )?
+    /mx
+
+    NITRO_VALUE_BLOCK = /
+      \#
+      (?:
+        \{
+        [^{}]*
+        (?>
+          \{ [^}]* \}
+          (?> [^{}]* )
+        )*
+        \}?
+      | \| [^|]* \|?
+      | \( [^)]* \)?
+      | \[ [^\]]* \]?
+      | \\ [^\\]* \\?
+      )
+    /x
+
+    NITRO_ENTITY = /
+      % (?: \#\d+ | \w+ ) ;
+    /
+
+    START_OF_RUBY = /
+      (?=[<\#%])
+      < (?: \?r | % | ruby> )
+    | \# [{(|]
+    | % (?: \#\d+ | \w+ ) ;
+    /x
+
+    CLOSING_PAREN = Hash.new do |h, p|
+      h[p] = p
+    end.update( {
+      '(' => ')',
+      '[' => ']',
+      '{' => '}',
+    } )
+
+  private
+
+    def setup
+      @ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true
+      @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true
+    end
+
+    def reset_instance
+      super
+      @html_scanner.reset
+    end
+
+    def scan_tokens tokens, options
+
+      until eos?
+
+        if (match = scan_until(/(?=#{START_OF_RUBY})/o) || scan_until(/\z/)) and not match.empty?
+          @html_scanner.tokenize match
+
+        elsif match = scan(/#{NITRO_VALUE_BLOCK}/o)
+          start_tag = match[0,2]
+          delimiter = CLOSING_PAREN[start_tag[1,1]]
+          end_tag = match[-1,1] == delimiter ? delimiter : ''
+          tokens << [:open, :inline]
+          tokens << [start_tag, :inline_delimiter]
+          code = match[start_tag.size .. -1 - end_tag.size]
+          @ruby_scanner.tokenize code
+          tokens << [end_tag, :inline_delimiter] unless end_tag.empty?
+          tokens << [:close, :inline]
+
+        elsif match = scan(/#{NITRO_RUBY_BLOCK}/o)
+          start_tag = '<?r'
+          end_tag = match[-2,2] == '?>' ? '?>' : ''
+          tokens << [:open, :inline]
+          tokens << [start_tag, :inline_delimiter]
+          code = match[start_tag.size .. -(end_tag.size)-1]
+          @ruby_scanner.tokenize code
+          tokens << [end_tag, :inline_delimiter] unless end_tag.empty?
+          tokens << [:close, :inline]
+
+        elsif entity = scan(/#{NITRO_ENTITY}/o)
+          tokens << [entity, :entity]
+        
+        elsif scan(/%/)
+          tokens << [matched, :error]
+
+        else
+          raise_inspect 'else-case reached!', tokens
+          
+        end
+
+      end
+
+      tokens
+
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/php.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,533 @@
+module CodeRay
+module Scanners
+  
+  load :html
+  
+  # Original by Stefan Walk.
+  class PHP < Scanner
+    
+    register_for :php
+    file_extension 'php'
+    
+    KINDS_NOT_LOC = HTML::KINDS_NOT_LOC
+    
+    def setup
+      @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true
+    end
+    
+    def reset_instance
+      super
+      @html_scanner.reset
+    end
+    
+    module Words
+      
+      # according to http://www.php.net/manual/en/reserved.keywords.php
+      KEYWORDS = %w[
+        abstract and array as break case catch class clone const continue declare default do else elseif
+        enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global
+        goto if implements interface instanceof namespace new or private protected public static switch
+        throw try use var while xor
+        cfunction old_function
+      ]
+      
+      TYPES = %w[ int integer float double bool boolean string array object resource ]
+      
+      LANGUAGE_CONSTRUCTS = %w[
+        die echo empty exit eval include include_once isset list
+        require require_once return print unset
+      ]
+      
+      CLASSES = %w[ Directory stdClass __PHP_Incomplete_Class exception php_user_filter Closure ]
+      
+      # according to http://php.net/quickref.php on 2009-04-21;
+      # all functions with _ excluded (module functions) and selected additional functions
+      BUILTIN_FUNCTIONS = %w[
+        abs acos acosh addcslashes addslashes aggregate array arsort ascii2ebcdic asin asinh asort assert atan atan2
+        atanh basename bcadd bccomp bcdiv bcmod bcmul bcpow bcpowmod bcscale bcsqrt bcsub bin2hex bindec
+        bindtextdomain bzclose bzcompress bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite
+        calculhmac ceil chdir checkdate checkdnsrr chgrp chmod chop chown chr chroot clearstatcache closedir closelog
+        compact constant copy cos cosh count crc32 crypt current date dcgettext dcngettext deaggregate decbin dechex
+        decoct define defined deg2rad delete dgettext die dirname diskfreespace dl dngettext doubleval each
+        ebcdic2ascii echo empty end ereg eregi escapeshellarg escapeshellcmd eval exec exit exp explode expm1 extract
+        fclose feof fflush fgetc fgetcsv fgets fgetss file fileatime filectime filegroup fileinode filemtime fileowner
+        fileperms filepro filesize filetype floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv
+        fputs fread frenchtojd fscanf fseek fsockopen fstat ftell ftok ftruncate fwrite getallheaders getcwd getdate
+        getenv gethostbyaddr gethostbyname gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid
+        getmyuid getopt getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext
+        gettimeofday gettype glob gmdate gmmktime gmstrftime gregoriantojd gzclose gzcompress gzdecode gzdeflate
+        gzencode gzeof gzfile gzgetc gzgets gzgetss gzinflate gzopen gzpassthru gzputs gzread gzrewind gzseek gztell
+        gzuncompress gzwrite hash header hebrev hebrevc hexdec htmlentities htmlspecialchars hypot iconv idate
+        implode include intval ip2long iptcembed iptcparse isset
+        jddayofweek jdmonthname jdtofrench jdtogregorian jdtojewish jdtojulian jdtounix jewishtojd join jpeg2wbmp
+        juliantojd key krsort ksort lcfirst lchgrp lchown levenshtein link linkinfo list localeconv localtime log
+        log10 log1p long2ip lstat ltrim mail main max md5 metaphone mhash microtime min mkdir mktime msql natcasesort
+        natsort next ngettext nl2br nthmac octdec opendir openlog
+        ord overload pack passthru pathinfo pclose pfsockopen phpcredits phpinfo phpversion pi png2wbmp popen pos pow
+        prev print printf putenv quotemeta rad2deg rand range rawurldecode rawurlencode readdir readfile readgzfile
+        readline readlink realpath recode rename require reset rewind rewinddir rmdir round rsort rtrim scandir
+        serialize setcookie setlocale setrawcookie settype sha1 shuffle signeurlpaiement sin sinh sizeof sleep snmpget
+        snmpgetnext snmprealwalk snmpset snmpwalk snmpwalkoid sort soundex split spliti sprintf sqrt srand sscanf stat
+        strcasecmp strchr strcmp strcoll strcspn strftime stripcslashes stripos stripslashes stristr strlen
+        strnatcasecmp strnatcmp strncasecmp strncmp strpbrk strpos strptime strrchr strrev strripos strrpos strspn
+        strstr strtok strtolower strtotime strtoupper strtr strval substr symlink syslog system tan tanh tempnam
+        textdomain time tmpfile touch trim uasort ucfirst ucwords uksort umask uniqid unixtojd unlink unpack
+        unserialize unset urldecode urlencode usleep usort vfprintf virtual vprintf vsprintf wordwrap
+        array_change_key_case array_chunk array_combine array_count_values array_diff array_diff_assoc
+        array_diff_key array_diff_uassoc array_diff_ukey array_fill array_fill_keys array_filter array_flip
+        array_intersect array_intersect_assoc array_intersect_key array_intersect_uassoc array_intersect_ukey
+        array_key_exists array_keys array_map array_merge array_merge_recursive array_multisort array_pad
+        array_pop array_product array_push array_rand array_reduce array_reverse array_search array_shift
+        array_slice array_splice array_sum array_udiff array_udiff_assoc array_udiff_uassoc array_uintersect
+        array_uintersect_assoc array_uintersect_uassoc array_unique array_unshift array_values array_walk
+        array_walk_recursive
+        assert_options base_convert base64_decode base64_encode
+        chunk_split class_exists class_implements class_parents
+        count_chars debug_backtrace debug_print_backtrace debug_zval_dump
+        error_get_last error_log error_reporting extension_loaded
+        file_exists file_get_contents file_put_contents load_file
+        func_get_arg func_get_args func_num_args function_exists
+        get_browser get_called_class get_cfg_var get_class get_class_methods get_class_vars
+        get_current_user get_declared_classes get_declared_interfaces get_defined_constants
+        get_defined_functions get_defined_vars get_extension_funcs get_headers get_html_translation_table
+        get_include_path get_included_files get_loaded_extensions get_magic_quotes_gpc get_magic_quotes_runtime
+        get_meta_tags get_object_vars get_parent_class get_required_filesget_resource_type
+        gc_collect_cycles gc_disable gc_enable gc_enabled
+        halt_compiler headers_list headers_sent highlight_file highlight_string
+        html_entity_decode htmlspecialchars_decode
+        in_array include_once inclued_get_data
+        is_a is_array is_binary is_bool is_buffer is_callable is_dir is_double is_executable is_file is_finite
+        is_float is_infinite is_int is_integer is_link is_long is_nan is_null is_numeric is_object is_readable
+        is_real is_resource is_scalar is_soap_fault is_string is_subclass_of is_unicode is_uploaded_file
+        is_writable is_writeable
+        locale_get_default locale_set_default
+        number_format override_function parse_str parse_url
+        php_check_syntax php_ini_loaded_file php_ini_scanned_files php_logo_guid php_sapi_name
+        php_strip_whitespace php_uname
+        preg_filter preg_grep preg_last_error preg_match preg_match_all preg_quote preg_replace
+        preg_replace_callback preg_split print_r
+        require_once register_shutdown_function register_tick_function
+        set_error_handler set_exception_handler set_file_buffer set_include_path
+        set_magic_quotes_runtime set_time_limit shell_exec
+        str_getcsv str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count
+        strip_tags substr_compare substr_count substr_replace
+        time_nanosleep time_sleep_until
+        token_get_all token_name trigger_error
+        unregister_tick_function use_soap_error_handler user_error
+        utf8_decode utf8_encode var_dump var_export
+        version_compare
+        zend_logo_guid zend_thread_id zend_version
+        create_function call_user_func_array
+        posix_access posix_ctermid posix_get_last_error posix_getcwd posix_getegid
+        posix_geteuid posix_getgid posix_getgrgid posix_getgrnam posix_getgroups
+        posix_getlogin posix_getpgid posix_getpgrp posix_getpid posix_getppid
+        posix_getpwnam posix_getpwuid posix_getrlimit posix_getsid posix_getuid
+        posix_initgroups posix_isatty posix_kill posix_mkfifo posix_mknod
+        posix_setegid posix_seteuid posix_setgid posix_setpgid posix_setsid
+        posix_setuid posix_strerror posix_times posix_ttyname posix_uname
+        pcntl_alarm pcntl_exec pcntl_fork pcntl_getpriority pcntl_setpriority
+        pcntl_signal pcntl_signal_dispatch pcntl_sigprocmask pcntl_sigtimedwait
+        pcntl_sigwaitinfo pcntl_wait pcntl_waitpid pcntl_wexitstatus pcntl_wifexited
+        pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig
+      ]
+      # TODO: more built-in PHP functions?
+      
+      EXCEPTIONS = %w[
+        E_ERROR E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING
+        E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_DEPRECATED E_USER_DEPRECATED E_ALL E_STRICT
+      ]
+      
+      CONSTANTS = %w[
+        null true false self parent
+        __LINE__ __DIR__ __FILE__ __LINE__
+        __CLASS__ __NAMESPACE__ __METHOD__ __FUNCTION__
+        PHP_VERSION PHP_MAJOR_VERSION PHP_MINOR_VERSION PHP_RELEASE_VERSION PHP_VERSION_ID PHP_EXTRA_VERSION PHP_ZTS
+        PHP_DEBUG PHP_MAXPATHLEN PHP_OS PHP_SAPI PHP_EOL PHP_INT_MAX PHP_INT_SIZE DEFAULT_INCLUDE_PATH
+        PEAR_INSTALL_DIR PEAR_EXTENSION_DIR PHP_EXTENSION_DIR PHP_PREFIX PHP_BINDIR PHP_LIBDIR PHP_DATADIR
+        PHP_SYSCONFDIR PHP_LOCALSTATEDIR PHP_CONFIG_FILE_PATH PHP_CONFIG_FILE_SCAN_DIR PHP_SHLIB_SUFFIX
+        PHP_OUTPUT_HANDLER_START PHP_OUTPUT_HANDLER_CONT PHP_OUTPUT_HANDLER_END
+        __COMPILER_HALT_OFFSET__
+        EXTR_OVERWRITE EXTR_SKIP EXTR_PREFIX_SAME EXTR_PREFIX_ALL EXTR_PREFIX_INVALID EXTR_PREFIX_IF_EXISTS
+        EXTR_IF_EXISTS SORT_ASC SORT_DESC SORT_REGULAR SORT_NUMERIC SORT_STRING CASE_LOWER CASE_UPPER COUNT_NORMAL
+        COUNT_RECURSIVE ASSERT_ACTIVE ASSERT_CALLBACK ASSERT_BAIL ASSERT_WARNING ASSERT_QUIET_EVAL CONNECTION_ABORTED
+        CONNECTION_NORMAL CONNECTION_TIMEOUT INI_USER INI_PERDIR INI_SYSTEM INI_ALL M_E M_LOG2E M_LOG10E M_LN2 M_LN10
+        M_PI M_PI_2 M_PI_4 M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2 CRYPT_SALT_LENGTH CRYPT_STD_DES CRYPT_EXT_DES
+        CRYPT_MD5 CRYPT_BLOWFISH DIRECTORY_SEPARATOR SEEK_SET SEEK_CUR SEEK_END LOCK_SH LOCK_EX LOCK_UN LOCK_NB
+        HTML_SPECIALCHARS HTML_ENTITIES ENT_COMPAT ENT_QUOTES ENT_NOQUOTES INFO_GENERAL INFO_CREDITS
+        INFO_CONFIGURATION INFO_MODULES INFO_ENVIRONMENT INFO_VARIABLES INFO_LICENSE INFO_ALL CREDITS_GROUP
+        CREDITS_GENERAL CREDITS_SAPI CREDITS_MODULES CREDITS_DOCS CREDITS_FULLPAGE CREDITS_QA CREDITS_ALL STR_PAD_LEFT
+        STR_PAD_RIGHT STR_PAD_BOTH PATHINFO_DIRNAME PATHINFO_BASENAME PATHINFO_EXTENSION PATH_SEPARATOR CHAR_MAX
+        LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_ALL LC_MESSAGES ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5
+        ABDAY_6 ABDAY_7 DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7 ABMON_1 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6
+        ABMON_7 ABMON_8 ABMON_9 ABMON_10 ABMON_11 ABMON_12 MON_1 MON_2 MON_3 MON_4 MON_5 MON_6 MON_7 MON_8 MON_9
+        MON_10 MON_11 MON_12 AM_STR PM_STR D_T_FMT D_FMT T_FMT T_FMT_AMPM ERA ERA_YEAR ERA_D_T_FMT ERA_D_FMT ERA_T_FMT
+        ALT_DIGITS INT_CURR_SYMBOL CURRENCY_SYMBOL CRNCYSTR MON_DECIMAL_POINT MON_THOUSANDS_SEP MON_GROUPING
+        POSITIVE_SIGN NEGATIVE_SIGN INT_FRAC_DIGITS FRAC_DIGITS P_CS_PRECEDES P_SEP_BY_SPACE N_CS_PRECEDES
+        N_SEP_BY_SPACE P_SIGN_POSN N_SIGN_POSN DECIMAL_POINT RADIXCHAR THOUSANDS_SEP THOUSEP GROUPING YESEXPR NOEXPR
+        YESSTR NOSTR CODESET LOG_EMERG LOG_ALERT LOG_CRIT LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_DEBUG LOG_KERN
+        LOG_USER LOG_MAIL LOG_DAEMON LOG_AUTH LOG_SYSLOG LOG_LPR LOG_NEWS LOG_UUCP LOG_CRON LOG_AUTHPRIV LOG_LOCAL0
+        LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_PID LOG_CONS LOG_ODELAY
+        LOG_NDELAY LOG_NOWAIT LOG_PERROR
+      ]
+      
+      PREDEFINED = %w[
+        $GLOBALS $_SERVER $_GET $_POST $_FILES $_REQUEST $_SESSION $_ENV
+        $_COOKIE $php_errormsg $HTTP_RAW_POST_DATA $http_response_header
+        $argc $argv
+      ]
+      
+      IDENT_KIND = CaseIgnoringWordList.new(:ident).
+        add(KEYWORDS, :reserved).
+        add(TYPES, :pre_type).
+        add(LANGUAGE_CONSTRUCTS, :reserved).
+        add(BUILTIN_FUNCTIONS, :predefined).
+        add(CLASSES, :pre_constant).
+        add(EXCEPTIONS, :exception).
+        add(CONSTANTS, :pre_constant)
+      
+      VARIABLE_KIND = WordList.new(:local_variable).
+        add(PREDEFINED, :predefined)
+    end
+    
+    module RE
+      
+      PHP_START = /
+        <script\s+[^>]*?language\s*=\s*"php"[^>]*?> |
+        <script\s+[^>]*?language\s*=\s*'php'[^>]*?> |
+        <\?php\d? |
+        <\?(?!xml)
+      /xi
+      
+      PHP_END = %r!
+        </script> |
+        \?>
+      !xi
+      
+      HTML_INDICATOR = /<!DOCTYPE html|<(?:html|body|div|p)[> ]/i
+      
+      IDENTIFIER = /[a-z_\x7f-\xFF][a-z0-9_\x7f-\xFF]*/i
+      VARIABLE = /\$#{IDENTIFIER}/
+      
+      OPERATOR = /
+        \.(?!\d)=? |      # dot that is not decimal point, string concatenation
+        && | \|\| |       # logic
+        :: | -> | => |    # scope, member, dictionary
+        \\(?!\n) |        # namespace
+        \+\+ | -- |       # increment, decrement
+        [,;?:()\[\]{}] |  # simple delimiters
+        [-+*\/%&|^]=? |   # ordinary math, binary logic, assignment shortcuts
+        [~$] |            # whatever
+        =& |              # reference assignment
+        [=!]=?=? | <> |   # comparison and assignment
+        <<=? | >>=? | [<>]=?  # comparison and shift
+      /x
+      
+    end
+    
+    def scan_tokens tokens, options
+      if string.respond_to?(:encoding)
+        unless string.encoding == Encoding::ASCII_8BIT
+          self.string = string.encode Encoding::ASCII_8BIT,
+            :invalid => :replace, :undef => :replace, :replace => '?'
+        end
+      end
+      
+      if check(RE::PHP_START) ||  # starts with <?
+       (match?(/\s*<\S/) && exist?(RE::PHP_START)) || # starts with tag and contains <?
+       exist?(RE::HTML_INDICATOR) ||
+       check(/.{1,100}#{RE::PHP_START}/om)  # PHP start after max 100 chars
+        # is HTML with embedded PHP, so start with HTML
+        states = [:initial]
+      else
+        # is just PHP, so start with PHP surrounded by HTML
+        states = [:initial, :php]
+      end
+      
+      label_expected = true
+      case_expected = false
+      
+      heredoc_delimiter = nil
+      delimiter = nil
+      modifier = nil
+      
+      until eos?
+        
+        match = nil
+        kind = nil
+        
+        case states.last
+        
+        when :initial  # HTML
+          if scan RE::PHP_START
+            kind = :inline_delimiter
+            label_expected = true
+            states << :php
+          else
+            match = scan_until(/(?=#{RE::PHP_START})/o) || scan_until(/\z/)
+            @html_scanner.tokenize match unless match.empty?
+            next
+          end
+        
+        when :php
+          if match = scan(/\s+/)
+            tokens << [match, :space]
+            next
+          
+          elsif scan(%r! (?m: \/\* (?: .*? \*\/ | .* ) ) | (?://|\#) .*? (?=#{RE::PHP_END}|$) !xo)
+            kind = :comment
+          
+          elsif match = scan(RE::IDENTIFIER)
+            kind = Words::IDENT_KIND[match]
+            if kind == :ident && label_expected && check(/:(?!:)/)
+              kind = :label
+              label_expected = true
+            else
+              label_expected = false
+              if kind == :ident && match =~ /^[A-Z]/
+                kind = :constant
+              elsif kind == :reserved
+                case match
+                when 'class'
+                  states << :class_expected
+                when 'function'
+                  states << :function_expected
+                when 'case', 'default'
+                  case_expected = true
+                end
+              elsif match == 'b' && check(/['"]/)  # binary string literal
+                modifier = match
+                next
+              end
+            end
+          
+          elsif scan(/(?:\d+\.\d*|\d*\.\d+)(?:e[-+]?\d+)?|\d+e[-+]?\d+/i)
+            label_expected = false
+            kind = :float
+          
+          elsif scan(/0x[0-9a-fA-F]+/)
+            label_expected = false
+            kind = :hex
+          
+          elsif scan(/\d+/)
+            label_expected = false
+            kind = :integer
+          
+          elsif scan(/'/)
+            tokens << [:open, :string]
+            if modifier
+              tokens << [modifier, :modifier]
+              modifier = nil
+            end
+            kind = :delimiter
+            states.push :sqstring
+          
+          elsif match = scan(/["`]/)
+            tokens << [:open, :string]
+            if modifier
+              tokens << [modifier, :modifier]
+              modifier = nil
+            end
+            delimiter = match
+            kind = :delimiter
+            states.push :dqstring
+          
+          elsif match = scan(RE::VARIABLE)
+            label_expected = false
+            kind = Words::VARIABLE_KIND[match]
+          
+          elsif scan(/\{/)
+            kind = :operator
+            label_expected = true
+            states.push :php
+          
+          elsif scan(/\}/)
+            if states.size == 1
+              kind = :error
+            else
+              states.pop
+              if states.last.is_a?(::Array)
+                delimiter = states.last[1]
+                states[-1] = states.last[0]
+                tokens << [matched, :delimiter]
+                tokens << [:close, :inline]
+                next
+              else
+                kind = :operator
+                label_expected = true
+              end
+            end
+          
+          elsif scan(/@/)
+            label_expected = false
+            kind = :exception
+          
+          elsif scan RE::PHP_END
+            kind = :inline_delimiter
+            states = [:initial]
+          
+          elsif match = scan(/<<<(?:(#{RE::IDENTIFIER})|"(#{RE::IDENTIFIER})"|'(#{RE::IDENTIFIER})')/o)
+            tokens << [:open, :string]
+            warn 'heredoc in heredoc?' if heredoc_delimiter
+            heredoc_delimiter = Regexp.escape(self[1] || self[2] || self[3])
+            kind = :delimiter
+            states.push self[3] ? :sqstring : :dqstring
+            heredoc_delimiter = /#{heredoc_delimiter}(?=;?$)/
+          
+          elsif match = scan(/#{RE::OPERATOR}/o)
+            label_expected = match == ';'
+            if case_expected
+              label_expected = true if match == ':'
+              case_expected = false
+            end
+            kind = :operator
+          
+          else
+            getch
+            kind = :error
+          
+          end
+        
+        when :sqstring
+          if scan(heredoc_delimiter ? /[^\\\n]+/ : /[^'\\]+/)
+            kind = :content
+          elsif !heredoc_delimiter && scan(/'/)
+            tokens << [matched, :delimiter]
+            tokens << [:close, :string]
+            delimiter = nil
+            label_expected = false
+            states.pop
+            next
+          elsif heredoc_delimiter && match = scan(/\n/)
+            kind = :content
+            if scan heredoc_delimiter
+              tokens << ["\n", :content]
+              tokens << [matched, :delimiter]
+              tokens << [:close, :string]
+              heredoc_delimiter = nil
+              label_expected = false
+              states.pop
+              next
+            end
+          elsif scan(heredoc_delimiter ? /\\\\/ : /\\[\\'\n]/)
+            kind = :char
+          elsif scan(/\\./m)
+            kind = :content
+          elsif scan(/\\/)
+            kind = :error
+          end
+        
+        when :dqstring
+          if scan(heredoc_delimiter ? /[^${\\\n]+/ : (delimiter == '"' ? /[^"${\\]+/ : /[^`${\\]+/))
+            kind = :content
+          elsif !heredoc_delimiter && scan(delimiter == '"' ? /"/ : /`/)
+            tokens << [matched, :delimiter]
+            tokens << [:close, :string]
+            delimiter = nil
+            label_expected = false
+            states.pop
+            next
+          elsif heredoc_delimiter && match = scan(/\n/)
+            kind = :content
+            if scan heredoc_delimiter
+              tokens << ["\n", :content]
+              tokens << [matched, :delimiter]
+              tokens << [:close, :string]
+              heredoc_delimiter = nil
+              label_expected = false
+              states.pop
+              next
+            end
+          elsif scan(/\\(?:x[0-9A-Fa-f]{1,2}|[0-7]{1,3})/)
+            kind = :char
+          elsif scan(heredoc_delimiter ? /\\[nrtvf\\$]/ : (delimiter == '"' ? /\\[nrtvf\\$"]/ : /\\[nrtvf\\$`]/))
+            kind = :char
+          elsif scan(/\\./m)
+            kind = :content
+          elsif scan(/\\/)
+            kind = :error
+          elsif match = scan(/#{RE::VARIABLE}/o)
+            kind = :local_variable
+            if check(/\[#{RE::IDENTIFIER}\]/o)
+              tokens << [:open, :inline]
+              tokens << [match, :local_variable]
+              tokens << [scan(/\[/), :operator]
+              tokens << [scan(/#{RE::IDENTIFIER}/o), :ident]
+              tokens << [scan(/\]/), :operator]
+              tokens << [:close, :inline]
+              next
+            elsif check(/\[/)
+              match << scan(/\[['"]?#{RE::IDENTIFIER}?['"]?\]?/o)
+              kind = :error
+            elsif check(/->#{RE::IDENTIFIER}/o)
+              tokens << [:open, :inline]
+              tokens << [match, :local_variable]
+              tokens << [scan(/->/), :operator]
+              tokens << [scan(/#{RE::IDENTIFIER}/o), :ident]
+              tokens << [:close, :inline]
+              next
+            elsif check(/->/)
+              match << scan(/->/)
+              kind = :error
+            end
+          elsif match = scan(/\{/)
+            if check(/\$/)
+              kind = :delimiter
+              states[-1] = [states.last, delimiter]
+              delimiter = nil
+              states.push :php
+              tokens << [:open, :inline]
+            else
+              kind = :string
+            end
+          elsif scan(/\$\{#{RE::IDENTIFIER}\}/o)
+            kind = :local_variable
+          elsif scan(/\$/)
+            kind = :content
+          end
+        
+        when :class_expected
+          if scan(/\s+/)
+            kind = :space
+          elsif match = scan(/#{RE::IDENTIFIER}/o)
+            kind = :class
+            states.pop
+          else
+            states.pop
+            next
+          end
+        
+        when :function_expected
+          if scan(/\s+/)
+            kind = :space
+          elsif scan(/&/)
+            kind = :operator
+          elsif match = scan(/#{RE::IDENTIFIER}/o)
+            kind = :function
+            states.pop
+          else
+            states.pop
+            next
+          end
+        
+        else
+          raise_inspect 'Unknown state!', tokens, states
+        end
+        
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens, states
+        end
+        raise_inspect 'Empty token', tokens, states unless match
+        
+        tokens << [match, kind]
+        
+      end
+      
+      tokens
+    end
+    
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/plaintext.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,21 @@
+module CodeRay
+module Scanners
+
+  class Plaintext < Scanner
+
+    register_for :plaintext, :plain
+    title 'Plain text'
+    
+    include Streamable
+    
+    KINDS_NOT_LOC = [:plain]
+    
+    def scan_tokens tokens, options
+      text = (scan_until(/\z/) || '')
+      tokens << [text, :plain]
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/python.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,285 @@
+module CodeRay
+module Scanners
+  
+  # Bases on pygments' PythonLexer, see
+  # http://dev.pocoo.org/projects/pygments/browser/pygments/lexers/agile.py.
+  class Python < Scanner
+    
+    include Streamable
+    
+    register_for :python
+    file_extension 'py'
+    
+    KEYWORDS = [
+      'and', 'as', 'assert', 'break', 'class', 'continue', 'def',
+      'del', 'elif', 'else', 'except', 'finally', 'for',
+      'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not',
+      'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield',
+      'nonlocal',  # new in Python 3
+    ]
+    
+    OLD_KEYWORDS = [
+      'exec', 'print',  # gone in Python 3
+    ]
+    
+    PREDEFINED_METHODS_AND_TYPES = %w[
+      __import__ abs all any apply basestring bin bool buffer
+      bytearray bytes callable chr classmethod cmp coerce compile
+      complex delattr dict dir divmod enumerate eval execfile exit
+      file filter float frozenset getattr globals hasattr hash hex id
+      input int intern isinstance issubclass iter len list locals
+      long map max min next object oct open ord pow property range
+      raw_input reduce reload repr reversed round set setattr slice
+      sorted staticmethod str sum super tuple type unichr unicode
+      vars xrange zip
+    ]
+    
+    PREDEFINED_EXCEPTIONS = %w[
+      ArithmeticError AssertionError AttributeError
+      BaseException DeprecationWarning EOFError EnvironmentError
+      Exception FloatingPointError FutureWarning GeneratorExit IOError
+      ImportError ImportWarning IndentationError IndexError KeyError
+      KeyboardInterrupt LookupError MemoryError NameError
+      NotImplemented NotImplementedError OSError OverflowError
+      OverflowWarning PendingDeprecationWarning ReferenceError
+      RuntimeError RuntimeWarning StandardError StopIteration
+      SyntaxError SyntaxWarning SystemError SystemExit TabError
+      TypeError UnboundLocalError UnicodeDecodeError
+      UnicodeEncodeError UnicodeError UnicodeTranslateError
+      UnicodeWarning UserWarning ValueError Warning ZeroDivisionError
+    ]
+    
+    PREDEFINED_VARIABLES_AND_CONSTANTS = [
+      'False', 'True', 'None', # "keywords" since Python 3
+      'self', 'Ellipsis', 'NotImplemented',
+    ]
+    
+    IDENT_KIND = WordList.new(:ident).
+      add(KEYWORDS, :keyword).
+      add(OLD_KEYWORDS, :old_keyword).
+      add(PREDEFINED_METHODS_AND_TYPES, :predefined).
+      add(PREDEFINED_VARIABLES_AND_CONSTANTS, :pre_constant).
+      add(PREDEFINED_EXCEPTIONS, :exception)
+    
+    NAME = / [^\W\d] \w* /x
+    ESCAPE = / [abfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} | N\{[-\w ]+\} /x
+    
+    OPERATOR = /
+      \.\.\. |          # ellipsis
+      \.(?!\d) |        # dot but not decimal point
+      [,;:()\[\]{}] |   # simple delimiters
+      \/\/=? | \*\*=? | # special math
+      [-+*\/%&|^]=? |   # ordinary math and binary logic
+      [~`] |            # binary complement and inspection
+      <<=? | >>=? | [<>=]=? | !=  # comparison and assignment
+    /x
+    
+    STRING_DELIMITER_REGEXP = Hash.new do |h, delimiter|
+      h[delimiter] = Regexp.union delimiter
+    end
+    
+    STRING_CONTENT_REGEXP = Hash.new do |h, delimiter|
+      h[delimiter] = / [^\\\n]+? (?= \\ | $ | #{Regexp.escape(delimiter)} ) /x
+    end
+    
+    DEF_NEW_STATE = WordList.new(:initial).
+      add(%w(def), :def_expected).
+      add(%w(import from), :include_expected).
+      add(%w(class), :class_expected)
+    
+    DESCRIPTOR = /
+      #{NAME}
+      (?: \. #{NAME} )*
+      | \*
+    /x
+    
+    def scan_tokens tokens, options
+      
+      state = :initial
+      string_delimiter = nil
+      string_raw = false
+      import_clause = class_name_follows = last_token_dot = false
+      unicode = string.respond_to?(:encoding) && string.encoding.name == 'UTF-8'
+      from_import_state = []
+      
+      until eos?
+        
+        kind = nil
+        match = nil
+        
+        if state == :string
+          if scan(STRING_DELIMITER_REGEXP[string_delimiter])
+            tokens << [matched, :delimiter]
+            tokens << [:close, :string]
+            state = :initial
+            next
+          elsif string_delimiter.size == 3 && scan(/\n/)
+            kind = :content
+          elsif scan(STRING_CONTENT_REGEXP[string_delimiter])
+            kind = :content
+          elsif !string_raw && scan(/ \\ #{ESCAPE} /ox)
+            kind = :char
+          elsif scan(/ \\ #{UNICODE_ESCAPE} /ox)
+            kind = :char
+          elsif scan(/ \\ . /x)
+            kind = :content
+          elsif scan(/ \\ | $ /x)
+            tokens << [:close, :string]
+            kind = :error
+            state = :initial
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens, state
+          end
+        
+        elsif match = scan(/ [ \t]+ | \\\n /x)
+          tokens << [match, :space]
+          next
+        
+        elsif match = scan(/\n/)
+          tokens << [match, :space]
+          state = :initial if state == :include_expected
+          next
+        
+        elsif match = scan(/ \# [^\n]* /mx)
+          tokens << [match, :comment]
+          next
+        
+        elsif state == :initial
+          
+          if scan(/#{OPERATOR}/o)
+            kind = :operator
+          
+          elsif match = scan(/(u?r?|b)?("""|"|'''|')/i)
+            tokens << [:open, :string]
+            string_delimiter = self[2]
+            string_raw = false
+            modifiers = self[1]
+            unless modifiers.empty?
+              string_raw = !!modifiers.index(?r)
+              tokens << [modifiers, :modifier]
+              match = string_delimiter
+            end
+            state = :string
+            kind = :delimiter
+          
+          # TODO: backticks
+          
+          elsif match = scan(unicode ? /#{NAME}/uo : /#{NAME}/o)
+            kind = IDENT_KIND[match]
+            # TODO: keyword arguments
+            kind = :ident if last_token_dot
+            if kind == :old_keyword
+              kind = check(/\(/) ? :ident : :keyword
+            elsif kind == :predefined && check(/ *=/)
+              kind = :ident
+            elsif kind == :keyword
+              state = DEF_NEW_STATE[match]
+              from_import_state << match.to_sym if state == :include_expected
+            end
+          
+          elsif scan(/@[a-zA-Z0-9_.]+[lL]?/)
+            kind = :decorator
+          
+          elsif scan(/0[xX][0-9A-Fa-f]+[lL]?/)
+            kind = :hex
+          
+          elsif scan(/0[bB][01]+[lL]?/)
+            kind = :bin
+          
+          elsif match = scan(/(?:\d*\.\d+|\d+\.\d*)(?:[eE][+-]?\d+)?|\d+[eE][+-]?\d+/)
+            kind = :float
+            if scan(/[jJ]/)
+              match << matched
+              kind = :imaginary
+            end
+          
+          elsif scan(/0[oO][0-7]+|0[0-7]+(?![89.eE])[lL]?/)
+            kind = :oct
+          
+          elsif match = scan(/\d+([lL])?/)
+            kind = :integer
+            if self[1] == nil && scan(/[jJ]/)
+              match << matched
+              kind = :imaginary
+            end
+          
+          else
+            getch
+            kind = :error
+          
+          end
+            
+        elsif state == :def_expected
+          state = :initial
+          if match = scan(unicode ? /#{NAME}/uo : /#{NAME}/o)
+            kind = :method
+          else
+            next
+          end
+        
+        elsif state == :class_expected
+          state = :initial
+          if match = scan(unicode ? /#{NAME}/uo : /#{NAME}/o)
+            kind = :class
+          else
+            next
+          end
+          
+        elsif state == :include_expected
+          if match = scan(unicode ? /#{DESCRIPTOR}/uo : /#{DESCRIPTOR}/o)
+            kind = :include
+            if match == 'as'
+              kind = :keyword
+              from_import_state << :as
+            elsif from_import_state.first == :from && match == 'import'
+              kind = :keyword
+              from_import_state << :import
+            elsif from_import_state.last == :as
+              # kind = match[0,1][unicode ? /[[:upper:]]/u : /[[:upper:]]/] ? :class : :method
+              kind = :ident
+              from_import_state.pop
+            elsif IDENT_KIND[match] == :keyword
+              unscan
+              match = nil
+              state = :initial
+              next
+            end
+          elsif match = scan(/,/)
+            from_import_state.pop if from_import_state.last == :as
+            kind = :operator
+          else
+            from_import_state = []
+            state = :initial
+            next
+          end
+          
+        else
+          raise_inspect 'Unknown state', tokens, state
+          
+        end
+        
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens, state
+        end
+        raise_inspect 'Empty token', tokens, state unless match
+        
+        last_token_dot = match == '.'
+        
+        tokens << [match, kind]
+        
+      end
+      
+      if state == :string
+        tokens << [:close, :string]
+      end
+      
+      tokens
+    end
+    
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/rhtml.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,78 @@
+module CodeRay
+module Scanners
+
+  load :html
+  load :ruby
+
+  # RHTML Scanner
+  class RHTML < Scanner
+
+    include Streamable
+    register_for :rhtml
+    title 'HTML ERB Template'
+    
+    KINDS_NOT_LOC = HTML::KINDS_NOT_LOC
+
+    ERB_RUBY_BLOCK = /
+      <%(?!%)[=-]?
+      (?>
+        [^\-%]*    # normal*
+        (?>        # special
+          (?: %(?!>) | -(?!%>) )
+          [^\-%]*  # normal*
+        )*
+      )
+      (?: -?%> )?
+    /x
+
+    START_OF_ERB = /
+      <%(?!%)
+    /x
+
+  private
+
+    def setup
+      @ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true
+      @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true
+    end
+
+    def reset_instance
+      super
+      @html_scanner.reset
+    end
+
+    def scan_tokens tokens, options
+
+      until eos?
+
+        if (match = scan_until(/(?=#{START_OF_ERB})/o) || scan_until(/\z/)) and not match.empty?
+          @html_scanner.tokenize match
+
+        elsif match = scan(/#{ERB_RUBY_BLOCK}/o)
+          start_tag = match[/\A<%[-=#]?/]
+          end_tag = match[/-?%?>?\z/]
+          tokens << [:open, :inline]
+          tokens << [start_tag, :inline_delimiter]
+          code = match[start_tag.size .. -1 - end_tag.size]
+          if start_tag == '<%#'
+            tokens << [code, :comment]
+          else
+            @ruby_scanner.tokenize code
+          end
+          tokens << [end_tag, :inline_delimiter] unless end_tag.empty?
+          tokens << [:close, :inline]
+
+        else
+          raise_inspect 'else-case reached!', tokens
+        end
+
+      end
+
+      tokens
+
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/ruby.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,444 @@
+# encoding: utf-8
+module CodeRay
+module Scanners
+
+  # This scanner is really complex, since Ruby _is_ a complex language!
+  #
+  # It tries to highlight 100% of all common code,
+  # and 90% of strange codes.
+  #
+  # It is optimized for HTML highlighting, and is not very useful for
+  # parsing or pretty printing.
+  #
+  # For now, I think it's better than the scanners in VIM or Syntax, or
+  # any highlighter I was able to find, except Caleb's RubyLexer.
+  #
+  # I hope it's also better than the rdoc/irb lexer.
+  class Ruby < Scanner
+
+    include Streamable
+
+    register_for :ruby
+    file_extension 'rb'
+
+    helper :patterns
+    
+    if not defined? EncodingError
+      EncodingError = Class.new Exception
+    end
+
+  private
+    def scan_tokens tokens, options
+      if string.respond_to?(:encoding)
+        unless string.encoding == Encoding::UTF_8
+          self.string = string.encode Encoding::UTF_8,
+            :invalid => :replace, :undef => :replace, :replace => '?'
+        end
+        unicode = false
+      else
+        unicode = exist?(/[^\x00-\x7f]/)
+      end
+      
+      last_token_dot = false
+      value_expected = true
+      heredocs = nil
+      last_state = nil
+      state = :initial
+      depth = nil
+      inline_block_stack = []
+      
+      
+      patterns = Patterns  # avoid constant lookup
+      
+      until eos?
+        match = nil
+        kind = nil
+
+        if state.instance_of? patterns::StringState
+# {{{
+          match = scan_until(state.pattern) || scan_until(/\z/)
+          tokens << [match, :content] unless match.empty?
+          break if eos?
+
+          if state.heredoc and self[1]  # end of heredoc
+            match = getch.to_s
+            match << scan_until(/$/) unless eos?
+            tokens << [match, :delimiter]
+            tokens << [:close, state.type]
+            state = state.next_state
+            next
+          end
+
+          case match = getch
+
+          when state.delim
+            if state.paren
+              state.paren_depth -= 1
+              if state.paren_depth > 0
+                tokens << [match, :nesting_delimiter]
+                next
+              end
+            end
+            tokens << [match, :delimiter]
+            if state.type == :regexp and not eos?
+              modifiers = scan(/#{patterns::REGEXP_MODIFIERS}/ox)
+              tokens << [modifiers, :modifier] unless modifiers.empty?
+            end
+            tokens << [:close, state.type]
+            value_expected = false
+            state = state.next_state
+
+          when '\\'
+            if state.interpreted
+              if esc = scan(/ #{patterns::ESCAPE} /ox)
+                tokens << [match + esc, :char]
+              else
+                tokens << [match, :error]
+              end
+            else
+              case m = getch
+              when state.delim, '\\'
+                tokens << [match + m, :char]
+              when nil
+                tokens << [match, :error]
+              else
+                tokens << [match + m, :content]
+              end
+            end
+
+          when '#'
+            case peek(1)
+            when '{'
+              inline_block_stack << [state, depth, heredocs]
+              value_expected = true
+              state = :initial
+              depth = 1
+              tokens << [:open, :inline]
+              tokens << [match + getch, :inline_delimiter]
+            when '$', '@'
+              tokens << [match, :escape]
+              last_state = state  # scan one token as normal code, then return here
+              state = :initial
+            else
+              raise_inspect 'else-case # reached; #%p not handled' % peek(1), tokens
+            end
+
+          when state.paren
+            state.paren_depth += 1
+            tokens << [match, :nesting_delimiter]
+
+          when /#{patterns::REGEXP_SYMBOLS}/ox
+            tokens << [match, :function]
+
+          else
+            raise_inspect 'else-case " reached; %p not handled, state = %p' % [match, state], tokens
+
+          end
+          next
+# }}}
+        else
+# {{{
+          if match = scan(/[ \t\f]+/)
+            kind = :space
+            match << scan(/\s*/) unless eos? || heredocs
+            value_expected = true if match.index(?\n)
+            tokens << [match, kind]
+            next
+            
+          elsif match = scan(/\\?\n/)
+            kind = :space
+            if match == "\n"
+              value_expected = true
+              state = :initial if state == :undef_comma_expected
+            end
+            if heredocs
+              unscan  # heredoc scanning needs \n at start
+              state = heredocs.shift
+              tokens << [:open, state.type]
+              heredocs = nil if heredocs.empty?
+              next
+            else
+              match << scan(/\s*/) unless eos?
+            end
+            tokens << [match, kind]
+            next
+          
+          elsif bol? && match = scan(/\#!.*/)
+            tokens << [match, :doctype]
+            next
+            
+          elsif match = scan(/\#.*/) or
+            ( bol? and match = scan(/#{patterns::RUBYDOC_OR_DATA}/o) )
+              kind = :comment
+              tokens << [match, kind]
+              next
+
+          elsif state == :initial
+
+            # IDENTS #
+            if match = scan(unicode ? /#{patterns::METHOD_NAME}/uo :
+                                      /#{patterns::METHOD_NAME}/o)
+              if last_token_dot
+                kind = if match[/^[A-Z]/] and not match?(/\(/) then :constant else :ident end
+              else
+                if value_expected != :expect_colon && scan(/:(?= )/)
+                  tokens << [match, :key]
+                  match = ':'
+                  kind = :operator
+                else
+                  kind = patterns::IDENT_KIND[match]
+                  if kind == :ident
+                    if match[/\A[A-Z]/] and not match[/[!?]$/] and not match?(/\(/)
+                      kind = :constant
+                    end
+                  elsif kind == :reserved
+                    state = patterns::DEF_NEW_STATE[match]
+                    value_expected = :set if patterns::KEYWORDS_EXPECTING_VALUE[match]
+                  end
+                end
+              end
+              value_expected = :set if check(/#{patterns::VALUE_FOLLOWS}/o)
+            
+            elsif last_token_dot and match = scan(/#{patterns::METHOD_NAME_OPERATOR}|\(/o)
+              kind = :ident
+              value_expected = :set if check(unicode ? /#{patterns::VALUE_FOLLOWS}/uo :
+                                                       /#{patterns::VALUE_FOLLOWS}/o)
+
+            # OPERATORS #
+            elsif not last_token_dot and match = scan(/ \.\.\.? | (?:\.|::)() | [,\(\)\[\]\{\}] | ==?=? /x)
+              if match !~ / [.\)\]\}] /x or match =~ /\.\.\.?/
+                value_expected = :set
+              end
+              last_token_dot = :set if self[1]
+              kind = :operator
+              unless inline_block_stack.empty?
+                case match
+                when '{'
+                  depth += 1
+                when '}'
+                  depth -= 1
+                  if depth == 0  # closing brace of inline block reached
+                    state, depth, heredocs = inline_block_stack.pop
+                    heredocs = nil if heredocs && heredocs.empty?
+                    tokens << [match, :inline_delimiter]
+                    kind = :inline
+                    match = :close
+                  end
+                end
+              end
+
+            elsif match = scan(/ ['"] /mx)
+              tokens << [:open, :string]
+              kind = :delimiter
+              state = patterns::StringState.new :string, match == '"', match  # important for streaming
+
+            elsif match = scan(unicode ? /#{patterns::INSTANCE_VARIABLE}/uo :
+                                         /#{patterns::INSTANCE_VARIABLE}/o)
+              kind = :instance_variable
+
+            elsif value_expected and match = scan(/\//)
+              tokens << [:open, :regexp]
+              kind = :delimiter
+              interpreted = true
+              state = patterns::StringState.new :regexp, interpreted, match
+
+            # elsif match = scan(/[-+]?#{patterns::NUMERIC}/o)
+            elsif match = value_expected ? scan(/[-+]?#{patterns::NUMERIC}/o) : scan(/#{patterns::NUMERIC}/o)
+              kind = self[1] ? :float : :integer
+
+            elsif match = scan(unicode ? /#{patterns::SYMBOL}/uo :
+                                         /#{patterns::SYMBOL}/o)
+              case delim = match[1]
+              when ?', ?"
+                tokens << [:open, :symbol]
+                tokens << [':', :symbol]
+                match = delim.chr
+                kind = :delimiter
+                state = patterns::StringState.new :symbol, delim == ?", match
+              else
+                kind = :symbol
+              end
+
+            elsif match = scan(/ -[>=]? | [+!~^]=? | [*|&]{1,2}=? | >>? /x)
+              value_expected = :set
+              kind = :operator
+
+            elsif value_expected and match = scan(unicode ? /#{patterns::HEREDOC_OPEN}/uo :
+                                                            /#{patterns::HEREDOC_OPEN}/o)
+              indented = self[1] == '-'
+              quote = self[3]
+              delim = self[quote ? 4 : 2]
+              kind = patterns::QUOTE_TO_TYPE[quote]
+              tokens << [:open, kind]
+              tokens << [match, :delimiter]
+              match = :close
+              heredoc = patterns::StringState.new kind, quote != '\'', delim, (indented ? :indented : :linestart )
+              heredocs ||= []  # create heredocs if empty
+              heredocs << heredoc
+
+            elsif value_expected and match = scan(/#{patterns::FANCY_START_CORRECT}/o)
+              kind, interpreted = *patterns::FancyStringType.fetch(self[1]) do
+                raise_inspect 'Unknown fancy string: %%%p' % k, tokens
+              end
+              tokens << [:open, kind]
+              state = patterns::StringState.new kind, interpreted, self[2]
+              kind = :delimiter
+
+            elsif value_expected and match = scan(unicode ? /#{patterns::CHARACTER}/uo :
+                                                            /#{patterns::CHARACTER}/o)
+              kind = :integer
+
+            elsif match = scan(/ [\/%]=? | <(?:<|=>?)? | [?:;] /x)
+              value_expected = :set
+              kind = :operator
+
+            elsif match = scan(/`/)
+              if last_token_dot
+                kind = :operator
+              else
+                tokens << [:open, :shell]
+                kind = :delimiter
+                state = patterns::StringState.new :shell, true, match
+              end
+
+            elsif match = scan(unicode ? /#{patterns::GLOBAL_VARIABLE}/uo :
+                                         /#{patterns::GLOBAL_VARIABLE}/o)
+              kind = :global_variable
+
+            elsif match = scan(unicode ? /#{patterns::CLASS_VARIABLE}/uo :
+                                         /#{patterns::CLASS_VARIABLE}/o)
+              kind = :class_variable
+
+            else
+              if !unicode && !string.respond_to?(:encoding)
+                # check for unicode
+                debug, $DEBUG = $DEBUG, false
+                begin
+                  if check(/./mu).size > 1
+                    # seems like we should try again with unicode
+                    unicode = true
+                  end
+                rescue
+                  # bad unicode char; use getch
+                ensure
+                  $DEBUG = debug
+                end
+                next if unicode
+              end
+              kind = :error
+              match = scan(unicode ? /./mu : /./m)
+
+            end
+
+          elsif state == :def_expected
+            state = :initial
+            if scan(/self\./)
+              tokens << ['self', :pre_constant]
+              tokens << ['.', :operator]
+            end
+            if match = scan(unicode ? /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/uo :
+                                      /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/o)
+              kind = :method
+            else
+              next
+            end
+
+          elsif state == :module_expected
+            if match = scan(/<</)
+              kind = :operator
+            else
+              state = :initial
+              if match = scan(unicode ? /(?:#{patterns::IDENT}::)*#{patterns::IDENT}/uo :
+                                        /(?:#{patterns::IDENT}::)*#{patterns::IDENT}/o)
+                kind = :class
+              else
+                next
+              end
+            end
+
+          elsif state == :undef_expected
+            state = :undef_comma_expected
+            if match = scan(unicode ? /#{patterns::METHOD_NAME_EX}/uo :
+                                      /#{patterns::METHOD_NAME_EX}/o)
+              kind = :method
+            elsif match = scan(unicode ? /#{patterns::SYMBOL}/uo :
+                                         /#{patterns::SYMBOL}/o)
+              case delim = match[1]
+              when ?', ?"
+                tokens << [:open, :symbol]
+                tokens << [':', :symbol]
+                match = delim.chr
+                kind = :delimiter
+                state = patterns::StringState.new :symbol, delim == ?", match
+                state.next_state = :undef_comma_expected
+              else
+                kind = :symbol
+              end
+            else
+              state = :initial
+              next
+            end
+
+          elsif state == :alias_expected
+            match = scan(unicode ? /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/uo :
+                                   /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/o)
+            
+            if match
+              tokens << [self[1], (self[1][0] == ?: ? :symbol : :method)]
+              tokens << [self[2], :space]
+              tokens << [self[3], (self[3][0] == ?: ? :symbol : :method)]
+            end
+            state = :initial
+            next
+
+          elsif state == :undef_comma_expected
+            if match = scan(/,/)
+              kind = :operator
+              state = :undef_expected
+            else
+              state = :initial
+              next
+            end
+
+          end
+# }}}
+          
+          unless kind == :error
+            if value_expected = value_expected == :set
+              value_expected = :expect_colon if match == '?' || match == 'when'
+            end
+            last_token_dot = last_token_dot == :set
+          end
+          
+          if $CODERAY_DEBUG and not kind
+            raise_inspect 'Error token %p in line %d' %
+              [[match, kind], line], tokens, state
+          end
+          raise_inspect 'Empty token', tokens unless match
+
+          tokens << [match, kind]
+
+          if last_state
+            state = last_state
+            last_state = nil
+          end
+        end
+      end
+
+      inline_block_stack << [state] if state.is_a? patterns::StringState
+      until inline_block_stack.empty?
+        this_block = inline_block_stack.pop
+        tokens << [:close, :inline] if this_block.size > 1
+        state = this_block.first
+        tokens << [:close, state.type]
+      end
+
+      tokens
+    end
+
+  end
+
+end
+end
+
+# vim:fdm=marker
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/scheme.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,145 @@
+module CodeRay
+  module Scanners
+
+    # Scheme scanner for CodeRay (by closure).
+    # Thanks to murphy for putting CodeRay into public.
+    class Scheme < Scanner
+      
+      # TODO: function defs
+      # TODO: built-in functions
+      
+      register_for :scheme
+      file_extension 'scm'
+
+      CORE_FORMS = %w[
+        lambda let let* letrec syntax-case define-syntax let-syntax
+        letrec-syntax begin define quote if or and cond case do delay
+        quasiquote set! cons force call-with-current-continuation call/cc
+      ]
+
+      IDENT_KIND = CaseIgnoringWordList.new(:ident).
+        add(CORE_FORMS, :reserved)
+      
+      #IDENTIFIER_INITIAL = /[a-z!@\$%&\*\/\:<=>\?~_\^]/i
+      #IDENTIFIER_SUBSEQUENT = /#{IDENTIFIER_INITIAL}|\d|\.|\+|-/
+      #IDENTIFIER = /#{IDENTIFIER_INITIAL}#{IDENTIFIER_SUBSEQUENT}*|\+|-|\.{3}/
+      IDENTIFIER = /[a-zA-Z!@$%&*\/:<=>?~_^][\w!@$%&*\/:<=>?~^.+\-]*|[+-]|\.\.\./
+      DIGIT = /\d/
+      DIGIT10 = DIGIT
+      DIGIT16 = /[0-9a-f]/i
+      DIGIT8 = /[0-7]/
+      DIGIT2 = /[01]/
+      RADIX16 = /\#x/i
+      RADIX8 = /\#o/i
+      RADIX2 = /\#b/i
+      RADIX10 = /\#d/i
+      EXACTNESS = /#i|#e/i
+      SIGN = /[\+-]?/
+      EXP_MARK = /[esfdl]/i
+      EXP = /#{EXP_MARK}#{SIGN}#{DIGIT}+/
+      SUFFIX = /#{EXP}?/
+      PREFIX10 = /#{RADIX10}?#{EXACTNESS}?|#{EXACTNESS}?#{RADIX10}?/
+      PREFIX16 = /#{RADIX16}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX16}/
+      PREFIX8 = /#{RADIX8}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX8}/
+      PREFIX2 = /#{RADIX2}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX2}/
+      UINT10 = /#{DIGIT10}+#*/
+      UINT16 = /#{DIGIT16}+#*/
+      UINT8 = /#{DIGIT8}+#*/
+      UINT2 = /#{DIGIT2}+#*/
+      DECIMAL = /#{DIGIT10}+#+\.#*#{SUFFIX}|#{DIGIT10}+\.#{DIGIT10}*#*#{SUFFIX}|\.#{DIGIT10}+#*#{SUFFIX}|#{UINT10}#{EXP}/
+      UREAL10 = /#{UINT10}\/#{UINT10}|#{DECIMAL}|#{UINT10}/
+      UREAL16 = /#{UINT16}\/#{UINT16}|#{UINT16}/
+      UREAL8 = /#{UINT8}\/#{UINT8}|#{UINT8}/
+      UREAL2 = /#{UINT2}\/#{UINT2}|#{UINT2}/
+      REAL10 = /#{SIGN}#{UREAL10}/
+      REAL16 = /#{SIGN}#{UREAL16}/
+      REAL8 = /#{SIGN}#{UREAL8}/
+      REAL2 = /#{SIGN}#{UREAL2}/
+      IMAG10 = /i|#{UREAL10}i/
+      IMAG16 = /i|#{UREAL16}i/
+      IMAG8 = /i|#{UREAL8}i/
+      IMAG2 = /i|#{UREAL2}i/
+      COMPLEX10 = /#{REAL10}@#{REAL10}|#{REAL10}\+#{IMAG10}|#{REAL10}-#{IMAG10}|\+#{IMAG10}|-#{IMAG10}|#{REAL10}/
+      COMPLEX16 = /#{REAL16}@#{REAL16}|#{REAL16}\+#{IMAG16}|#{REAL16}-#{IMAG16}|\+#{IMAG16}|-#{IMAG16}|#{REAL16}/
+      COMPLEX8 = /#{REAL8}@#{REAL8}|#{REAL8}\+#{IMAG8}|#{REAL8}-#{IMAG8}|\+#{IMAG8}|-#{IMAG8}|#{REAL8}/
+      COMPLEX2 = /#{REAL2}@#{REAL2}|#{REAL2}\+#{IMAG2}|#{REAL2}-#{IMAG2}|\+#{IMAG2}|-#{IMAG2}|#{REAL2}/
+      NUM10 = /#{PREFIX10}?#{COMPLEX10}/
+      NUM16 = /#{PREFIX16}#{COMPLEX16}/
+      NUM8 = /#{PREFIX8}#{COMPLEX8}/
+      NUM2 = /#{PREFIX2}#{COMPLEX2}/
+      NUM = /#{NUM10}|#{NUM16}|#{NUM8}|#{NUM2}/
+    
+    private
+      def scan_tokens tokens,options
+        
+        state = :initial
+        ident_kind = IDENT_KIND
+        
+        until eos?
+          kind = match = nil
+          
+          case state
+          when :initial
+            if scan(/ \s+ | \\\n /x)
+              kind = :space
+            elsif scan(/['\(\[\)\]]|#\(/)
+              kind = :operator_fat
+            elsif scan(/;.*/)
+              kind = :comment
+            elsif scan(/#\\(?:newline|space|.?)/)
+              kind = :char
+            elsif scan(/#[ft]/)
+              kind = :pre_constant
+            elsif scan(/#{IDENTIFIER}/o)
+              kind = ident_kind[matched]
+            elsif scan(/\./)
+              kind = :operator
+            elsif scan(/"/)
+              tokens << [:open, :string]
+              state = :string
+              tokens << ['"', :delimiter]
+              next
+            elsif scan(/#{NUM}/o) and not matched.empty?
+              kind = :integer
+            elsif getch
+              kind = :error
+            end
+            
+          when :string
+            if scan(/[^"\\]+/) or scan(/\\.?/)
+              kind = :content
+            elsif scan(/"/)
+              tokens << ['"', :delimiter]
+              tokens << [:close, :string]
+              state = :initial
+              next
+            else
+              raise_inspect "else case \" reached; %p not handled." % peek(1),
+                tokens, state
+            end
+            
+          else
+            raise "else case reached"
+          end
+          
+          match ||= matched
+          if $CODERAY_DEBUG and not kind
+            raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+          end
+          raise_inspect 'Empty token', tokens, state unless match
+          
+          tokens << [match, kind]
+          
+        end  # until eos
+        
+        if state == :string
+          tokens << [:close, :string]
+        end
+        
+        tokens
+        
+      end #scan_tokens
+    end #class
+  end #module scanners
+end #module coderay
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/sql.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,162 @@
+module CodeRay module Scanners
+  
+  # by Josh Goebel
+  class SQL < Scanner
+
+    register_for :sql
+    
+    RESERVED_WORDS = %w(
+      create database table index trigger drop primary key set select
+      insert update delete replace into
+      on from values before and or if exists case when
+      then else as group order by avg where
+      join inner outer union engine not
+      like end using collate show columns begin
+    )
+    
+    PREDEFINED_TYPES = %w(
+      char varchar enum binary text tinytext mediumtext
+      longtext blob tinyblob mediumblob longblob timestamp
+      date time datetime year double decimal float int
+      integer tinyint mediumint bigint smallint unsigned bit
+      bool boolean hex bin oct
+    )
+    
+    PREDEFINED_FUNCTIONS = %w( sum cast abs pi count min max avg )
+    
+    DIRECTIVES = %w( auto_increment unique default charset )
+
+    PREDEFINED_CONSTANTS = %w( null true false )
+    
+    IDENT_KIND = CaseIgnoringWordList.new(:ident).
+      add(RESERVED_WORDS, :reserved).
+      add(PREDEFINED_TYPES, :pre_type).
+      add(PREDEFINED_CONSTANTS, :pre_constant).
+      add(PREDEFINED_FUNCTIONS, :predefined).
+      add(DIRECTIVES, :directive)
+    
+    ESCAPE = / [rbfntv\n\\\/'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} | . /mx
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
+    
+    STRING_PREFIXES = /[xnb]|_\w+/i
+    
+    def scan_tokens tokens, options
+      
+      state = :initial
+      string_type = nil
+      string_content = ''
+      
+      until eos?
+        
+        kind = nil
+        match = nil
+        
+        if state == :initial
+          
+          if scan(/ \s+ | \\\n /x)
+            kind = :space
+          
+          elsif scan(/(?:--\s?|#).*/)
+            kind = :comment
+            
+          elsif scan(%r! /\* (?: .*? \*/ | .* ) !mx)
+            kind = :comment
+            
+          elsif scan(/ [-+*\/=<>;,!&^|()\[\]{}~%] | \.(?!\d) /x)
+            kind = :operator
+            
+          elsif scan(/(#{STRING_PREFIXES})?([`"'])/o)
+            prefix = self[1]
+            string_type = self[2]
+            tokens << [:open, :string]
+            tokens << [prefix, :modifier] if prefix
+            match = string_type
+            state = :string
+            kind = :delimiter
+            
+          elsif match = scan(/ @? [A-Za-z_][A-Za-z_0-9]* /x)
+            kind = match[0] == ?@ ? :variable : IDENT_KIND[match.downcase]
+            
+          elsif scan(/0[xX][0-9A-Fa-f]+/)
+            kind = :hex
+            
+          elsif scan(/0[0-7]+(?![89.eEfF])/)
+            kind = :oct
+            
+          elsif scan(/(?>\d+)(?![.eEfF])/)
+            kind = :integer
+            
+          elsif scan(/\d[fF]|\d*\.\d+(?:[eE][+-]?\d+)?|\d+[eE][+-]?\d+/)
+            kind = :float
+            
+          else
+            getch
+            kind = :error
+            
+          end
+          
+        elsif state == :string
+          if match = scan(/[^\\"'`]+/)
+            string_content << match
+            next
+          elsif match = scan(/["'`]/)
+            if string_type == match
+              if peek(1) == string_type  # doubling means escape
+                string_content << string_type << getch
+                next
+              end
+              unless string_content.empty?
+                tokens << [string_content, :content]
+                string_content = ''
+              end
+              tokens << [matched, :delimiter]
+              tokens << [:close, :string]
+              state = :initial
+              string_type = nil
+              next
+            else
+              string_content << match
+            end
+            next
+          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+            unless string_content.empty?
+              tokens << [string_content, :content]
+              string_content = ''
+            end
+            kind = :char
+          elsif match = scan(/ \\ . /mox)
+            string_content << match
+            next
+          elsif scan(/ \\ | $ /x)
+            unless string_content.empty?
+              tokens << [string_content, :content]
+              string_content = ''
+            end
+            kind = :error
+            state = :initial
+          else
+            raise "else case \" reached; %p not handled." % peek(1), tokens
+          end
+          
+        else
+          raise 'else-case reached', tokens
+          
+        end
+        
+        match ||= matched
+        unless kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens, state
+        end
+        raise_inspect 'Empty token', tokens unless match
+        
+        tokens << [match, kind]
+        
+      end
+      tokens
+      
+    end
+    
+  end
+  
+end end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/xml.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,17 @@
+module CodeRay
+module Scanners
+
+  load :html
+
+  # XML Scanner
+  #
+  # Currently this is the same scanner as Scanners::HTML.
+  class XML < HTML
+
+    register_for :xml
+    file_extension 'xml'
+    
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/.svn/text-base/yaml.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,140 @@
+module CodeRay
+module Scanners
+  
+  # YAML Scanner
+  #
+  # Based on the YAML scanner from Syntax by Jamis Buck.
+  class YAML < Scanner
+    
+    register_for :yaml
+    file_extension 'yml'
+    
+    KINDS_NOT_LOC = :all
+    
+    def scan_tokens tokens, options
+      
+      value_expected = nil
+      state = :initial
+      key_indent = indent = 0
+      
+      until eos?
+        
+        kind = nil
+        match = nil
+        key_indent = nil if bol?
+        
+        if match = scan(/ +[\t ]*/)
+          kind = :space
+          
+        elsif match = scan(/\n+/)
+          kind = :space
+          state = :initial if match.index(?\n)
+          
+        elsif match = scan(/#.*/)
+          kind = :comment
+          
+        elsif bol? and case
+          when match = scan(/---|\.\.\./)
+            tokens << [:open, :head]
+            tokens << [match, :head]
+            tokens << [:close, :head]
+            next
+          when match = scan(/%.*/)
+            tokens << [match, :doctype]
+            next
+          end
+        
+        elsif state == :value and case
+          when !check(/(?:"[^"]*")(?=: |:$)/) && scan(/"/)
+            tokens << [:open, :string]
+            tokens << [matched, :delimiter]
+            tokens << [matched, :content] if scan(/ [^"\\]* (?: \\. [^"\\]* )* /mx)
+            tokens << [matched, :delimiter] if scan(/"/)
+            tokens << [:close, :string]
+            next
+          when match = scan(/[|>][-+]?/)
+            tokens << [:open, :string]
+            tokens << [match, :delimiter]
+            string_indent = key_indent || column(pos - match.size - 1)
+            tokens << [matched, :content] if scan(/(?:\n+ {#{string_indent + 1}}.*)+/)
+            tokens << [:close, :string]
+            next
+          when match = scan(/(?![!"*&]).+?(?=$|\s+#)/)
+            tokens << [match, :string]
+            string_indent = key_indent || column(pos - match.size - 1)
+            tokens << [matched, :string] if scan(/(?:\n+ {#{string_indent + 1}}.*)+/)
+            next
+          end
+          
+        elsif case
+          when match = scan(/[-:](?= |$)/)
+            state = :value if state == :colon && (match == ':' || match == '-')
+            state = :value if state == :initial && match == '-'
+            kind = :operator
+          when match = scan(/[,{}\[\]]/)
+            kind = :operator
+          when state == :initial && match = scan(/[\w.() ]*\S(?=: |:$)/)
+            kind = :key
+            key_indent = column(pos - match.size - 1)
+            # tokens << [key_indent.inspect, :debug]
+            state = :colon
+          when match = scan(/(?:"[^"\n]*"|'[^'\n]*')(?=: |:$)/)
+            tokens << [:open, :key]
+            tokens << [match[0,1], :delimiter]
+            tokens << [match[1..-2], :content]
+            tokens << [match[-1,1], :delimiter]
+            tokens << [:close, :key]
+            key_indent = column(pos - match.size - 1)
+            # tokens << [key_indent.inspect, :debug]
+            state = :colon
+            next
+          when scan(/(![\w\/]+)(:([\w:]+))?/)
+            tokens << [self[1], :type]
+            if self[2]
+              tokens << [':', :operator]
+              tokens << [self[3], :class]
+            end
+            next
+          when scan(/&\S+/)
+            kind = :variable
+          when scan(/\*\w+/)
+            kind = :global_variable
+          when scan(/<</)
+            kind = :class_variable
+          when scan(/\d\d:\d\d:\d\d/)
+            kind = :oct
+          when scan(/\d\d\d\d-\d\d-\d\d\s\d\d:\d\d:\d\d(\.\d+)? [-+]\d\d:\d\d/)
+            kind = :oct
+          when scan(/:\w+/)
+            kind = :symbol
+          when scan(/[^:\s]+(:(?! |$)[^:\s]*)* .*/)
+            kind = :error
+          when scan(/[^:\s]+(:(?! |$)[^:\s]*)*/)
+            kind = :error
+          end
+          
+        else
+          getch
+          kind = :error
+          
+        end
+        
+        match ||= matched
+        
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens, state
+        end
+        raise_inspect 'Empty token', tokens, state unless match
+        
+        tokens << [match, kind]
+        
+      end
+      
+      tokens
+    end
+    
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/_map.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,23 @@
+module CodeRay
+module Scanners
+
+  map \
+    :h => :c,
+    :cplusplus => :cpp,
+    :'c++' => :cpp,
+    :ecma => :java_script,
+    :ecmascript => :java_script,
+    :ecma_script => :java_script,
+    :irb => :ruby,
+    :javascript => :java_script,
+    :js => :java_script,
+    :nitro => :nitro_xhtml,
+    :pascal => :delphi,
+    :plain => :plaintext,
+    :xhtml => :html,
+    :yml => :yaml
+
+  default :plain
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/c.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,203 @@
+module CodeRay
+module Scanners
+
+  class C < Scanner
+
+    include Streamable
+    
+    register_for :c
+    file_extension 'c'
+
+    RESERVED_WORDS = [
+      'asm', 'break', 'case', 'continue', 'default', 'do',
+      'else', 'enum', 'for', 'goto', 'if', 'return',
+      'sizeof', 'struct', 'switch', 'typedef', 'union', 'while',
+      'restrict',  # added in C99
+    ]
+
+    PREDEFINED_TYPES = [
+      'int', 'long', 'short', 'char',
+      'signed', 'unsigned', 'float', 'double',
+      'bool', 'complex',  # added in C99
+    ]
+
+    PREDEFINED_CONSTANTS = [
+      'EOF', 'NULL',
+      'true', 'false',  # added in C99
+    ]
+    DIRECTIVES = [
+      'auto', 'extern', 'register', 'static', 'void',
+      'const', 'volatile',  # added in C89
+      'inline',  # added in C99
+    ]
+
+    IDENT_KIND = WordList.new(:ident).
+      add(RESERVED_WORDS, :reserved).
+      add(PREDEFINED_TYPES, :pre_type).
+      add(DIRECTIVES, :directive).
+      add(PREDEFINED_CONSTANTS, :pre_constant)
+
+    ESCAPE = / [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
+
+    def scan_tokens tokens, options
+
+      state = :initial
+      label_expected = true
+      case_expected = false
+      label_expected_before_preproc_line = nil
+      in_preproc_line = false
+
+      until eos?
+
+        kind = nil
+        match = nil
+        
+        case state
+
+        when :initial
+
+          if match = scan(/ \s+ | \\\n /x)
+            if in_preproc_line && match != "\\\n" && match.index(?\n)
+              in_preproc_line = false
+              label_expected = label_expected_before_preproc_line
+            end
+            tokens << [match, :space]
+            next
+
+          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
+            kind = :comment
+
+          elsif match = scan(/ \# \s* if \s* 0 /x)
+            match << scan_until(/ ^\# (?:elif|else|endif) .*? $ | \z /xm) unless eos?
+            kind = :comment
+
+          elsif match = scan(/ [-+*=<>?:;,!&^|()\[\]{}~%]+ | \/=? | \.(?!\d) /x)
+            label_expected = match =~ /[;\{\}]/
+            if case_expected
+              label_expected = true if match == ':'
+              case_expected = false
+            end
+            kind = :operator
+
+          elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
+            kind = IDENT_KIND[match]
+            if kind == :ident && label_expected && !in_preproc_line && scan(/:(?!:)/)
+              kind = :label
+              match << matched
+            else
+              label_expected = false
+              if kind == :reserved
+                case match
+                when 'case', 'default'
+                  case_expected = true
+                end
+              end
+            end
+
+          elsif scan(/\$/)
+            kind = :ident
+          
+          elsif match = scan(/L?"/)
+            tokens << [:open, :string]
+            if match[0] == ?L
+              tokens << ['L', :modifier]
+              match = '"'
+            end
+            state = :string
+            kind = :delimiter
+
+          elsif scan(/#[ \t]*(\w*)/)
+            kind = :preprocessor
+            in_preproc_line = true
+            label_expected_before_preproc_line = label_expected
+            state = :include_expected if self[1] == 'include'
+
+          elsif scan(/ L?' (?: [^\'\n\\] | \\ #{ESCAPE} )? '? /ox)
+            label_expected = false
+            kind = :char
+
+          elsif scan(/0[xX][0-9A-Fa-f]+/)
+            label_expected = false
+            kind = :hex
+
+          elsif scan(/(?:0[0-7]+)(?![89.eEfF])/)
+            label_expected = false
+            kind = :oct
+
+          elsif scan(/(?:\d+)(?![.eEfF])L?L?/)
+            label_expected = false
+            kind = :integer
+
+          elsif scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
+            label_expected = false
+            kind = :float
+
+          else
+            getch
+            kind = :error
+
+          end
+
+        when :string
+          if scan(/[^\\\n"]+/)
+            kind = :content
+          elsif scan(/"/)
+            tokens << ['"', :delimiter]
+            tokens << [:close, :string]
+            state = :initial
+            label_expected = false
+            next
+          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+            kind = :char
+          elsif scan(/ \\ | $ /x)
+            tokens << [:close, :string]
+            kind = :error
+            state = :initial
+            label_expected = false
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+          end
+
+        when :include_expected
+          if scan(/<[^>\n]+>?|"[^"\n\\]*(?:\\.[^"\n\\]*)*"?/)
+            kind = :include
+            state = :initial
+
+          elsif match = scan(/\s+/)
+            kind = :space
+            state = :initial if match.index ?\n
+
+          else
+            state = :initial
+            next
+
+          end
+
+        else
+          raise_inspect 'Unknown state', tokens
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+
+        tokens << [match, kind]
+
+      end
+
+      if state == :string
+        tokens << [:close, :string]
+      end
+
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/cpp.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,228 @@
+module CodeRay
+module Scanners
+
+  class CPlusPlus < Scanner
+
+    include Streamable
+    
+    register_for :cpp
+    file_extension 'cpp'
+    title 'C++'
+    
+    # http://www.cppreference.com/wiki/keywords/start
+    RESERVED_WORDS = [
+      'and', 'and_eq', 'asm', 'bitand', 'bitor', 'break',
+      'case', 'catch', 'class', 'compl', 'const_cast',
+      'continue', 'default', 'delete', 'do', 'dynamic_cast', 'else',
+      'enum', 'export', 'for', 'goto', 'if', 'namespace', 'new',
+      'not', 'not_eq', 'or', 'or_eq', 'reinterpret_cast', 'return',
+      'sizeof', 'static_cast', 'struct', 'switch', 'template',
+      'throw', 'try', 'typedef', 'typeid', 'typename', 'union',
+      'while', 'xor', 'xor_eq'
+    ]
+
+    PREDEFINED_TYPES = [
+      'bool', 'char', 'double', 'float', 'int', 'long',
+      'short', 'signed', 'unsigned', 'wchar_t', 'string'
+    ]
+    PREDEFINED_CONSTANTS = [
+      'false', 'true',
+      'EOF', 'NULL',
+    ]
+    PREDEFINED_VARIABLES = [
+      'this'
+    ]
+    DIRECTIVES = [
+      'auto', 'const', 'explicit', 'extern', 'friend', 'inline', 'mutable', 'operator',
+      'private', 'protected', 'public', 'register', 'static', 'using', 'virtual', 'void',
+      'volatile'
+    ]
+
+    IDENT_KIND = WordList.new(:ident).
+      add(RESERVED_WORDS, :reserved).
+      add(PREDEFINED_TYPES, :pre_type).
+      add(PREDEFINED_VARIABLES, :local_variable).
+      add(DIRECTIVES, :directive).
+      add(PREDEFINED_CONSTANTS, :pre_constant)
+
+    ESCAPE = / [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
+
+    def scan_tokens tokens, options
+
+      state = :initial
+      label_expected = true
+      case_expected = false
+      label_expected_before_preproc_line = nil
+      in_preproc_line = false
+
+      until eos?
+
+        kind = nil
+        match = nil
+        
+        case state
+
+        when :initial
+
+          if match = scan(/ \s+ | \\\n /x)
+            if in_preproc_line && match != "\\\n" && match.index(?\n)
+              in_preproc_line = false
+              label_expected = label_expected_before_preproc_line
+            end
+            tokens << [match, :space]
+            next
+
+          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
+            kind = :comment
+
+          elsif match = scan(/ \# \s* if \s* 0 /x)
+            match << scan_until(/ ^\# (?:elif|else|endif) .*? $ | \z /xm) unless eos?
+            kind = :comment
+
+          elsif match = scan(/ [-+*=<>?:;,!&^|()\[\]{}~%]+ | \/=? | \.(?!\d) /x)
+            label_expected = match =~ /[;\{\}]/
+            if case_expected
+              label_expected = true if match == ':'
+              case_expected = false
+            end
+            kind = :operator
+
+          elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
+            kind = IDENT_KIND[match]
+            if kind == :ident && label_expected && !in_preproc_line && scan(/:(?!:)/)
+              kind = :label
+              match << matched
+            else
+              label_expected = false
+              if kind == :reserved
+                case match
+                when 'class'
+                  state = :class_name_expected
+                when 'case', 'default'
+                  case_expected = true
+                end
+              end
+            end
+
+          elsif scan(/\$/)
+            kind = :ident
+          
+          elsif match = scan(/L?"/)
+            tokens << [:open, :string]
+            if match[0] == ?L
+              tokens << ['L', :modifier]
+              match = '"'
+            end
+            state = :string
+            kind = :delimiter
+
+          elsif scan(/#[ \t]*(\w*)/)
+            kind = :preprocessor
+            in_preproc_line = true
+            label_expected_before_preproc_line = label_expected
+            state = :include_expected if self[1] == 'include'
+
+          elsif scan(/ L?' (?: [^\'\n\\] | \\ #{ESCAPE} )? '? /ox)
+            label_expected = false
+            kind = :char
+
+          elsif scan(/0[xX][0-9A-Fa-f]+/)
+            label_expected = false
+            kind = :hex
+
+          elsif scan(/(?:0[0-7]+)(?![89.eEfF])/)
+            label_expected = false
+            kind = :oct
+
+          elsif scan(/(?:\d+)(?![.eEfF])L?L?/)
+            label_expected = false
+            kind = :integer
+
+          elsif scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
+            label_expected = false
+            kind = :float
+
+          else
+            getch
+            kind = :error
+
+          end
+
+        when :string
+          if scan(/[^\\"]+/)
+            kind = :content
+          elsif scan(/"/)
+            tokens << ['"', :delimiter]
+            tokens << [:close, :string]
+            state = :initial
+            label_expected = false
+            next
+          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+            kind = :char
+          elsif scan(/ \\ | $ /x)
+            tokens << [:close, :string]
+            kind = :error
+            state = :initial
+            label_expected = false
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+          end
+
+        when :include_expected
+          if scan(/<[^>\n]+>?|"[^"\n\\]*(?:\\.[^"\n\\]*)*"?/)
+            kind = :include
+            state = :initial
+
+          elsif match = scan(/\s+/)
+            kind = :space
+            state = :initial if match.index ?\n
+
+          else
+            state = :initial
+            next
+
+          end
+        
+        when :class_name_expected
+          if scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
+            kind = :class
+            state = :initial
+
+          elsif match = scan(/\s+/)
+            kind = :space
+
+          else
+            getch
+            kind = :error
+            state = :initial
+
+          end
+          
+        else
+          raise_inspect 'Unknown state', tokens
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+
+        tokens << [match, kind]
+
+      end
+
+      if state == :string
+        tokens << [:close, :string]
+      end
+
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/css.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,209 @@
+module CodeRay
+module Scanners
+
+  class CSS < Scanner
+
+    register_for :css
+
+    KINDS_NOT_LOC = [
+      :comment,
+      :class, :pseudo_class, :type,
+      :constant, :directive,
+      :key, :value, :operator, :color, :float,
+      :error, :important,
+    ]
+    
+    module RE
+      Hex = /[0-9a-fA-F]/
+      Unicode = /\\#{Hex}{1,6}(?:\r\n|\s)?/ # differs from standard because it allows uppercase hex too
+      Escape = /#{Unicode}|\\[^\r\n\f0-9a-fA-F]/
+      NMChar = /[-_a-zA-Z0-9]|#{Escape}/
+      NMStart = /[_a-zA-Z]|#{Escape}/
+      NL = /\r\n|\r|\n|\f/
+      String1 = /"(?:[^\n\r\f\\"]|\\#{NL}|#{Escape})*"?/  # FIXME: buggy regexp
+      String2 = /'(?:[^\n\r\f\\']|\\#{NL}|#{Escape})*'?/  # FIXME: buggy regexp
+      String = /#{String1}|#{String2}/
+
+      HexColor = /#(?:#{Hex}{6}|#{Hex}{3})/
+      Color = /#{HexColor}/
+
+      Num = /-?(?:[0-9]+|[0-9]*\.[0-9]+)/
+      Name = /#{NMChar}+/
+      Ident = /-?#{NMStart}#{NMChar}*/
+      AtKeyword = /@#{Ident}/
+      Percentage = /#{Num}%/
+
+      reldimensions = %w[em ex px]
+      absdimensions = %w[in cm mm pt pc]
+      Unit = Regexp.union(*(reldimensions + absdimensions))
+
+      Dimension = /#{Num}#{Unit}/
+
+      Comment = %r! /\* (?: .*? \*/ | .* ) !mx
+      Function = /(?:url|alpha)\((?:[^)\n\r\f]|\\\))*\)?/
+
+      Id = /##{Name}/
+      Class = /\.#{Name}/
+      PseudoClass = /:#{Name}/
+      AttributeSelector = /\[[^\]]*\]?/
+
+    end
+
+    def scan_tokens tokens, options
+      
+      value_expected = nil
+      states = [:initial]
+
+      until eos?
+
+        kind = nil
+        match = nil
+
+        if scan(/\s+/)
+          kind = :space
+
+        elsif case states.last
+          when :initial, :media
+            if scan(/(?>#{RE::Ident})(?!\()|\*/ox)
+              kind = :type
+            elsif scan RE::Class
+              kind = :class
+            elsif scan RE::Id
+              kind = :constant
+            elsif scan RE::PseudoClass
+              kind = :pseudo_class
+            elsif match = scan(RE::AttributeSelector)
+              # TODO: Improve highlighting inside of attribute selectors.
+              tokens << [:open, :string]
+              tokens << [match[0,1], :delimiter]
+              tokens << [match[1..-2], :content] if match.size > 2
+              tokens << [match[-1,1], :delimiter] if match[-1] == ?]
+              tokens << [:close, :string]
+              next
+            elsif match = scan(/@media/)
+              kind = :directive
+              states.push :media_before_name
+            end
+          
+          when :block
+            if scan(/(?>#{RE::Ident})(?!\()/ox)
+              if value_expected
+                kind = :value
+              else
+                kind = :key
+              end
+            end
+
+          when :media_before_name
+            if scan RE::Ident
+              kind = :type
+              states[-1] = :media_after_name
+            end
+          
+          when :media_after_name
+            if scan(/\{/)
+              kind = :operator
+              states[-1] = :media
+            end
+          
+          when :comment
+            if scan(/(?:[^*\s]|\*(?!\/))+/)
+              kind = :comment
+            elsif scan(/\*\//)
+              kind = :comment
+              states.pop
+            elsif scan(/\s+/)
+              kind = :space
+            end
+
+          else
+            raise_inspect 'Unknown state', tokens
+
+          end
+
+        elsif scan(/\/\*/)
+          kind = :comment
+          states.push :comment
+
+        elsif scan(/\{/)
+          value_expected = false
+          kind = :operator
+          states.push :block
+
+        elsif scan(/\}/)
+          value_expected = false
+          if states.last == :block || states.last == :media
+            kind = :operator
+            states.pop
+          else
+            kind = :error
+          end
+
+        elsif match = scan(/#{RE::String}/o)
+          tokens << [:open, :string]
+          tokens << [match[0, 1], :delimiter]
+          tokens << [match[1..-2], :content] if match.size > 2
+          tokens << [match[-1, 1], :delimiter] if match.size >= 2
+          tokens << [:close, :string]
+          next
+
+        elsif match = scan(/#{RE::Function}/o)
+          tokens << [:open, :string]
+          start = match[/^\w+\(/]
+          tokens << [start, :delimiter]
+          if match[-1] == ?)
+            tokens << [match[start.size..-2], :content]
+            tokens << [')', :delimiter]
+          else
+            tokens << [match[start.size..-1], :content]
+          end
+          tokens << [:close, :string]
+          next
+
+        elsif scan(/(?: #{RE::Dimension} | #{RE::Percentage} | #{RE::Num} )/ox)
+          kind = :float
+
+        elsif scan(/#{RE::Color}/o)
+          kind = :color
+
+        elsif scan(/! *important/)
+          kind = :important
+
+        elsif scan(/rgb\([^()\n]*\)?/)
+          kind = :color
+
+        elsif scan(/#{RE::AtKeyword}/o)
+          kind = :directive
+
+        elsif match = scan(/ [+>:;,.=()\/] /x)
+          if match == ':'
+            value_expected = true
+          elsif match == ';'
+            value_expected = false
+          end
+          kind = :operator
+
+        else
+          getch
+          kind = :error
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+
+        tokens << [match, kind]
+
+      end
+
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/debug.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,62 @@
+module CodeRay
+module Scanners
+
+  # = Debug Scanner
+  class Debug < Scanner
+
+    include Streamable
+    register_for :debug
+    file_extension 'raydebug'
+    title 'CodeRay Token Dump'
+
+  protected
+    def scan_tokens tokens, options
+
+      opened_tokens = []
+
+      until eos?
+
+        kind = nil
+        match = nil
+
+          if scan(/\s+/)
+            tokens << [matched, :space]
+            next
+            
+          elsif scan(/ (\w+) \( ( [^\)\\]* ( \\. [^\)\\]* )* ) \) /x)
+            kind = self[1].to_sym
+            match = self[2].gsub(/\\(.)/, '\1')
+            
+          elsif scan(/ (\w+) < /x)
+            kind = self[1].to_sym
+            opened_tokens << kind
+            match = :open
+            
+          elsif !opened_tokens.empty? && scan(/ > /x)
+            kind = opened_tokens.pop || :error
+            match = :close
+            
+          else
+            kind = :error
+            getch
+
+          end
+                  
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+
+        tokens << [match, kind]
+        
+      end
+      
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/delphi.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,150 @@
+module CodeRay
+module Scanners
+  
+  class Delphi < Scanner
+
+    register_for :delphi
+    file_extension 'pas'
+    
+    RESERVED_WORDS = [
+      'and', 'array', 'as', 'at', 'asm', 'at', 'begin', 'case', 'class',
+      'const', 'constructor', 'destructor', 'dispinterface', 'div', 'do',
+      'downto', 'else', 'end', 'except', 'exports', 'file', 'finalization',
+      'finally', 'for', 'function', 'goto', 'if', 'implementation', 'in',
+      'inherited', 'initialization', 'inline', 'interface', 'is', 'label',
+      'library', 'mod', 'nil', 'not', 'object', 'of', 'or', 'out', 'packed',
+      'procedure', 'program', 'property', 'raise', 'record', 'repeat',
+      'resourcestring', 'set', 'shl', 'shr', 'string', 'then', 'threadvar',
+      'to', 'try', 'type', 'unit', 'until', 'uses', 'var', 'while', 'with',
+      'xor', 'on'
+    ]
+
+    DIRECTIVES = [
+      'absolute', 'abstract', 'assembler', 'at', 'automated', 'cdecl',
+      'contains', 'deprecated', 'dispid', 'dynamic', 'export',
+      'external', 'far', 'forward', 'implements', 'local', 
+      'near', 'nodefault', 'on', 'overload', 'override',
+      'package', 'pascal', 'platform', 'private', 'protected', 'public',
+      'published', 'read', 'readonly', 'register', 'reintroduce',
+      'requires', 'resident', 'safecall', 'stdcall', 'stored', 'varargs',
+      'virtual', 'write', 'writeonly'
+    ]
+
+    IDENT_KIND = CaseIgnoringWordList.new(:ident).
+      add(RESERVED_WORDS, :reserved).
+      add(DIRECTIVES, :directive)
+    
+    NAME_FOLLOWS = CaseIgnoringWordList.new(false).
+      add(%w(procedure function .))
+
+  private
+    def scan_tokens tokens, options
+
+      state = :initial
+      last_token = ''
+
+      until eos?
+
+        kind = nil
+        match = nil
+
+        if state == :initial
+          
+          if scan(/ \s+ /x)
+            tokens << [matched, :space]
+            next
+            
+          elsif scan(%r! \{ \$ [^}]* \}? | \(\* \$ (?: .*? \*\) | .* ) !mx)
+            tokens << [matched, :preprocessor]
+            next
+            
+          elsif scan(%r! // [^\n]* | \{ [^}]* \}? | \(\* (?: .*? \*\) | .* ) !mx)
+            tokens << [matched, :comment]
+            next
+            
+          elsif match = scan(/ <[>=]? | >=? | :=? | [-+=*\/;,@\^|\(\)\[\]] | \.\. /x)
+            kind = :operator
+          
+          elsif match = scan(/\./)
+            kind = :operator
+            if last_token == 'end'
+              tokens << [match, kind]
+              next
+            end
+            
+          elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
+            kind = NAME_FOLLOWS[last_token] ? :ident : IDENT_KIND[match]
+            
+          elsif match = scan(/ ' ( [^\n']|'' ) (?:'|$) /x)
+            tokens << [:open, :char]
+            tokens << ["'", :delimiter]
+            tokens << [self[1], :content]
+            tokens << ["'", :delimiter]
+            tokens << [:close, :char]
+            next
+            
+          elsif match = scan(/ ' /x)
+            tokens << [:open, :string]
+            state = :string
+            kind = :delimiter
+            
+          elsif scan(/ \# (?: \d+ | \$[0-9A-Fa-f]+ ) /x)
+            kind = :char
+            
+          elsif scan(/ \$ [0-9A-Fa-f]+ /x)
+            kind = :hex
+            
+          elsif scan(/ (?: \d+ ) (?![eE]|\.[^.]) /x)
+            kind = :integer
+            
+          elsif scan(/ \d+ (?: \.\d+ (?: [eE][+-]? \d+ )? | [eE][+-]? \d+ ) /x)
+            kind = :float
+
+          else
+            kind = :error
+            getch
+
+          end
+          
+        elsif state == :string
+          if scan(/[^\n']+/)
+            kind = :content
+          elsif scan(/''/)
+            kind = :char
+          elsif scan(/'/)
+            tokens << ["'", :delimiter]
+            tokens << [:close, :string]
+            state = :initial
+            next
+          elsif scan(/\n/)
+            tokens << [:close, :string]
+            kind = :error
+            state = :initial
+          else
+            raise "else case \' reached; %p not handled." % peek(1), tokens
+          end
+          
+        else
+          raise 'else-case reached', tokens
+          
+        end
+        
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens, state
+        end
+        raise_inspect 'Empty token', tokens unless match
+
+        last_token = match
+        tokens << [match, kind]
+        
+      end
+      
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/diff.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,110 @@
+module CodeRay
+module Scanners
+  
+  class Diff < Scanner
+    
+    register_for :diff
+    title 'diff output'
+    
+    def scan_tokens tokens, options
+      
+      line_kind = nil
+      state = :initial
+      
+      until eos?
+        kind = match = nil
+        
+        if match = scan(/\n/)
+          if line_kind
+            tokens << [:end_line, line_kind]
+            line_kind = nil
+          end
+          tokens << [match, :space]
+          next
+        end
+        
+        case state
+        
+        when :initial
+          if match = scan(/--- |\+\+\+ |=+|_+/)
+            tokens << [:begin_line, line_kind = :head]
+            tokens << [match, :head]
+            next unless match = scan(/.+/)
+            kind = :plain
+          elsif match = scan(/Index: |Property changes on: /)
+            tokens << [:begin_line, line_kind = :head]
+            tokens << [match, :head]
+            next unless match = scan(/.+/)
+            kind = :plain
+          elsif match = scan(/Added: /)
+            tokens << [:begin_line, line_kind = :head]
+            tokens << [match, :head]
+            next unless match = scan(/.+/)
+            kind = :plain
+            state = :added
+          elsif match = scan(/\\ /)
+            tokens << [:begin_line, line_kind = :change]
+            tokens << [match, :change]
+            next unless match = scan(/.+/)
+            kind = :plain
+          elsif match = scan(/@@(?>[^@\n]*)@@/)
+            if check(/\n|$/)
+              tokens << [:begin_line, line_kind = :change]
+            else
+              tokens << [:open, :change]
+            end
+            tokens << [match[0,2], :change]
+            tokens << [match[2...-2], :plain]
+            tokens << [match[-2,2], :change]
+            tokens << [:close, :change] unless line_kind
+            next unless match = scan(/.+/)
+            kind = :plain
+          elsif match = scan(/\+/)
+            tokens << [:begin_line, line_kind = :insert]
+            tokens << [match, :insert]
+            next unless match = scan(/.+/)
+            kind = :plain
+          elsif match = scan(/-/)
+            tokens << [:begin_line, line_kind = :delete]
+            tokens << [match, :delete]
+            next unless match = scan(/.+/)
+            kind = :plain
+          elsif scan(/ .*/)
+            kind = :comment
+          elsif scan(/.+/)
+            tokens << [:begin_line, line_kind = :comment]
+            kind = :plain
+          else
+            raise_inspect 'else case rached'
+          end
+        
+        when :added
+          if match = scan(/   \+/)
+            tokens << [:begin_line, line_kind = :insert]
+            tokens << [match, :insert]
+            next unless match = scan(/.+/)
+            kind = :plain
+          else
+            state = :initial
+            next
+          end
+        end
+        
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+        
+        tokens << [match, kind]
+      end
+      
+      tokens << [:end_line, line_kind] if line_kind
+      tokens
+    end
+    
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/groovy.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,264 @@
+module CodeRay
+module Scanners
+
+  load :java
+
+  class Groovy < Java
+
+    include Streamable
+    register_for :groovy
+    
+    # TODO: Check this!
+    GROOVY_KEYWORDS = %w[
+      as assert def in
+    ]
+    KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[
+      case instanceof new return throw typeof while as assert in
+    ]
+    GROOVY_MAGIC_VARIABLES = %w[ it ]
+    
+    IDENT_KIND = Java::IDENT_KIND.dup.
+      add(GROOVY_KEYWORDS, :keyword).
+      add(GROOVY_MAGIC_VARIABLES, :local_variable)
+    
+    ESCAPE = / [bfnrtv$\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} /x  # no 4-byte unicode chars? U[a-fA-F0-9]{8}
+    REGEXP_ESCAPE =  / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} | \d | [bBdDsSwW\/] /x
+    
+    # TODO: interpretation inside ', ", /
+    STRING_CONTENT_PATTERN = {
+      "'" => /(?>\\[^\\'\n]+|[^\\'\n]+)+/,
+      '"' => /[^\\$"\n]+/,
+      "'''" => /(?>[^\\']+|'(?!''))+/,
+      '"""' => /(?>[^\\$"]+|"(?!""))+/,
+      '/' => /[^\\$\/\n]+/,
+    }
+    
+    def scan_tokens tokens, options
+
+      state = :initial
+      inline_block_stack = []
+      inline_block_paren_depth = nil
+      string_delimiter = nil
+      import_clause = class_name_follows = last_token = after_def = false
+      value_expected = true
+
+      until eos?
+
+        kind = nil
+        match = nil
+        
+        case state
+
+        when :initial
+
+          if match = scan(/ \s+ | \\\n /x)
+            tokens << [match, :space]
+            if match.index ?\n
+              import_clause = after_def = false
+              value_expected = true unless value_expected
+            end
+            next
+          
+          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
+            value_expected = true
+            after_def = false
+            kind = :comment
+          
+          elsif bol? && scan(/ \#!.* /x)
+            kind = :doctype
+          
+          elsif import_clause && scan(/ (?!as) #{IDENT} (?: \. #{IDENT} )* (?: \.\* )? /ox)
+            after_def = value_expected = false
+            kind = :include
+          
+          elsif match = scan(/ #{IDENT} | \[\] /ox)
+            kind = IDENT_KIND[match]
+            value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match]
+            if last_token == '.'
+              kind = :ident
+            elsif class_name_follows
+              kind = :class
+              class_name_follows = false
+            elsif after_def && check(/\s*[({]/)
+              kind = :method
+              after_def = false
+            elsif kind == :ident && last_token != '?' && check(/:/)
+              kind = :key
+            else
+              class_name_follows = true if match == 'class' || (import_clause && match == 'as')
+              import_clause = match == 'import'
+              after_def = true if match == 'def'
+            end
+          
+          elsif scan(/;/)
+            import_clause = after_def = false
+            value_expected = true
+            kind = :operator
+          
+          elsif scan(/\{/)
+            class_name_follows = after_def = false
+            value_expected = true
+            kind = :operator
+            if !inline_block_stack.empty?
+              inline_block_paren_depth += 1
+            end
+          
+          # TODO: ~'...', ~"..." and ~/.../ style regexps
+          elsif match = scan(/ \.\.<? | \*?\.(?!\d)@? | \.& | \?:? | [,?:(\[] | -[->] | \+\+ |
+              && | \|\| | \*\*=? | ==?~ | <=?>? | [-+*%^~&|>=!]=? | <<<?=? | >>>?=? /x)
+            value_expected = true
+            value_expected = :regexp if match == '~'
+            after_def = false
+            kind = :operator
+          
+          elsif match = scan(/ [)\]}] /x)
+            value_expected = after_def = false
+            if !inline_block_stack.empty? && match == '}'
+              inline_block_paren_depth -= 1
+              if inline_block_paren_depth == 0  # closing brace of inline block reached
+                tokens << [match, :inline_delimiter]
+                tokens << [:close, :inline]
+                state, string_delimiter, inline_block_paren_depth = inline_block_stack.pop
+                next
+              end
+            end
+            kind = :operator
+          
+          elsif check(/[\d.]/)
+            after_def = value_expected = false
+            if scan(/0[xX][0-9A-Fa-f]+/)
+              kind = :hex
+            elsif scan(/(?>0[0-7]+)(?![89.eEfF])/)
+              kind = :oct
+            elsif scan(/\d+[fFdD]|\d*\.\d+(?:[eE][+-]?\d+)?[fFdD]?|\d+[eE][+-]?\d+[fFdD]?/)
+              kind = :float
+            elsif scan(/\d+[lLgG]?/)
+              kind = :integer
+            end
+
+          elsif match = scan(/'''|"""/)
+            after_def = value_expected = false
+            state = :multiline_string
+            tokens << [:open, :string]
+            string_delimiter = match
+            kind = :delimiter
+          
+          # TODO: record.'name'
+          elsif match = scan(/["']/)
+            after_def = value_expected = false
+            state = match == '/' ? :regexp : :string
+            tokens << [:open, state]
+            string_delimiter = match
+            kind = :delimiter
+
+          elsif value_expected && (match = scan(/\//))
+            after_def = value_expected = false
+            tokens << [:open, :regexp]
+            state = :regexp
+            string_delimiter = '/'
+            kind = :delimiter
+
+          elsif scan(/ @ #{IDENT} /ox)
+            after_def = value_expected = false
+            kind = :annotation
+
+          elsif scan(/\//)
+            after_def = false
+            value_expected = true
+            kind = :operator
+          
+          else
+            getch
+            kind = :error
+
+          end
+
+        when :string, :regexp, :multiline_string
+          if scan(STRING_CONTENT_PATTERN[string_delimiter])
+            kind = :content
+            
+          elsif match = scan(state == :multiline_string ? /'''|"""/ : /["'\/]/)
+            tokens << [match, :delimiter]
+            if state == :regexp
+              # TODO: regexp modifiers? s, m, x, i?
+              modifiers = scan(/[ix]+/)
+              tokens << [modifiers, :modifier] if modifiers && !modifiers.empty?
+            end
+            state = :string if state == :multiline_string
+            tokens << [:close, state]
+            string_delimiter = nil
+            after_def = value_expected = false
+            state = :initial
+            next
+          
+          elsif (state == :string || state == :multiline_string) &&
+              (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))
+            if string_delimiter[0] == ?' && !(match == "\\\\" || match == "\\'")
+              kind = :content
+            else
+              kind = :char
+            end
+          elsif state == :regexp && scan(/ \\ (?: #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+            kind = :char
+          
+          elsif match = scan(/ \$ #{IDENT} /mox)
+            tokens << [:open, :inline]
+            tokens << ['$', :inline_delimiter]
+            match = match[1..-1]
+            tokens << [match, IDENT_KIND[match]]
+            tokens << [:close, :inline]
+            next
+          elsif match = scan(/ \$ \{ /x)
+            tokens << [:open, :inline]
+            tokens << ['${', :inline_delimiter]
+            inline_block_stack << [state, string_delimiter, inline_block_paren_depth]
+            inline_block_paren_depth = 1
+            state = :initial
+            next
+          
+          elsif scan(/ \$ /mx)
+            kind = :content
+          
+          elsif scan(/ \\. /mx)
+            kind = :content
+          
+          elsif scan(/ \\ | \n /x)
+            tokens << [:close, state]
+            kind = :error
+            after_def = value_expected = false
+            state = :initial
+          
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+          end
+
+        else
+          raise_inspect 'Unknown state', tokens
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+        
+        last_token = match unless [:space, :comment, :doctype].include? kind
+        
+        tokens << [match, kind]
+
+      end
+
+      if [:multiline_string, :string, :regexp].include? state
+        tokens << [:close, state]
+      end
+
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/html.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,182 @@
+module CodeRay
+module Scanners
+
+  # HTML Scanner
+  class HTML < Scanner
+
+    include Streamable
+    register_for :html
+    
+    KINDS_NOT_LOC = [
+      :comment, :doctype, :preprocessor,
+      :tag, :attribute_name, :operator,
+      :attribute_value, :delimiter, :content,
+      :plain, :entity, :error
+    ]
+
+    ATTR_NAME = /[\w.:-]+/
+    ATTR_VALUE_UNQUOTED = ATTR_NAME
+    TAG_END = /\/?>/
+    HEX = /[0-9a-fA-F]/
+    ENTITY = /
+      &
+      (?:
+        \w+
+      |
+        \#
+        (?:
+          \d+
+        |
+          x#{HEX}+
+        )
+      )
+      ;
+    /ox
+
+    PLAIN_STRING_CONTENT = {
+      "'" => /[^&'>\n]+/,
+      '"' => /[^&">\n]+/,
+    }
+
+    def reset
+      super
+      @state = :initial
+    end
+
+  private
+    def setup
+      @state = :initial
+      @plain_string_content = nil
+    end
+
+    def scan_tokens tokens, options
+
+      state = @state
+      plain_string_content = @plain_string_content
+
+      until eos?
+
+        kind = nil
+        match = nil
+
+        if scan(/\s+/m)
+          kind = :space
+
+        else
+
+          case state
+
+          when :initial
+            if scan(/<!--.*?-->/m)
+              kind = :comment
+            elsif scan(/<!DOCTYPE.*?>/m)
+              kind = :doctype
+            elsif scan(/<\?xml.*?\?>/m)
+              kind = :preprocessor
+            elsif scan(/<\?.*?\?>|<%.*?%>/m)
+              kind = :comment
+            elsif scan(/<\/[-\w.:]*>/m)
+              kind = :tag
+            elsif match = scan(/<[-\w.:]+>?/m)
+              kind = :tag
+              state = :attribute unless match[-1] == ?>
+            elsif scan(/[^<>&]+/)
+              kind = :plain
+            elsif scan(/#{ENTITY}/ox)
+              kind = :entity
+            elsif scan(/[<>&]/)
+              kind = :error
+            else
+              raise_inspect '[BUG] else-case reached with state %p' % [state], tokens
+            end
+
+          when :attribute
+            if scan(/#{TAG_END}/o)
+              kind = :tag
+              state = :initial
+            elsif scan(/#{ATTR_NAME}/o)
+              kind = :attribute_name
+              state = :attribute_equal
+            else
+              kind = :error
+              getch
+            end
+
+          when :attribute_equal
+            if scan(/=/)
+              kind = :operator
+              state = :attribute_value
+            elsif scan(/#{ATTR_NAME}/o)
+              kind = :attribute_name
+            elsif scan(/#{TAG_END}/o)
+              kind = :tag
+              state = :initial
+            elsif scan(/./)
+              kind = :error
+              state = :attribute
+            end
+
+          when :attribute_value
+            if scan(/#{ATTR_VALUE_UNQUOTED}/o)
+              kind = :attribute_value
+              state = :attribute
+            elsif match = scan(/["']/)
+              tokens << [:open, :string]
+              state = :attribute_value_string
+              plain_string_content = PLAIN_STRING_CONTENT[match]
+              kind = :delimiter
+            elsif scan(/#{TAG_END}/o)
+              kind = :tag
+              state = :initial
+            else
+              kind = :error
+              getch
+            end
+
+          when :attribute_value_string
+            if scan(plain_string_content)
+              kind = :content
+            elsif scan(/['"]/)
+              tokens << [matched, :delimiter]
+              tokens << [:close, :string]
+              state = :attribute
+              next
+            elsif scan(/#{ENTITY}/ox)
+              kind = :entity
+            elsif scan(/&/)
+              kind = :content
+            elsif scan(/[\n>]/)
+              tokens << [:close, :string]
+              kind = :error
+              state = :initial
+            end
+
+          else
+            raise_inspect 'Unknown state: %p' % [state], tokens
+
+          end
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens, state
+        end
+        raise_inspect 'Empty token', tokens unless match
+
+        tokens << [match, kind]
+      end
+
+      if options[:keep_state]
+        @state = state
+        @plain_string_content = plain_string_content
+      end
+
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,176 @@
+module CodeRay
+module Scanners
+
+  class Java < Scanner
+
+    include Streamable
+    register_for :java
+    helper :builtin_types
+    
+    # http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
+    KEYWORDS = %w[
+      assert break case catch continue default do else
+      finally for if instanceof import new package
+      return switch throw try typeof while
+      debugger export
+    ]
+    RESERVED = %w[ const goto ]
+    CONSTANTS = %w[ false null true ]
+    MAGIC_VARIABLES = %w[ this super ]
+    TYPES = %w[
+      boolean byte char class double enum float int interface long
+      short void
+    ] << '[]'  # because int[] should be highlighted as a type
+    DIRECTIVES = %w[
+      abstract extends final implements native private protected public
+      static strictfp synchronized throws transient volatile
+    ]
+    
+    IDENT_KIND = WordList.new(:ident).
+      add(KEYWORDS, :keyword).
+      add(RESERVED, :reserved).
+      add(CONSTANTS, :pre_constant).
+      add(MAGIC_VARIABLES, :local_variable).
+      add(TYPES, :type).
+      add(BuiltinTypes::List, :pre_type).
+      add(BuiltinTypes::List.select { |builtin| builtin[/(Error|Exception)$/] }, :exception).
+      add(DIRECTIVES, :directive)
+
+    ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
+    STRING_CONTENT_PATTERN = {
+      "'" => /[^\\']+/,
+      '"' => /[^\\"]+/,
+      '/' => /[^\\\/]+/,
+    }
+    IDENT = /[a-zA-Z_][A-Za-z_0-9]*/
+    
+    def scan_tokens tokens, options
+
+      state = :initial
+      string_delimiter = nil
+      import_clause = class_name_follows = last_token_dot = false
+
+      until eos?
+
+        kind = nil
+        match = nil
+        
+        case state
+
+        when :initial
+
+          if match = scan(/ \s+ | \\\n /x)
+            tokens << [match, :space]
+            next
+          
+          elsif match = scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
+            tokens << [match, :comment]
+            next
+          
+          elsif import_clause && scan(/ #{IDENT} (?: \. #{IDENT} )* /ox)
+            kind = :include
+          
+          elsif match = scan(/ #{IDENT} | \[\] /ox)
+            kind = IDENT_KIND[match]
+            if last_token_dot
+              kind = :ident
+            elsif class_name_follows
+              kind = :class
+              class_name_follows = false
+            else
+              import_clause = true if match == 'import'
+              class_name_follows = true if match == 'class' || match == 'interface'
+            end
+          
+          elsif scan(/ \.(?!\d) | [,?:()\[\]}] | -- | \+\+ | && | \|\| | \*\*=? | [-+*\/%^~&|<>=!]=? | <<<?=? | >>>?=? /x)
+            kind = :operator
+          
+          elsif scan(/;/)
+            import_clause = false
+            kind = :operator
+          
+          elsif scan(/\{/)
+            class_name_follows = false
+            kind = :operator
+          
+          elsif check(/[\d.]/)
+            if scan(/0[xX][0-9A-Fa-f]+/)
+              kind = :hex
+            elsif scan(/(?>0[0-7]+)(?![89.eEfF])/)
+              kind = :oct
+            elsif scan(/\d+[fFdD]|\d*\.\d+(?:[eE][+-]?\d+)?[fFdD]?|\d+[eE][+-]?\d+[fFdD]?/)
+              kind = :float
+            elsif scan(/\d+[lL]?/)
+              kind = :integer
+            end
+
+          elsif match = scan(/["']/)
+            tokens << [:open, :string]
+            state = :string
+            string_delimiter = match
+            kind = :delimiter
+
+          elsif scan(/ @ #{IDENT} /ox)
+            kind = :annotation
+
+          else
+            getch
+            kind = :error
+
+          end
+
+        when :string
+          if scan(STRING_CONTENT_PATTERN[string_delimiter])
+            kind = :content
+          elsif match = scan(/["'\/]/)
+            tokens << [match, :delimiter]
+            tokens << [:close, state]
+            string_delimiter = nil
+            state = :initial
+            next
+          elsif state == :string && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))
+            if string_delimiter == "'" && !(match == "\\\\" || match == "\\'")
+              kind = :content
+            else
+              kind = :char
+            end
+          elsif scan(/\\./m)
+            kind = :content
+          elsif scan(/ \\ | $ /x)
+            tokens << [:close, state]
+            kind = :error
+            state = :initial
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+          end
+
+        else
+          raise_inspect 'Unknown state', tokens
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+        
+        last_token_dot = match == '.'
+        
+        tokens << [match, kind]
+
+      end
+
+      if state == :string
+        tokens << [:close, state]
+      end
+
+      tokens
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java
+END
+builtin_types.rb
+K 25
+svn:wc:ra_dav:version-url
+V 93
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/builtin_types.rb
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,62 @@
+10
+
+dir
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java
+http://redmine.rubyforge.org/svn
+
+
+
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+builtin_types.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+2522414597cbbef27fad175c20c8a556
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+41768
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/.svn/text-base/builtin_types.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,419 @@
+module CodeRay
+module Scanners
+  
+  module Java::BuiltinTypes  # :nodoc:
+    
+    List = %w[
+      AbstractAction AbstractBorder AbstractButton AbstractCellEditor AbstractCollection
+      AbstractColorChooserPanel AbstractDocument AbstractExecutorService AbstractInterruptibleChannel
+      AbstractLayoutCache AbstractList AbstractListModel AbstractMap AbstractMethodError AbstractPreferences
+      AbstractQueue AbstractQueuedSynchronizer AbstractSelectableChannel AbstractSelectionKey AbstractSelector
+      AbstractSequentialList AbstractSet AbstractSpinnerModel AbstractTableModel AbstractUndoableEdit
+      AbstractWriter AccessControlContext AccessControlException AccessController AccessException Accessible
+      AccessibleAction AccessibleAttributeSequence AccessibleBundle AccessibleComponent AccessibleContext
+      AccessibleEditableText AccessibleExtendedComponent AccessibleExtendedTable AccessibleExtendedText
+      AccessibleHyperlink AccessibleHypertext AccessibleIcon AccessibleKeyBinding AccessibleObject
+      AccessibleRelation AccessibleRelationSet AccessibleResourceBundle AccessibleRole AccessibleSelection
+      AccessibleState AccessibleStateSet AccessibleStreamable AccessibleTable AccessibleTableModelChange
+      AccessibleText AccessibleTextSequence AccessibleValue AccountException AccountExpiredException
+      AccountLockedException AccountNotFoundException Acl AclEntry AclNotFoundException Action ActionEvent
+      ActionListener ActionMap ActionMapUIResource Activatable ActivateFailedException ActivationDesc
+      ActivationException ActivationGroup ActivationGroupDesc ActivationGroupID ActivationGroup_Stub
+      ActivationID ActivationInstantiator ActivationMonitor ActivationSystem Activator ActiveEvent
+      ActivityCompletedException ActivityRequiredException Adjustable AdjustmentEvent AdjustmentListener
+      Adler32 AffineTransform AffineTransformOp AlgorithmParameterGenerator AlgorithmParameterGeneratorSpi
+      AlgorithmParameters AlgorithmParameterSpec AlgorithmParametersSpi AllPermission AlphaComposite
+      AlreadyBoundException AlreadyConnectedException AncestorEvent AncestorListener AnnotatedElement
+      Annotation AnnotationFormatError AnnotationTypeMismatchException AppConfigurationEntry Appendable Applet
+      AppletContext AppletInitializer AppletStub Arc2D Area AreaAveragingScaleFilter ArithmeticException Array
+      ArrayBlockingQueue ArrayIndexOutOfBoundsException ArrayList Arrays ArrayStoreException ArrayType
+      AssertionError AsyncBoxView AsynchronousCloseException AtomicBoolean AtomicInteger AtomicIntegerArray
+      AtomicIntegerFieldUpdater AtomicLong AtomicLongArray AtomicLongFieldUpdater AtomicMarkableReference
+      AtomicReference AtomicReferenceArray AtomicReferenceFieldUpdater AtomicStampedReference Attribute
+      AttributeChangeNotification AttributeChangeNotificationFilter AttributedCharacterIterator
+      AttributedString AttributeException AttributeInUseException AttributeList AttributeModificationException
+      AttributeNotFoundException Attributes AttributeSet AttributeSetUtilities AttributeValueExp AudioClip
+      AudioFileFormat AudioFileReader AudioFileWriter AudioFormat AudioInputStream AudioPermission AudioSystem
+      AuthenticationException AuthenticationNotSupportedException Authenticator AuthorizeCallback
+      AuthPermission AuthProvider Autoscroll AWTError AWTEvent AWTEventListener AWTEventListenerProxy
+      AWTEventMulticaster AWTException AWTKeyStroke AWTPermission BackingStoreException
+      BadAttributeValueExpException BadBinaryOpValueExpException BadLocationException BadPaddingException
+      BadStringOperationException BandCombineOp BandedSampleModel BaseRowSet BasicArrowButton BasicAttribute
+      BasicAttributes BasicBorders BasicButtonListener BasicButtonUI BasicCheckBoxMenuItemUI BasicCheckBoxUI
+      BasicColorChooserUI BasicComboBoxEditor BasicComboBoxRenderer BasicComboBoxUI BasicComboPopup
+      BasicControl BasicDesktopIconUI BasicDesktopPaneUI BasicDirectoryModel BasicEditorPaneUI
+      BasicFileChooserUI BasicFormattedTextFieldUI BasicGraphicsUtils BasicHTML BasicIconFactory
+      BasicInternalFrameTitlePane BasicInternalFrameUI BasicLabelUI BasicListUI BasicLookAndFeel
+      BasicMenuBarUI BasicMenuItemUI BasicMenuUI BasicOptionPaneUI BasicPanelUI BasicPasswordFieldUI
+      BasicPermission BasicPopupMenuSeparatorUI BasicPopupMenuUI BasicProgressBarUI BasicRadioButtonMenuItemUI
+      BasicRadioButtonUI BasicRootPaneUI BasicScrollBarUI BasicScrollPaneUI BasicSeparatorUI BasicSliderUI
+      BasicSpinnerUI BasicSplitPaneDivider BasicSplitPaneUI BasicStroke BasicTabbedPaneUI BasicTableHeaderUI
+      BasicTableUI BasicTextAreaUI BasicTextFieldUI BasicTextPaneUI BasicTextUI BasicToggleButtonUI
+      BasicToolBarSeparatorUI BasicToolBarUI BasicToolTipUI BasicTreeUI BasicViewportUI BatchUpdateException
+      BeanContext BeanContextChild BeanContextChildComponentProxy BeanContextChildSupport
+      BeanContextContainerProxy BeanContextEvent BeanContextMembershipEvent BeanContextMembershipListener
+      BeanContextProxy BeanContextServiceAvailableEvent BeanContextServiceProvider
+      BeanContextServiceProviderBeanInfo BeanContextServiceRevokedEvent BeanContextServiceRevokedListener
+      BeanContextServices BeanContextServicesListener BeanContextServicesSupport BeanContextSupport
+      BeanDescriptor BeanInfo Beans BevelBorder Bidi BigDecimal BigInteger BinaryRefAddr BindException Binding
+      BitSet Blob BlockingQueue BlockView BMPImageWriteParam Book Boolean BooleanControl Border BorderFactory
+      BorderLayout BorderUIResource BoundedRangeModel Box BoxLayout BoxView BreakIterator
+      BrokenBarrierException Buffer BufferCapabilities BufferedImage BufferedImageFilter BufferedImageOp
+      BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter BufferOverflowException
+      BufferStrategy BufferUnderflowException Button ButtonGroup ButtonModel ButtonUI Byte
+      ByteArrayInputStream ByteArrayOutputStream ByteBuffer ByteChannel ByteLookupTable ByteOrder CachedRowSet
+      CacheRequest CacheResponse Calendar Callable CallableStatement Callback CallbackHandler
+      CancelablePrintJob CancellationException CancelledKeyException CannotProceedException
+      CannotRedoException CannotUndoException Canvas CardLayout Caret CaretEvent CaretListener CellEditor
+      CellEditorListener CellRendererPane Certificate CertificateEncodingException CertificateException
+      CertificateExpiredException CertificateFactory CertificateFactorySpi CertificateNotYetValidException
+      CertificateParsingException CertPath CertPathBuilder CertPathBuilderException CertPathBuilderResult
+      CertPathBuilderSpi CertPathParameters CertPathTrustManagerParameters CertPathValidator
+      CertPathValidatorException CertPathValidatorResult CertPathValidatorSpi CertSelector CertStore
+      CertStoreException CertStoreParameters CertStoreSpi ChangedCharSetException ChangeEvent ChangeListener
+      Channel Channels Character CharacterCodingException CharacterIterator CharArrayReader CharArrayWriter
+      CharBuffer CharConversionException CharSequence Charset CharsetDecoder CharsetEncoder CharsetProvider
+      Checkbox CheckboxGroup CheckboxMenuItem CheckedInputStream CheckedOutputStream Checksum Choice
+      ChoiceCallback ChoiceFormat Chromaticity Cipher CipherInputStream CipherOutputStream CipherSpi Class
+      ClassCastException ClassCircularityError ClassDefinition ClassDesc ClassFileTransformer ClassFormatError
+      ClassLoader ClassLoaderRepository ClassLoadingMXBean ClassNotFoundException Clip Clipboard
+      ClipboardOwner Clob Cloneable CloneNotSupportedException Closeable ClosedByInterruptException
+      ClosedChannelException ClosedSelectorException CMMException CoderMalfunctionError CoderResult CodeSigner
+      CodeSource CodingErrorAction CollationElementIterator CollationKey Collator Collection
+      CollectionCertStoreParameters Collections Color ColorChooserComponentFactory ColorChooserUI
+      ColorConvertOp ColorModel ColorSelectionModel ColorSpace ColorSupported ColorType ColorUIResource
+      ComboBoxEditor ComboBoxModel ComboBoxUI ComboPopup CommunicationException Comparable Comparator
+      CompilationMXBean Compiler CompletionService Component ComponentAdapter ComponentColorModel
+      ComponentEvent ComponentInputMap ComponentInputMapUIResource ComponentListener ComponentOrientation
+      ComponentSampleModel ComponentUI ComponentView Composite CompositeContext CompositeData
+      CompositeDataSupport CompositeName CompositeType CompositeView CompoundBorder CompoundControl
+      CompoundEdit CompoundName Compression ConcurrentHashMap ConcurrentLinkedQueue ConcurrentMap
+      ConcurrentModificationException Condition Configuration ConfigurationException ConfirmationCallback
+      ConnectException ConnectIOException Connection ConnectionEvent ConnectionEventListener
+      ConnectionPendingException ConnectionPoolDataSource ConsoleHandler Constructor Container
+      ContainerAdapter ContainerEvent ContainerListener ContainerOrderFocusTraversalPolicy ContentHandler
+      ContentHandlerFactory ContentModel Context ContextNotEmptyException ContextualRenderedImageFactory
+      Control ControlFactory ControllerEventListener ConvolveOp CookieHandler Copies CopiesSupported
+      CopyOnWriteArrayList CopyOnWriteArraySet CountDownLatch CounterMonitor CounterMonitorMBean CRC32
+      CredentialException CredentialExpiredException CredentialNotFoundException CRL CRLException CRLSelector
+      CropImageFilter CSS CubicCurve2D Currency Cursor Customizer CyclicBarrier DatabaseMetaData DataBuffer
+      DataBufferByte DataBufferDouble DataBufferFloat DataBufferInt DataBufferShort DataBufferUShort
+      DataFlavor DataFormatException DatagramChannel DatagramPacket DatagramSocket DatagramSocketImpl
+      DatagramSocketImplFactory DataInput DataInputStream DataLine DataOutput DataOutputStream DataSource
+      DataTruncation DatatypeConfigurationException DatatypeConstants DatatypeFactory Date DateFormat
+      DateFormatSymbols DateFormatter DateTimeAtCompleted DateTimeAtCreation DateTimeAtProcessing
+      DateTimeSyntax DebugGraphics DecimalFormat DecimalFormatSymbols DefaultBoundedRangeModel
+      DefaultButtonModel DefaultCaret DefaultCellEditor DefaultColorSelectionModel DefaultComboBoxModel
+      DefaultDesktopManager DefaultEditorKit DefaultFocusManager DefaultFocusTraversalPolicy DefaultFormatter
+      DefaultFormatterFactory DefaultHighlighter DefaultKeyboardFocusManager DefaultListCellRenderer
+      DefaultListModel DefaultListSelectionModel DefaultLoaderRepository DefaultMenuLayout DefaultMetalTheme
+      DefaultMutableTreeNode DefaultPersistenceDelegate DefaultSingleSelectionModel DefaultStyledDocument
+      DefaultTableCellRenderer DefaultTableColumnModel DefaultTableModel DefaultTextUI DefaultTreeCellEditor
+      DefaultTreeCellRenderer DefaultTreeModel DefaultTreeSelectionModel Deflater DeflaterOutputStream Delayed
+      DelayQueue DelegationPermission Deprecated Descriptor DescriptorAccess DescriptorSupport DESedeKeySpec
+      DesignMode DESKeySpec DesktopIconUI DesktopManager DesktopPaneUI Destination Destroyable
+      DestroyFailedException DGC DHGenParameterSpec DHKey DHParameterSpec DHPrivateKey DHPrivateKeySpec
+      DHPublicKey DHPublicKeySpec Dialog Dictionary DigestException DigestInputStream DigestOutputStream
+      Dimension Dimension2D DimensionUIResource DirContext DirectColorModel DirectoryManager DirObjectFactory
+      DirStateFactory DisplayMode DnDConstants Doc DocAttribute DocAttributeSet DocFlavor DocPrintJob Document
+      DocumentBuilder DocumentBuilderFactory Documented DocumentEvent DocumentFilter DocumentListener
+      DocumentName DocumentParser DomainCombiner DOMLocator DOMResult DOMSource Double DoubleBuffer
+      DragGestureEvent DragGestureListener DragGestureRecognizer DragSource DragSourceAdapter
+      DragSourceContext DragSourceDragEvent DragSourceDropEvent DragSourceEvent DragSourceListener
+      DragSourceMotionListener Driver DriverManager DriverPropertyInfo DropTarget DropTargetAdapter
+      DropTargetContext DropTargetDragEvent DropTargetDropEvent DropTargetEvent DropTargetListener DSAKey
+      DSAKeyPairGenerator DSAParameterSpec DSAParams DSAPrivateKey DSAPrivateKeySpec DSAPublicKey
+      DSAPublicKeySpec DTD DTDConstants DuplicateFormatFlagsException Duration DynamicMBean ECField ECFieldF2m
+      ECFieldFp ECGenParameterSpec ECKey ECParameterSpec ECPoint ECPrivateKey ECPrivateKeySpec ECPublicKey
+      ECPublicKeySpec EditorKit Element ElementIterator ElementType Ellipse2D EllipticCurve EmptyBorder
+      EmptyStackException EncodedKeySpec Encoder EncryptedPrivateKeyInfo Entity Enum
+      EnumConstantNotPresentException EnumControl Enumeration EnumMap EnumSet EnumSyntax EOFException Error
+      ErrorListener ErrorManager EtchedBorder Event EventContext EventDirContext EventHandler EventListener
+      EventListenerList EventListenerProxy EventObject EventQueue EventSetDescriptor Exception
+      ExceptionInInitializerError ExceptionListener Exchanger ExecutionException Executor
+      ExecutorCompletionService Executors ExecutorService ExemptionMechanism ExemptionMechanismException
+      ExemptionMechanismSpi ExpandVetoException ExportException Expression ExtendedRequest ExtendedResponse
+      Externalizable FactoryConfigurationError FailedLoginException FeatureDescriptor Fidelity Field
+      FieldPosition FieldView File FileCacheImageInputStream FileCacheImageOutputStream FileChannel
+      FileChooserUI FileDescriptor FileDialog FileFilter FileHandler FileImageInputStream
+      FileImageOutputStream FileInputStream FileLock FileLockInterruptionException FilenameFilter FileNameMap
+      FileNotFoundException FileOutputStream FilePermission FileReader FileSystemView FileView FileWriter
+      Filter FilteredImageSource FilteredRowSet FilterInputStream FilterOutputStream FilterReader FilterWriter
+      Finishings FixedHeightLayoutCache FlatteningPathIterator FlavorEvent FlavorException FlavorListener
+      FlavorMap FlavorTable Float FloatBuffer FloatControl FlowLayout FlowView Flushable FocusAdapter
+      FocusEvent FocusListener FocusManager FocusTraversalPolicy Font FontFormatException FontMetrics
+      FontRenderContext FontUIResource Format FormatConversionProvider FormatFlagsConversionMismatchException
+      Formattable FormattableFlags Formatter FormatterClosedException FormSubmitEvent FormView Frame Future
+      FutureTask GapContent GarbageCollectorMXBean GatheringByteChannel GaugeMonitor GaugeMonitorMBean
+      GeneralPath GeneralSecurityException GenericArrayType GenericDeclaration GenericSignatureFormatError
+      GlyphJustificationInfo GlyphMetrics GlyphVector GlyphView GradientPaint GraphicAttribute Graphics
+      Graphics2D GraphicsConfigTemplate GraphicsConfiguration GraphicsDevice GraphicsEnvironment GrayFilter
+      GregorianCalendar GridBagConstraints GridBagLayout GridLayout Group Guard GuardedObject GZIPInputStream
+      GZIPOutputStream Handler HandshakeCompletedEvent HandshakeCompletedListener HasControls HashAttributeSet
+      HashDocAttributeSet HashMap HashPrintJobAttributeSet HashPrintRequestAttributeSet
+      HashPrintServiceAttributeSet HashSet Hashtable HeadlessException HierarchyBoundsAdapter
+      HierarchyBoundsListener HierarchyEvent HierarchyListener Highlighter HostnameVerifier HTML HTMLDocument
+      HTMLEditorKit HTMLFrameHyperlinkEvent HTMLWriter HttpRetryException HttpsURLConnection HttpURLConnection
+      HyperlinkEvent HyperlinkListener ICC_ColorSpace ICC_Profile ICC_ProfileGray ICC_ProfileRGB Icon
+      IconUIResource IconView Identity IdentityHashMap IdentityScope IIOByteBuffer IIOException IIOImage
+      IIOInvalidTreeException IIOMetadata IIOMetadataController IIOMetadataFormat IIOMetadataFormatImpl
+      IIOMetadataNode IIOParam IIOParamController IIOReadProgressListener IIOReadUpdateListener
+      IIOReadWarningListener IIORegistry IIOServiceProvider IIOWriteProgressListener IIOWriteWarningListener
+      IllegalAccessError IllegalAccessException IllegalArgumentException IllegalBlockingModeException
+      IllegalBlockSizeException IllegalCharsetNameException IllegalClassFormatException
+      IllegalComponentStateException IllegalFormatCodePointException IllegalFormatConversionException
+      IllegalFormatException IllegalFormatFlagsException IllegalFormatPrecisionException
+      IllegalFormatWidthException IllegalMonitorStateException IllegalPathStateException
+      IllegalSelectorException IllegalStateException IllegalThreadStateException Image ImageCapabilities
+      ImageConsumer ImageFilter ImageGraphicAttribute ImageIcon ImageInputStream ImageInputStreamImpl
+      ImageInputStreamSpi ImageIO ImageObserver ImageOutputStream ImageOutputStreamImpl ImageOutputStreamSpi
+      ImageProducer ImageReader ImageReaderSpi ImageReaderWriterSpi ImageReadParam ImageTranscoder
+      ImageTranscoderSpi ImageTypeSpecifier ImageView ImageWriteParam ImageWriter ImageWriterSpi
+      ImagingOpException IncompatibleClassChangeError IncompleteAnnotationException IndexColorModel
+      IndexedPropertyChangeEvent IndexedPropertyDescriptor IndexOutOfBoundsException Inet4Address Inet6Address
+      InetAddress InetSocketAddress Inflater InflaterInputStream InheritableThreadLocal Inherited
+      InitialContext InitialContextFactory InitialContextFactoryBuilder InitialDirContext InitialLdapContext
+      InlineView InputContext InputEvent InputMap InputMapUIResource InputMethod InputMethodContext
+      InputMethodDescriptor InputMethodEvent InputMethodHighlight InputMethodListener InputMethodRequests
+      InputMismatchException InputStream InputStreamReader InputSubset InputVerifier Insets InsetsUIResource
+      InstanceAlreadyExistsException InstanceNotFoundException InstantiationError InstantiationException
+      Instrument Instrumentation InsufficientResourcesException IntBuffer Integer IntegerSyntax InternalError
+      InternalFrameAdapter InternalFrameEvent InternalFrameFocusTraversalPolicy InternalFrameListener
+      InternalFrameUI InternationalFormatter InterruptedException InterruptedIOException
+      InterruptedNamingException InterruptibleChannel IntrospectionException Introspector
+      InvalidActivityException InvalidAlgorithmParameterException InvalidApplicationException
+      InvalidAttributeIdentifierException InvalidAttributesException InvalidAttributeValueException
+      InvalidClassException InvalidDnDOperationException InvalidKeyException InvalidKeySpecException
+      InvalidMarkException InvalidMidiDataException InvalidNameException InvalidObjectException
+      InvalidOpenTypeException InvalidParameterException InvalidParameterSpecException
+      InvalidPreferencesFormatException InvalidPropertiesFormatException InvalidRelationIdException
+      InvalidRelationServiceException InvalidRelationTypeException InvalidRoleInfoException
+      InvalidRoleValueException InvalidSearchControlsException InvalidSearchFilterException
+      InvalidTargetObjectTypeException InvalidTransactionException InvocationEvent InvocationHandler
+      InvocationTargetException IOException ItemEvent ItemListener ItemSelectable Iterable Iterator
+      IvParameterSpec JApplet JarEntry JarException JarFile JarInputStream JarOutputStream JarURLConnection
+      JButton JCheckBox JCheckBoxMenuItem JColorChooser JComboBox JComponent JdbcRowSet JDesktopPane JDialog
+      JEditorPane JFileChooser JFormattedTextField JFrame JInternalFrame JLabel JLayeredPane JList JMenu
+      JMenuBar JMenuItem JMException JMRuntimeException JMXAuthenticator JMXConnectionNotification
+      JMXConnector JMXConnectorFactory JMXConnectorProvider JMXConnectorServer JMXConnectorServerFactory
+      JMXConnectorServerMBean JMXConnectorServerProvider JMXPrincipal JMXProviderException
+      JMXServerErrorException JMXServiceURL JobAttributes JobHoldUntil JobImpressions JobImpressionsCompleted
+      JobImpressionsSupported JobKOctets JobKOctetsProcessed JobKOctetsSupported JobMediaSheets
+      JobMediaSheetsCompleted JobMediaSheetsSupported JobMessageFromOperator JobName JobOriginatingUserName
+      JobPriority JobPrioritySupported JobSheets JobState JobStateReason JobStateReasons Joinable JoinRowSet
+      JOptionPane JPanel JPasswordField JPEGHuffmanTable JPEGImageReadParam JPEGImageWriteParam JPEGQTable
+      JPopupMenu JProgressBar JRadioButton JRadioButtonMenuItem JRootPane JScrollBar JScrollPane JSeparator
+      JSlider JSpinner JSplitPane JTabbedPane JTable JTableHeader JTextArea JTextComponent JTextField
+      JTextPane JToggleButton JToolBar JToolTip JTree JViewport JWindow KerberosKey KerberosPrincipal
+      KerberosTicket Kernel Key KeyAdapter KeyAgreement KeyAgreementSpi KeyAlreadyExistsException
+      KeyboardFocusManager KeyEvent KeyEventDispatcher KeyEventPostProcessor KeyException KeyFactory
+      KeyFactorySpi KeyGenerator KeyGeneratorSpi KeyListener KeyManagementException KeyManager
+      KeyManagerFactory KeyManagerFactorySpi Keymap KeyPair KeyPairGenerator KeyPairGeneratorSpi KeyRep
+      KeySpec KeyStore KeyStoreBuilderParameters KeyStoreException KeyStoreSpi KeyStroke Label LabelUI
+      LabelView LanguageCallback LastOwnerException LayeredHighlighter LayoutFocusTraversalPolicy
+      LayoutManager LayoutManager2 LayoutQueue LDAPCertStoreParameters LdapContext LdapName
+      LdapReferralException Lease Level LimitExceededException Line Line2D LineBorder LineBreakMeasurer
+      LineEvent LineListener LineMetrics LineNumberInputStream LineNumberReader LineUnavailableException
+      LinkageError LinkedBlockingQueue LinkedHashMap LinkedHashSet LinkedList LinkException LinkLoopException
+      LinkRef List ListCellRenderer ListDataEvent ListDataListener ListenerNotFoundException ListIterator
+      ListModel ListResourceBundle ListSelectionEvent ListSelectionListener ListSelectionModel ListUI ListView
+      LoaderHandler Locale LocateRegistry Lock LockSupport Logger LoggingMXBean LoggingPermission LoginContext
+      LoginException LoginModule LogManager LogRecord LogStream Long LongBuffer LookAndFeel LookupOp
+      LookupTable Mac MacSpi MalformedInputException MalformedLinkException MalformedObjectNameException
+      MalformedParameterizedTypeException MalformedURLException ManagementFactory ManagementPermission
+      ManageReferralControl ManagerFactoryParameters Manifest Map MappedByteBuffer MarshalException
+      MarshalledObject MaskFormatter Matcher MatchResult Math MathContext MatteBorder MBeanAttributeInfo
+      MBeanConstructorInfo MBeanException MBeanFeatureInfo MBeanInfo MBeanNotificationInfo MBeanOperationInfo
+      MBeanParameterInfo MBeanPermission MBeanRegistration MBeanRegistrationException MBeanServer
+      MBeanServerBuilder MBeanServerConnection MBeanServerDelegate MBeanServerDelegateMBean MBeanServerFactory
+      MBeanServerForwarder MBeanServerInvocationHandler MBeanServerNotification MBeanServerNotificationFilter
+      MBeanServerPermission MBeanTrustPermission Media MediaName MediaPrintableArea MediaSize MediaSizeName
+      MediaTracker MediaTray Member MemoryCacheImageInputStream MemoryCacheImageOutputStream MemoryHandler
+      MemoryImageSource MemoryManagerMXBean MemoryMXBean MemoryNotificationInfo MemoryPoolMXBean MemoryType
+      MemoryUsage Menu MenuBar MenuBarUI MenuComponent MenuContainer MenuDragMouseEvent MenuDragMouseListener
+      MenuElement MenuEvent MenuItem MenuItemUI MenuKeyEvent MenuKeyListener MenuListener MenuSelectionManager
+      MenuShortcut MessageDigest MessageDigestSpi MessageFormat MetaEventListener MetalBorders MetalButtonUI
+      MetalCheckBoxIcon MetalCheckBoxUI MetalComboBoxButton MetalComboBoxEditor MetalComboBoxIcon
+      MetalComboBoxUI MetalDesktopIconUI MetalFileChooserUI MetalIconFactory MetalInternalFrameTitlePane
+      MetalInternalFrameUI MetalLabelUI MetalLookAndFeel MetalMenuBarUI MetalPopupMenuSeparatorUI
+      MetalProgressBarUI MetalRadioButtonUI MetalRootPaneUI MetalScrollBarUI MetalScrollButton
+      MetalScrollPaneUI MetalSeparatorUI MetalSliderUI MetalSplitPaneUI MetalTabbedPaneUI MetalTextFieldUI
+      MetalTheme MetalToggleButtonUI MetalToolBarUI MetalToolTipUI MetalTreeUI MetaMessage Method
+      MethodDescriptor MGF1ParameterSpec MidiChannel MidiDevice MidiDeviceProvider MidiEvent MidiFileFormat
+      MidiFileReader MidiFileWriter MidiMessage MidiSystem MidiUnavailableException MimeTypeParseException
+      MinimalHTMLWriter MissingFormatArgumentException MissingFormatWidthException MissingResourceException
+      Mixer MixerProvider MLet MLetMBean ModelMBean ModelMBeanAttributeInfo ModelMBeanConstructorInfo
+      ModelMBeanInfo ModelMBeanInfoSupport ModelMBeanNotificationBroadcaster ModelMBeanNotificationInfo
+      ModelMBeanOperationInfo ModificationItem Modifier Monitor MonitorMBean MonitorNotification
+      MonitorSettingException MouseAdapter MouseDragGestureRecognizer MouseEvent MouseInfo MouseInputAdapter
+      MouseInputListener MouseListener MouseMotionAdapter MouseMotionListener MouseWheelEvent
+      MouseWheelListener MultiButtonUI MulticastSocket MultiColorChooserUI MultiComboBoxUI MultiDesktopIconUI
+      MultiDesktopPaneUI MultiDoc MultiDocPrintJob MultiDocPrintService MultiFileChooserUI
+      MultiInternalFrameUI MultiLabelUI MultiListUI MultiLookAndFeel MultiMenuBarUI MultiMenuItemUI
+      MultiOptionPaneUI MultiPanelUI MultiPixelPackedSampleModel MultipleDocumentHandling MultipleMaster
+      MultiPopupMenuUI MultiProgressBarUI MultiRootPaneUI MultiScrollBarUI MultiScrollPaneUI MultiSeparatorUI
+      MultiSliderUI MultiSpinnerUI MultiSplitPaneUI MultiTabbedPaneUI MultiTableHeaderUI MultiTableUI
+      MultiTextUI MultiToolBarUI MultiToolTipUI MultiTreeUI MultiViewportUI MutableAttributeSet
+      MutableComboBoxModel MutableTreeNode Name NameAlreadyBoundException NameCallback NameClassPair
+      NameNotFoundException NameParser NamespaceChangeListener NamespaceContext Naming NamingEnumeration
+      NamingEvent NamingException NamingExceptionEvent NamingListener NamingManager NamingSecurityException
+      NavigationFilter NegativeArraySizeException NetPermission NetworkInterface NoClassDefFoundError
+      NoConnectionPendingException NodeChangeEvent NodeChangeListener NoInitialContextException
+      NoninvertibleTransformException NonReadableChannelException NonWritableChannelException
+      NoPermissionException NoRouteToHostException NoSuchAlgorithmException NoSuchAttributeException
+      NoSuchElementException NoSuchFieldError NoSuchFieldException NoSuchMethodError NoSuchMethodException
+      NoSuchObjectException NoSuchPaddingException NoSuchProviderException NotActiveException
+      NotBoundException NotCompliantMBeanException NotContextException Notification NotificationBroadcaster
+      NotificationBroadcasterSupport NotificationEmitter NotificationFilter NotificationFilterSupport
+      NotificationListener NotificationResult NotOwnerException NotSerializableException NotYetBoundException
+      NotYetConnectedException NullCipher NullPointerException Number NumberFormat NumberFormatException
+      NumberFormatter NumberOfDocuments NumberOfInterveningJobs NumberUp NumberUpSupported NumericShaper
+      OAEPParameterSpec Object ObjectChangeListener ObjectFactory ObjectFactoryBuilder ObjectInput
+      ObjectInputStream ObjectInputValidation ObjectInstance ObjectName ObjectOutput ObjectOutputStream
+      ObjectStreamClass ObjectStreamConstants ObjectStreamException ObjectStreamField ObjectView ObjID
+      Observable Observer OceanTheme OpenDataException OpenMBeanAttributeInfo OpenMBeanAttributeInfoSupport
+      OpenMBeanConstructorInfo OpenMBeanConstructorInfoSupport OpenMBeanInfo OpenMBeanInfoSupport
+      OpenMBeanOperationInfo OpenMBeanOperationInfoSupport OpenMBeanParameterInfo
+      OpenMBeanParameterInfoSupport OpenType OperatingSystemMXBean Operation OperationNotSupportedException
+      OperationsException Option OptionalDataException OptionPaneUI OrientationRequested OutOfMemoryError
+      OutputDeviceAssigned OutputKeys OutputStream OutputStreamWriter OverlappingFileLockException
+      OverlayLayout Override Owner Pack200 Package PackedColorModel Pageable PageAttributes
+      PagedResultsControl PagedResultsResponseControl PageFormat PageRanges PagesPerMinute PagesPerMinuteColor
+      Paint PaintContext PaintEvent Panel PanelUI Paper ParagraphView ParameterBlock ParameterDescriptor
+      ParameterizedType ParameterMetaData ParseException ParsePosition Parser ParserConfigurationException
+      ParserDelegator PartialResultException PasswordAuthentication PasswordCallback PasswordView Patch
+      PathIterator Pattern PatternSyntaxException PBEKey PBEKeySpec PBEParameterSpec PDLOverrideSupported
+      Permission PermissionCollection Permissions PersistenceDelegate PersistentMBean PhantomReference Pipe
+      PipedInputStream PipedOutputStream PipedReader PipedWriter PixelGrabber PixelInterleavedSampleModel
+      PKCS8EncodedKeySpec PKIXBuilderParameters PKIXCertPathBuilderResult PKIXCertPathChecker
+      PKIXCertPathValidatorResult PKIXParameters PlainDocument PlainView Point Point2D PointerInfo Policy
+      PolicyNode PolicyQualifierInfo Polygon PooledConnection Popup PopupFactory PopupMenu PopupMenuEvent
+      PopupMenuListener PopupMenuUI Port PortableRemoteObject PortableRemoteObjectDelegate
+      PortUnreachableException Position Predicate PreferenceChangeEvent PreferenceChangeListener Preferences
+      PreferencesFactory PreparedStatement PresentationDirection Principal Printable PrinterAbortException
+      PrinterException PrinterGraphics PrinterInfo PrinterIOException PrinterIsAcceptingJobs PrinterJob
+      PrinterLocation PrinterMakeAndModel PrinterMessageFromOperator PrinterMoreInfo
+      PrinterMoreInfoManufacturer PrinterName PrinterResolution PrinterState PrinterStateReason
+      PrinterStateReasons PrinterURI PrintEvent PrintException PrintGraphics PrintJob PrintJobAdapter
+      PrintJobAttribute PrintJobAttributeEvent PrintJobAttributeListener PrintJobAttributeSet PrintJobEvent
+      PrintJobListener PrintQuality PrintRequestAttribute PrintRequestAttributeSet PrintService
+      PrintServiceAttribute PrintServiceAttributeEvent PrintServiceAttributeListener PrintServiceAttributeSet
+      PrintServiceLookup PrintStream PrintWriter PriorityBlockingQueue PriorityQueue PrivateClassLoader
+      PrivateCredentialPermission PrivateKey PrivateMLet PrivilegedAction PrivilegedActionException
+      PrivilegedExceptionAction Process ProcessBuilder ProfileDataException ProgressBarUI ProgressMonitor
+      ProgressMonitorInputStream Properties PropertyChangeEvent PropertyChangeListener
+      PropertyChangeListenerProxy PropertyChangeSupport PropertyDescriptor PropertyEditor
+      PropertyEditorManager PropertyEditorSupport PropertyPermission PropertyResourceBundle
+      PropertyVetoException ProtectionDomain ProtocolException Provider ProviderException Proxy ProxySelector
+      PSource PSSParameterSpec PublicKey PushbackInputStream PushbackReader QName QuadCurve2D Query QueryEval
+      QueryExp Queue QueuedJobCount Random RandomAccess RandomAccessFile Raster RasterFormatException RasterOp
+      RC2ParameterSpec RC5ParameterSpec Rdn Readable ReadableByteChannel Reader ReadOnlyBufferException
+      ReadWriteLock RealmCallback RealmChoiceCallback Receiver Rectangle Rectangle2D RectangularShape
+      ReentrantLock ReentrantReadWriteLock Ref RefAddr Reference Referenceable ReferenceQueue
+      ReferenceUriSchemesSupported ReferralException ReflectionException ReflectPermission Refreshable
+      RefreshFailedException Region RegisterableService Registry RegistryHandler RejectedExecutionException
+      RejectedExecutionHandler Relation RelationException RelationNotFoundException RelationNotification
+      RelationService RelationServiceMBean RelationServiceNotRegisteredException RelationSupport
+      RelationSupportMBean RelationType RelationTypeNotFoundException RelationTypeSupport Remote RemoteCall
+      RemoteException RemoteObject RemoteObjectInvocationHandler RemoteRef RemoteServer RemoteStub
+      RenderableImage RenderableImageOp RenderableImageProducer RenderContext RenderedImage
+      RenderedImageFactory Renderer RenderingHints RepaintManager ReplicateScaleFilter RequestingUserName
+      RequiredModelMBean RescaleOp ResolutionSyntax Resolver ResolveResult ResourceBundle ResponseCache Result
+      ResultSet ResultSetMetaData Retention RetentionPolicy ReverbType RGBImageFilter RMIClassLoader
+      RMIClassLoaderSpi RMIClientSocketFactory RMIConnection RMIConnectionImpl RMIConnectionImpl_Stub
+      RMIConnector RMIConnectorServer RMIFailureHandler RMIIIOPServerImpl RMIJRMPServerImpl
+      RMISecurityException RMISecurityManager RMIServer RMIServerImpl RMIServerImpl_Stub
+      RMIServerSocketFactory RMISocketFactory Robot Role RoleInfo RoleInfoNotFoundException RoleList
+      RoleNotFoundException RoleResult RoleStatus RoleUnresolved RoleUnresolvedList RootPaneContainer
+      RootPaneUI RoundingMode RoundRectangle2D RowMapper RowSet RowSetEvent RowSetInternal RowSetListener
+      RowSetMetaData RowSetMetaDataImpl RowSetReader RowSetWarning RowSetWriter RSAKey RSAKeyGenParameterSpec
+      RSAMultiPrimePrivateCrtKey RSAMultiPrimePrivateCrtKeySpec RSAOtherPrimeInfo RSAPrivateCrtKey
+      RSAPrivateCrtKeySpec RSAPrivateKey RSAPrivateKeySpec RSAPublicKey RSAPublicKeySpec RTFEditorKit
+      RuleBasedCollator Runnable Runtime RuntimeErrorException RuntimeException RuntimeMBeanException
+      RuntimeMXBean RuntimeOperationsException RuntimePermission SampleModel Sasl SaslClient SaslClientFactory
+      SaslException SaslServer SaslServerFactory Savepoint SAXParser SAXParserFactory SAXResult SAXSource
+      SAXTransformerFactory Scanner ScatteringByteChannel ScheduledExecutorService ScheduledFuture
+      ScheduledThreadPoolExecutor Schema SchemaFactory SchemaFactoryLoader SchemaViolationException Scrollable
+      Scrollbar ScrollBarUI ScrollPane ScrollPaneAdjustable ScrollPaneConstants ScrollPaneLayout ScrollPaneUI
+      SealedObject SearchControls SearchResult SecretKey SecretKeyFactory SecretKeyFactorySpi SecretKeySpec
+      SecureCacheResponse SecureClassLoader SecureRandom SecureRandomSpi Security SecurityException
+      SecurityManager SecurityPermission Segment SelectableChannel SelectionKey Selector SelectorProvider
+      Semaphore SeparatorUI Sequence SequenceInputStream Sequencer SerialArray SerialBlob SerialClob
+      SerialDatalink SerialException Serializable SerializablePermission SerialJavaObject SerialRef
+      SerialStruct ServerCloneException ServerError ServerException ServerNotActiveException ServerRef
+      ServerRuntimeException ServerSocket ServerSocketChannel ServerSocketFactory ServiceNotFoundException
+      ServicePermission ServiceRegistry ServiceUI ServiceUIFactory ServiceUnavailableException Set
+      SetOfIntegerSyntax Severity Shape ShapeGraphicAttribute SheetCollate Short ShortBuffer
+      ShortBufferException ShortLookupTable ShortMessage Sides Signature SignatureException SignatureSpi
+      SignedObject Signer SimpleAttributeSet SimpleBeanInfo SimpleDateFormat SimpleDoc SimpleFormatter
+      SimpleTimeZone SimpleType SinglePixelPackedSampleModel SingleSelectionModel Size2DSyntax
+      SizeLimitExceededException SizeRequirements SizeSequence Skeleton SkeletonMismatchException
+      SkeletonNotFoundException SliderUI Socket SocketAddress SocketChannel SocketException SocketFactory
+      SocketHandler SocketImpl SocketImplFactory SocketOptions SocketPermission SocketSecurityException
+      SocketTimeoutException SoftBevelBorder SoftReference SortControl SortedMap SortedSet
+      SortingFocusTraversalPolicy SortKey SortResponseControl Soundbank SoundbankReader SoundbankResource
+      Source SourceDataLine SourceLocator SpinnerDateModel SpinnerListModel SpinnerModel SpinnerNumberModel
+      SpinnerUI SplitPaneUI Spring SpringLayout SQLData SQLException SQLInput SQLInputImpl SQLOutput
+      SQLOutputImpl SQLPermission SQLWarning SSLContext SSLContextSpi SSLEngine SSLEngineResult SSLException
+      SSLHandshakeException SSLKeyException SSLPeerUnverifiedException SSLPermission SSLProtocolException
+      SslRMIClientSocketFactory SslRMIServerSocketFactory SSLServerSocket SSLServerSocketFactory SSLSession
+      SSLSessionBindingEvent SSLSessionBindingListener SSLSessionContext SSLSocket SSLSocketFactory Stack
+      StackOverflowError StackTraceElement StandardMBean StartTlsRequest StartTlsResponse StateEdit
+      StateEditable StateFactory Statement StreamCorruptedException StreamHandler StreamPrintService
+      StreamPrintServiceFactory StreamResult StreamSource StreamTokenizer StrictMath String StringBuffer
+      StringBufferInputStream StringBuilder StringCharacterIterator StringContent
+      StringIndexOutOfBoundsException StringMonitor StringMonitorMBean StringReader StringRefAddr
+      StringSelection StringTokenizer StringValueExp StringWriter Stroke Struct Stub StubDelegate
+      StubNotFoundException Style StyleConstants StyleContext StyledDocument StyledEditorKit StyleSheet
+      Subject SubjectDelegationPermission SubjectDomainCombiner SupportedValuesAttribute SuppressWarnings
+      SwingConstants SwingPropertyChangeSupport SwingUtilities SyncFactory SyncFactoryException
+      SyncFailedException SynchronousQueue SyncProvider SyncProviderException SyncResolver SynthConstants
+      SynthContext Synthesizer SynthGraphicsUtils SynthLookAndFeel SynthPainter SynthStyle SynthStyleFactory
+      SysexMessage System SystemColor SystemFlavorMap TabableView TabbedPaneUI TabExpander TableCellEditor
+      TableCellRenderer TableColumn TableColumnModel TableColumnModelEvent TableColumnModelListener
+      TableHeaderUI TableModel TableModelEvent TableModelListener TableUI TableView TabSet TabStop TabularData
+      TabularDataSupport TabularType TagElement Target TargetDataLine TargetedNotification Templates
+      TemplatesHandler TextAction TextArea TextAttribute TextComponent TextEvent TextField TextHitInfo
+      TextInputCallback TextLayout TextListener TextMeasurer TextOutputCallback TextSyntax TextUI TexturePaint
+      Thread ThreadDeath ThreadFactory ThreadGroup ThreadInfo ThreadLocal ThreadMXBean ThreadPoolExecutor
+      Throwable Tie TileObserver Time TimeLimitExceededException TimeoutException Timer
+      TimerAlarmClockNotification TimerMBean TimerNotification TimerTask Timestamp TimeUnit TimeZone
+      TitledBorder ToolBarUI Toolkit ToolTipManager ToolTipUI TooManyListenersException Track
+      TransactionalWriter TransactionRequiredException TransactionRolledbackException Transferable
+      TransferHandler TransformAttribute Transformer TransformerConfigurationException TransformerException
+      TransformerFactory TransformerFactoryConfigurationError TransformerHandler Transmitter Transparency
+      TreeCellEditor TreeCellRenderer TreeExpansionEvent TreeExpansionListener TreeMap TreeModel
+      TreeModelEvent TreeModelListener TreeNode TreePath TreeSelectionEvent TreeSelectionListener
+      TreeSelectionModel TreeSet TreeUI TreeWillExpandListener TrustAnchor TrustManager TrustManagerFactory
+      TrustManagerFactorySpi Type TypeInfoProvider TypeNotPresentException Types TypeVariable UID UIDefaults
+      UIManager UIResource UndeclaredThrowableException UndoableEdit UndoableEditEvent UndoableEditListener
+      UndoableEditSupport UndoManager UnexpectedException UnicastRemoteObject UnknownError
+      UnknownFormatConversionException UnknownFormatFlagsException UnknownGroupException UnknownHostException
+      UnknownObjectException UnknownServiceException UnmappableCharacterException UnmarshalException
+      UnmodifiableClassException UnmodifiableSetException UnrecoverableEntryException
+      UnrecoverableKeyException Unreferenced UnresolvedAddressException UnresolvedPermission
+      UnsatisfiedLinkError UnsolicitedNotification UnsolicitedNotificationEvent
+      UnsolicitedNotificationListener UnsupportedAddressTypeException UnsupportedAudioFileException
+      UnsupportedCallbackException UnsupportedCharsetException UnsupportedClassVersionError
+      UnsupportedEncodingException UnsupportedFlavorException UnsupportedLookAndFeelException
+      UnsupportedOperationException URI URIException URIResolver URISyntax URISyntaxException URL
+      URLClassLoader URLConnection URLDecoder URLEncoder URLStreamHandler URLStreamHandlerFactory
+      UTFDataFormatException Util UtilDelegate Utilities UUID Validator ValidatorHandler ValueExp ValueHandler
+      ValueHandlerMultiFormat VariableHeightLayoutCache Vector VerifyError VetoableChangeListener
+      VetoableChangeListenerProxy VetoableChangeSupport View ViewFactory ViewportLayout ViewportUI
+      VirtualMachineError Visibility VMID VoiceStatus Void VolatileImage WeakHashMap WeakReference WebRowSet
+      WildcardType Window WindowAdapter WindowConstants WindowEvent WindowFocusListener WindowListener
+      WindowStateListener WrappedPlainView WritableByteChannel WritableRaster WritableRenderedImage
+      WriteAbortedException Writer X500Principal X500PrivateCredential X509Certificate X509CertSelector
+      X509CRL X509CRLEntry X509CRLSelector X509EncodedKeySpec X509ExtendedKeyManager X509Extension
+      X509KeyManager X509TrustManager XAConnection XADataSource XAException XAResource Xid XMLConstants
+      XMLDecoder XMLEncoder XMLFormatter XMLGregorianCalendar XMLParseException XmlReader XmlWriter XPath
+      XPathConstants XPathException XPathExpression XPathExpressionException XPathFactory
+      XPathFactoryConfigurationException XPathFunction XPathFunctionException XPathFunctionResolver
+      XPathVariableResolver ZipEntry ZipException ZipFile ZipInputStream ZipOutputStream ZoneView
+    ]
+    
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java/builtin_types.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,419 @@
+module CodeRay
+module Scanners
+  
+  module Java::BuiltinTypes  # :nodoc:
+    
+    List = %w[
+      AbstractAction AbstractBorder AbstractButton AbstractCellEditor AbstractCollection
+      AbstractColorChooserPanel AbstractDocument AbstractExecutorService AbstractInterruptibleChannel
+      AbstractLayoutCache AbstractList AbstractListModel AbstractMap AbstractMethodError AbstractPreferences
+      AbstractQueue AbstractQueuedSynchronizer AbstractSelectableChannel AbstractSelectionKey AbstractSelector
+      AbstractSequentialList AbstractSet AbstractSpinnerModel AbstractTableModel AbstractUndoableEdit
+      AbstractWriter AccessControlContext AccessControlException AccessController AccessException Accessible
+      AccessibleAction AccessibleAttributeSequence AccessibleBundle AccessibleComponent AccessibleContext
+      AccessibleEditableText AccessibleExtendedComponent AccessibleExtendedTable AccessibleExtendedText
+      AccessibleHyperlink AccessibleHypertext AccessibleIcon AccessibleKeyBinding AccessibleObject
+      AccessibleRelation AccessibleRelationSet AccessibleResourceBundle AccessibleRole AccessibleSelection
+      AccessibleState AccessibleStateSet AccessibleStreamable AccessibleTable AccessibleTableModelChange
+      AccessibleText AccessibleTextSequence AccessibleValue AccountException AccountExpiredException
+      AccountLockedException AccountNotFoundException Acl AclEntry AclNotFoundException Action ActionEvent
+      ActionListener ActionMap ActionMapUIResource Activatable ActivateFailedException ActivationDesc
+      ActivationException ActivationGroup ActivationGroupDesc ActivationGroupID ActivationGroup_Stub
+      ActivationID ActivationInstantiator ActivationMonitor ActivationSystem Activator ActiveEvent
+      ActivityCompletedException ActivityRequiredException Adjustable AdjustmentEvent AdjustmentListener
+      Adler32 AffineTransform AffineTransformOp AlgorithmParameterGenerator AlgorithmParameterGeneratorSpi
+      AlgorithmParameters AlgorithmParameterSpec AlgorithmParametersSpi AllPermission AlphaComposite
+      AlreadyBoundException AlreadyConnectedException AncestorEvent AncestorListener AnnotatedElement
+      Annotation AnnotationFormatError AnnotationTypeMismatchException AppConfigurationEntry Appendable Applet
+      AppletContext AppletInitializer AppletStub Arc2D Area AreaAveragingScaleFilter ArithmeticException Array
+      ArrayBlockingQueue ArrayIndexOutOfBoundsException ArrayList Arrays ArrayStoreException ArrayType
+      AssertionError AsyncBoxView AsynchronousCloseException AtomicBoolean AtomicInteger AtomicIntegerArray
+      AtomicIntegerFieldUpdater AtomicLong AtomicLongArray AtomicLongFieldUpdater AtomicMarkableReference
+      AtomicReference AtomicReferenceArray AtomicReferenceFieldUpdater AtomicStampedReference Attribute
+      AttributeChangeNotification AttributeChangeNotificationFilter AttributedCharacterIterator
+      AttributedString AttributeException AttributeInUseException AttributeList AttributeModificationException
+      AttributeNotFoundException Attributes AttributeSet AttributeSetUtilities AttributeValueExp AudioClip
+      AudioFileFormat AudioFileReader AudioFileWriter AudioFormat AudioInputStream AudioPermission AudioSystem
+      AuthenticationException AuthenticationNotSupportedException Authenticator AuthorizeCallback
+      AuthPermission AuthProvider Autoscroll AWTError AWTEvent AWTEventListener AWTEventListenerProxy
+      AWTEventMulticaster AWTException AWTKeyStroke AWTPermission BackingStoreException
+      BadAttributeValueExpException BadBinaryOpValueExpException BadLocationException BadPaddingException
+      BadStringOperationException BandCombineOp BandedSampleModel BaseRowSet BasicArrowButton BasicAttribute
+      BasicAttributes BasicBorders BasicButtonListener BasicButtonUI BasicCheckBoxMenuItemUI BasicCheckBoxUI
+      BasicColorChooserUI BasicComboBoxEditor BasicComboBoxRenderer BasicComboBoxUI BasicComboPopup
+      BasicControl BasicDesktopIconUI BasicDesktopPaneUI BasicDirectoryModel BasicEditorPaneUI
+      BasicFileChooserUI BasicFormattedTextFieldUI BasicGraphicsUtils BasicHTML BasicIconFactory
+      BasicInternalFrameTitlePane BasicInternalFrameUI BasicLabelUI BasicListUI BasicLookAndFeel
+      BasicMenuBarUI BasicMenuItemUI BasicMenuUI BasicOptionPaneUI BasicPanelUI BasicPasswordFieldUI
+      BasicPermission BasicPopupMenuSeparatorUI BasicPopupMenuUI BasicProgressBarUI BasicRadioButtonMenuItemUI
+      BasicRadioButtonUI BasicRootPaneUI BasicScrollBarUI BasicScrollPaneUI BasicSeparatorUI BasicSliderUI
+      BasicSpinnerUI BasicSplitPaneDivider BasicSplitPaneUI BasicStroke BasicTabbedPaneUI BasicTableHeaderUI
+      BasicTableUI BasicTextAreaUI BasicTextFieldUI BasicTextPaneUI BasicTextUI BasicToggleButtonUI
+      BasicToolBarSeparatorUI BasicToolBarUI BasicToolTipUI BasicTreeUI BasicViewportUI BatchUpdateException
+      BeanContext BeanContextChild BeanContextChildComponentProxy BeanContextChildSupport
+      BeanContextContainerProxy BeanContextEvent BeanContextMembershipEvent BeanContextMembershipListener
+      BeanContextProxy BeanContextServiceAvailableEvent BeanContextServiceProvider
+      BeanContextServiceProviderBeanInfo BeanContextServiceRevokedEvent BeanContextServiceRevokedListener
+      BeanContextServices BeanContextServicesListener BeanContextServicesSupport BeanContextSupport
+      BeanDescriptor BeanInfo Beans BevelBorder Bidi BigDecimal BigInteger BinaryRefAddr BindException Binding
+      BitSet Blob BlockingQueue BlockView BMPImageWriteParam Book Boolean BooleanControl Border BorderFactory
+      BorderLayout BorderUIResource BoundedRangeModel Box BoxLayout BoxView BreakIterator
+      BrokenBarrierException Buffer BufferCapabilities BufferedImage BufferedImageFilter BufferedImageOp
+      BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter BufferOverflowException
+      BufferStrategy BufferUnderflowException Button ButtonGroup ButtonModel ButtonUI Byte
+      ByteArrayInputStream ByteArrayOutputStream ByteBuffer ByteChannel ByteLookupTable ByteOrder CachedRowSet
+      CacheRequest CacheResponse Calendar Callable CallableStatement Callback CallbackHandler
+      CancelablePrintJob CancellationException CancelledKeyException CannotProceedException
+      CannotRedoException CannotUndoException Canvas CardLayout Caret CaretEvent CaretListener CellEditor
+      CellEditorListener CellRendererPane Certificate CertificateEncodingException CertificateException
+      CertificateExpiredException CertificateFactory CertificateFactorySpi CertificateNotYetValidException
+      CertificateParsingException CertPath CertPathBuilder CertPathBuilderException CertPathBuilderResult
+      CertPathBuilderSpi CertPathParameters CertPathTrustManagerParameters CertPathValidator
+      CertPathValidatorException CertPathValidatorResult CertPathValidatorSpi CertSelector CertStore
+      CertStoreException CertStoreParameters CertStoreSpi ChangedCharSetException ChangeEvent ChangeListener
+      Channel Channels Character CharacterCodingException CharacterIterator CharArrayReader CharArrayWriter
+      CharBuffer CharConversionException CharSequence Charset CharsetDecoder CharsetEncoder CharsetProvider
+      Checkbox CheckboxGroup CheckboxMenuItem CheckedInputStream CheckedOutputStream Checksum Choice
+      ChoiceCallback ChoiceFormat Chromaticity Cipher CipherInputStream CipherOutputStream CipherSpi Class
+      ClassCastException ClassCircularityError ClassDefinition ClassDesc ClassFileTransformer ClassFormatError
+      ClassLoader ClassLoaderRepository ClassLoadingMXBean ClassNotFoundException Clip Clipboard
+      ClipboardOwner Clob Cloneable CloneNotSupportedException Closeable ClosedByInterruptException
+      ClosedChannelException ClosedSelectorException CMMException CoderMalfunctionError CoderResult CodeSigner
+      CodeSource CodingErrorAction CollationElementIterator CollationKey Collator Collection
+      CollectionCertStoreParameters Collections Color ColorChooserComponentFactory ColorChooserUI
+      ColorConvertOp ColorModel ColorSelectionModel ColorSpace ColorSupported ColorType ColorUIResource
+      ComboBoxEditor ComboBoxModel ComboBoxUI ComboPopup CommunicationException Comparable Comparator
+      CompilationMXBean Compiler CompletionService Component ComponentAdapter ComponentColorModel
+      ComponentEvent ComponentInputMap ComponentInputMapUIResource ComponentListener ComponentOrientation
+      ComponentSampleModel ComponentUI ComponentView Composite CompositeContext CompositeData
+      CompositeDataSupport CompositeName CompositeType CompositeView CompoundBorder CompoundControl
+      CompoundEdit CompoundName Compression ConcurrentHashMap ConcurrentLinkedQueue ConcurrentMap
+      ConcurrentModificationException Condition Configuration ConfigurationException ConfirmationCallback
+      ConnectException ConnectIOException Connection ConnectionEvent ConnectionEventListener
+      ConnectionPendingException ConnectionPoolDataSource ConsoleHandler Constructor Container
+      ContainerAdapter ContainerEvent ContainerListener ContainerOrderFocusTraversalPolicy ContentHandler
+      ContentHandlerFactory ContentModel Context ContextNotEmptyException ContextualRenderedImageFactory
+      Control ControlFactory ControllerEventListener ConvolveOp CookieHandler Copies CopiesSupported
+      CopyOnWriteArrayList CopyOnWriteArraySet CountDownLatch CounterMonitor CounterMonitorMBean CRC32
+      CredentialException CredentialExpiredException CredentialNotFoundException CRL CRLException CRLSelector
+      CropImageFilter CSS CubicCurve2D Currency Cursor Customizer CyclicBarrier DatabaseMetaData DataBuffer
+      DataBufferByte DataBufferDouble DataBufferFloat DataBufferInt DataBufferShort DataBufferUShort
+      DataFlavor DataFormatException DatagramChannel DatagramPacket DatagramSocket DatagramSocketImpl
+      DatagramSocketImplFactory DataInput DataInputStream DataLine DataOutput DataOutputStream DataSource
+      DataTruncation DatatypeConfigurationException DatatypeConstants DatatypeFactory Date DateFormat
+      DateFormatSymbols DateFormatter DateTimeAtCompleted DateTimeAtCreation DateTimeAtProcessing
+      DateTimeSyntax DebugGraphics DecimalFormat DecimalFormatSymbols DefaultBoundedRangeModel
+      DefaultButtonModel DefaultCaret DefaultCellEditor DefaultColorSelectionModel DefaultComboBoxModel
+      DefaultDesktopManager DefaultEditorKit DefaultFocusManager DefaultFocusTraversalPolicy DefaultFormatter
+      DefaultFormatterFactory DefaultHighlighter DefaultKeyboardFocusManager DefaultListCellRenderer
+      DefaultListModel DefaultListSelectionModel DefaultLoaderRepository DefaultMenuLayout DefaultMetalTheme
+      DefaultMutableTreeNode DefaultPersistenceDelegate DefaultSingleSelectionModel DefaultStyledDocument
+      DefaultTableCellRenderer DefaultTableColumnModel DefaultTableModel DefaultTextUI DefaultTreeCellEditor
+      DefaultTreeCellRenderer DefaultTreeModel DefaultTreeSelectionModel Deflater DeflaterOutputStream Delayed
+      DelayQueue DelegationPermission Deprecated Descriptor DescriptorAccess DescriptorSupport DESedeKeySpec
+      DesignMode DESKeySpec DesktopIconUI DesktopManager DesktopPaneUI Destination Destroyable
+      DestroyFailedException DGC DHGenParameterSpec DHKey DHParameterSpec DHPrivateKey DHPrivateKeySpec
+      DHPublicKey DHPublicKeySpec Dialog Dictionary DigestException DigestInputStream DigestOutputStream
+      Dimension Dimension2D DimensionUIResource DirContext DirectColorModel DirectoryManager DirObjectFactory
+      DirStateFactory DisplayMode DnDConstants Doc DocAttribute DocAttributeSet DocFlavor DocPrintJob Document
+      DocumentBuilder DocumentBuilderFactory Documented DocumentEvent DocumentFilter DocumentListener
+      DocumentName DocumentParser DomainCombiner DOMLocator DOMResult DOMSource Double DoubleBuffer
+      DragGestureEvent DragGestureListener DragGestureRecognizer DragSource DragSourceAdapter
+      DragSourceContext DragSourceDragEvent DragSourceDropEvent DragSourceEvent DragSourceListener
+      DragSourceMotionListener Driver DriverManager DriverPropertyInfo DropTarget DropTargetAdapter
+      DropTargetContext DropTargetDragEvent DropTargetDropEvent DropTargetEvent DropTargetListener DSAKey
+      DSAKeyPairGenerator DSAParameterSpec DSAParams DSAPrivateKey DSAPrivateKeySpec DSAPublicKey
+      DSAPublicKeySpec DTD DTDConstants DuplicateFormatFlagsException Duration DynamicMBean ECField ECFieldF2m
+      ECFieldFp ECGenParameterSpec ECKey ECParameterSpec ECPoint ECPrivateKey ECPrivateKeySpec ECPublicKey
+      ECPublicKeySpec EditorKit Element ElementIterator ElementType Ellipse2D EllipticCurve EmptyBorder
+      EmptyStackException EncodedKeySpec Encoder EncryptedPrivateKeyInfo Entity Enum
+      EnumConstantNotPresentException EnumControl Enumeration EnumMap EnumSet EnumSyntax EOFException Error
+      ErrorListener ErrorManager EtchedBorder Event EventContext EventDirContext EventHandler EventListener
+      EventListenerList EventListenerProxy EventObject EventQueue EventSetDescriptor Exception
+      ExceptionInInitializerError ExceptionListener Exchanger ExecutionException Executor
+      ExecutorCompletionService Executors ExecutorService ExemptionMechanism ExemptionMechanismException
+      ExemptionMechanismSpi ExpandVetoException ExportException Expression ExtendedRequest ExtendedResponse
+      Externalizable FactoryConfigurationError FailedLoginException FeatureDescriptor Fidelity Field
+      FieldPosition FieldView File FileCacheImageInputStream FileCacheImageOutputStream FileChannel
+      FileChooserUI FileDescriptor FileDialog FileFilter FileHandler FileImageInputStream
+      FileImageOutputStream FileInputStream FileLock FileLockInterruptionException FilenameFilter FileNameMap
+      FileNotFoundException FileOutputStream FilePermission FileReader FileSystemView FileView FileWriter
+      Filter FilteredImageSource FilteredRowSet FilterInputStream FilterOutputStream FilterReader FilterWriter
+      Finishings FixedHeightLayoutCache FlatteningPathIterator FlavorEvent FlavorException FlavorListener
+      FlavorMap FlavorTable Float FloatBuffer FloatControl FlowLayout FlowView Flushable FocusAdapter
+      FocusEvent FocusListener FocusManager FocusTraversalPolicy Font FontFormatException FontMetrics
+      FontRenderContext FontUIResource Format FormatConversionProvider FormatFlagsConversionMismatchException
+      Formattable FormattableFlags Formatter FormatterClosedException FormSubmitEvent FormView Frame Future
+      FutureTask GapContent GarbageCollectorMXBean GatheringByteChannel GaugeMonitor GaugeMonitorMBean
+      GeneralPath GeneralSecurityException GenericArrayType GenericDeclaration GenericSignatureFormatError
+      GlyphJustificationInfo GlyphMetrics GlyphVector GlyphView GradientPaint GraphicAttribute Graphics
+      Graphics2D GraphicsConfigTemplate GraphicsConfiguration GraphicsDevice GraphicsEnvironment GrayFilter
+      GregorianCalendar GridBagConstraints GridBagLayout GridLayout Group Guard GuardedObject GZIPInputStream
+      GZIPOutputStream Handler HandshakeCompletedEvent HandshakeCompletedListener HasControls HashAttributeSet
+      HashDocAttributeSet HashMap HashPrintJobAttributeSet HashPrintRequestAttributeSet
+      HashPrintServiceAttributeSet HashSet Hashtable HeadlessException HierarchyBoundsAdapter
+      HierarchyBoundsListener HierarchyEvent HierarchyListener Highlighter HostnameVerifier HTML HTMLDocument
+      HTMLEditorKit HTMLFrameHyperlinkEvent HTMLWriter HttpRetryException HttpsURLConnection HttpURLConnection
+      HyperlinkEvent HyperlinkListener ICC_ColorSpace ICC_Profile ICC_ProfileGray ICC_ProfileRGB Icon
+      IconUIResource IconView Identity IdentityHashMap IdentityScope IIOByteBuffer IIOException IIOImage
+      IIOInvalidTreeException IIOMetadata IIOMetadataController IIOMetadataFormat IIOMetadataFormatImpl
+      IIOMetadataNode IIOParam IIOParamController IIOReadProgressListener IIOReadUpdateListener
+      IIOReadWarningListener IIORegistry IIOServiceProvider IIOWriteProgressListener IIOWriteWarningListener
+      IllegalAccessError IllegalAccessException IllegalArgumentException IllegalBlockingModeException
+      IllegalBlockSizeException IllegalCharsetNameException IllegalClassFormatException
+      IllegalComponentStateException IllegalFormatCodePointException IllegalFormatConversionException
+      IllegalFormatException IllegalFormatFlagsException IllegalFormatPrecisionException
+      IllegalFormatWidthException IllegalMonitorStateException IllegalPathStateException
+      IllegalSelectorException IllegalStateException IllegalThreadStateException Image ImageCapabilities
+      ImageConsumer ImageFilter ImageGraphicAttribute ImageIcon ImageInputStream ImageInputStreamImpl
+      ImageInputStreamSpi ImageIO ImageObserver ImageOutputStream ImageOutputStreamImpl ImageOutputStreamSpi
+      ImageProducer ImageReader ImageReaderSpi ImageReaderWriterSpi ImageReadParam ImageTranscoder
+      ImageTranscoderSpi ImageTypeSpecifier ImageView ImageWriteParam ImageWriter ImageWriterSpi
+      ImagingOpException IncompatibleClassChangeError IncompleteAnnotationException IndexColorModel
+      IndexedPropertyChangeEvent IndexedPropertyDescriptor IndexOutOfBoundsException Inet4Address Inet6Address
+      InetAddress InetSocketAddress Inflater InflaterInputStream InheritableThreadLocal Inherited
+      InitialContext InitialContextFactory InitialContextFactoryBuilder InitialDirContext InitialLdapContext
+      InlineView InputContext InputEvent InputMap InputMapUIResource InputMethod InputMethodContext
+      InputMethodDescriptor InputMethodEvent InputMethodHighlight InputMethodListener InputMethodRequests
+      InputMismatchException InputStream InputStreamReader InputSubset InputVerifier Insets InsetsUIResource
+      InstanceAlreadyExistsException InstanceNotFoundException InstantiationError InstantiationException
+      Instrument Instrumentation InsufficientResourcesException IntBuffer Integer IntegerSyntax InternalError
+      InternalFrameAdapter InternalFrameEvent InternalFrameFocusTraversalPolicy InternalFrameListener
+      InternalFrameUI InternationalFormatter InterruptedException InterruptedIOException
+      InterruptedNamingException InterruptibleChannel IntrospectionException Introspector
+      InvalidActivityException InvalidAlgorithmParameterException InvalidApplicationException
+      InvalidAttributeIdentifierException InvalidAttributesException InvalidAttributeValueException
+      InvalidClassException InvalidDnDOperationException InvalidKeyException InvalidKeySpecException
+      InvalidMarkException InvalidMidiDataException InvalidNameException InvalidObjectException
+      InvalidOpenTypeException InvalidParameterException InvalidParameterSpecException
+      InvalidPreferencesFormatException InvalidPropertiesFormatException InvalidRelationIdException
+      InvalidRelationServiceException InvalidRelationTypeException InvalidRoleInfoException
+      InvalidRoleValueException InvalidSearchControlsException InvalidSearchFilterException
+      InvalidTargetObjectTypeException InvalidTransactionException InvocationEvent InvocationHandler
+      InvocationTargetException IOException ItemEvent ItemListener ItemSelectable Iterable Iterator
+      IvParameterSpec JApplet JarEntry JarException JarFile JarInputStream JarOutputStream JarURLConnection
+      JButton JCheckBox JCheckBoxMenuItem JColorChooser JComboBox JComponent JdbcRowSet JDesktopPane JDialog
+      JEditorPane JFileChooser JFormattedTextField JFrame JInternalFrame JLabel JLayeredPane JList JMenu
+      JMenuBar JMenuItem JMException JMRuntimeException JMXAuthenticator JMXConnectionNotification
+      JMXConnector JMXConnectorFactory JMXConnectorProvider JMXConnectorServer JMXConnectorServerFactory
+      JMXConnectorServerMBean JMXConnectorServerProvider JMXPrincipal JMXProviderException
+      JMXServerErrorException JMXServiceURL JobAttributes JobHoldUntil JobImpressions JobImpressionsCompleted
+      JobImpressionsSupported JobKOctets JobKOctetsProcessed JobKOctetsSupported JobMediaSheets
+      JobMediaSheetsCompleted JobMediaSheetsSupported JobMessageFromOperator JobName JobOriginatingUserName
+      JobPriority JobPrioritySupported JobSheets JobState JobStateReason JobStateReasons Joinable JoinRowSet
+      JOptionPane JPanel JPasswordField JPEGHuffmanTable JPEGImageReadParam JPEGImageWriteParam JPEGQTable
+      JPopupMenu JProgressBar JRadioButton JRadioButtonMenuItem JRootPane JScrollBar JScrollPane JSeparator
+      JSlider JSpinner JSplitPane JTabbedPane JTable JTableHeader JTextArea JTextComponent JTextField
+      JTextPane JToggleButton JToolBar JToolTip JTree JViewport JWindow KerberosKey KerberosPrincipal
+      KerberosTicket Kernel Key KeyAdapter KeyAgreement KeyAgreementSpi KeyAlreadyExistsException
+      KeyboardFocusManager KeyEvent KeyEventDispatcher KeyEventPostProcessor KeyException KeyFactory
+      KeyFactorySpi KeyGenerator KeyGeneratorSpi KeyListener KeyManagementException KeyManager
+      KeyManagerFactory KeyManagerFactorySpi Keymap KeyPair KeyPairGenerator KeyPairGeneratorSpi KeyRep
+      KeySpec KeyStore KeyStoreBuilderParameters KeyStoreException KeyStoreSpi KeyStroke Label LabelUI
+      LabelView LanguageCallback LastOwnerException LayeredHighlighter LayoutFocusTraversalPolicy
+      LayoutManager LayoutManager2 LayoutQueue LDAPCertStoreParameters LdapContext LdapName
+      LdapReferralException Lease Level LimitExceededException Line Line2D LineBorder LineBreakMeasurer
+      LineEvent LineListener LineMetrics LineNumberInputStream LineNumberReader LineUnavailableException
+      LinkageError LinkedBlockingQueue LinkedHashMap LinkedHashSet LinkedList LinkException LinkLoopException
+      LinkRef List ListCellRenderer ListDataEvent ListDataListener ListenerNotFoundException ListIterator
+      ListModel ListResourceBundle ListSelectionEvent ListSelectionListener ListSelectionModel ListUI ListView
+      LoaderHandler Locale LocateRegistry Lock LockSupport Logger LoggingMXBean LoggingPermission LoginContext
+      LoginException LoginModule LogManager LogRecord LogStream Long LongBuffer LookAndFeel LookupOp
+      LookupTable Mac MacSpi MalformedInputException MalformedLinkException MalformedObjectNameException
+      MalformedParameterizedTypeException MalformedURLException ManagementFactory ManagementPermission
+      ManageReferralControl ManagerFactoryParameters Manifest Map MappedByteBuffer MarshalException
+      MarshalledObject MaskFormatter Matcher MatchResult Math MathContext MatteBorder MBeanAttributeInfo
+      MBeanConstructorInfo MBeanException MBeanFeatureInfo MBeanInfo MBeanNotificationInfo MBeanOperationInfo
+      MBeanParameterInfo MBeanPermission MBeanRegistration MBeanRegistrationException MBeanServer
+      MBeanServerBuilder MBeanServerConnection MBeanServerDelegate MBeanServerDelegateMBean MBeanServerFactory
+      MBeanServerForwarder MBeanServerInvocationHandler MBeanServerNotification MBeanServerNotificationFilter
+      MBeanServerPermission MBeanTrustPermission Media MediaName MediaPrintableArea MediaSize MediaSizeName
+      MediaTracker MediaTray Member MemoryCacheImageInputStream MemoryCacheImageOutputStream MemoryHandler
+      MemoryImageSource MemoryManagerMXBean MemoryMXBean MemoryNotificationInfo MemoryPoolMXBean MemoryType
+      MemoryUsage Menu MenuBar MenuBarUI MenuComponent MenuContainer MenuDragMouseEvent MenuDragMouseListener
+      MenuElement MenuEvent MenuItem MenuItemUI MenuKeyEvent MenuKeyListener MenuListener MenuSelectionManager
+      MenuShortcut MessageDigest MessageDigestSpi MessageFormat MetaEventListener MetalBorders MetalButtonUI
+      MetalCheckBoxIcon MetalCheckBoxUI MetalComboBoxButton MetalComboBoxEditor MetalComboBoxIcon
+      MetalComboBoxUI MetalDesktopIconUI MetalFileChooserUI MetalIconFactory MetalInternalFrameTitlePane
+      MetalInternalFrameUI MetalLabelUI MetalLookAndFeel MetalMenuBarUI MetalPopupMenuSeparatorUI
+      MetalProgressBarUI MetalRadioButtonUI MetalRootPaneUI MetalScrollBarUI MetalScrollButton
+      MetalScrollPaneUI MetalSeparatorUI MetalSliderUI MetalSplitPaneUI MetalTabbedPaneUI MetalTextFieldUI
+      MetalTheme MetalToggleButtonUI MetalToolBarUI MetalToolTipUI MetalTreeUI MetaMessage Method
+      MethodDescriptor MGF1ParameterSpec MidiChannel MidiDevice MidiDeviceProvider MidiEvent MidiFileFormat
+      MidiFileReader MidiFileWriter MidiMessage MidiSystem MidiUnavailableException MimeTypeParseException
+      MinimalHTMLWriter MissingFormatArgumentException MissingFormatWidthException MissingResourceException
+      Mixer MixerProvider MLet MLetMBean ModelMBean ModelMBeanAttributeInfo ModelMBeanConstructorInfo
+      ModelMBeanInfo ModelMBeanInfoSupport ModelMBeanNotificationBroadcaster ModelMBeanNotificationInfo
+      ModelMBeanOperationInfo ModificationItem Modifier Monitor MonitorMBean MonitorNotification
+      MonitorSettingException MouseAdapter MouseDragGestureRecognizer MouseEvent MouseInfo MouseInputAdapter
+      MouseInputListener MouseListener MouseMotionAdapter MouseMotionListener MouseWheelEvent
+      MouseWheelListener MultiButtonUI MulticastSocket MultiColorChooserUI MultiComboBoxUI MultiDesktopIconUI
+      MultiDesktopPaneUI MultiDoc MultiDocPrintJob MultiDocPrintService MultiFileChooserUI
+      MultiInternalFrameUI MultiLabelUI MultiListUI MultiLookAndFeel MultiMenuBarUI MultiMenuItemUI
+      MultiOptionPaneUI MultiPanelUI MultiPixelPackedSampleModel MultipleDocumentHandling MultipleMaster
+      MultiPopupMenuUI MultiProgressBarUI MultiRootPaneUI MultiScrollBarUI MultiScrollPaneUI MultiSeparatorUI
+      MultiSliderUI MultiSpinnerUI MultiSplitPaneUI MultiTabbedPaneUI MultiTableHeaderUI MultiTableUI
+      MultiTextUI MultiToolBarUI MultiToolTipUI MultiTreeUI MultiViewportUI MutableAttributeSet
+      MutableComboBoxModel MutableTreeNode Name NameAlreadyBoundException NameCallback NameClassPair
+      NameNotFoundException NameParser NamespaceChangeListener NamespaceContext Naming NamingEnumeration
+      NamingEvent NamingException NamingExceptionEvent NamingListener NamingManager NamingSecurityException
+      NavigationFilter NegativeArraySizeException NetPermission NetworkInterface NoClassDefFoundError
+      NoConnectionPendingException NodeChangeEvent NodeChangeListener NoInitialContextException
+      NoninvertibleTransformException NonReadableChannelException NonWritableChannelException
+      NoPermissionException NoRouteToHostException NoSuchAlgorithmException NoSuchAttributeException
+      NoSuchElementException NoSuchFieldError NoSuchFieldException NoSuchMethodError NoSuchMethodException
+      NoSuchObjectException NoSuchPaddingException NoSuchProviderException NotActiveException
+      NotBoundException NotCompliantMBeanException NotContextException Notification NotificationBroadcaster
+      NotificationBroadcasterSupport NotificationEmitter NotificationFilter NotificationFilterSupport
+      NotificationListener NotificationResult NotOwnerException NotSerializableException NotYetBoundException
+      NotYetConnectedException NullCipher NullPointerException Number NumberFormat NumberFormatException
+      NumberFormatter NumberOfDocuments NumberOfInterveningJobs NumberUp NumberUpSupported NumericShaper
+      OAEPParameterSpec Object ObjectChangeListener ObjectFactory ObjectFactoryBuilder ObjectInput
+      ObjectInputStream ObjectInputValidation ObjectInstance ObjectName ObjectOutput ObjectOutputStream
+      ObjectStreamClass ObjectStreamConstants ObjectStreamException ObjectStreamField ObjectView ObjID
+      Observable Observer OceanTheme OpenDataException OpenMBeanAttributeInfo OpenMBeanAttributeInfoSupport
+      OpenMBeanConstructorInfo OpenMBeanConstructorInfoSupport OpenMBeanInfo OpenMBeanInfoSupport
+      OpenMBeanOperationInfo OpenMBeanOperationInfoSupport OpenMBeanParameterInfo
+      OpenMBeanParameterInfoSupport OpenType OperatingSystemMXBean Operation OperationNotSupportedException
+      OperationsException Option OptionalDataException OptionPaneUI OrientationRequested OutOfMemoryError
+      OutputDeviceAssigned OutputKeys OutputStream OutputStreamWriter OverlappingFileLockException
+      OverlayLayout Override Owner Pack200 Package PackedColorModel Pageable PageAttributes
+      PagedResultsControl PagedResultsResponseControl PageFormat PageRanges PagesPerMinute PagesPerMinuteColor
+      Paint PaintContext PaintEvent Panel PanelUI Paper ParagraphView ParameterBlock ParameterDescriptor
+      ParameterizedType ParameterMetaData ParseException ParsePosition Parser ParserConfigurationException
+      ParserDelegator PartialResultException PasswordAuthentication PasswordCallback PasswordView Patch
+      PathIterator Pattern PatternSyntaxException PBEKey PBEKeySpec PBEParameterSpec PDLOverrideSupported
+      Permission PermissionCollection Permissions PersistenceDelegate PersistentMBean PhantomReference Pipe
+      PipedInputStream PipedOutputStream PipedReader PipedWriter PixelGrabber PixelInterleavedSampleModel
+      PKCS8EncodedKeySpec PKIXBuilderParameters PKIXCertPathBuilderResult PKIXCertPathChecker
+      PKIXCertPathValidatorResult PKIXParameters PlainDocument PlainView Point Point2D PointerInfo Policy
+      PolicyNode PolicyQualifierInfo Polygon PooledConnection Popup PopupFactory PopupMenu PopupMenuEvent
+      PopupMenuListener PopupMenuUI Port PortableRemoteObject PortableRemoteObjectDelegate
+      PortUnreachableException Position Predicate PreferenceChangeEvent PreferenceChangeListener Preferences
+      PreferencesFactory PreparedStatement PresentationDirection Principal Printable PrinterAbortException
+      PrinterException PrinterGraphics PrinterInfo PrinterIOException PrinterIsAcceptingJobs PrinterJob
+      PrinterLocation PrinterMakeAndModel PrinterMessageFromOperator PrinterMoreInfo
+      PrinterMoreInfoManufacturer PrinterName PrinterResolution PrinterState PrinterStateReason
+      PrinterStateReasons PrinterURI PrintEvent PrintException PrintGraphics PrintJob PrintJobAdapter
+      PrintJobAttribute PrintJobAttributeEvent PrintJobAttributeListener PrintJobAttributeSet PrintJobEvent
+      PrintJobListener PrintQuality PrintRequestAttribute PrintRequestAttributeSet PrintService
+      PrintServiceAttribute PrintServiceAttributeEvent PrintServiceAttributeListener PrintServiceAttributeSet
+      PrintServiceLookup PrintStream PrintWriter PriorityBlockingQueue PriorityQueue PrivateClassLoader
+      PrivateCredentialPermission PrivateKey PrivateMLet PrivilegedAction PrivilegedActionException
+      PrivilegedExceptionAction Process ProcessBuilder ProfileDataException ProgressBarUI ProgressMonitor
+      ProgressMonitorInputStream Properties PropertyChangeEvent PropertyChangeListener
+      PropertyChangeListenerProxy PropertyChangeSupport PropertyDescriptor PropertyEditor
+      PropertyEditorManager PropertyEditorSupport PropertyPermission PropertyResourceBundle
+      PropertyVetoException ProtectionDomain ProtocolException Provider ProviderException Proxy ProxySelector
+      PSource PSSParameterSpec PublicKey PushbackInputStream PushbackReader QName QuadCurve2D Query QueryEval
+      QueryExp Queue QueuedJobCount Random RandomAccess RandomAccessFile Raster RasterFormatException RasterOp
+      RC2ParameterSpec RC5ParameterSpec Rdn Readable ReadableByteChannel Reader ReadOnlyBufferException
+      ReadWriteLock RealmCallback RealmChoiceCallback Receiver Rectangle Rectangle2D RectangularShape
+      ReentrantLock ReentrantReadWriteLock Ref RefAddr Reference Referenceable ReferenceQueue
+      ReferenceUriSchemesSupported ReferralException ReflectionException ReflectPermission Refreshable
+      RefreshFailedException Region RegisterableService Registry RegistryHandler RejectedExecutionException
+      RejectedExecutionHandler Relation RelationException RelationNotFoundException RelationNotification
+      RelationService RelationServiceMBean RelationServiceNotRegisteredException RelationSupport
+      RelationSupportMBean RelationType RelationTypeNotFoundException RelationTypeSupport Remote RemoteCall
+      RemoteException RemoteObject RemoteObjectInvocationHandler RemoteRef RemoteServer RemoteStub
+      RenderableImage RenderableImageOp RenderableImageProducer RenderContext RenderedImage
+      RenderedImageFactory Renderer RenderingHints RepaintManager ReplicateScaleFilter RequestingUserName
+      RequiredModelMBean RescaleOp ResolutionSyntax Resolver ResolveResult ResourceBundle ResponseCache Result
+      ResultSet ResultSetMetaData Retention RetentionPolicy ReverbType RGBImageFilter RMIClassLoader
+      RMIClassLoaderSpi RMIClientSocketFactory RMIConnection RMIConnectionImpl RMIConnectionImpl_Stub
+      RMIConnector RMIConnectorServer RMIFailureHandler RMIIIOPServerImpl RMIJRMPServerImpl
+      RMISecurityException RMISecurityManager RMIServer RMIServerImpl RMIServerImpl_Stub
+      RMIServerSocketFactory RMISocketFactory Robot Role RoleInfo RoleInfoNotFoundException RoleList
+      RoleNotFoundException RoleResult RoleStatus RoleUnresolved RoleUnresolvedList RootPaneContainer
+      RootPaneUI RoundingMode RoundRectangle2D RowMapper RowSet RowSetEvent RowSetInternal RowSetListener
+      RowSetMetaData RowSetMetaDataImpl RowSetReader RowSetWarning RowSetWriter RSAKey RSAKeyGenParameterSpec
+      RSAMultiPrimePrivateCrtKey RSAMultiPrimePrivateCrtKeySpec RSAOtherPrimeInfo RSAPrivateCrtKey
+      RSAPrivateCrtKeySpec RSAPrivateKey RSAPrivateKeySpec RSAPublicKey RSAPublicKeySpec RTFEditorKit
+      RuleBasedCollator Runnable Runtime RuntimeErrorException RuntimeException RuntimeMBeanException
+      RuntimeMXBean RuntimeOperationsException RuntimePermission SampleModel Sasl SaslClient SaslClientFactory
+      SaslException SaslServer SaslServerFactory Savepoint SAXParser SAXParserFactory SAXResult SAXSource
+      SAXTransformerFactory Scanner ScatteringByteChannel ScheduledExecutorService ScheduledFuture
+      ScheduledThreadPoolExecutor Schema SchemaFactory SchemaFactoryLoader SchemaViolationException Scrollable
+      Scrollbar ScrollBarUI ScrollPane ScrollPaneAdjustable ScrollPaneConstants ScrollPaneLayout ScrollPaneUI
+      SealedObject SearchControls SearchResult SecretKey SecretKeyFactory SecretKeyFactorySpi SecretKeySpec
+      SecureCacheResponse SecureClassLoader SecureRandom SecureRandomSpi Security SecurityException
+      SecurityManager SecurityPermission Segment SelectableChannel SelectionKey Selector SelectorProvider
+      Semaphore SeparatorUI Sequence SequenceInputStream Sequencer SerialArray SerialBlob SerialClob
+      SerialDatalink SerialException Serializable SerializablePermission SerialJavaObject SerialRef
+      SerialStruct ServerCloneException ServerError ServerException ServerNotActiveException ServerRef
+      ServerRuntimeException ServerSocket ServerSocketChannel ServerSocketFactory ServiceNotFoundException
+      ServicePermission ServiceRegistry ServiceUI ServiceUIFactory ServiceUnavailableException Set
+      SetOfIntegerSyntax Severity Shape ShapeGraphicAttribute SheetCollate Short ShortBuffer
+      ShortBufferException ShortLookupTable ShortMessage Sides Signature SignatureException SignatureSpi
+      SignedObject Signer SimpleAttributeSet SimpleBeanInfo SimpleDateFormat SimpleDoc SimpleFormatter
+      SimpleTimeZone SimpleType SinglePixelPackedSampleModel SingleSelectionModel Size2DSyntax
+      SizeLimitExceededException SizeRequirements SizeSequence Skeleton SkeletonMismatchException
+      SkeletonNotFoundException SliderUI Socket SocketAddress SocketChannel SocketException SocketFactory
+      SocketHandler SocketImpl SocketImplFactory SocketOptions SocketPermission SocketSecurityException
+      SocketTimeoutException SoftBevelBorder SoftReference SortControl SortedMap SortedSet
+      SortingFocusTraversalPolicy SortKey SortResponseControl Soundbank SoundbankReader SoundbankResource
+      Source SourceDataLine SourceLocator SpinnerDateModel SpinnerListModel SpinnerModel SpinnerNumberModel
+      SpinnerUI SplitPaneUI Spring SpringLayout SQLData SQLException SQLInput SQLInputImpl SQLOutput
+      SQLOutputImpl SQLPermission SQLWarning SSLContext SSLContextSpi SSLEngine SSLEngineResult SSLException
+      SSLHandshakeException SSLKeyException SSLPeerUnverifiedException SSLPermission SSLProtocolException
+      SslRMIClientSocketFactory SslRMIServerSocketFactory SSLServerSocket SSLServerSocketFactory SSLSession
+      SSLSessionBindingEvent SSLSessionBindingListener SSLSessionContext SSLSocket SSLSocketFactory Stack
+      StackOverflowError StackTraceElement StandardMBean StartTlsRequest StartTlsResponse StateEdit
+      StateEditable StateFactory Statement StreamCorruptedException StreamHandler StreamPrintService
+      StreamPrintServiceFactory StreamResult StreamSource StreamTokenizer StrictMath String StringBuffer
+      StringBufferInputStream StringBuilder StringCharacterIterator StringContent
+      StringIndexOutOfBoundsException StringMonitor StringMonitorMBean StringReader StringRefAddr
+      StringSelection StringTokenizer StringValueExp StringWriter Stroke Struct Stub StubDelegate
+      StubNotFoundException Style StyleConstants StyleContext StyledDocument StyledEditorKit StyleSheet
+      Subject SubjectDelegationPermission SubjectDomainCombiner SupportedValuesAttribute SuppressWarnings
+      SwingConstants SwingPropertyChangeSupport SwingUtilities SyncFactory SyncFactoryException
+      SyncFailedException SynchronousQueue SyncProvider SyncProviderException SyncResolver SynthConstants
+      SynthContext Synthesizer SynthGraphicsUtils SynthLookAndFeel SynthPainter SynthStyle SynthStyleFactory
+      SysexMessage System SystemColor SystemFlavorMap TabableView TabbedPaneUI TabExpander TableCellEditor
+      TableCellRenderer TableColumn TableColumnModel TableColumnModelEvent TableColumnModelListener
+      TableHeaderUI TableModel TableModelEvent TableModelListener TableUI TableView TabSet TabStop TabularData
+      TabularDataSupport TabularType TagElement Target TargetDataLine TargetedNotification Templates
+      TemplatesHandler TextAction TextArea TextAttribute TextComponent TextEvent TextField TextHitInfo
+      TextInputCallback TextLayout TextListener TextMeasurer TextOutputCallback TextSyntax TextUI TexturePaint
+      Thread ThreadDeath ThreadFactory ThreadGroup ThreadInfo ThreadLocal ThreadMXBean ThreadPoolExecutor
+      Throwable Tie TileObserver Time TimeLimitExceededException TimeoutException Timer
+      TimerAlarmClockNotification TimerMBean TimerNotification TimerTask Timestamp TimeUnit TimeZone
+      TitledBorder ToolBarUI Toolkit ToolTipManager ToolTipUI TooManyListenersException Track
+      TransactionalWriter TransactionRequiredException TransactionRolledbackException Transferable
+      TransferHandler TransformAttribute Transformer TransformerConfigurationException TransformerException
+      TransformerFactory TransformerFactoryConfigurationError TransformerHandler Transmitter Transparency
+      TreeCellEditor TreeCellRenderer TreeExpansionEvent TreeExpansionListener TreeMap TreeModel
+      TreeModelEvent TreeModelListener TreeNode TreePath TreeSelectionEvent TreeSelectionListener
+      TreeSelectionModel TreeSet TreeUI TreeWillExpandListener TrustAnchor TrustManager TrustManagerFactory
+      TrustManagerFactorySpi Type TypeInfoProvider TypeNotPresentException Types TypeVariable UID UIDefaults
+      UIManager UIResource UndeclaredThrowableException UndoableEdit UndoableEditEvent UndoableEditListener
+      UndoableEditSupport UndoManager UnexpectedException UnicastRemoteObject UnknownError
+      UnknownFormatConversionException UnknownFormatFlagsException UnknownGroupException UnknownHostException
+      UnknownObjectException UnknownServiceException UnmappableCharacterException UnmarshalException
+      UnmodifiableClassException UnmodifiableSetException UnrecoverableEntryException
+      UnrecoverableKeyException Unreferenced UnresolvedAddressException UnresolvedPermission
+      UnsatisfiedLinkError UnsolicitedNotification UnsolicitedNotificationEvent
+      UnsolicitedNotificationListener UnsupportedAddressTypeException UnsupportedAudioFileException
+      UnsupportedCallbackException UnsupportedCharsetException UnsupportedClassVersionError
+      UnsupportedEncodingException UnsupportedFlavorException UnsupportedLookAndFeelException
+      UnsupportedOperationException URI URIException URIResolver URISyntax URISyntaxException URL
+      URLClassLoader URLConnection URLDecoder URLEncoder URLStreamHandler URLStreamHandlerFactory
+      UTFDataFormatException Util UtilDelegate Utilities UUID Validator ValidatorHandler ValueExp ValueHandler
+      ValueHandlerMultiFormat VariableHeightLayoutCache Vector VerifyError VetoableChangeListener
+      VetoableChangeListenerProxy VetoableChangeSupport View ViewFactory ViewportLayout ViewportUI
+      VirtualMachineError Visibility VMID VoiceStatus Void VolatileImage WeakHashMap WeakReference WebRowSet
+      WildcardType Window WindowAdapter WindowConstants WindowEvent WindowFocusListener WindowListener
+      WindowStateListener WrappedPlainView WritableByteChannel WritableRaster WritableRenderedImage
+      WriteAbortedException Writer X500Principal X500PrivateCredential X509Certificate X509CertSelector
+      X509CRL X509CRLEntry X509CRLSelector X509EncodedKeySpec X509ExtendedKeyManager X509Extension
+      X509KeyManager X509TrustManager XAConnection XADataSource XAException XAResource Xid XMLConstants
+      XMLDecoder XMLEncoder XMLFormatter XMLGregorianCalendar XMLParseException XmlReader XmlWriter XPath
+      XPathConstants XPathException XPathExpression XPathExpressionException XPathFactory
+      XPathFactoryConfigurationException XPathFunction XPathFunctionException XPathFunctionResolver
+      XPathVariableResolver ZipEntry ZipException ZipFile ZipInputStream ZipOutputStream ZoneView
+    ]
+    
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java_script-0.9.6.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,224 @@
+module CodeRay
+module Scanners
+
+  class JavaScript < Scanner
+
+    include Streamable
+
+    register_for :java_script
+    file_extension 'js'
+
+    # The actual JavaScript keywords.
+    KEYWORDS = %w[
+      break case catch continue default delete do else
+      finally for function if in instanceof new
+      return switch throw try typeof var void while with
+    ]
+    PREDEFINED_CONSTANTS = %w[
+      false null true undefined
+    ]
+    
+    MAGIC_VARIABLES = %w[ this arguments ]  # arguments was introduced in JavaScript 1.4
+    
+    KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[
+      case delete in instanceof new return throw typeof with
+    ]
+    
+    # Reserved for future use.
+    RESERVED_WORDS = %w[
+      abstract boolean byte char class debugger double enum export extends
+      final float goto implements import int interface long native package
+      private protected public short static super synchronized throws transient
+      volatile
+    ]
+    
+    IDENT_KIND = WordList.new(:ident).
+      add(RESERVED_WORDS, :reserved).
+      add(PREDEFINED_CONSTANTS, :pre_constant).
+      add(MAGIC_VARIABLES, :local_variable).
+      add(KEYWORDS, :keyword)
+
+    ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
+    REGEXP_ESCAPE =  / [bBdDsSwW] /x
+    STRING_CONTENT_PATTERN = {
+      "'" => /[^\\']+/,
+      '"' => /[^\\"]+/,
+      '/' => /[^\\\/]+/,
+    }
+    KEY_CHECK_PATTERN = {
+      "'" => / [^\\']* (?: \\.? [^\\']* )* '? \s* : /x,
+      '"' => / [^\\"]* (?: \\.? [^\\"]* )* "? \s* : /x,
+    }
+
+    def scan_tokens tokens, options
+
+      state = :initial
+      string_delimiter = nil
+      value_expected = true
+      key_expected = false
+      function_expected = false
+
+      until eos?
+
+        kind = nil
+        match = nil
+        
+        case state
+
+        when :initial
+
+          if match = scan(/ \s+ | \\\n /x)
+            value_expected = true if !value_expected && match.index(?\n)
+            tokens << [match, :space]
+            next
+
+          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
+            value_expected = true
+            kind = :comment
+
+          elsif check(/\.?\d/)
+            key_expected = value_expected = false
+            if scan(/0[xX][0-9A-Fa-f]+/)
+              kind = :hex
+            elsif scan(/(?>0[0-7]+)(?![89.eEfF])/)
+              kind = :oct
+            elsif scan(/\d+[fF]|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
+              kind = :float
+            elsif scan(/\d+/)
+              kind = :integer
+            end
+          
+          elsif value_expected && match = scan(/<([[:alpha:]]\w*) (?: [^\/>]*\/> | .*?<\/\1>)/xim)
+            # FIXME: scan over nested tags
+            xml_scanner.tokenize match
+            value_expected = false
+            next
+            
+          elsif match = scan(/ [-+*=<>?:;,!&^|(\[{~%]+ | \.(?!\d) /x)
+            value_expected = true
+            last_operator = match[-1]
+            key_expected = (last_operator == ?{) || (last_operator == ?,)
+            function_expected = false
+            kind = :operator
+
+          elsif scan(/ [)\]}]+ /x)
+            function_expected = key_expected = value_expected = false
+            kind = :operator
+
+          elsif match = scan(/ [$a-zA-Z_][A-Za-z_0-9$]* /x)
+            kind = IDENT_KIND[match]
+            value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match]
+            # TODO: labels
+            if kind == :ident
+              if match.index(?$)  # $ allowed inside an identifier
+                kind = :predefined
+              elsif function_expected
+                kind = :function
+              elsif check(/\s*[=:]\s*function\b/)
+                kind = :function
+              elsif key_expected && check(/\s*:/)
+                kind = :key
+              end
+            end
+            function_expected = (kind == :keyword) && (match == 'function')
+            key_expected = false
+          
+          elsif match = scan(/["']/)
+            if key_expected && check(KEY_CHECK_PATTERN[match])
+              state = :key
+            else
+              state = :string
+            end
+            tokens << [:open, state]
+            string_delimiter = match
+            kind = :delimiter
+
+          elsif value_expected && (match = scan(/\/(?=\S)/))
+            tokens << [:open, :regexp]
+            state = :regexp
+            string_delimiter = '/'
+            kind = :delimiter
+
+          elsif scan(/ \/ /x)
+            value_expected = true
+            key_expected = false
+            kind = :operator
+
+          else
+            getch
+            kind = :error
+
+          end
+
+        when :string, :regexp, :key
+          if scan(STRING_CONTENT_PATTERN[string_delimiter])
+            kind = :content
+          elsif match = scan(/["'\/]/)
+            tokens << [match, :delimiter]
+            if state == :regexp
+              modifiers = scan(/[gim]+/)
+              tokens << [modifiers, :modifier] if modifiers && !modifiers.empty?
+            end
+            tokens << [:close, state]
+            string_delimiter = nil
+            key_expected = value_expected = false
+            state = :initial
+            next
+          elsif state != :regexp && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))
+            if string_delimiter == "'" && !(match == "\\\\" || match == "\\'")
+              kind = :content
+            else
+              kind = :char
+            end
+          elsif state == :regexp && scan(/ \\ (?: #{ESCAPE} | #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+            kind = :char
+          elsif scan(/\\./m)
+            kind = :content
+          elsif scan(/ \\ | $ /x)
+            tokens << [:close, state]
+            kind = :error
+            key_expected = value_expected = false
+            state = :initial
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+          end
+
+        else
+          raise_inspect 'Unknown state', tokens
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+        
+        tokens << [match, kind]
+
+      end
+
+      if [:string, :regexp].include? state
+        tokens << [:close, state]
+      end
+
+      tokens
+    end
+
+  protected
+
+    def reset_instance
+      super
+      @xml_scanner.reset if defined? @xml_scanner
+    end
+
+    def xml_scanner
+      @xml_scanner ||= CodeRay.scanner :xml, :tokens => @tokens, :keep_tokens => true, :keep_state => false
+    end
+
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/java_script.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,224 @@
+module CodeRay
+module Scanners
+
+  class JavaScript < Scanner
+
+    include Streamable
+
+    register_for :java_script
+    file_extension 'js'
+
+    # The actual JavaScript keywords.
+    KEYWORDS = %w[
+      break case catch continue default delete do else
+      finally for function if in instanceof new
+      return switch throw try typeof var void while with
+    ]
+    PREDEFINED_CONSTANTS = %w[
+      false null true undefined
+    ]
+    
+    MAGIC_VARIABLES = %w[ this arguments ]  # arguments was introduced in JavaScript 1.4
+    
+    KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[
+      case delete in instanceof new return throw typeof with
+    ]
+    
+    # Reserved for future use.
+    RESERVED_WORDS = %w[
+      abstract boolean byte char class debugger double enum export extends
+      final float goto implements import int interface long native package
+      private protected public short static super synchronized throws transient
+      volatile
+    ]
+    
+    IDENT_KIND = WordList.new(:ident).
+      add(RESERVED_WORDS, :reserved).
+      add(PREDEFINED_CONSTANTS, :pre_constant).
+      add(MAGIC_VARIABLES, :local_variable).
+      add(KEYWORDS, :keyword)
+
+    ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
+    REGEXP_ESCAPE =  / [bBdDsSwW] /x
+    STRING_CONTENT_PATTERN = {
+      "'" => /[^\\']+/,
+      '"' => /[^\\"]+/,
+      '/' => /[^\\\/]+/,
+    }
+    KEY_CHECK_PATTERN = {
+      "'" => / (?> [^\\']* (?: \\. [^\\']* )* ) ' \s* : /mx,
+      '"' => / (?> [^\\"]* (?: \\. [^\\"]* )* ) " \s* : /mx,
+    }
+
+    def scan_tokens tokens, options
+
+      state = :initial
+      string_delimiter = nil
+      value_expected = true
+      key_expected = false
+      function_expected = false
+
+      until eos?
+
+        kind = nil
+        match = nil
+        
+        case state
+
+        when :initial
+
+          if match = scan(/ \s+ | \\\n /x)
+            value_expected = true if !value_expected && match.index(?\n)
+            tokens << [match, :space]
+            next
+
+          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
+            value_expected = true
+            kind = :comment
+
+          elsif check(/\.?\d/)
+            key_expected = value_expected = false
+            if scan(/0[xX][0-9A-Fa-f]+/)
+              kind = :hex
+            elsif scan(/(?>0[0-7]+)(?![89.eEfF])/)
+              kind = :oct
+            elsif scan(/\d+[fF]|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
+              kind = :float
+            elsif scan(/\d+/)
+              kind = :integer
+            end
+          
+          elsif value_expected && match = scan(/<([[:alpha:]]\w*) (?: [^\/>]*\/> | .*?<\/\1>)/xim)
+            # FIXME: scan over nested tags
+            xml_scanner.tokenize match
+            value_expected = false
+            next
+            
+          elsif match = scan(/ [-+*=<>?:;,!&^|(\[{~%]+ | \.(?!\d) /x)
+            value_expected = true
+            last_operator = match[-1]
+            key_expected = (last_operator == ?{) || (last_operator == ?,)
+            function_expected = false
+            kind = :operator
+
+          elsif scan(/ [)\]}]+ /x)
+            function_expected = key_expected = value_expected = false
+            kind = :operator
+
+          elsif match = scan(/ [$a-zA-Z_][A-Za-z_0-9$]* /x)
+            kind = IDENT_KIND[match]
+            value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match]
+            # TODO: labels
+            if kind == :ident
+              if match.index(?$)  # $ allowed inside an identifier
+                kind = :predefined
+              elsif function_expected
+                kind = :function
+              elsif check(/\s*[=:]\s*function\b/)
+                kind = :function
+              elsif key_expected && check(/\s*:/)
+                kind = :key
+              end
+            end
+            function_expected = (kind == :keyword) && (match == 'function')
+            key_expected = false
+          
+          elsif match = scan(/["']/)
+            if key_expected && check(KEY_CHECK_PATTERN[match])
+              state = :key
+            else
+              state = :string
+            end
+            tokens << [:open, state]
+            string_delimiter = match
+            kind = :delimiter
+
+          elsif value_expected && (match = scan(/\/(?=\S)/))
+            tokens << [:open, :regexp]
+            state = :regexp
+            string_delimiter = '/'
+            kind = :delimiter
+
+          elsif scan(/ \/ /x)
+            value_expected = true
+            key_expected = false
+            kind = :operator
+
+          else
+            getch
+            kind = :error
+
+          end
+
+        when :string, :regexp, :key
+          if scan(STRING_CONTENT_PATTERN[string_delimiter])
+            kind = :content
+          elsif match = scan(/["'\/]/)
+            tokens << [match, :delimiter]
+            if state == :regexp
+              modifiers = scan(/[gim]+/)
+              tokens << [modifiers, :modifier] if modifiers && !modifiers.empty?
+            end
+            tokens << [:close, state]
+            string_delimiter = nil
+            key_expected = value_expected = false
+            state = :initial
+            next
+          elsif state != :regexp && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))
+            if string_delimiter == "'" && !(match == "\\\\" || match == "\\'")
+              kind = :content
+            else
+              kind = :char
+            end
+          elsif state == :regexp && scan(/ \\ (?: #{ESCAPE} | #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+            kind = :char
+          elsif scan(/\\./m)
+            kind = :content
+          elsif scan(/ \\ | $ /x)
+            tokens << [:close, state]
+            kind = :error
+            key_expected = value_expected = false
+            state = :initial
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+          end
+
+        else
+          raise_inspect 'Unknown state', tokens
+
+        end
+
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+        
+        tokens << [match, kind]
+
+      end
+
+      if [:string, :regexp].include? state
+        tokens << [:close, state]
+      end
+
+      tokens
+    end
+
+  protected
+
+    def reset_instance
+      super
+      @xml_scanner.reset if defined? @xml_scanner
+    end
+
+    def xml_scanner
+      @xml_scanner ||= CodeRay.scanner :xml, :tokens => @tokens, :keep_tokens => true, :keep_state => false
+    end
+
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/json.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,108 @@
+module CodeRay
+module Scanners
+  
+  class JSON < Scanner
+    
+    include Streamable
+    
+    register_for :json
+    file_extension 'json'
+    
+    KINDS_NOT_LOC = [
+      :float, :char, :content, :delimiter,
+      :error, :integer, :operator, :value,
+    ]
+    
+    ESCAPE = / [bfnrt\\"\/] /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} /x
+    
+    def scan_tokens tokens, options
+      
+      state = :initial
+      stack = []
+      key_expected = false
+      
+      until eos?
+        
+        kind = nil
+        match = nil
+        
+        case state
+        
+        when :initial
+          if match = scan(/ \s+ | \\\n /x)
+            tokens << [match, :space]
+            next
+          elsif match = scan(/ [:,\[{\]}] /x)
+            kind = :operator
+            case match
+            when '{' then stack << :object; key_expected = true
+            when '[' then stack << :array
+            when ':' then key_expected = false
+            when ',' then key_expected = true if stack.last == :object
+            when '}', ']' then stack.pop  # no error recovery, but works for valid JSON
+            end
+          elsif match = scan(/ true | false | null /x)
+            kind = :value
+          elsif match = scan(/-?(?:0|[1-9]\d*)/)
+            kind = :integer
+            if scan(/\.\d+(?:[eE][-+]?\d+)?|[eE][-+]?\d+/)
+              match << matched
+              kind = :float
+            end
+          elsif match = scan(/"/)
+            state = key_expected ? :key : :string
+            tokens << [:open, state]
+            kind = :delimiter
+          else
+            getch
+            kind = :error
+          end
+          
+        when :string, :key
+          if scan(/[^\\"]+/)
+            kind = :content
+          elsif scan(/"/)
+            tokens << ['"', :delimiter]
+            tokens << [:close, state]
+            state = :initial
+            next
+          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+            kind = :char
+          elsif scan(/\\./m)
+            kind = :content
+          elsif scan(/ \\ | $ /x)
+            tokens << [:close, state]
+            kind = :error
+            state = :initial
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+          end
+          
+        else
+          raise_inspect 'Unknown state', tokens
+          
+        end
+        
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+        end
+        raise_inspect 'Empty token', tokens unless match
+        
+        tokens << [match, kind]
+        
+      end
+      
+      if [:string, :key].include? state
+        tokens << [:close, state]
+      end
+      
+      tokens
+    end
+    
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/nitro_xhtml.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,136 @@
+module CodeRay
+module Scanners
+
+  load :html
+  load :ruby
+
+  # Nitro XHTML Scanner
+  class NitroXHTML < Scanner
+
+    include Streamable
+    register_for :nitro_xhtml
+    file_extension :xhtml
+    title 'Nitro XHTML'
+
+    KINDS_NOT_LOC = HTML::KINDS_NOT_LOC
+    
+    NITRO_RUBY_BLOCK = /
+      <\?r
+      (?>
+        [^\?]*
+        (?> \?(?!>) [^\?]* )*
+      )
+      (?: \?> )?
+    |
+      <ruby>
+      (?>
+        [^<]*
+        (?> <(?!\/ruby>) [^<]* )*
+      )
+      (?: <\/ruby> )?
+    |
+      <%
+      (?>
+        [^%]*
+        (?> %(?!>) [^%]* )*
+      )
+      (?: %> )?
+    /mx
+
+    NITRO_VALUE_BLOCK = /
+      \#
+      (?:
+        \{
+        [^{}]*
+        (?>
+          \{ [^}]* \}
+          (?> [^{}]* )
+        )*
+        \}?
+      | \| [^|]* \|?
+      | \( [^)]* \)?
+      | \[ [^\]]* \]?
+      | \\ [^\\]* \\?
+      )
+    /x
+
+    NITRO_ENTITY = /
+      % (?: \#\d+ | \w+ ) ;
+    /
+
+    START_OF_RUBY = /
+      (?=[<\#%])
+      < (?: \?r | % | ruby> )
+    | \# [{(|]
+    | % (?: \#\d+ | \w+ ) ;
+    /x
+
+    CLOSING_PAREN = Hash.new do |h, p|
+      h[p] = p
+    end.update( {
+      '(' => ')',
+      '[' => ']',
+      '{' => '}',
+    } )
+
+  private
+
+    def setup
+      @ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true
+      @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true
+    end
+
+    def reset_instance
+      super
+      @html_scanner.reset
+    end
+
+    def scan_tokens tokens, options
+
+      until eos?
+
+        if (match = scan_until(/(?=#{START_OF_RUBY})/o) || scan_until(/\z/)) and not match.empty?
+          @html_scanner.tokenize match
+
+        elsif match = scan(/#{NITRO_VALUE_BLOCK}/o)
+          start_tag = match[0,2]
+          delimiter = CLOSING_PAREN[start_tag[1,1]]
+          end_tag = match[-1,1] == delimiter ? delimiter : ''
+          tokens << [:open, :inline]
+          tokens << [start_tag, :inline_delimiter]
+          code = match[start_tag.size .. -1 - end_tag.size]
+          @ruby_scanner.tokenize code
+          tokens << [end_tag, :inline_delimiter] unless end_tag.empty?
+          tokens << [:close, :inline]
+
+        elsif match = scan(/#{NITRO_RUBY_BLOCK}/o)
+          start_tag = '<?r'
+          end_tag = match[-2,2] == '?>' ? '?>' : ''
+          tokens << [:open, :inline]
+          tokens << [start_tag, :inline_delimiter]
+          code = match[start_tag.size .. -(end_tag.size)-1]
+          @ruby_scanner.tokenize code
+          tokens << [end_tag, :inline_delimiter] unless end_tag.empty?
+          tokens << [:close, :inline]
+
+        elsif entity = scan(/#{NITRO_ENTITY}/o)
+          tokens << [entity, :entity]
+        
+        elsif scan(/%/)
+          tokens << [matched, :error]
+
+        else
+          raise_inspect 'else-case reached!', tokens
+          
+        end
+
+      end
+
+      tokens
+
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/php.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,533 @@
+module CodeRay
+module Scanners
+  
+  load :html
+  
+  # Original by Stefan Walk.
+  class PHP < Scanner
+    
+    register_for :php
+    file_extension 'php'
+    
+    KINDS_NOT_LOC = HTML::KINDS_NOT_LOC
+    
+    def setup
+      @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true
+    end
+    
+    def reset_instance
+      super
+      @html_scanner.reset
+    end
+    
+    module Words
+      
+      # according to http://www.php.net/manual/en/reserved.keywords.php
+      KEYWORDS = %w[
+        abstract and array as break case catch class clone const continue declare default do else elseif
+        enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global
+        goto if implements interface instanceof namespace new or private protected public static switch
+        throw try use var while xor
+        cfunction old_function
+      ]
+      
+      TYPES = %w[ int integer float double bool boolean string array object resource ]
+      
+      LANGUAGE_CONSTRUCTS = %w[
+        die echo empty exit eval include include_once isset list
+        require require_once return print unset
+      ]
+      
+      CLASSES = %w[ Directory stdClass __PHP_Incomplete_Class exception php_user_filter Closure ]
+      
+      # according to http://php.net/quickref.php on 2009-04-21;
+      # all functions with _ excluded (module functions) and selected additional functions
+      BUILTIN_FUNCTIONS = %w[
+        abs acos acosh addcslashes addslashes aggregate array arsort ascii2ebcdic asin asinh asort assert atan atan2
+        atanh basename bcadd bccomp bcdiv bcmod bcmul bcpow bcpowmod bcscale bcsqrt bcsub bin2hex bindec
+        bindtextdomain bzclose bzcompress bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite
+        calculhmac ceil chdir checkdate checkdnsrr chgrp chmod chop chown chr chroot clearstatcache closedir closelog
+        compact constant copy cos cosh count crc32 crypt current date dcgettext dcngettext deaggregate decbin dechex
+        decoct define defined deg2rad delete dgettext die dirname diskfreespace dl dngettext doubleval each
+        ebcdic2ascii echo empty end ereg eregi escapeshellarg escapeshellcmd eval exec exit exp explode expm1 extract
+        fclose feof fflush fgetc fgetcsv fgets fgetss file fileatime filectime filegroup fileinode filemtime fileowner
+        fileperms filepro filesize filetype floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv
+        fputs fread frenchtojd fscanf fseek fsockopen fstat ftell ftok ftruncate fwrite getallheaders getcwd getdate
+        getenv gethostbyaddr gethostbyname gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid
+        getmyuid getopt getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext
+        gettimeofday gettype glob gmdate gmmktime gmstrftime gregoriantojd gzclose gzcompress gzdecode gzdeflate
+        gzencode gzeof gzfile gzgetc gzgets gzgetss gzinflate gzopen gzpassthru gzputs gzread gzrewind gzseek gztell
+        gzuncompress gzwrite hash header hebrev hebrevc hexdec htmlentities htmlspecialchars hypot iconv idate
+        implode include intval ip2long iptcembed iptcparse isset
+        jddayofweek jdmonthname jdtofrench jdtogregorian jdtojewish jdtojulian jdtounix jewishtojd join jpeg2wbmp
+        juliantojd key krsort ksort lcfirst lchgrp lchown levenshtein link linkinfo list localeconv localtime log
+        log10 log1p long2ip lstat ltrim mail main max md5 metaphone mhash microtime min mkdir mktime msql natcasesort
+        natsort next ngettext nl2br nthmac octdec opendir openlog
+        ord overload pack passthru pathinfo pclose pfsockopen phpcredits phpinfo phpversion pi png2wbmp popen pos pow
+        prev print printf putenv quotemeta rad2deg rand range rawurldecode rawurlencode readdir readfile readgzfile
+        readline readlink realpath recode rename require reset rewind rewinddir rmdir round rsort rtrim scandir
+        serialize setcookie setlocale setrawcookie settype sha1 shuffle signeurlpaiement sin sinh sizeof sleep snmpget
+        snmpgetnext snmprealwalk snmpset snmpwalk snmpwalkoid sort soundex split spliti sprintf sqrt srand sscanf stat
+        strcasecmp strchr strcmp strcoll strcspn strftime stripcslashes stripos stripslashes stristr strlen
+        strnatcasecmp strnatcmp strncasecmp strncmp strpbrk strpos strptime strrchr strrev strripos strrpos strspn
+        strstr strtok strtolower strtotime strtoupper strtr strval substr symlink syslog system tan tanh tempnam
+        textdomain time tmpfile touch trim uasort ucfirst ucwords uksort umask uniqid unixtojd unlink unpack
+        unserialize unset urldecode urlencode usleep usort vfprintf virtual vprintf vsprintf wordwrap
+        array_change_key_case array_chunk array_combine array_count_values array_diff array_diff_assoc
+        array_diff_key array_diff_uassoc array_diff_ukey array_fill array_fill_keys array_filter array_flip
+        array_intersect array_intersect_assoc array_intersect_key array_intersect_uassoc array_intersect_ukey
+        array_key_exists array_keys array_map array_merge array_merge_recursive array_multisort array_pad
+        array_pop array_product array_push array_rand array_reduce array_reverse array_search array_shift
+        array_slice array_splice array_sum array_udiff array_udiff_assoc array_udiff_uassoc array_uintersect
+        array_uintersect_assoc array_uintersect_uassoc array_unique array_unshift array_values array_walk
+        array_walk_recursive
+        assert_options base_convert base64_decode base64_encode
+        chunk_split class_exists class_implements class_parents
+        count_chars debug_backtrace debug_print_backtrace debug_zval_dump
+        error_get_last error_log error_reporting extension_loaded
+        file_exists file_get_contents file_put_contents load_file
+        func_get_arg func_get_args func_num_args function_exists
+        get_browser get_called_class get_cfg_var get_class get_class_methods get_class_vars
+        get_current_user get_declared_classes get_declared_interfaces get_defined_constants
+        get_defined_functions get_defined_vars get_extension_funcs get_headers get_html_translation_table
+        get_include_path get_included_files get_loaded_extensions get_magic_quotes_gpc get_magic_quotes_runtime
+        get_meta_tags get_object_vars get_parent_class get_required_filesget_resource_type
+        gc_collect_cycles gc_disable gc_enable gc_enabled
+        halt_compiler headers_list headers_sent highlight_file highlight_string
+        html_entity_decode htmlspecialchars_decode
+        in_array include_once inclued_get_data
+        is_a is_array is_binary is_bool is_buffer is_callable is_dir is_double is_executable is_file is_finite
+        is_float is_infinite is_int is_integer is_link is_long is_nan is_null is_numeric is_object is_readable
+        is_real is_resource is_scalar is_soap_fault is_string is_subclass_of is_unicode is_uploaded_file
+        is_writable is_writeable
+        locale_get_default locale_set_default
+        number_format override_function parse_str parse_url
+        php_check_syntax php_ini_loaded_file php_ini_scanned_files php_logo_guid php_sapi_name
+        php_strip_whitespace php_uname
+        preg_filter preg_grep preg_last_error preg_match preg_match_all preg_quote preg_replace
+        preg_replace_callback preg_split print_r
+        require_once register_shutdown_function register_tick_function
+        set_error_handler set_exception_handler set_file_buffer set_include_path
+        set_magic_quotes_runtime set_time_limit shell_exec
+        str_getcsv str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count
+        strip_tags substr_compare substr_count substr_replace
+        time_nanosleep time_sleep_until
+        token_get_all token_name trigger_error
+        unregister_tick_function use_soap_error_handler user_error
+        utf8_decode utf8_encode var_dump var_export
+        version_compare
+        zend_logo_guid zend_thread_id zend_version
+        create_function call_user_func_array
+        posix_access posix_ctermid posix_get_last_error posix_getcwd posix_getegid
+        posix_geteuid posix_getgid posix_getgrgid posix_getgrnam posix_getgroups
+        posix_getlogin posix_getpgid posix_getpgrp posix_getpid posix_getppid
+        posix_getpwnam posix_getpwuid posix_getrlimit posix_getsid posix_getuid
+        posix_initgroups posix_isatty posix_kill posix_mkfifo posix_mknod
+        posix_setegid posix_seteuid posix_setgid posix_setpgid posix_setsid
+        posix_setuid posix_strerror posix_times posix_ttyname posix_uname
+        pcntl_alarm pcntl_exec pcntl_fork pcntl_getpriority pcntl_setpriority
+        pcntl_signal pcntl_signal_dispatch pcntl_sigprocmask pcntl_sigtimedwait
+        pcntl_sigwaitinfo pcntl_wait pcntl_waitpid pcntl_wexitstatus pcntl_wifexited
+        pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig
+      ]
+      # TODO: more built-in PHP functions?
+      
+      EXCEPTIONS = %w[
+        E_ERROR E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING
+        E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_DEPRECATED E_USER_DEPRECATED E_ALL E_STRICT
+      ]
+      
+      CONSTANTS = %w[
+        null true false self parent
+        __LINE__ __DIR__ __FILE__ __LINE__
+        __CLASS__ __NAMESPACE__ __METHOD__ __FUNCTION__
+        PHP_VERSION PHP_MAJOR_VERSION PHP_MINOR_VERSION PHP_RELEASE_VERSION PHP_VERSION_ID PHP_EXTRA_VERSION PHP_ZTS
+        PHP_DEBUG PHP_MAXPATHLEN PHP_OS PHP_SAPI PHP_EOL PHP_INT_MAX PHP_INT_SIZE DEFAULT_INCLUDE_PATH
+        PEAR_INSTALL_DIR PEAR_EXTENSION_DIR PHP_EXTENSION_DIR PHP_PREFIX PHP_BINDIR PHP_LIBDIR PHP_DATADIR
+        PHP_SYSCONFDIR PHP_LOCALSTATEDIR PHP_CONFIG_FILE_PATH PHP_CONFIG_FILE_SCAN_DIR PHP_SHLIB_SUFFIX
+        PHP_OUTPUT_HANDLER_START PHP_OUTPUT_HANDLER_CONT PHP_OUTPUT_HANDLER_END
+        __COMPILER_HALT_OFFSET__
+        EXTR_OVERWRITE EXTR_SKIP EXTR_PREFIX_SAME EXTR_PREFIX_ALL EXTR_PREFIX_INVALID EXTR_PREFIX_IF_EXISTS
+        EXTR_IF_EXISTS SORT_ASC SORT_DESC SORT_REGULAR SORT_NUMERIC SORT_STRING CASE_LOWER CASE_UPPER COUNT_NORMAL
+        COUNT_RECURSIVE ASSERT_ACTIVE ASSERT_CALLBACK ASSERT_BAIL ASSERT_WARNING ASSERT_QUIET_EVAL CONNECTION_ABORTED
+        CONNECTION_NORMAL CONNECTION_TIMEOUT INI_USER INI_PERDIR INI_SYSTEM INI_ALL M_E M_LOG2E M_LOG10E M_LN2 M_LN10
+        M_PI M_PI_2 M_PI_4 M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2 CRYPT_SALT_LENGTH CRYPT_STD_DES CRYPT_EXT_DES
+        CRYPT_MD5 CRYPT_BLOWFISH DIRECTORY_SEPARATOR SEEK_SET SEEK_CUR SEEK_END LOCK_SH LOCK_EX LOCK_UN LOCK_NB
+        HTML_SPECIALCHARS HTML_ENTITIES ENT_COMPAT ENT_QUOTES ENT_NOQUOTES INFO_GENERAL INFO_CREDITS
+        INFO_CONFIGURATION INFO_MODULES INFO_ENVIRONMENT INFO_VARIABLES INFO_LICENSE INFO_ALL CREDITS_GROUP
+        CREDITS_GENERAL CREDITS_SAPI CREDITS_MODULES CREDITS_DOCS CREDITS_FULLPAGE CREDITS_QA CREDITS_ALL STR_PAD_LEFT
+        STR_PAD_RIGHT STR_PAD_BOTH PATHINFO_DIRNAME PATHINFO_BASENAME PATHINFO_EXTENSION PATH_SEPARATOR CHAR_MAX
+        LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_ALL LC_MESSAGES ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5
+        ABDAY_6 ABDAY_7 DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7 ABMON_1 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6
+        ABMON_7 ABMON_8 ABMON_9 ABMON_10 ABMON_11 ABMON_12 MON_1 MON_2 MON_3 MON_4 MON_5 MON_6 MON_7 MON_8 MON_9
+        MON_10 MON_11 MON_12 AM_STR PM_STR D_T_FMT D_FMT T_FMT T_FMT_AMPM ERA ERA_YEAR ERA_D_T_FMT ERA_D_FMT ERA_T_FMT
+        ALT_DIGITS INT_CURR_SYMBOL CURRENCY_SYMBOL CRNCYSTR MON_DECIMAL_POINT MON_THOUSANDS_SEP MON_GROUPING
+        POSITIVE_SIGN NEGATIVE_SIGN INT_FRAC_DIGITS FRAC_DIGITS P_CS_PRECEDES P_SEP_BY_SPACE N_CS_PRECEDES
+        N_SEP_BY_SPACE P_SIGN_POSN N_SIGN_POSN DECIMAL_POINT RADIXCHAR THOUSANDS_SEP THOUSEP GROUPING YESEXPR NOEXPR
+        YESSTR NOSTR CODESET LOG_EMERG LOG_ALERT LOG_CRIT LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_DEBUG LOG_KERN
+        LOG_USER LOG_MAIL LOG_DAEMON LOG_AUTH LOG_SYSLOG LOG_LPR LOG_NEWS LOG_UUCP LOG_CRON LOG_AUTHPRIV LOG_LOCAL0
+        LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_PID LOG_CONS LOG_ODELAY
+        LOG_NDELAY LOG_NOWAIT LOG_PERROR
+      ]
+      
+      PREDEFINED = %w[
+        $GLOBALS $_SERVER $_GET $_POST $_FILES $_REQUEST $_SESSION $_ENV
+        $_COOKIE $php_errormsg $HTTP_RAW_POST_DATA $http_response_header
+        $argc $argv
+      ]
+      
+      IDENT_KIND = CaseIgnoringWordList.new(:ident).
+        add(KEYWORDS, :reserved).
+        add(TYPES, :pre_type).
+        add(LANGUAGE_CONSTRUCTS, :reserved).
+        add(BUILTIN_FUNCTIONS, :predefined).
+        add(CLASSES, :pre_constant).
+        add(EXCEPTIONS, :exception).
+        add(CONSTANTS, :pre_constant)
+      
+      VARIABLE_KIND = WordList.new(:local_variable).
+        add(PREDEFINED, :predefined)
+    end
+    
+    module RE
+      
+      PHP_START = /
+        <script\s+[^>]*?language\s*=\s*"php"[^>]*?> |
+        <script\s+[^>]*?language\s*=\s*'php'[^>]*?> |
+        <\?php\d? |
+        <\?(?!xml)
+      /xi
+      
+      PHP_END = %r!
+        </script> |
+        \?>
+      !xi
+      
+      HTML_INDICATOR = /<!DOCTYPE html|<(?:html|body|div|p)[> ]/i
+      
+      IDENTIFIER = /[a-z_\x7f-\xFF][a-z0-9_\x7f-\xFF]*/i
+      VARIABLE = /\$#{IDENTIFIER}/
+      
+      OPERATOR = /
+        \.(?!\d)=? |      # dot that is not decimal point, string concatenation
+        && | \|\| |       # logic
+        :: | -> | => |    # scope, member, dictionary
+        \\(?!\n) |        # namespace
+        \+\+ | -- |       # increment, decrement
+        [,;?:()\[\]{}] |  # simple delimiters
+        [-+*\/%&|^]=? |   # ordinary math, binary logic, assignment shortcuts
+        [~$] |            # whatever
+        =& |              # reference assignment
+        [=!]=?=? | <> |   # comparison and assignment
+        <<=? | >>=? | [<>]=?  # comparison and shift
+      /x
+      
+    end
+    
+    def scan_tokens tokens, options
+      if string.respond_to?(:encoding)
+        unless string.encoding == Encoding::ASCII_8BIT
+          self.string = string.encode Encoding::ASCII_8BIT,
+            :invalid => :replace, :undef => :replace, :replace => '?'
+        end
+      end
+      
+      if check(RE::PHP_START) ||  # starts with <?
+       (match?(/\s*<\S/) && exist?(RE::PHP_START)) || # starts with tag and contains <?
+       exist?(RE::HTML_INDICATOR) ||
+       check(/.{1,100}#{RE::PHP_START}/om)  # PHP start after max 100 chars
+        # is HTML with embedded PHP, so start with HTML
+        states = [:initial]
+      else
+        # is just PHP, so start with PHP surrounded by HTML
+        states = [:initial, :php]
+      end
+      
+      label_expected = true
+      case_expected = false
+      
+      heredoc_delimiter = nil
+      delimiter = nil
+      modifier = nil
+      
+      until eos?
+        
+        match = nil
+        kind = nil
+        
+        case states.last
+        
+        when :initial  # HTML
+          if scan RE::PHP_START
+            kind = :inline_delimiter
+            label_expected = true
+            states << :php
+          else
+            match = scan_until(/(?=#{RE::PHP_START})/o) || scan_until(/\z/)
+            @html_scanner.tokenize match unless match.empty?
+            next
+          end
+        
+        when :php
+          if match = scan(/\s+/)
+            tokens << [match, :space]
+            next
+          
+          elsif scan(%r! (?m: \/\* (?: .*? \*\/ | .* ) ) | (?://|\#) .*? (?=#{RE::PHP_END}|$) !xo)
+            kind = :comment
+          
+          elsif match = scan(RE::IDENTIFIER)
+            kind = Words::IDENT_KIND[match]
+            if kind == :ident && label_expected && check(/:(?!:)/)
+              kind = :label
+              label_expected = true
+            else
+              label_expected = false
+              if kind == :ident && match =~ /^[A-Z]/
+                kind = :constant
+              elsif kind == :reserved
+                case match
+                when 'class'
+                  states << :class_expected
+                when 'function'
+                  states << :function_expected
+                when 'case', 'default'
+                  case_expected = true
+                end
+              elsif match == 'b' && check(/['"]/)  # binary string literal
+                modifier = match
+                next
+              end
+            end
+          
+          elsif scan(/(?:\d+\.\d*|\d*\.\d+)(?:e[-+]?\d+)?|\d+e[-+]?\d+/i)
+            label_expected = false
+            kind = :float
+          
+          elsif scan(/0x[0-9a-fA-F]+/)
+            label_expected = false
+            kind = :hex
+          
+          elsif scan(/\d+/)
+            label_expected = false
+            kind = :integer
+          
+          elsif scan(/'/)
+            tokens << [:open, :string]
+            if modifier
+              tokens << [modifier, :modifier]
+              modifier = nil
+            end
+            kind = :delimiter
+            states.push :sqstring
+          
+          elsif match = scan(/["`]/)
+            tokens << [:open, :string]
+            if modifier
+              tokens << [modifier, :modifier]
+              modifier = nil
+            end
+            delimiter = match
+            kind = :delimiter
+            states.push :dqstring
+          
+          elsif match = scan(RE::VARIABLE)
+            label_expected = false
+            kind = Words::VARIABLE_KIND[match]
+          
+          elsif scan(/\{/)
+            kind = :operator
+            label_expected = true
+            states.push :php
+          
+          elsif scan(/\}/)
+            if states.size == 1
+              kind = :error
+            else
+              states.pop
+              if states.last.is_a?(::Array)
+                delimiter = states.last[1]
+                states[-1] = states.last[0]
+                tokens << [matched, :delimiter]
+                tokens << [:close, :inline]
+                next
+              else
+                kind = :operator
+                label_expected = true
+              end
+            end
+          
+          elsif scan(/@/)
+            label_expected = false
+            kind = :exception
+          
+          elsif scan RE::PHP_END
+            kind = :inline_delimiter
+            states = [:initial]
+          
+          elsif match = scan(/<<<(?:(#{RE::IDENTIFIER})|"(#{RE::IDENTIFIER})"|'(#{RE::IDENTIFIER})')/o)
+            tokens << [:open, :string]
+            warn 'heredoc in heredoc?' if heredoc_delimiter
+            heredoc_delimiter = Regexp.escape(self[1] || self[2] || self[3])
+            kind = :delimiter
+            states.push self[3] ? :sqstring : :dqstring
+            heredoc_delimiter = /#{heredoc_delimiter}(?=;?$)/
+          
+          elsif match = scan(/#{RE::OPERATOR}/o)
+            label_expected = match == ';'
+            if case_expected
+              label_expected = true if match == ':'
+              case_expected = false
+            end
+            kind = :operator
+          
+          else
+            getch
+            kind = :error
+          
+          end
+        
+        when :sqstring
+          if scan(heredoc_delimiter ? /[^\\\n]+/ : /[^'\\]+/)
+            kind = :content
+          elsif !heredoc_delimiter && scan(/'/)
+            tokens << [matched, :delimiter]
+            tokens << [:close, :string]
+            delimiter = nil
+            label_expected = false
+            states.pop
+            next
+          elsif heredoc_delimiter && match = scan(/\n/)
+            kind = :content
+            if scan heredoc_delimiter
+              tokens << ["\n", :content]
+              tokens << [matched, :delimiter]
+              tokens << [:close, :string]
+              heredoc_delimiter = nil
+              label_expected = false
+              states.pop
+              next
+            end
+          elsif scan(heredoc_delimiter ? /\\\\/ : /\\[\\'\n]/)
+            kind = :char
+          elsif scan(/\\./m)
+            kind = :content
+          elsif scan(/\\/)
+            kind = :error
+          end
+        
+        when :dqstring
+          if scan(heredoc_delimiter ? /[^${\\\n]+/ : (delimiter == '"' ? /[^"${\\]+/ : /[^`${\\]+/))
+            kind = :content
+          elsif !heredoc_delimiter && scan(delimiter == '"' ? /"/ : /`/)
+            tokens << [matched, :delimiter]
+            tokens << [:close, :string]
+            delimiter = nil
+            label_expected = false
+            states.pop
+            next
+          elsif heredoc_delimiter && match = scan(/\n/)
+            kind = :content
+            if scan heredoc_delimiter
+              tokens << ["\n", :content]
+              tokens << [matched, :delimiter]
+              tokens << [:close, :string]
+              heredoc_delimiter = nil
+              label_expected = false
+              states.pop
+              next
+            end
+          elsif scan(/\\(?:x[0-9A-Fa-f]{1,2}|[0-7]{1,3})/)
+            kind = :char
+          elsif scan(heredoc_delimiter ? /\\[nrtvf\\$]/ : (delimiter == '"' ? /\\[nrtvf\\$"]/ : /\\[nrtvf\\$`]/))
+            kind = :char
+          elsif scan(/\\./m)
+            kind = :content
+          elsif scan(/\\/)
+            kind = :error
+          elsif match = scan(/#{RE::VARIABLE}/o)
+            kind = :local_variable
+            if check(/\[#{RE::IDENTIFIER}\]/o)
+              tokens << [:open, :inline]
+              tokens << [match, :local_variable]
+              tokens << [scan(/\[/), :operator]
+              tokens << [scan(/#{RE::IDENTIFIER}/o), :ident]
+              tokens << [scan(/\]/), :operator]
+              tokens << [:close, :inline]
+              next
+            elsif check(/\[/)
+              match << scan(/\[['"]?#{RE::IDENTIFIER}?['"]?\]?/o)
+              kind = :error
+            elsif check(/->#{RE::IDENTIFIER}/o)
+              tokens << [:open, :inline]
+              tokens << [match, :local_variable]
+              tokens << [scan(/->/), :operator]
+              tokens << [scan(/#{RE::IDENTIFIER}/o), :ident]
+              tokens << [:close, :inline]
+              next
+            elsif check(/->/)
+              match << scan(/->/)
+              kind = :error
+            end
+          elsif match = scan(/\{/)
+            if check(/\$/)
+              kind = :delimiter
+              states[-1] = [states.last, delimiter]
+              delimiter = nil
+              states.push :php
+              tokens << [:open, :inline]
+            else
+              kind = :string
+            end
+          elsif scan(/\$\{#{RE::IDENTIFIER}\}/o)
+            kind = :local_variable
+          elsif scan(/\$/)
+            kind = :content
+          end
+        
+        when :class_expected
+          if scan(/\s+/)
+            kind = :space
+          elsif match = scan(/#{RE::IDENTIFIER}/o)
+            kind = :class
+            states.pop
+          else
+            states.pop
+            next
+          end
+        
+        when :function_expected
+          if scan(/\s+/)
+            kind = :space
+          elsif scan(/&/)
+            kind = :operator
+          elsif match = scan(/#{RE::IDENTIFIER}/o)
+            kind = :function
+            states.pop
+          else
+            states.pop
+            next
+          end
+        
+        else
+          raise_inspect 'Unknown state!', tokens, states
+        end
+        
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens, states
+        end
+        raise_inspect 'Empty token', tokens, states unless match
+        
+        tokens << [match, kind]
+        
+      end
+      
+      tokens
+    end
+    
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/plaintext.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,21 @@
+module CodeRay
+module Scanners
+
+  class Plaintext < Scanner
+
+    register_for :plaintext, :plain
+    title 'Plain text'
+    
+    include Streamable
+    
+    KINDS_NOT_LOC = [:plain]
+    
+    def scan_tokens tokens, options
+      text = (scan_until(/\z/) || '')
+      tokens << [text, :plain]
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/python.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,285 @@
+module CodeRay
+module Scanners
+  
+  # Bases on pygments' PythonLexer, see
+  # http://dev.pocoo.org/projects/pygments/browser/pygments/lexers/agile.py.
+  class Python < Scanner
+    
+    include Streamable
+    
+    register_for :python
+    file_extension 'py'
+    
+    KEYWORDS = [
+      'and', 'as', 'assert', 'break', 'class', 'continue', 'def',
+      'del', 'elif', 'else', 'except', 'finally', 'for',
+      'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not',
+      'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield',
+      'nonlocal',  # new in Python 3
+    ]
+    
+    OLD_KEYWORDS = [
+      'exec', 'print',  # gone in Python 3
+    ]
+    
+    PREDEFINED_METHODS_AND_TYPES = %w[
+      __import__ abs all any apply basestring bin bool buffer
+      bytearray bytes callable chr classmethod cmp coerce compile
+      complex delattr dict dir divmod enumerate eval execfile exit
+      file filter float frozenset getattr globals hasattr hash hex id
+      input int intern isinstance issubclass iter len list locals
+      long map max min next object oct open ord pow property range
+      raw_input reduce reload repr reversed round set setattr slice
+      sorted staticmethod str sum super tuple type unichr unicode
+      vars xrange zip
+    ]
+    
+    PREDEFINED_EXCEPTIONS = %w[
+      ArithmeticError AssertionError AttributeError
+      BaseException DeprecationWarning EOFError EnvironmentError
+      Exception FloatingPointError FutureWarning GeneratorExit IOError
+      ImportError ImportWarning IndentationError IndexError KeyError
+      KeyboardInterrupt LookupError MemoryError NameError
+      NotImplemented NotImplementedError OSError OverflowError
+      OverflowWarning PendingDeprecationWarning ReferenceError
+      RuntimeError RuntimeWarning StandardError StopIteration
+      SyntaxError SyntaxWarning SystemError SystemExit TabError
+      TypeError UnboundLocalError UnicodeDecodeError
+      UnicodeEncodeError UnicodeError UnicodeTranslateError
+      UnicodeWarning UserWarning ValueError Warning ZeroDivisionError
+    ]
+    
+    PREDEFINED_VARIABLES_AND_CONSTANTS = [
+      'False', 'True', 'None', # "keywords" since Python 3
+      'self', 'Ellipsis', 'NotImplemented',
+    ]
+    
+    IDENT_KIND = WordList.new(:ident).
+      add(KEYWORDS, :keyword).
+      add(OLD_KEYWORDS, :old_keyword).
+      add(PREDEFINED_METHODS_AND_TYPES, :predefined).
+      add(PREDEFINED_VARIABLES_AND_CONSTANTS, :pre_constant).
+      add(PREDEFINED_EXCEPTIONS, :exception)
+    
+    NAME = / [^\W\d] \w* /x
+    ESCAPE = / [abfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} | N\{[-\w ]+\} /x
+    
+    OPERATOR = /
+      \.\.\. |          # ellipsis
+      \.(?!\d) |        # dot but not decimal point
+      [,;:()\[\]{}] |   # simple delimiters
+      \/\/=? | \*\*=? | # special math
+      [-+*\/%&|^]=? |   # ordinary math and binary logic
+      [~`] |            # binary complement and inspection
+      <<=? | >>=? | [<>=]=? | !=  # comparison and assignment
+    /x
+    
+    STRING_DELIMITER_REGEXP = Hash.new do |h, delimiter|
+      h[delimiter] = Regexp.union delimiter
+    end
+    
+    STRING_CONTENT_REGEXP = Hash.new do |h, delimiter|
+      h[delimiter] = / [^\\\n]+? (?= \\ | $ | #{Regexp.escape(delimiter)} ) /x
+    end
+    
+    DEF_NEW_STATE = WordList.new(:initial).
+      add(%w(def), :def_expected).
+      add(%w(import from), :include_expected).
+      add(%w(class), :class_expected)
+    
+    DESCRIPTOR = /
+      #{NAME}
+      (?: \. #{NAME} )*
+      | \*
+    /x
+    
+    def scan_tokens tokens, options
+      
+      state = :initial
+      string_delimiter = nil
+      string_raw = false
+      import_clause = class_name_follows = last_token_dot = false
+      unicode = string.respond_to?(:encoding) && string.encoding.name == 'UTF-8'
+      from_import_state = []
+      
+      until eos?
+        
+        kind = nil
+        match = nil
+        
+        if state == :string
+          if scan(STRING_DELIMITER_REGEXP[string_delimiter])
+            tokens << [matched, :delimiter]
+            tokens << [:close, :string]
+            state = :initial
+            next
+          elsif string_delimiter.size == 3 && scan(/\n/)
+            kind = :content
+          elsif scan(STRING_CONTENT_REGEXP[string_delimiter])
+            kind = :content
+          elsif !string_raw && scan(/ \\ #{ESCAPE} /ox)
+            kind = :char
+          elsif scan(/ \\ #{UNICODE_ESCAPE} /ox)
+            kind = :char
+          elsif scan(/ \\ . /x)
+            kind = :content
+          elsif scan(/ \\ | $ /x)
+            tokens << [:close, :string]
+            kind = :error
+            state = :initial
+          else
+            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens, state
+          end
+        
+        elsif match = scan(/ [ \t]+ | \\\n /x)
+          tokens << [match, :space]
+          next
+        
+        elsif match = scan(/\n/)
+          tokens << [match, :space]
+          state = :initial if state == :include_expected
+          next
+        
+        elsif match = scan(/ \# [^\n]* /mx)
+          tokens << [match, :comment]
+          next
+        
+        elsif state == :initial
+          
+          if scan(/#{OPERATOR}/o)
+            kind = :operator
+          
+          elsif match = scan(/(u?r?|b)?("""|"|'''|')/i)
+            tokens << [:open, :string]
+            string_delimiter = self[2]
+            string_raw = false
+            modifiers = self[1]
+            unless modifiers.empty?
+              string_raw = !!modifiers.index(?r)
+              tokens << [modifiers, :modifier]
+              match = string_delimiter
+            end
+            state = :string
+            kind = :delimiter
+          
+          # TODO: backticks
+          
+          elsif match = scan(unicode ? /#{NAME}/uo : /#{NAME}/o)
+            kind = IDENT_KIND[match]
+            # TODO: keyword arguments
+            kind = :ident if last_token_dot
+            if kind == :old_keyword
+              kind = check(/\(/) ? :ident : :keyword
+            elsif kind == :predefined && check(/ *=/)
+              kind = :ident
+            elsif kind == :keyword
+              state = DEF_NEW_STATE[match]
+              from_import_state << match.to_sym if state == :include_expected
+            end
+          
+          elsif scan(/@[a-zA-Z0-9_.]+[lL]?/)
+            kind = :decorator
+          
+          elsif scan(/0[xX][0-9A-Fa-f]+[lL]?/)
+            kind = :hex
+          
+          elsif scan(/0[bB][01]+[lL]?/)
+            kind = :bin
+          
+          elsif match = scan(/(?:\d*\.\d+|\d+\.\d*)(?:[eE][+-]?\d+)?|\d+[eE][+-]?\d+/)
+            kind = :float
+            if scan(/[jJ]/)
+              match << matched
+              kind = :imaginary
+            end
+          
+          elsif scan(/0[oO][0-7]+|0[0-7]+(?![89.eE])[lL]?/)
+            kind = :oct
+          
+          elsif match = scan(/\d+([lL])?/)
+            kind = :integer
+            if self[1] == nil && scan(/[jJ]/)
+              match << matched
+              kind = :imaginary
+            end
+          
+          else
+            getch
+            kind = :error
+          
+          end
+            
+        elsif state == :def_expected
+          state = :initial
+          if match = scan(unicode ? /#{NAME}/uo : /#{NAME}/o)
+            kind = :method
+          else
+            next
+          end
+        
+        elsif state == :class_expected
+          state = :initial
+          if match = scan(unicode ? /#{NAME}/uo : /#{NAME}/o)
+            kind = :class
+          else
+            next
+          end
+          
+        elsif state == :include_expected
+          if match = scan(unicode ? /#{DESCRIPTOR}/uo : /#{DESCRIPTOR}/o)
+            kind = :include
+            if match == 'as'
+              kind = :keyword
+              from_import_state << :as
+            elsif from_import_state.first == :from && match == 'import'
+              kind = :keyword
+              from_import_state << :import
+            elsif from_import_state.last == :as
+              # kind = match[0,1][unicode ? /[[:upper:]]/u : /[[:upper:]]/] ? :class : :method
+              kind = :ident
+              from_import_state.pop
+            elsif IDENT_KIND[match] == :keyword
+              unscan
+              match = nil
+              state = :initial
+              next
+            end
+          elsif match = scan(/,/)
+            from_import_state.pop if from_import_state.last == :as
+            kind = :operator
+          else
+            from_import_state = []
+            state = :initial
+            next
+          end
+          
+        else
+          raise_inspect 'Unknown state', tokens, state
+          
+        end
+        
+        match ||= matched
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens, state
+        end
+        raise_inspect 'Empty token', tokens, state unless match
+        
+        last_token_dot = match == '.'
+        
+        tokens << [match, kind]
+        
+      end
+      
+      if state == :string
+        tokens << [:close, :string]
+      end
+      
+      tokens
+    end
+    
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/rhtml.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,78 @@
+module CodeRay
+module Scanners
+
+  load :html
+  load :ruby
+
+  # RHTML Scanner
+  class RHTML < Scanner
+
+    include Streamable
+    register_for :rhtml
+    title 'HTML ERB Template'
+    
+    KINDS_NOT_LOC = HTML::KINDS_NOT_LOC
+
+    ERB_RUBY_BLOCK = /
+      <%(?!%)[=-]?
+      (?>
+        [^\-%]*    # normal*
+        (?>        # special
+          (?: %(?!>) | -(?!%>) )
+          [^\-%]*  # normal*
+        )*
+      )
+      (?: -?%> )?
+    /x
+
+    START_OF_ERB = /
+      <%(?!%)
+    /x
+
+  private
+
+    def setup
+      @ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true
+      @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true
+    end
+
+    def reset_instance
+      super
+      @html_scanner.reset
+    end
+
+    def scan_tokens tokens, options
+
+      until eos?
+
+        if (match = scan_until(/(?=#{START_OF_ERB})/o) || scan_until(/\z/)) and not match.empty?
+          @html_scanner.tokenize match
+
+        elsif match = scan(/#{ERB_RUBY_BLOCK}/o)
+          start_tag = match[/\A<%[-=#]?/]
+          end_tag = match[/-?%?>?\z/]
+          tokens << [:open, :inline]
+          tokens << [start_tag, :inline_delimiter]
+          code = match[start_tag.size .. -1 - end_tag.size]
+          if start_tag == '<%#'
+            tokens << [code, :comment]
+          else
+            @ruby_scanner.tokenize code
+          end
+          tokens << [end_tag, :inline_delimiter] unless end_tag.empty?
+          tokens << [:close, :inline]
+
+        else
+          raise_inspect 'else-case reached!', tokens
+        end
+
+      end
+
+      tokens
+
+    end
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,444 @@
+# encoding: utf-8
+module CodeRay
+module Scanners
+
+  # This scanner is really complex, since Ruby _is_ a complex language!
+  #
+  # It tries to highlight 100% of all common code,
+  # and 90% of strange codes.
+  #
+  # It is optimized for HTML highlighting, and is not very useful for
+  # parsing or pretty printing.
+  #
+  # For now, I think it's better than the scanners in VIM or Syntax, or
+  # any highlighter I was able to find, except Caleb's RubyLexer.
+  #
+  # I hope it's also better than the rdoc/irb lexer.
+  class Ruby < Scanner
+
+    include Streamable
+
+    register_for :ruby
+    file_extension 'rb'
+
+    helper :patterns
+    
+    if not defined? EncodingError
+      EncodingError = Class.new Exception
+    end
+
+  private
+    def scan_tokens tokens, options
+      if string.respond_to?(:encoding)
+        unless string.encoding == Encoding::UTF_8
+          self.string = string.encode Encoding::UTF_8,
+            :invalid => :replace, :undef => :replace, :replace => '?'
+        end
+        unicode = false
+      else
+        unicode = exist?(/[^\x00-\x7f]/)
+      end
+      
+      last_token_dot = false
+      value_expected = true
+      heredocs = nil
+      last_state = nil
+      state = :initial
+      depth = nil
+      inline_block_stack = []
+      
+      
+      patterns = Patterns  # avoid constant lookup
+      
+      until eos?
+        match = nil
+        kind = nil
+
+        if state.instance_of? patterns::StringState
+# {{{
+          match = scan_until(state.pattern) || scan_until(/\z/)
+          tokens << [match, :content] unless match.empty?
+          break if eos?
+
+          if state.heredoc and self[1]  # end of heredoc
+            match = getch.to_s
+            match << scan_until(/$/) unless eos?
+            tokens << [match, :delimiter]
+            tokens << [:close, state.type]
+            state = state.next_state
+            next
+          end
+
+          case match = getch
+
+          when state.delim
+            if state.paren
+              state.paren_depth -= 1
+              if state.paren_depth > 0
+                tokens << [match, :nesting_delimiter]
+                next
+              end
+            end
+            tokens << [match, :delimiter]
+            if state.type == :regexp and not eos?
+              modifiers = scan(/#{patterns::REGEXP_MODIFIERS}/ox)
+              tokens << [modifiers, :modifier] unless modifiers.empty?
+            end
+            tokens << [:close, state.type]
+            value_expected = false
+            state = state.next_state
+
+          when '\\'
+            if state.interpreted
+              if esc = scan(/ #{patterns::ESCAPE} /ox)
+                tokens << [match + esc, :char]
+              else
+                tokens << [match, :error]
+              end
+            else
+              case m = getch
+              when state.delim, '\\'
+                tokens << [match + m, :char]
+              when nil
+                tokens << [match, :error]
+              else
+                tokens << [match + m, :content]
+              end
+            end
+
+          when '#'
+            case peek(1)
+            when '{'
+              inline_block_stack << [state, depth, heredocs]
+              value_expected = true
+              state = :initial
+              depth = 1
+              tokens << [:open, :inline]
+              tokens << [match + getch, :inline_delimiter]
+            when '$', '@'
+              tokens << [match, :escape]
+              last_state = state  # scan one token as normal code, then return here
+              state = :initial
+            else
+              raise_inspect 'else-case # reached; #%p not handled' % peek(1), tokens
+            end
+
+          when state.paren
+            state.paren_depth += 1
+            tokens << [match, :nesting_delimiter]
+
+          when /#{patterns::REGEXP_SYMBOLS}/ox
+            tokens << [match, :function]
+
+          else
+            raise_inspect 'else-case " reached; %p not handled, state = %p' % [match, state], tokens
+
+          end
+          next
+# }}}
+        else
+# {{{
+          if match = scan(/[ \t\f]+/)
+            kind = :space
+            match << scan(/\s*/) unless eos? || heredocs
+            value_expected = true if match.index(?\n)
+            tokens << [match, kind]
+            next
+            
+          elsif match = scan(/\\?\n/)
+            kind = :space
+            if match == "\n"
+              value_expected = true
+              state = :initial if state == :undef_comma_expected
+            end
+            if heredocs
+              unscan  # heredoc scanning needs \n at start
+              state = heredocs.shift
+              tokens << [:open, state.type]
+              heredocs = nil if heredocs.empty?
+              next
+            else
+              match << scan(/\s*/) unless eos?
+            end
+            tokens << [match, kind]
+            next
+          
+          elsif bol? && match = scan(/\#!.*/)
+            tokens << [match, :doctype]
+            next
+            
+          elsif match = scan(/\#.*/) or
+            ( bol? and match = scan(/#{patterns::RUBYDOC_OR_DATA}/o) )
+              kind = :comment
+              tokens << [match, kind]
+              next
+
+          elsif state == :initial
+
+            # IDENTS #
+            if match = scan(unicode ? /#{patterns::METHOD_NAME}/uo :
+                                      /#{patterns::METHOD_NAME}/o)
+              if last_token_dot
+                kind = if match[/^[A-Z]/] and not match?(/\(/) then :constant else :ident end
+              else
+                if value_expected != :expect_colon && scan(/:(?= )/)
+                  tokens << [match, :key]
+                  match = ':'
+                  kind = :operator
+                else
+                  kind = patterns::IDENT_KIND[match]
+                  if kind == :ident
+                    if match[/\A[A-Z]/] and not match[/[!?]$/] and not match?(/\(/)
+                      kind = :constant
+                    end
+                  elsif kind == :reserved
+                    state = patterns::DEF_NEW_STATE[match]
+                    value_expected = :set if patterns::KEYWORDS_EXPECTING_VALUE[match]
+                  end
+                end
+              end
+              value_expected = :set if check(/#{patterns::VALUE_FOLLOWS}/o)
+            
+            elsif last_token_dot and match = scan(/#{patterns::METHOD_NAME_OPERATOR}|\(/o)
+              kind = :ident
+              value_expected = :set if check(unicode ? /#{patterns::VALUE_FOLLOWS}/uo :
+                                                       /#{patterns::VALUE_FOLLOWS}/o)
+
+            # OPERATORS #
+            elsif not last_token_dot and match = scan(/ \.\.\.? | (?:\.|::)() | [,\(\)\[\]\{\}] | ==?=? /x)
+              if match !~ / [.\)\]\}] /x or match =~ /\.\.\.?/
+                value_expected = :set
+              end
+              last_token_dot = :set if self[1]
+              kind = :operator
+              unless inline_block_stack.empty?
+                case match
+                when '{'
+                  depth += 1
+                when '}'
+                  depth -= 1
+                  if depth == 0  # closing brace of inline block reached
+                    state, depth, heredocs = inline_block_stack.pop
+                    heredocs = nil if heredocs && heredocs.empty?
+                    tokens << [match, :inline_delimiter]
+                    kind = :inline
+                    match = :close
+                  end
+                end
+              end
+
+            elsif match = scan(/ ['"] /mx)
+              tokens << [:open, :string]
+              kind = :delimiter
+              state = patterns::StringState.new :string, match == '"', match  # important for streaming
+
+            elsif match = scan(unicode ? /#{patterns::INSTANCE_VARIABLE}/uo :
+                                         /#{patterns::INSTANCE_VARIABLE}/o)
+              kind = :instance_variable
+
+            elsif value_expected and match = scan(/\//)
+              tokens << [:open, :regexp]
+              kind = :delimiter
+              interpreted = true
+              state = patterns::StringState.new :regexp, interpreted, match
+
+            # elsif match = scan(/[-+]?#{patterns::NUMERIC}/o)
+            elsif match = value_expected ? scan(/[-+]?#{patterns::NUMERIC}/o) : scan(/#{patterns::NUMERIC}/o)
+              kind = self[1] ? :float : :integer
+
+            elsif match = scan(unicode ? /#{patterns::SYMBOL}/uo :
+                                         /#{patterns::SYMBOL}/o)
+              case delim = match[1]
+              when ?', ?"
+                tokens << [:open, :symbol]
+                tokens << [':', :symbol]
+                match = delim.chr
+                kind = :delimiter
+                state = patterns::StringState.new :symbol, delim == ?", match
+              else
+                kind = :symbol
+              end
+
+            elsif match = scan(/ -[>=]? | [+!~^]=? | [*|&]{1,2}=? | >>? /x)
+              value_expected = :set
+              kind = :operator
+
+            elsif value_expected and match = scan(unicode ? /#{patterns::HEREDOC_OPEN}/uo :
+                                                            /#{patterns::HEREDOC_OPEN}/o)
+              indented = self[1] == '-'
+              quote = self[3]
+              delim = self[quote ? 4 : 2]
+              kind = patterns::QUOTE_TO_TYPE[quote]
+              tokens << [:open, kind]
+              tokens << [match, :delimiter]
+              match = :close
+              heredoc = patterns::StringState.new kind, quote != '\'', delim, (indented ? :indented : :linestart )
+              heredocs ||= []  # create heredocs if empty
+              heredocs << heredoc
+
+            elsif value_expected and match = scan(/#{patterns::FANCY_START_CORRECT}/o)
+              kind, interpreted = *patterns::FancyStringType.fetch(self[1]) do
+                raise_inspect 'Unknown fancy string: %%%p' % k, tokens
+              end
+              tokens << [:open, kind]
+              state = patterns::StringState.new kind, interpreted, self[2]
+              kind = :delimiter
+
+            elsif value_expected and match = scan(unicode ? /#{patterns::CHARACTER}/uo :
+                                                            /#{patterns::CHARACTER}/o)
+              kind = :integer
+
+            elsif match = scan(/ [\/%]=? | <(?:<|=>?)? | [?:;] /x)
+              value_expected = :set
+              kind = :operator
+
+            elsif match = scan(/`/)
+              if last_token_dot
+                kind = :operator
+              else
+                tokens << [:open, :shell]
+                kind = :delimiter
+                state = patterns::StringState.new :shell, true, match
+              end
+
+            elsif match = scan(unicode ? /#{patterns::GLOBAL_VARIABLE}/uo :
+                                         /#{patterns::GLOBAL_VARIABLE}/o)
+              kind = :global_variable
+
+            elsif match = scan(unicode ? /#{patterns::CLASS_VARIABLE}/uo :
+                                         /#{patterns::CLASS_VARIABLE}/o)
+              kind = :class_variable
+
+            else
+              if !unicode && !string.respond_to?(:encoding)
+                # check for unicode
+                debug, $DEBUG = $DEBUG, false
+                begin
+                  if check(/./mu).size > 1
+                    # seems like we should try again with unicode
+                    unicode = true
+                  end
+                rescue
+                  # bad unicode char; use getch
+                ensure
+                  $DEBUG = debug
+                end
+                next if unicode
+              end
+              kind = :error
+              match = scan(unicode ? /./mu : /./m)
+
+            end
+
+          elsif state == :def_expected
+            state = :initial
+            if scan(/self\./)
+              tokens << ['self', :pre_constant]
+              tokens << ['.', :operator]
+            end
+            if match = scan(unicode ? /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/uo :
+                                      /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/o)
+              kind = :method
+            else
+              next
+            end
+
+          elsif state == :module_expected
+            if match = scan(/<</)
+              kind = :operator
+            else
+              state = :initial
+              if match = scan(unicode ? /(?:#{patterns::IDENT}::)*#{patterns::IDENT}/uo :
+                                        /(?:#{patterns::IDENT}::)*#{patterns::IDENT}/o)
+                kind = :class
+              else
+                next
+              end
+            end
+
+          elsif state == :undef_expected
+            state = :undef_comma_expected
+            if match = scan(unicode ? /#{patterns::METHOD_NAME_EX}/uo :
+                                      /#{patterns::METHOD_NAME_EX}/o)
+              kind = :method
+            elsif match = scan(unicode ? /#{patterns::SYMBOL}/uo :
+                                         /#{patterns::SYMBOL}/o)
+              case delim = match[1]
+              when ?', ?"
+                tokens << [:open, :symbol]
+                tokens << [':', :symbol]
+                match = delim.chr
+                kind = :delimiter
+                state = patterns::StringState.new :symbol, delim == ?", match
+                state.next_state = :undef_comma_expected
+              else
+                kind = :symbol
+              end
+            else
+              state = :initial
+              next
+            end
+
+          elsif state == :alias_expected
+            match = scan(unicode ? /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/uo :
+                                   /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/o)
+            
+            if match
+              tokens << [self[1], (self[1][0] == ?: ? :symbol : :method)]
+              tokens << [self[2], :space]
+              tokens << [self[3], (self[3][0] == ?: ? :symbol : :method)]
+            end
+            state = :initial
+            next
+
+          elsif state == :undef_comma_expected
+            if match = scan(/,/)
+              kind = :operator
+              state = :undef_expected
+            else
+              state = :initial
+              next
+            end
+
+          end
+# }}}
+          
+          unless kind == :error
+            if value_expected = value_expected == :set
+              value_expected = :expect_colon if match == '?' || match == 'when'
+            end
+            last_token_dot = last_token_dot == :set
+          end
+          
+          if $CODERAY_DEBUG and not kind
+            raise_inspect 'Error token %p in line %d' %
+              [[match, kind], line], tokens, state
+          end
+          raise_inspect 'Empty token', tokens unless match
+
+          tokens << [match, kind]
+
+          if last_state
+            state = last_state
+            last_state = nil
+          end
+        end
+      end
+
+      inline_block_stack << [state] if state.is_a? patterns::StringState
+      until inline_block_stack.empty?
+        this_block = inline_block_stack.pop
+        tokens << [:close, :inline] if this_block.size > 1
+        state = this_block.first
+        tokens << [:close, state.type]
+      end
+
+      tokens
+    end
+
+  end
+
+end
+end
+
+# vim:fdm=marker
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby
+END
+patterns.rb
+K 25
+svn:wc:ra_dav:version-url
+V 88
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby/patterns.rb
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,62 @@
+10
+
+dir
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby
+http://redmine.rubyforge.org/svn
+
+
+
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+patterns.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+e9ee13edf8cacf235b977434e09649dc
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7416
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby/.svn/text-base/patterns.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,252 @@
+# encoding: utf-8
+module CodeRay
+module Scanners
+
+  module Ruby::Patterns  # :nodoc:
+
+    RESERVED_WORDS = %w[
+      and def end in or unless begin
+      defined? ensure module redo super until
+      BEGIN break do next rescue then
+      when END case else for retry
+      while alias class elsif if not return
+      undef yield
+    ]
+
+    DEF_KEYWORDS = %w[ def ]
+    UNDEF_KEYWORDS = %w[ undef ]
+    ALIAS_KEYWORDS = %w[ alias ]
+    MODULE_KEYWORDS = %w[ class module ]
+    DEF_NEW_STATE = WordList.new(:initial).
+      add(DEF_KEYWORDS, :def_expected).
+      add(UNDEF_KEYWORDS, :undef_expected).
+      add(ALIAS_KEYWORDS, :alias_expected).
+      add(MODULE_KEYWORDS, :module_expected)
+
+    PREDEFINED_CONSTANTS = %w[
+      nil true false self
+      DATA ARGV ARGF
+      __FILE__ __LINE__ __ENCODING__
+    ]
+
+    IDENT_KIND = WordList.new(:ident).
+      add(RESERVED_WORDS, :reserved).
+      add(PREDEFINED_CONSTANTS, :pre_constant)
+
+    if /\w/u === '∑'
+      # MRI 1.8.6, 1.8.7
+      IDENT = /[^\W\d]\w*/
+    else
+      if //.respond_to? :encoding
+        # MRI 1.9.1, 1.9.2
+        IDENT = Regexp.new '[\p{L}\p{M}\p{Pc}\p{Sm}&&[^\x00-\x40\x5b-\x5e\x60\x7b-\x7f]][\p{L}\p{M}\p{N}\p{Pc}\p{Sm}&&[^\x00-\x2f\x3a-\x40\x5b-\x5e\x60\x7b-\x7f]]*'
+      else
+        # JRuby, Rubinius
+        IDENT = /[^\x00-\x40\x5b-\x5e\x60\x7b-\x7f][^\x00-\x2f\x3a-\x40\x5b-\x5e\x60\x7b-\x7f]*/
+      end
+    end
+
+    METHOD_NAME = / #{IDENT} [?!]? /ox
+    METHOD_NAME_OPERATOR = /
+      \*\*?           # multiplication and power
+      | [-+~]@?       # plus, minus, tilde with and without at sign
+      | [\/%&|^`]     # division, modulo or format strings, and, or, xor, system
+      | \[\]=?        # array getter and setter
+      | << | >>       # append or shift left, shift right
+      | <=?>? | >=?   # comparison, rocket operator
+      | ===? | =~     # simple equality, case equality, match
+      | ![~=@]?       # negation with and without at sign, not-equal and not-match
+    /ox
+    METHOD_NAME_EX = / #{IDENT} (?:[?!]|=(?!>))? | #{METHOD_NAME_OPERATOR} /ox
+    INSTANCE_VARIABLE = / @ #{IDENT} /ox
+    CLASS_VARIABLE = / @@ #{IDENT} /ox
+    OBJECT_VARIABLE = / @@? #{IDENT} /ox
+    GLOBAL_VARIABLE = / \$ (?: #{IDENT} | [1-9]\d* | 0\w* | [~&+`'=\/,;_.<>!@$?*":\\] | -[a-zA-Z_0-9] ) /ox
+    PREFIX_VARIABLE = / #{GLOBAL_VARIABLE} | #{OBJECT_VARIABLE} /ox
+    VARIABLE = / @?@? #{IDENT} | #{GLOBAL_VARIABLE} /ox
+
+    QUOTE_TO_TYPE = {
+      '`' => :shell,
+      '/'=> :regexp,
+    }
+    QUOTE_TO_TYPE.default = :string
+
+    REGEXP_MODIFIERS = /[mixounse]*/
+    REGEXP_SYMBOLS = /[|?*+(){}\[\].^$]/
+
+    DECIMAL = /\d+(?:_\d+)*/
+    OCTAL = /0_?[0-7]+(?:_[0-7]+)*/
+    HEXADECIMAL = /0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*/
+    BINARY = /0b[01]+(?:_[01]+)*/
+
+    EXPONENT = / [eE] [+-]? #{DECIMAL} /ox
+    FLOAT_SUFFIX = / #{EXPONENT} | \. #{DECIMAL} #{EXPONENT}? /ox
+    FLOAT_OR_INT = / #{DECIMAL} (?: #{FLOAT_SUFFIX} () )? /ox
+    NUMERIC = / (?: (?=0) (?: #{OCTAL} | #{HEXADECIMAL} | #{BINARY} ) | #{FLOAT_OR_INT} ) /ox
+
+    SYMBOL = /
+      :
+      (?:
+        #{METHOD_NAME_EX}
+      | #{PREFIX_VARIABLE}
+      | ['"]
+      )
+    /ox
+    METHOD_NAME_OR_SYMBOL = / #{METHOD_NAME_EX} | #{SYMBOL} /ox
+
+    SIMPLE_ESCAPE = /
+        [abefnrstv]
+      |  [0-7]{1,3}
+      | x[0-9A-Fa-f]{1,2}
+      | .?
+    /mx
+    
+    CONTROL_META_ESCAPE = /
+      (?: M-|C-|c )
+      (?: \\ (?: M-|C-|c ) )*
+      (?: [^\\] | \\ #{SIMPLE_ESCAPE} )?
+    /mox
+    
+    ESCAPE = /
+      #{CONTROL_META_ESCAPE} | #{SIMPLE_ESCAPE}
+    /mox
+    
+    CHARACTER = /
+      \?
+      (?:
+        [^\s\\]
+      | \\ #{ESCAPE}
+      )
+    /mox
+
+    # NOTE: This is not completely correct, but
+    # nobody needs heredoc delimiters ending with \n.
+    # Also, delimiters starting with numbers are allowed.
+    # but they are more often than not a false positive.
+    HEREDOC_OPEN = /
+      << (-)?              # $1 = float
+      (?:
+        ( #{IDENT} )       # $2 = delim
+      |
+        ( ["'`\/] )        # $3 = quote, type
+        ( [^\n]*? ) \3     # $4 = delim
+      )
+    /mx
+
+    RUBYDOC = /
+      =begin (?!\S)
+      .*?
+      (?: \Z | ^=end (?!\S) [^\n]* )
+    /mx
+
+    DATA = /
+      __END__$
+      .*?
+      (?: \Z | (?=^\#CODE) )
+    /mx
+    
+    # Checks for a valid value to follow. This enables
+    # value_expected in method calls without parentheses.
+    VALUE_FOLLOWS = /
+      (?>[ \t\f\v]+)
+      (?:
+        [%\/][^\s=]
+      | <<-?\S
+      | [-+] \d
+      | #{CHARACTER}
+      )
+    /x
+    KEYWORDS_EXPECTING_VALUE = WordList.new.add(%w[
+      and end in or unless begin
+      defined? ensure redo super until
+      break do next rescue then
+      when case else for retry
+      while elsif if not return
+      yield
+    ])
+
+    RUBYDOC_OR_DATA = / #{RUBYDOC} | #{DATA} /xo
+
+    RDOC_DATA_START = / ^=begin (?!\S) | ^__END__$ /x
+
+    FANCY_START_CORRECT = / % ( [qQwWxsr] | (?![a-zA-Z0-9]) ) ([^a-zA-Z0-9]) /mx
+
+    FancyStringType = {
+      'q' => [:string, false],
+      'Q' => [:string, true],
+      'r' => [:regexp, true],
+      's' => [:symbol, false],
+      'x' => [:shell, true]
+    }
+    FancyStringType['w'] = FancyStringType['q']
+    FancyStringType['W'] = FancyStringType[''] = FancyStringType['Q']
+
+    class StringState < Struct.new :type, :interpreted, :delim, :heredoc,
+      :paren, :paren_depth, :pattern, :next_state
+
+      CLOSING_PAREN = Hash[ *%w[
+        ( )
+        [ ]
+        < >
+        { }
+      ] ]
+
+      CLOSING_PAREN.each { |k,v| k.freeze; v.freeze }  # debug, if I try to change it with <<
+      OPENING_PAREN = CLOSING_PAREN.invert
+
+      STRING_PATTERN = Hash.new do |h, k|
+        delim, interpreted = *k
+        delim_pattern = Regexp.escape(delim.dup)  # dup: workaround for old Ruby
+        if closing_paren = CLOSING_PAREN[delim]
+          delim_pattern = delim_pattern[0..-1] if defined? JRUBY_VERSION  # JRuby fix
+          delim_pattern << Regexp.escape(closing_paren)
+        end
+        delim_pattern << '\\\\' unless delim == '\\'
+        
+        special_escapes =
+          case interpreted
+          when :regexp_symbols
+            '| ' + REGEXP_SYMBOLS.source
+          when :words
+            '| \s'
+          end
+        
+        h[k] =
+          if interpreted and not delim == '#'
+            / (?= [#{delim_pattern}] | \# [{$@] #{special_escapes} ) /mx
+          else
+            / (?= [#{delim_pattern}] #{special_escapes} ) /mx
+          end
+      end
+
+      HEREDOC_PATTERN = Hash.new do |h, k|
+        delim, interpreted, indented = *k
+        delim_pattern = Regexp.escape(delim.dup)  # dup: workaround for old Ruby
+        delim_pattern = / \n #{ '(?>[\ \t]*)' if indented } #{ Regexp.new delim_pattern } $ /x
+        h[k] =
+          if interpreted
+            / (?= #{delim_pattern}() | \\ | \# [{$@] ) /mx  # $1 set == end of heredoc
+          else
+            / (?= #{delim_pattern}() | \\ ) /mx
+          end
+      end
+
+      def initialize kind, interpreted, delim, heredoc = false
+        if heredoc
+          pattern = HEREDOC_PATTERN[ [delim, interpreted, heredoc == :indented] ]
+          delim = nil
+        else
+          pattern = STRING_PATTERN[ [delim, interpreted] ]
+          if paren = CLOSING_PAREN[delim]
+            delim, paren = paren, delim
+            paren_depth = 1
+          end
+        end
+        super kind, interpreted, delim, heredoc, paren, paren_depth, pattern, :initial
+      end
+    end unless defined? StringState
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/ruby/patterns.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,252 @@
+# encoding: utf-8
+module CodeRay
+module Scanners
+
+  module Ruby::Patterns  # :nodoc:
+
+    RESERVED_WORDS = %w[
+      and def end in or unless begin
+      defined? ensure module redo super until
+      BEGIN break do next rescue then
+      when END case else for retry
+      while alias class elsif if not return
+      undef yield
+    ]
+
+    DEF_KEYWORDS = %w[ def ]
+    UNDEF_KEYWORDS = %w[ undef ]
+    ALIAS_KEYWORDS = %w[ alias ]
+    MODULE_KEYWORDS = %w[ class module ]
+    DEF_NEW_STATE = WordList.new(:initial).
+      add(DEF_KEYWORDS, :def_expected).
+      add(UNDEF_KEYWORDS, :undef_expected).
+      add(ALIAS_KEYWORDS, :alias_expected).
+      add(MODULE_KEYWORDS, :module_expected)
+
+    PREDEFINED_CONSTANTS = %w[
+      nil true false self
+      DATA ARGV ARGF
+      __FILE__ __LINE__ __ENCODING__
+    ]
+
+    IDENT_KIND = WordList.new(:ident).
+      add(RESERVED_WORDS, :reserved).
+      add(PREDEFINED_CONSTANTS, :pre_constant)
+
+    if /\w/u === '∑'
+      # MRI 1.8.6, 1.8.7
+      IDENT = /[^\W\d]\w*/
+    else
+      if //.respond_to? :encoding
+        # MRI 1.9.1, 1.9.2
+        IDENT = Regexp.new '[\p{L}\p{M}\p{Pc}\p{Sm}&&[^\x00-\x40\x5b-\x5e\x60\x7b-\x7f]][\p{L}\p{M}\p{N}\p{Pc}\p{Sm}&&[^\x00-\x2f\x3a-\x40\x5b-\x5e\x60\x7b-\x7f]]*'
+      else
+        # JRuby, Rubinius
+        IDENT = /[^\x00-\x40\x5b-\x5e\x60\x7b-\x7f][^\x00-\x2f\x3a-\x40\x5b-\x5e\x60\x7b-\x7f]*/
+      end
+    end
+
+    METHOD_NAME = / #{IDENT} [?!]? /ox
+    METHOD_NAME_OPERATOR = /
+      \*\*?           # multiplication and power
+      | [-+~]@?       # plus, minus, tilde with and without at sign
+      | [\/%&|^`]     # division, modulo or format strings, and, or, xor, system
+      | \[\]=?        # array getter and setter
+      | << | >>       # append or shift left, shift right
+      | <=?>? | >=?   # comparison, rocket operator
+      | ===? | =~     # simple equality, case equality, match
+      | ![~=@]?       # negation with and without at sign, not-equal and not-match
+    /ox
+    METHOD_NAME_EX = / #{IDENT} (?:[?!]|=(?!>))? | #{METHOD_NAME_OPERATOR} /ox
+    INSTANCE_VARIABLE = / @ #{IDENT} /ox
+    CLASS_VARIABLE = / @@ #{IDENT} /ox
+    OBJECT_VARIABLE = / @@? #{IDENT} /ox
+    GLOBAL_VARIABLE = / \$ (?: #{IDENT} | [1-9]\d* | 0\w* | [~&+`'=\/,;_.<>!@$?*":\\] | -[a-zA-Z_0-9] ) /ox
+    PREFIX_VARIABLE = / #{GLOBAL_VARIABLE} | #{OBJECT_VARIABLE} /ox
+    VARIABLE = / @?@? #{IDENT} | #{GLOBAL_VARIABLE} /ox
+
+    QUOTE_TO_TYPE = {
+      '`' => :shell,
+      '/'=> :regexp,
+    }
+    QUOTE_TO_TYPE.default = :string
+
+    REGEXP_MODIFIERS = /[mixounse]*/
+    REGEXP_SYMBOLS = /[|?*+(){}\[\].^$]/
+
+    DECIMAL = /\d+(?:_\d+)*/
+    OCTAL = /0_?[0-7]+(?:_[0-7]+)*/
+    HEXADECIMAL = /0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*/
+    BINARY = /0b[01]+(?:_[01]+)*/
+
+    EXPONENT = / [eE] [+-]? #{DECIMAL} /ox
+    FLOAT_SUFFIX = / #{EXPONENT} | \. #{DECIMAL} #{EXPONENT}? /ox
+    FLOAT_OR_INT = / #{DECIMAL} (?: #{FLOAT_SUFFIX} () )? /ox
+    NUMERIC = / (?: (?=0) (?: #{OCTAL} | #{HEXADECIMAL} | #{BINARY} ) | #{FLOAT_OR_INT} ) /ox
+
+    SYMBOL = /
+      :
+      (?:
+        #{METHOD_NAME_EX}
+      | #{PREFIX_VARIABLE}
+      | ['"]
+      )
+    /ox
+    METHOD_NAME_OR_SYMBOL = / #{METHOD_NAME_EX} | #{SYMBOL} /ox
+
+    SIMPLE_ESCAPE = /
+        [abefnrstv]
+      |  [0-7]{1,3}
+      | x[0-9A-Fa-f]{1,2}
+      | .?
+    /mx
+    
+    CONTROL_META_ESCAPE = /
+      (?: M-|C-|c )
+      (?: \\ (?: M-|C-|c ) )*
+      (?: [^\\] | \\ #{SIMPLE_ESCAPE} )?
+    /mox
+    
+    ESCAPE = /
+      #{CONTROL_META_ESCAPE} | #{SIMPLE_ESCAPE}
+    /mox
+    
+    CHARACTER = /
+      \?
+      (?:
+        [^\s\\]
+      | \\ #{ESCAPE}
+      )
+    /mox
+
+    # NOTE: This is not completely correct, but
+    # nobody needs heredoc delimiters ending with \n.
+    # Also, delimiters starting with numbers are allowed.
+    # but they are more often than not a false positive.
+    HEREDOC_OPEN = /
+      << (-)?              # $1 = float
+      (?:
+        ( #{IDENT} )       # $2 = delim
+      |
+        ( ["'`\/] )        # $3 = quote, type
+        ( [^\n]*? ) \3     # $4 = delim
+      )
+    /mx
+
+    RUBYDOC = /
+      =begin (?!\S)
+      .*?
+      (?: \Z | ^=end (?!\S) [^\n]* )
+    /mx
+
+    DATA = /
+      __END__$
+      .*?
+      (?: \Z | (?=^\#CODE) )
+    /mx
+    
+    # Checks for a valid value to follow. This enables
+    # value_expected in method calls without parentheses.
+    VALUE_FOLLOWS = /
+      (?>[ \t\f\v]+)
+      (?:
+        [%\/][^\s=]
+      | <<-?\S
+      | [-+] \d
+      | #{CHARACTER}
+      )
+    /x
+    KEYWORDS_EXPECTING_VALUE = WordList.new.add(%w[
+      and end in or unless begin
+      defined? ensure redo super until
+      break do next rescue then
+      when case else for retry
+      while elsif if not return
+      yield
+    ])
+
+    RUBYDOC_OR_DATA = / #{RUBYDOC} | #{DATA} /xo
+
+    RDOC_DATA_START = / ^=begin (?!\S) | ^__END__$ /x
+
+    FANCY_START_CORRECT = / % ( [qQwWxsr] | (?![a-zA-Z0-9]) ) ([^a-zA-Z0-9]) /mx
+
+    FancyStringType = {
+      'q' => [:string, false],
+      'Q' => [:string, true],
+      'r' => [:regexp, true],
+      's' => [:symbol, false],
+      'x' => [:shell, true]
+    }
+    FancyStringType['w'] = FancyStringType['q']
+    FancyStringType['W'] = FancyStringType[''] = FancyStringType['Q']
+
+    class StringState < Struct.new :type, :interpreted, :delim, :heredoc,
+      :paren, :paren_depth, :pattern, :next_state
+
+      CLOSING_PAREN = Hash[ *%w[
+        ( )
+        [ ]
+        < >
+        { }
+      ] ]
+
+      CLOSING_PAREN.each { |k,v| k.freeze; v.freeze }  # debug, if I try to change it with <<
+      OPENING_PAREN = CLOSING_PAREN.invert
+
+      STRING_PATTERN = Hash.new do |h, k|
+        delim, interpreted = *k
+        delim_pattern = Regexp.escape(delim.dup)  # dup: workaround for old Ruby
+        if closing_paren = CLOSING_PAREN[delim]
+          delim_pattern = delim_pattern[0..-1] if defined? JRUBY_VERSION  # JRuby fix
+          delim_pattern << Regexp.escape(closing_paren)
+        end
+        delim_pattern << '\\\\' unless delim == '\\'
+        
+        special_escapes =
+          case interpreted
+          when :regexp_symbols
+            '| ' + REGEXP_SYMBOLS.source
+          when :words
+            '| \s'
+          end
+        
+        h[k] =
+          if interpreted and not delim == '#'
+            / (?= [#{delim_pattern}] | \# [{$@] #{special_escapes} ) /mx
+          else
+            / (?= [#{delim_pattern}] #{special_escapes} ) /mx
+          end
+      end
+
+      HEREDOC_PATTERN = Hash.new do |h, k|
+        delim, interpreted, indented = *k
+        delim_pattern = Regexp.escape(delim.dup)  # dup: workaround for old Ruby
+        delim_pattern = / \n #{ '(?>[\ \t]*)' if indented } #{ Regexp.new delim_pattern } $ /x
+        h[k] =
+          if interpreted
+            / (?= #{delim_pattern}() | \\ | \# [{$@] ) /mx  # $1 set == end of heredoc
+          else
+            / (?= #{delim_pattern}() | \\ ) /mx
+          end
+      end
+
+      def initialize kind, interpreted, delim, heredoc = false
+        if heredoc
+          pattern = HEREDOC_PATTERN[ [delim, interpreted, heredoc == :indented] ]
+          delim = nil
+        else
+          pattern = STRING_PATTERN[ [delim, interpreted] ]
+          if paren = CLOSING_PAREN[delim]
+            delim, paren = paren, delim
+            paren_depth = 1
+          end
+        end
+        super kind, interpreted, delim, heredoc, paren, paren_depth, pattern, :initial
+      end
+    end unless defined? StringState
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/scheme.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,145 @@
+module CodeRay
+  module Scanners
+
+    # Scheme scanner for CodeRay (by closure).
+    # Thanks to murphy for putting CodeRay into public.
+    class Scheme < Scanner
+      
+      # TODO: function defs
+      # TODO: built-in functions
+      
+      register_for :scheme
+      file_extension 'scm'
+
+      CORE_FORMS = %w[
+        lambda let let* letrec syntax-case define-syntax let-syntax
+        letrec-syntax begin define quote if or and cond case do delay
+        quasiquote set! cons force call-with-current-continuation call/cc
+      ]
+
+      IDENT_KIND = CaseIgnoringWordList.new(:ident).
+        add(CORE_FORMS, :reserved)
+      
+      #IDENTIFIER_INITIAL = /[a-z!@\$%&\*\/\:<=>\?~_\^]/i
+      #IDENTIFIER_SUBSEQUENT = /#{IDENTIFIER_INITIAL}|\d|\.|\+|-/
+      #IDENTIFIER = /#{IDENTIFIER_INITIAL}#{IDENTIFIER_SUBSEQUENT}*|\+|-|\.{3}/
+      IDENTIFIER = /[a-zA-Z!@$%&*\/:<=>?~_^][\w!@$%&*\/:<=>?~^.+\-]*|[+-]|\.\.\./
+      DIGIT = /\d/
+      DIGIT10 = DIGIT
+      DIGIT16 = /[0-9a-f]/i
+      DIGIT8 = /[0-7]/
+      DIGIT2 = /[01]/
+      RADIX16 = /\#x/i
+      RADIX8 = /\#o/i
+      RADIX2 = /\#b/i
+      RADIX10 = /\#d/i
+      EXACTNESS = /#i|#e/i
+      SIGN = /[\+-]?/
+      EXP_MARK = /[esfdl]/i
+      EXP = /#{EXP_MARK}#{SIGN}#{DIGIT}+/
+      SUFFIX = /#{EXP}?/
+      PREFIX10 = /#{RADIX10}?#{EXACTNESS}?|#{EXACTNESS}?#{RADIX10}?/
+      PREFIX16 = /#{RADIX16}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX16}/
+      PREFIX8 = /#{RADIX8}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX8}/
+      PREFIX2 = /#{RADIX2}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX2}/
+      UINT10 = /#{DIGIT10}+#*/
+      UINT16 = /#{DIGIT16}+#*/
+      UINT8 = /#{DIGIT8}+#*/
+      UINT2 = /#{DIGIT2}+#*/
+      DECIMAL = /#{DIGIT10}+#+\.#*#{SUFFIX}|#{DIGIT10}+\.#{DIGIT10}*#*#{SUFFIX}|\.#{DIGIT10}+#*#{SUFFIX}|#{UINT10}#{EXP}/
+      UREAL10 = /#{UINT10}\/#{UINT10}|#{DECIMAL}|#{UINT10}/
+      UREAL16 = /#{UINT16}\/#{UINT16}|#{UINT16}/
+      UREAL8 = /#{UINT8}\/#{UINT8}|#{UINT8}/
+      UREAL2 = /#{UINT2}\/#{UINT2}|#{UINT2}/
+      REAL10 = /#{SIGN}#{UREAL10}/
+      REAL16 = /#{SIGN}#{UREAL16}/
+      REAL8 = /#{SIGN}#{UREAL8}/
+      REAL2 = /#{SIGN}#{UREAL2}/
+      IMAG10 = /i|#{UREAL10}i/
+      IMAG16 = /i|#{UREAL16}i/
+      IMAG8 = /i|#{UREAL8}i/
+      IMAG2 = /i|#{UREAL2}i/
+      COMPLEX10 = /#{REAL10}@#{REAL10}|#{REAL10}\+#{IMAG10}|#{REAL10}-#{IMAG10}|\+#{IMAG10}|-#{IMAG10}|#{REAL10}/
+      COMPLEX16 = /#{REAL16}@#{REAL16}|#{REAL16}\+#{IMAG16}|#{REAL16}-#{IMAG16}|\+#{IMAG16}|-#{IMAG16}|#{REAL16}/
+      COMPLEX8 = /#{REAL8}@#{REAL8}|#{REAL8}\+#{IMAG8}|#{REAL8}-#{IMAG8}|\+#{IMAG8}|-#{IMAG8}|#{REAL8}/
+      COMPLEX2 = /#{REAL2}@#{REAL2}|#{REAL2}\+#{IMAG2}|#{REAL2}-#{IMAG2}|\+#{IMAG2}|-#{IMAG2}|#{REAL2}/
+      NUM10 = /#{PREFIX10}?#{COMPLEX10}/
+      NUM16 = /#{PREFIX16}#{COMPLEX16}/
+      NUM8 = /#{PREFIX8}#{COMPLEX8}/
+      NUM2 = /#{PREFIX2}#{COMPLEX2}/
+      NUM = /#{NUM10}|#{NUM16}|#{NUM8}|#{NUM2}/
+    
+    private
+      def scan_tokens tokens,options
+        
+        state = :initial
+        ident_kind = IDENT_KIND
+        
+        until eos?
+          kind = match = nil
+          
+          case state
+          when :initial
+            if scan(/ \s+ | \\\n /x)
+              kind = :space
+            elsif scan(/['\(\[\)\]]|#\(/)
+              kind = :operator_fat
+            elsif scan(/;.*/)
+              kind = :comment
+            elsif scan(/#\\(?:newline|space|.?)/)
+              kind = :char
+            elsif scan(/#[ft]/)
+              kind = :pre_constant
+            elsif scan(/#{IDENTIFIER}/o)
+              kind = ident_kind[matched]
+            elsif scan(/\./)
+              kind = :operator
+            elsif scan(/"/)
+              tokens << [:open, :string]
+              state = :string
+              tokens << ['"', :delimiter]
+              next
+            elsif scan(/#{NUM}/o) and not matched.empty?
+              kind = :integer
+            elsif getch
+              kind = :error
+            end
+            
+          when :string
+            if scan(/[^"\\]+/) or scan(/\\.?/)
+              kind = :content
+            elsif scan(/"/)
+              tokens << ['"', :delimiter]
+              tokens << [:close, :string]
+              state = :initial
+              next
+            else
+              raise_inspect "else case \" reached; %p not handled." % peek(1),
+                tokens, state
+            end
+            
+          else
+            raise "else case reached"
+          end
+          
+          match ||= matched
+          if $CODERAY_DEBUG and not kind
+            raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens
+          end
+          raise_inspect 'Empty token', tokens, state unless match
+          
+          tokens << [match, kind]
+          
+        end  # until eos
+        
+        if state == :string
+          tokens << [:close, :string]
+        end
+        
+        tokens
+        
+      end #scan_tokens
+    end #class
+  end #module scanners
+end #module coderay
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/sql.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,162 @@
+module CodeRay module Scanners
+  
+  # by Josh Goebel
+  class SQL < Scanner
+
+    register_for :sql
+    
+    RESERVED_WORDS = %w(
+      create database table index trigger drop primary key set select
+      insert update delete replace into
+      on from values before and or if exists case when
+      then else as group order by avg where
+      join inner outer union engine not
+      like end using collate show columns begin
+    )
+    
+    PREDEFINED_TYPES = %w(
+      char varchar enum binary text tinytext mediumtext
+      longtext blob tinyblob mediumblob longblob timestamp
+      date time datetime year double decimal float int
+      integer tinyint mediumint bigint smallint unsigned bit
+      bool boolean hex bin oct
+    )
+    
+    PREDEFINED_FUNCTIONS = %w( sum cast abs pi count min max avg )
+    
+    DIRECTIVES = %w( auto_increment unique default charset )
+
+    PREDEFINED_CONSTANTS = %w( null true false )
+    
+    IDENT_KIND = CaseIgnoringWordList.new(:ident).
+      add(RESERVED_WORDS, :reserved).
+      add(PREDEFINED_TYPES, :pre_type).
+      add(PREDEFINED_CONSTANTS, :pre_constant).
+      add(PREDEFINED_FUNCTIONS, :predefined).
+      add(DIRECTIVES, :directive)
+    
+    ESCAPE = / [rbfntv\n\\\/'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} | . /mx
+    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
+    
+    STRING_PREFIXES = /[xnb]|_\w+/i
+    
+    def scan_tokens tokens, options
+      
+      state = :initial
+      string_type = nil
+      string_content = ''
+      
+      until eos?
+        
+        kind = nil
+        match = nil
+        
+        if state == :initial
+          
+          if scan(/ \s+ | \\\n /x)
+            kind = :space
+          
+          elsif scan(/(?:--\s?|#).*/)
+            kind = :comment
+            
+          elsif scan(%r! /\* (?: .*? \*/ | .* ) !mx)
+            kind = :comment
+            
+          elsif scan(/ [-+*\/=<>;,!&^|()\[\]{}~%] | \.(?!\d) /x)
+            kind = :operator
+            
+          elsif scan(/(#{STRING_PREFIXES})?([`"'])/o)
+            prefix = self[1]
+            string_type = self[2]
+            tokens << [:open, :string]
+            tokens << [prefix, :modifier] if prefix
+            match = string_type
+            state = :string
+            kind = :delimiter
+            
+          elsif match = scan(/ @? [A-Za-z_][A-Za-z_0-9]* /x)
+            kind = match[0] == ?@ ? :variable : IDENT_KIND[match.downcase]
+            
+          elsif scan(/0[xX][0-9A-Fa-f]+/)
+            kind = :hex
+            
+          elsif scan(/0[0-7]+(?![89.eEfF])/)
+            kind = :oct
+            
+          elsif scan(/(?>\d+)(?![.eEfF])/)
+            kind = :integer
+            
+          elsif scan(/\d[fF]|\d*\.\d+(?:[eE][+-]?\d+)?|\d+[eE][+-]?\d+/)
+            kind = :float
+            
+          else
+            getch
+            kind = :error
+            
+          end
+          
+        elsif state == :string
+          if match = scan(/[^\\"'`]+/)
+            string_content << match
+            next
+          elsif match = scan(/["'`]/)
+            if string_type == match
+              if peek(1) == string_type  # doubling means escape
+                string_content << string_type << getch
+                next
+              end
+              unless string_content.empty?
+                tokens << [string_content, :content]
+                string_content = ''
+              end
+              tokens << [matched, :delimiter]
+              tokens << [:close, :string]
+              state = :initial
+              string_type = nil
+              next
+            else
+              string_content << match
+            end
+            next
+          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+            unless string_content.empty?
+              tokens << [string_content, :content]
+              string_content = ''
+            end
+            kind = :char
+          elsif match = scan(/ \\ . /mox)
+            string_content << match
+            next
+          elsif scan(/ \\ | $ /x)
+            unless string_content.empty?
+              tokens << [string_content, :content]
+              string_content = ''
+            end
+            kind = :error
+            state = :initial
+          else
+            raise "else case \" reached; %p not handled." % peek(1), tokens
+          end
+          
+        else
+          raise 'else-case reached', tokens
+          
+        end
+        
+        match ||= matched
+        unless kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens, state
+        end
+        raise_inspect 'Empty token', tokens unless match
+        
+        tokens << [match, kind]
+        
+      end
+      tokens
+      
+    end
+    
+  end
+  
+end end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/xml.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,17 @@
+module CodeRay
+module Scanners
+
+  load :html
+
+  # XML Scanner
+  #
+  # Currently this is the same scanner as Scanners::HTML.
+  class XML < HTML
+
+    register_for :xml
+    file_extension 'xml'
+    
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/scanners/yaml.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,140 @@
+module CodeRay
+module Scanners
+  
+  # YAML Scanner
+  #
+  # Based on the YAML scanner from Syntax by Jamis Buck.
+  class YAML < Scanner
+    
+    register_for :yaml
+    file_extension 'yml'
+    
+    KINDS_NOT_LOC = :all
+    
+    def scan_tokens tokens, options
+      
+      value_expected = nil
+      state = :initial
+      key_indent = indent = 0
+      
+      until eos?
+        
+        kind = nil
+        match = nil
+        key_indent = nil if bol?
+        
+        if match = scan(/ +[\t ]*/)
+          kind = :space
+          
+        elsif match = scan(/\n+/)
+          kind = :space
+          state = :initial if match.index(?\n)
+          
+        elsif match = scan(/#.*/)
+          kind = :comment
+          
+        elsif bol? and case
+          when match = scan(/---|\.\.\./)
+            tokens << [:open, :head]
+            tokens << [match, :head]
+            tokens << [:close, :head]
+            next
+          when match = scan(/%.*/)
+            tokens << [match, :doctype]
+            next
+          end
+        
+        elsif state == :value and case
+          when !check(/(?:"[^"]*")(?=: |:$)/) && scan(/"/)
+            tokens << [:open, :string]
+            tokens << [matched, :delimiter]
+            tokens << [matched, :content] if scan(/ [^"\\]* (?: \\. [^"\\]* )* /mx)
+            tokens << [matched, :delimiter] if scan(/"/)
+            tokens << [:close, :string]
+            next
+          when match = scan(/[|>][-+]?/)
+            tokens << [:open, :string]
+            tokens << [match, :delimiter]
+            string_indent = key_indent || column(pos - match.size - 1)
+            tokens << [matched, :content] if scan(/(?:\n+ {#{string_indent + 1}}.*)+/)
+            tokens << [:close, :string]
+            next
+          when match = scan(/(?![!"*&]).+?(?=$|\s+#)/)
+            tokens << [match, :string]
+            string_indent = key_indent || column(pos - match.size - 1)
+            tokens << [matched, :string] if scan(/(?:\n+ {#{string_indent + 1}}.*)+/)
+            next
+          end
+          
+        elsif case
+          when match = scan(/[-:](?= |$)/)
+            state = :value if state == :colon && (match == ':' || match == '-')
+            state = :value if state == :initial && match == '-'
+            kind = :operator
+          when match = scan(/[,{}\[\]]/)
+            kind = :operator
+          when state == :initial && match = scan(/[\w.() ]*\S(?=: |:$)/)
+            kind = :key
+            key_indent = column(pos - match.size - 1)
+            # tokens << [key_indent.inspect, :debug]
+            state = :colon
+          when match = scan(/(?:"[^"\n]*"|'[^'\n]*')(?=: |:$)/)
+            tokens << [:open, :key]
+            tokens << [match[0,1], :delimiter]
+            tokens << [match[1..-2], :content]
+            tokens << [match[-1,1], :delimiter]
+            tokens << [:close, :key]
+            key_indent = column(pos - match.size - 1)
+            # tokens << [key_indent.inspect, :debug]
+            state = :colon
+            next
+          when scan(/(![\w\/]+)(:([\w:]+))?/)
+            tokens << [self[1], :type]
+            if self[2]
+              tokens << [':', :operator]
+              tokens << [self[3], :class]
+            end
+            next
+          when scan(/&\S+/)
+            kind = :variable
+          when scan(/\*\w+/)
+            kind = :global_variable
+          when scan(/<</)
+            kind = :class_variable
+          when scan(/\d\d:\d\d:\d\d/)
+            kind = :oct
+          when scan(/\d\d\d\d-\d\d-\d\d\s\d\d:\d\d:\d\d(\.\d+)? [-+]\d\d:\d\d/)
+            kind = :oct
+          when scan(/:\w+/)
+            kind = :symbol
+          when scan(/[^:\s]+(:(?! |$)[^:\s]*)* .*/)
+            kind = :error
+          when scan(/[^:\s]+(:(?! |$)[^:\s]*)*/)
+            kind = :error
+          end
+          
+        else
+          getch
+          kind = :error
+          
+        end
+        
+        match ||= matched
+        
+        if $CODERAY_DEBUG and not kind
+          raise_inspect 'Error token %p in line %d' %
+            [[match, kind], line], tokens, state
+        end
+        raise_inspect 'Empty token', tokens, state unless match
+        
+        tokens << [match, kind]
+        
+      end
+      
+      tokens
+    end
+    
+  end
+  
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/style.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,20 @@
+module CodeRay
+
+  # This module holds the Style class and its subclasses.
+  #
+  # See Plugin.
+  module Styles
+    extend PluginHost
+    plugin_path File.dirname(__FILE__), 'styles'
+
+    class Style
+      extend Plugin
+      plugin_host Styles
+
+      DEFAULT_OPTIONS = { }
+
+    end
+
+  end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/styles/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,23 @@
+K 25
+svn:wc:ra_dav:version-url
+V 69
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/styles
+END
+cycnus.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/styles/cycnus.rb
+END
+murphy.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/styles/murphy.rb
+END
+_map.rb
+K 25
+svn:wc:ra_dav:version-url
+V 77
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/lib/coderay/styles/_map.rb
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/styles/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,130 @@
+10
+
+dir
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/lib/coderay/styles
+http://redmine.rubyforge.org/svn
+
+
+
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+cycnus.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+59c9814fd238510473d64b6182ce4b6b
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3820
+
+murphy.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+8d8b1bc00f865483efa1de4ebb6157b3
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3371
+
+_map.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+9b92a72b99db4496e76665edb7b38c00
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+57
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/styles/.svn/text-base/_map.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,7 @@
+module CodeRay
+module Styles
+
+  default :cycnus
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/styles/.svn/text-base/cycnus.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,152 @@
+module CodeRay
+module Styles
+
+  class Cycnus < Style
+
+    register_for :cycnus
+
+    code_background = '#f8f8f8'
+    numbers_background = '#def'
+    border_color = 'silver'
+    normal_color = '#000'
+
+    CSS_MAIN_STYLES = <<-MAIN
+.CodeRay {
+  background-color: #{code_background};
+  border: 1px solid #{border_color};
+  font-family: 'Courier New', 'Terminal', monospace;
+  color: #{normal_color};
+}
+.CodeRay pre { margin: 0px }
+
+div.CodeRay { }
+
+span.CodeRay { white-space: pre; border: 0px; padding: 2px }
+
+table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px }
+table.CodeRay td { padding: 2px 4px; vertical-align: top }
+
+.CodeRay .line_numbers, .CodeRay .no {
+  background-color: #{numbers_background};
+  color: gray;
+  text-align: right;
+}
+.CodeRay .line_numbers tt { font-weight: bold }
+.CodeRay .line_numbers .highlighted { color: red }
+.CodeRay .line { display: block; float: left; width: 100%; }
+.CodeRay .no { padding: 0px 4px }
+.CodeRay .code { width: 100% }
+
+ol.CodeRay { font-size: 10pt }
+ol.CodeRay li { white-space: pre }
+
+.CodeRay .code pre { overflow: auto }
+    MAIN
+
+    TOKEN_COLORS = <<-'TOKENS'
+.debug { color:white ! important; background:blue ! important; }
+
+.af { color:#00C }
+.an { color:#007 }
+.at { color:#f08 }
+.av { color:#700 }
+.aw { color:#C00 }
+.bi { color:#509; font-weight:bold }
+.c  { color:#888; }
+
+.ch { color:#04D }
+.ch .k { color:#04D }
+.ch .dl { color:#039 }
+
+.cl { color:#B06; font-weight:bold }
+.cm { color:#A08; font-weight:bold }
+.co { color:#036; font-weight:bold }
+.cr { color:#0A0 }
+.cv { color:#369 }
+.de { color:#B0B; }
+.df { color:#099; font-weight:bold }
+.di { color:#088; font-weight:bold }
+.dl { color:black }
+.do { color:#970 }
+.dt { color:#34b }
+.ds { color:#D42; font-weight:bold }
+.e  { color:#666; font-weight:bold }
+.en { color:#800; font-weight:bold }
+.er { color:#F00; background-color:#FAA }
+.ex { color:#C00; font-weight:bold }
+.fl { color:#60E; font-weight:bold }
+.fu { color:#06B; font-weight:bold }
+.gv { color:#d70; font-weight:bold }
+.hx { color:#058; font-weight:bold }
+.i  { color:#00D; font-weight:bold }
+.ic { color:#B44; font-weight:bold }
+
+.il { background: #ddd; color: black }
+.il .il { background: #ccc }
+.il .il .il { background: #bbb }
+.il .idl { background: #ddd; font-weight: bold; color: #666 }
+.idl { background-color: #bbb; font-weight: bold; color: #666; }
+
+.im { color:#f00; }
+.in { color:#B2B; font-weight:bold }
+.iv { color:#33B }
+.la { color:#970; font-weight:bold }
+.lv { color:#963 }
+.oc { color:#40E; font-weight:bold }
+.of { color:#000; font-weight:bold }
+.op { }
+.pc { color:#038; font-weight:bold }
+.pd { color:#369; font-weight:bold }
+.pp { color:#579; }
+.ps { color:#00C; font-weight:bold }
+.pt { color:#074; font-weight:bold }
+.r, .kw  { color:#080; font-weight:bold }
+
+.ke { color: #808; }
+.ke .dl { color: #606; }
+.ke .ch { color: #80f; }
+.vl { color: #088; }
+
+.rx { background-color:#fff0ff }
+.rx .k { color:#808 }
+.rx .dl { color:#404 }
+.rx .mod { color:#C2C }
+.rx .fu  { color:#404; font-weight: bold }
+
+.s { background-color:#fff0f0; color: #D20; }
+.s .s { background-color:#ffe0e0 }
+.s .s  .s { background-color:#ffd0d0 }
+.s .k { }
+.s .ch { color: #b0b; }
+.s .dl { color: #710; }
+
+.sh { background-color:#f0fff0; color:#2B2 }
+.sh .k { }
+.sh .dl { color:#161 }
+
+.sy { color:#A60 }
+.sy .k { color:#A60 }
+.sy .dl { color:#630 }
+
+.ta { color:#070 }
+.tf { color:#070; font-weight:bold }
+.ts { color:#D70; font-weight:bold }
+.ty { color:#339; font-weight:bold }
+.v  { color:#036 }
+.xt { color:#444 }
+
+.ins { background: #afa; }
+.del { background: #faa; }
+.chg { color: #aaf; background: #007; }
+.head { color: #f8f; background: #505 }
+
+.ins .ins { color: #080; font-weight:bold }
+.del .del { color: #800; font-weight:bold }
+.chg .chg { color: #66f; }
+.head .head { color: #f4f; }
+    TOKENS
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/styles/.svn/text-base/murphy.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,134 @@
+module CodeRay
+module Styles
+
+  class Murphy < Style
+
+    register_for :murphy
+
+    code_background = '#001129'
+    numbers_background = code_background
+    border_color = 'silver'
+    normal_color = '#C0C0C0'
+
+    CSS_MAIN_STYLES = <<-MAIN
+.CodeRay {
+  background-color: #{code_background};
+  border: 1px solid #{border_color};
+  font-family: 'Courier New', 'Terminal', monospace;
+  color: #{normal_color};
+}
+.CodeRay pre { margin: 0px; }
+
+div.CodeRay { }
+
+span.CodeRay { white-space: pre; border: 0px; padding: 2px; }
+
+table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px; }
+table.CodeRay td { padding: 2px 4px; vertical-align: top; }
+
+.CodeRay .line_numbers, .CodeRay .no {
+  background-color: #{numbers_background};
+  color: gray;
+  text-align: right;
+}
+.CodeRay .line_numbers tt { font-weight: bold; }
+.CodeRay .line_numbers .highlighted { color: red }
+.CodeRay .line { display: block; float: left; width: 100%; }
+.CodeRay .no { padding: 0px 4px; }
+.CodeRay .code { width: 100%; }
+
+ol.CodeRay { font-size: 10pt; }
+ol.CodeRay li { white-space: pre; }
+
+.CodeRay .code pre { overflow: auto; }
+    MAIN
+
+    TOKEN_COLORS = <<-'TOKENS'
+.af { color:#00C; }
+.an { color:#007; }
+.av { color:#700; }
+.aw { color:#C00; }
+.bi { color:#509; font-weight:bold; }
+.c  { color:#555; background-color: black; }
+
+.ch { color:#88F; }
+.ch .k { color:#04D; }
+.ch .dl { color:#039; }
+
+.cl { color:#e9e; font-weight:bold; }
+.co { color:#5ED; font-weight:bold; }
+.cr { color:#0A0; }
+.cv { color:#ccf; }
+.df { color:#099; font-weight:bold; }
+.di { color:#088; font-weight:bold; }
+.dl { color:black; }
+.do { color:#970; }
+.ds { color:#D42; font-weight:bold; }
+.e  { color:#666; font-weight:bold; }
+.er { color:#F00; background-color:#FAA; }
+.ex { color:#F00; font-weight:bold; }
+.fl { color:#60E; font-weight:bold; }
+.fu { color:#5ed; font-weight:bold; }
+.gv { color:#f84; }
+.hx { color:#058; font-weight:bold; }
+.i  { color:#66f; font-weight:bold; }
+.ic { color:#B44; font-weight:bold; }
+.il { }
+.in { color:#B2B; font-weight:bold; }
+.iv { color:#aaf; }
+.la { color:#970; font-weight:bold; }
+.lv { color:#963; }
+.oc { color:#40E; font-weight:bold; }
+.of { color:#000; font-weight:bold; }
+.op { }
+.pc { color:#08f; font-weight:bold; }
+.pd { color:#369; font-weight:bold; }
+.pp { color:#579; }
+.pt { color:#66f; font-weight:bold; }
+.r  { color:#5de; font-weight:bold; }
+.r, .kw  { color:#5de; font-weight:bold }
+
+.ke { color: #808; }
+
+.rx { background-color:#221133; }
+.rx .k { color:#f8f; }
+.rx .dl { color:#f0f; }
+.rx .mod { color:#f0b; }
+.rx .fu  { color:#404; font-weight: bold; }
+
+.s  { background-color:#331122; }
+.s  .s { background-color:#ffe0e0; }
+.s  .s  .s { background-color:#ffd0d0; }
+.s  .k { color:#F88; }
+.s  .dl { color:#f55; }
+
+.sh { background-color:#f0fff0; }
+.sh .k { color:#2B2; }
+.sh .dl { color:#161; }
+
+.sy { color:#Fc8; }
+.sy .k { color:#Fc8; }
+.sy .dl { color:#F84; }
+
+.ta { color:#070; }
+.tf { color:#070; font-weight:bold; }
+.ts { color:#D70; font-weight:bold; }
+.ty { color:#339; font-weight:bold; }
+.v  { color:#036; }
+.xt { color:#444; }
+
+.ins { background: #afa; }
+.del { background: #faa; }
+.chg { color: #aaf; background: #007; }
+.head { color: #f8f; background: #505 }
+
+.ins .ins { color: #080; font-weight:bold }
+.del .del { color: #800; font-weight:bold }
+.chg .chg { color: #66f; }
+.head .head { color: #f4f; }
+    TOKENS
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/styles/_map.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,7 @@
+module CodeRay
+module Styles
+
+  default :cycnus
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/styles/cycnus.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,152 @@
+module CodeRay
+module Styles
+
+  class Cycnus < Style
+
+    register_for :cycnus
+
+    code_background = '#f8f8f8'
+    numbers_background = '#def'
+    border_color = 'silver'
+    normal_color = '#000'
+
+    CSS_MAIN_STYLES = <<-MAIN
+.CodeRay {
+  background-color: #{code_background};
+  border: 1px solid #{border_color};
+  font-family: 'Courier New', 'Terminal', monospace;
+  color: #{normal_color};
+}
+.CodeRay pre { margin: 0px }
+
+div.CodeRay { }
+
+span.CodeRay { white-space: pre; border: 0px; padding: 2px }
+
+table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px }
+table.CodeRay td { padding: 2px 4px; vertical-align: top }
+
+.CodeRay .line_numbers, .CodeRay .no {
+  background-color: #{numbers_background};
+  color: gray;
+  text-align: right;
+}
+.CodeRay .line_numbers tt { font-weight: bold }
+.CodeRay .line_numbers .highlighted { color: red }
+.CodeRay .line { display: block; float: left; width: 100%; }
+.CodeRay .no { padding: 0px 4px }
+.CodeRay .code { width: 100% }
+
+ol.CodeRay { font-size: 10pt }
+ol.CodeRay li { white-space: pre }
+
+.CodeRay .code pre { overflow: auto }
+    MAIN
+
+    TOKEN_COLORS = <<-'TOKENS'
+.debug { color:white ! important; background:blue ! important; }
+
+.af { color:#00C }
+.an { color:#007 }
+.at { color:#f08 }
+.av { color:#700 }
+.aw { color:#C00 }
+.bi { color:#509; font-weight:bold }
+.c  { color:#888; }
+
+.ch { color:#04D }
+.ch .k { color:#04D }
+.ch .dl { color:#039 }
+
+.cl { color:#B06; font-weight:bold }
+.cm { color:#A08; font-weight:bold }
+.co { color:#036; font-weight:bold }
+.cr { color:#0A0 }
+.cv { color:#369 }
+.de { color:#B0B; }
+.df { color:#099; font-weight:bold }
+.di { color:#088; font-weight:bold }
+.dl { color:black }
+.do { color:#970 }
+.dt { color:#34b }
+.ds { color:#D42; font-weight:bold }
+.e  { color:#666; font-weight:bold }
+.en { color:#800; font-weight:bold }
+.er { color:#F00; background-color:#FAA }
+.ex { color:#C00; font-weight:bold }
+.fl { color:#60E; font-weight:bold }
+.fu { color:#06B; font-weight:bold }
+.gv { color:#d70; font-weight:bold }
+.hx { color:#058; font-weight:bold }
+.i  { color:#00D; font-weight:bold }
+.ic { color:#B44; font-weight:bold }
+
+.il { background: #ddd; color: black }
+.il .il { background: #ccc }
+.il .il .il { background: #bbb }
+.il .idl { background: #ddd; font-weight: bold; color: #666 }
+.idl { background-color: #bbb; font-weight: bold; color: #666; }
+
+.im { color:#f00; }
+.in { color:#B2B; font-weight:bold }
+.iv { color:#33B }
+.la { color:#970; font-weight:bold }
+.lv { color:#963 }
+.oc { color:#40E; font-weight:bold }
+.of { color:#000; font-weight:bold }
+.op { }
+.pc { color:#038; font-weight:bold }
+.pd { color:#369; font-weight:bold }
+.pp { color:#579; }
+.ps { color:#00C; font-weight:bold }
+.pt { color:#074; font-weight:bold }
+.r, .kw  { color:#080; font-weight:bold }
+
+.ke { color: #808; }
+.ke .dl { color: #606; }
+.ke .ch { color: #80f; }
+.vl { color: #088; }
+
+.rx { background-color:#fff0ff }
+.rx .k { color:#808 }
+.rx .dl { color:#404 }
+.rx .mod { color:#C2C }
+.rx .fu  { color:#404; font-weight: bold }
+
+.s { background-color:#fff0f0; color: #D20; }
+.s .s { background-color:#ffe0e0 }
+.s .s  .s { background-color:#ffd0d0 }
+.s .k { }
+.s .ch { color: #b0b; }
+.s .dl { color: #710; }
+
+.sh { background-color:#f0fff0; color:#2B2 }
+.sh .k { }
+.sh .dl { color:#161 }
+
+.sy { color:#A60 }
+.sy .k { color:#A60 }
+.sy .dl { color:#630 }
+
+.ta { color:#070 }
+.tf { color:#070; font-weight:bold }
+.ts { color:#D70; font-weight:bold }
+.ty { color:#339; font-weight:bold }
+.v  { color:#036 }
+.xt { color:#444 }
+
+.ins { background: #afa; }
+.del { background: #faa; }
+.chg { color: #aaf; background: #007; }
+.head { color: #f8f; background: #505 }
+
+.ins .ins { color: #080; font-weight:bold }
+.del .del { color: #800; font-weight:bold }
+.chg .chg { color: #66f; }
+.head .head { color: #f4f; }
+    TOKENS
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/styles/murphy.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,134 @@
+module CodeRay
+module Styles
+
+  class Murphy < Style
+
+    register_for :murphy
+
+    code_background = '#001129'
+    numbers_background = code_background
+    border_color = 'silver'
+    normal_color = '#C0C0C0'
+
+    CSS_MAIN_STYLES = <<-MAIN
+.CodeRay {
+  background-color: #{code_background};
+  border: 1px solid #{border_color};
+  font-family: 'Courier New', 'Terminal', monospace;
+  color: #{normal_color};
+}
+.CodeRay pre { margin: 0px; }
+
+div.CodeRay { }
+
+span.CodeRay { white-space: pre; border: 0px; padding: 2px; }
+
+table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px; }
+table.CodeRay td { padding: 2px 4px; vertical-align: top; }
+
+.CodeRay .line_numbers, .CodeRay .no {
+  background-color: #{numbers_background};
+  color: gray;
+  text-align: right;
+}
+.CodeRay .line_numbers tt { font-weight: bold; }
+.CodeRay .line_numbers .highlighted { color: red }
+.CodeRay .line { display: block; float: left; width: 100%; }
+.CodeRay .no { padding: 0px 4px; }
+.CodeRay .code { width: 100%; }
+
+ol.CodeRay { font-size: 10pt; }
+ol.CodeRay li { white-space: pre; }
+
+.CodeRay .code pre { overflow: auto; }
+    MAIN
+
+    TOKEN_COLORS = <<-'TOKENS'
+.af { color:#00C; }
+.an { color:#007; }
+.av { color:#700; }
+.aw { color:#C00; }
+.bi { color:#509; font-weight:bold; }
+.c  { color:#555; background-color: black; }
+
+.ch { color:#88F; }
+.ch .k { color:#04D; }
+.ch .dl { color:#039; }
+
+.cl { color:#e9e; font-weight:bold; }
+.co { color:#5ED; font-weight:bold; }
+.cr { color:#0A0; }
+.cv { color:#ccf; }
+.df { color:#099; font-weight:bold; }
+.di { color:#088; font-weight:bold; }
+.dl { color:black; }
+.do { color:#970; }
+.ds { color:#D42; font-weight:bold; }
+.e  { color:#666; font-weight:bold; }
+.er { color:#F00; background-color:#FAA; }
+.ex { color:#F00; font-weight:bold; }
+.fl { color:#60E; font-weight:bold; }
+.fu { color:#5ed; font-weight:bold; }
+.gv { color:#f84; }
+.hx { color:#058; font-weight:bold; }
+.i  { color:#66f; font-weight:bold; }
+.ic { color:#B44; font-weight:bold; }
+.il { }
+.in { color:#B2B; font-weight:bold; }
+.iv { color:#aaf; }
+.la { color:#970; font-weight:bold; }
+.lv { color:#963; }
+.oc { color:#40E; font-weight:bold; }
+.of { color:#000; font-weight:bold; }
+.op { }
+.pc { color:#08f; font-weight:bold; }
+.pd { color:#369; font-weight:bold; }
+.pp { color:#579; }
+.pt { color:#66f; font-weight:bold; }
+.r  { color:#5de; font-weight:bold; }
+.r, .kw  { color:#5de; font-weight:bold }
+
+.ke { color: #808; }
+
+.rx { background-color:#221133; }
+.rx .k { color:#f8f; }
+.rx .dl { color:#f0f; }
+.rx .mod { color:#f0b; }
+.rx .fu  { color:#404; font-weight: bold; }
+
+.s  { background-color:#331122; }
+.s  .s { background-color:#ffe0e0; }
+.s  .s  .s { background-color:#ffd0d0; }
+.s  .k { color:#F88; }
+.s  .dl { color:#f55; }
+
+.sh { background-color:#f0fff0; }
+.sh .k { color:#2B2; }
+.sh .dl { color:#161; }
+
+.sy { color:#Fc8; }
+.sy .k { color:#Fc8; }
+.sy .dl { color:#F84; }
+
+.ta { color:#070; }
+.tf { color:#070; font-weight:bold; }
+.ts { color:#D70; font-weight:bold; }
+.ty { color:#339; font-weight:bold; }
+.v  { color:#036; }
+.xt { color:#444; }
+
+.ins { background: #afa; }
+.del { background: #faa; }
+.chg { color: #aaf; background: #007; }
+.head { color: #f8f; background: #505 }
+
+.ins .ins { color: #080; font-weight:bold }
+.del .del { color: #800; font-weight:bold }
+.chg .chg { color: #66f; }
+.head .head { color: #f4f; }
+    TOKENS
+
+  end
+
+end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/token_classes.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,86 @@
+module CodeRay
+  class Tokens
+    ClassOfKind = Hash.new do |h, k|
+      h[k] = k.to_s
+    end
+    ClassOfKind.update with = {
+      :annotation => 'at',
+      :attribute_name => 'an',
+      :attribute_name_fat => 'af',
+      :attribute_value => 'av',
+      :attribute_value_fat => 'aw',
+      :bin => 'bi',
+      :char => 'ch',
+      :class => 'cl',
+      :class_variable => 'cv',
+      :color => 'cr',
+      :comment => 'c',
+      :complex => 'cm',
+      :constant => 'co',
+      :content => 'k',
+      :decorator => 'de',
+      :definition => 'df',
+      :delimiter => 'dl',
+      :directive => 'di',
+      :doc => 'do',
+      :doctype => 'dt',
+      :doc_string => 'ds',
+      :entity => 'en',
+      :error => 'er',
+      :escape => 'e',
+      :exception => 'ex',
+      :float => 'fl',
+      :function => 'fu',
+      :global_variable => 'gv',
+      :hex => 'hx',
+      :imaginary => 'cm',
+      :important => 'im',
+      :include => 'ic',
+      :inline => 'il',
+      :inline_delimiter => 'idl',
+      :instance_variable => 'iv',
+      :integer => 'i',
+      :interpreted => 'in',
+      :keyword => 'kw',
+      :key => 'ke',
+      :label => 'la',
+      :local_variable => 'lv',
+      :modifier => 'mod',
+      :oct => 'oc',
+      :operator_fat => 'of',
+      :pre_constant => 'pc',
+      :pre_type => 'pt',
+      :predefined => 'pd',
+      :preprocessor => 'pp',
+      :pseudo_class => 'ps',
+      :regexp => 'rx',
+      :reserved => 'r',
+      :shell => 'sh',
+      :string => 's',
+      :symbol => 'sy',
+      :tag => 'ta',
+      :tag_fat => 'tf',
+      :tag_special => 'ts',
+      :type => 'ty',
+      :variable => 'v',
+      :value => 'vl',
+      :xml_text => 'xt',
+      
+      :insert => 'ins',
+      :delete => 'del',
+      :change => 'chg',
+      :head => 'head',
+
+      :ident => :NO_HIGHLIGHT, # 'id'
+      #:operator => 'op',
+      :operator => :NO_HIGHLIGHT,  # 'op'
+      :space => :NO_HIGHLIGHT,  # 'sp'
+      :plain => :NO_HIGHLIGHT,
+    }
+    ClassOfKind[:method] = ClassOfKind[:function]
+    ClassOfKind[:open] = ClassOfKind[:close] = ClassOfKind[:delimiter]
+    ClassOfKind[:nesting_delimiter] = ClassOfKind[:delimiter]
+    ClassOfKind[:escape] = ClassOfKind[:delimiter]
+    #ClassOfKind.default = ClassOfKind[:error] or raise 'no class found for :error!'
+  end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/lib/coderay/tokens.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,390 @@
+module CodeRay
+
+  # = Tokens
+  #
+  # The Tokens class represents a list of tokens returnd from
+  # a Scanner.
+  #
+  # A token is not a special object, just a two-element Array
+  # consisting of
+  # * the _token_ _text_ (the original source of the token in a String) or
+  #   a _token_ _action_ (:open, :close, :begin_line, :end_line)
+  # * the _token_ _kind_ (a Symbol representing the type of the token)
+  #
+  # A token looks like this:
+  #
+  #   ['# It looks like this', :comment]
+  #   ['3.1415926', :float]
+  #   ['$^', :error]
+  #
+  # Some scanners also yield sub-tokens, represented by special
+  # token actions, namely :open and :close.
+  #
+  # The Ruby scanner, for example, splits "a string" into:
+  #
+  #  [
+  #   [:open, :string],
+  #   ['"', :delimiter],
+  #   ['a string', :content],
+  #   ['"', :delimiter],
+  #   [:close, :string]
+  #  ]
+  #
+  # Tokens is the interface between Scanners and Encoders:
+  # The input is split and saved into a Tokens object. The Encoder
+  # then builds the output from this object.
+  #
+  # Thus, the syntax below becomes clear:
+  #
+  #   CodeRay.scan('price = 2.59', :ruby).html
+  #   # the Tokens object is here -------^
+  #
+  # See how small it is? ;)
+  #
+  # Tokens gives you the power to handle pre-scanned code very easily:
+  # You can convert it to a webpage, a YAML file, or dump it into a gzip'ed string
+  # that you put in your DB.
+  # 
+  # It also allows you to generate tokens directly (without using a scanner),
+  # to load them from a file, and still use any Encoder that CodeRay provides.
+  #
+  # Tokens' subclass TokenStream allows streaming to save memory.
+  class Tokens < Array
+    
+    # The Scanner instance that created the tokens.
+    attr_accessor :scanner
+    
+    # Whether the object is a TokenStream.
+    #
+    # Returns false.
+    def stream?
+      false
+    end
+
+    # Iterates over all tokens.
+    #
+    # If a filter is given, only tokens of that kind are yielded.
+    def each kind_filter = nil, &block
+      unless kind_filter
+        super(&block)
+      else
+        super() do |text, kind|
+          next unless kind == kind_filter
+          yield text, kind
+        end
+      end
+    end
+
+    # Iterates over all text tokens.
+    # Range tokens like [:open, :string] are left out.
+    #
+    # Example:
+    #   tokens.each_text_token { |text, kind| text.replace html_escape(text) }
+    def each_text_token
+      each do |text, kind|
+        next unless text.is_a? ::String
+        yield text, kind
+      end
+    end
+
+    # Encode the tokens using encoder.
+    #
+    # encoder can be
+    # * a symbol like :html oder :statistic
+    # * an Encoder class
+    # * an Encoder object
+    #
+    # options are passed to the encoder.
+    def encode encoder, options = {}
+      unless encoder.is_a? Encoders::Encoder
+        unless encoder.is_a? Class
+          encoder_class = Encoders[encoder]
+        end
+        encoder = encoder_class.new options
+      end
+      encoder.encode_tokens self, options
+    end
+
+
+    # Turn into a string using Encoders::Text.
+    #
+    # +options+ are passed to the encoder if given.
+    def to_s options = {}
+      encode :text, options
+    end
+
+    # Redirects unknown methods to encoder calls.
+    #
+    # For example, if you call +tokens.html+, the HTML encoder
+    # is used to highlight the tokens.
+    def method_missing meth, options = {}
+      Encoders[meth].new(options).encode_tokens self
+    end
+
+    # Returns the tokens compressed by joining consecutive
+    # tokens of the same kind.
+    #
+    # This can not be undone, but should yield the same output
+    # in most Encoders.  It basically makes the output smaller.
+    #
+    # Combined with dump, it saves space for the cost of time.
+    #
+    # If the scanner is written carefully, this is not required -
+    # for example, consecutive //-comment lines could already be
+    # joined in one comment token by the Scanner.
+    def optimize
+      last_kind = last_text = nil
+      new = self.class.new
+      for text, kind in self
+        if text.is_a? String
+          if kind == last_kind
+            last_text << text
+          else
+            new << [last_text, last_kind] if last_kind
+            last_text = text
+            last_kind = kind
+          end
+        else
+          new << [last_text, last_kind] if last_kind
+          last_kind = last_text = nil
+          new << [text, kind]
+        end
+      end
+      new << [last_text, last_kind] if last_kind
+      new
+    end
+
+    # Compact the object itself; see optimize.
+    def optimize!
+      replace optimize
+    end
+    
+    # Ensure that all :open tokens have a correspondent :close one.
+    #
+    # TODO: Test this!
+    def fix
+      tokens = self.class.new
+      # Check token nesting using a stack of kinds.
+      opened = []
+      for type, kind in self
+        case type
+        when :open
+          opened.push [:close, kind]
+        when :begin_line
+          opened.push [:end_line, kind]
+        when :close, :end_line
+          expected = opened.pop
+          if [type, kind] != expected
+            # Unexpected :close; decide what to do based on the kind:
+            # - token was never opened: delete the :close (just skip it)
+            next unless opened.rindex expected
+            # - token was opened earlier: also close tokens in between
+            tokens << token until (token = opened.pop) == expected
+          end
+        end
+        tokens << [type, kind]
+      end
+      # Close remaining opened tokens
+      tokens << token while token = opened.pop
+      tokens
+    end
+    
+    def fix!
+      replace fix
+    end
+    
+    # TODO: Scanner#split_into_lines
+    # 
+    # Makes sure that:
+    # - newlines are single tokens
+    #   (which means all other token are single-line)
+    # - there are no open tokens at the end the line
+    #
+    # This makes it simple for encoders that work line-oriented,
+    # like HTML with list-style numeration.
+    def split_into_lines
+      raise NotImplementedError
+    end
+
+    def split_into_lines!
+      replace split_into_lines
+    end
+
+    # Dumps the object into a String that can be saved
+    # in files or databases.
+    #
+    # The dump is created with Marshal.dump;
+    # In addition, it is gzipped using GZip.gzip.
+    #
+    # The returned String object includes Undumping
+    # so it has an #undump method. See Tokens.load.
+    #
+    # You can configure the level of compression,
+    # but the default value 7 should be what you want
+    # in most cases as it is a good compromise between
+    # speed and compression rate.
+    #
+    # See GZip module.
+    def dump gzip_level = 7
+      require 'coderay/helpers/gzip_simple'
+      dump = Marshal.dump self
+      dump = dump.gzip gzip_level
+      dump.extend Undumping
+    end
+
+    # The total size of the tokens.
+    # Should be equal to the input size before
+    # scanning.
+    def text_size
+      size = 0
+      each_text_token do |t, k|
+        size + t.size
+      end
+      size
+    end
+
+    # Return all text tokens joined into a single string.
+    def text
+      map { |t, k| t if t.is_a? ::String }.join
+    end
+
+    # Include this module to give an object an #undump
+    # method.
+    #
+    # The string returned by Tokens.dump includes Undumping.
+    module Undumping
+      # Calls Tokens.load with itself.
+      def undump
+        Tokens.load self
+      end
+    end
+
+    # Undump the object using Marshal.load, then
+    # unzip it using GZip.gunzip.
+    #
+    # The result is commonly a Tokens object, but
+    # this is not guaranteed.
+    def Tokens.load dump
+      require 'coderay/helpers/gzip_simple'
+      dump = dump.gunzip
+      @dump = Marshal.load dump
+    end
+
+  end
+
+
+  # = TokenStream
+  #
+  # The TokenStream class is a fake Array without elements.
+  #
+  # It redirects the method << to a block given at creation.
+  #
+  # This allows scanners and Encoders to use streaming (no
+  # tokens are saved, the input is highlighted the same time it
+  # is scanned) with the same code.
+  #
+  # See CodeRay.encode_stream and CodeRay.scan_stream
+  class TokenStream < Tokens
+
+    # Whether the object is a TokenStream.
+    #
+    # Returns true.
+    def stream?
+      true
+    end
+
+    # The Array is empty, but size counts the tokens given by <<.
+    attr_reader :size
+
+    # Creates a new TokenStream that calls +block+ whenever
+    # its << method is called.
+    #
+    # Example:
+    #
+    #   require 'coderay'
+    #   
+    #   token_stream = CodeRay::TokenStream.new do |text, kind|
+    #     puts 'kind: %s, text size: %d.' % [kind, text.size]
+    #   end
+    #   
+    #   token_stream << ['/\d+/', :regexp]
+    #   #-> kind: rexpexp, text size: 5.
+    #
+    def initialize &block
+      raise ArgumentError, 'Block expected for streaming.' unless block
+      @callback = block
+      @size = 0
+    end
+
+    # Calls +block+ with +token+ and increments size.
+    #
+    # Returns self.
+    def << token
+      @callback.call(*token)
+      @size += 1
+      self
+    end
+
+    # This method is not implemented due to speed reasons. Use Tokens.
+    def text_size
+      raise NotImplementedError,
+        'This method is not implemented due to speed reasons.'
+    end
+
+    # A TokenStream cannot be dumped. Use Tokens.
+    def dump
+      raise NotImplementedError, 'A TokenStream cannot be dumped.'
+    end
+
+    # A TokenStream cannot be optimized. Use Tokens.
+    def optimize
+      raise NotImplementedError, 'A TokenStream cannot be optimized.'
+    end
+
+  end
+
+end
+
+if $0 == __FILE__
+  $VERBOSE = true
+  $: << File.join(File.dirname(__FILE__), '..')
+  eval DATA.read, nil, $0, __LINE__ + 4
+end
+
+__END__
+require 'test/unit'
+
+class TokensTest < Test::Unit::TestCase
+  
+  def test_creation
+    assert CodeRay::Tokens < Array
+    tokens = nil
+    assert_nothing_raised do
+      tokens = CodeRay::Tokens.new
+    end
+    assert_kind_of Array, tokens
+  end
+  
+  def test_adding_tokens
+    tokens = CodeRay::Tokens.new
+    assert_nothing_raised do
+      tokens << ['string', :type]
+      tokens << ['()', :operator]
+    end
+    assert_equal tokens.size, 2
+  end
+  
+  def test_dump_undump
+    tokens = CodeRay::Tokens.new
+    assert_nothing_raised do
+      tokens << ['string', :type]
+      tokens << ['()', :operator]
+    end
+    tokens2 = nil
+    assert_nothing_raised do
+      tokens2 = tokens.dump.undump
+    end
+    assert_equal tokens, tokens2
+  end
+  
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,5 @@
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,31 @@
+10
+
+dir
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/test
+http://redmine.rubyforge.org/svn
+
+
+
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+functional
+dir
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,77 @@
+K 25
+svn:wc:ra_dav:version-url
+V 66
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional
+END
+for_redcloth.rbc
+K 25
+svn:wc:ra_dav:version-url
+V 83
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/for_redcloth.rbc
+END
+vhdl.rb
+K 25
+svn:wc:ra_dav:version-url
+V 74
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/vhdl.rb
+END
+vhdl.rbc
+K 25
+svn:wc:ra_dav:version-url
+V 75
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/vhdl.rbc
+END
+basic.rb
+K 25
+svn:wc:ra_dav:version-url
+V 75
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/basic.rb
+END
+basic.rbc
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/basic.rbc
+END
+load_plugin_scanner.rb
+K 25
+svn:wc:ra_dav:version-url
+V 89
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/load_plugin_scanner.rb
+END
+word_list.rb
+K 25
+svn:wc:ra_dav:version-url
+V 79
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/word_list.rb
+END
+load_plugin_scanner.rbc
+K 25
+svn:wc:ra_dav:version-url
+V 90
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/load_plugin_scanner.rbc
+END
+suite.rb
+K 25
+svn:wc:ra_dav:version-url
+V 75
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/suite.rb
+END
+word_list.rbc
+K 25
+svn:wc:ra_dav:version-url
+V 80
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/word_list.rbc
+END
+for_redcloth.rb
+K 25
+svn:wc:ra_dav:version-url
+V 82
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/for_redcloth.rb
+END
+suite.rbc
+K 25
+svn:wc:ra_dav:version-url
+V 76
+/svn/!svn/ver/4739/trunk/vendor/gems/coderay-0.9.7/test/functional/suite.rbc
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,436 @@
+10
+
+dir
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/coderay-0.9.7/test/functional
+http://redmine.rubyforge.org/svn
+
+
+
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+e93f8b46-1217-0410-a6f0-8f06a7374b81
+
+for_redcloth.rbc
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+060e0137b69ee9015c13d2a7b52f7ba5
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+6844
+
+vhdl.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+68592e4216555f25218f67641cd04879
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3508
+
+vhdl.rbc
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+756a012d3c51e759ecf3aba421b79d26
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7459
+
+basic.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+4c2c76c7fec083da0817c917495fe273
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3081
+
+basic.rbc
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+2dc7e681d05b65ad084db2cb31db57a4
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+7680
+
+load_plugin_scanner.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+9bb16867dc01035932f0ce2491457d4a
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+231
+
+word_list.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+a1077af2bb080972689e1c7c1b00f5cd
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2167
+
+load_plugin_scanner.rbc
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+a7da576f27c98ef97a1845982ed43fd8
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1145
+
+suite.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+c5ad97b377df804994bb80e0d903a954
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+265
+
+word_list.rbc
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+bb7279f9b4099e57f551ae9992e03128
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5584
+
+for_redcloth.rb
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+dc96a8219c522571f990cfe3702a428f
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+3001
+
+suite.rbc
+file
+
+
+
+
+2011-03-03T11:05:13.000000Z
+534ae63cbcff177038141b589f7fd0fa
+2011-01-22T13:18:01.557255Z
+4739
+jplang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1035
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/basic.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,122 @@
+require 'test/unit'
+require 'coderay'
+
+class BasicTest < Test::Unit::TestCase
+  
+  def test_version
+    assert_nothing_raised do
+      assert_match(/\A\d\.\d\.\d\z/, CodeRay::VERSION)
+    end
+  end
+  
+  RUBY_TEST_CODE = 'puts "Hello, World!"'
+  
+  RUBY_TEST_TOKENS = [
+    ['puts', :ident],
+    [' ', :space],
+    [:open, :string],
+      ['"', :delimiter],
+      ['Hello, World!', :content],
+      ['"', :delimiter],
+    [:close, :string]
+  ]
+  def test_simple_scan
+    assert_nothing_raised do
+      assert_equal RUBY_TEST_TOKENS, CodeRay.scan(RUBY_TEST_CODE, :ruby).to_ary
+    end
+  end
+  
+  RUBY_TEST_HTML = 'puts <span class="s"><span class="dl">&quot;</span>' + 
+    '<span class="k">Hello, World!</span><span class="dl">&quot;</span></span>'
+  def test_simple_highlight
+    assert_nothing_raised do
+      assert_equal RUBY_TEST_HTML, CodeRay.scan(RUBY_TEST_CODE, :ruby).html
+    end
+  end
+  
+  def test_duo
+    assert_equal(RUBY_TEST_CODE,
+      CodeRay::Duo[:plain, :plain].highlight(RUBY_TEST_CODE))
+    assert_equal(RUBY_TEST_CODE,
+      CodeRay::Duo[:plain => :plain].highlight(RUBY_TEST_CODE))
+  end
+  
+  def test_duo_stream
+    assert_equal(RUBY_TEST_CODE,
+      CodeRay::Duo[:plain, :plain].highlight(RUBY_TEST_CODE, :stream => true))
+  end
+  
+  def test_comment_filter
+    assert_equal <<-EXPECTED, CodeRay.scan(<<-INPUT, :ruby).comment_filter.text
+#!/usr/bin/env ruby
+
+code
+
+more code  
+      EXPECTED
+#!/usr/bin/env ruby
+=begin
+A multi-line comment.
+=end
+code
+# A single-line comment.
+more code  # and another comment, in-line.
+      INPUT
+  end
+  
+  def test_lines_of_code
+    assert_equal 2, CodeRay.scan(<<-INPUT, :ruby).lines_of_code
+#!/usr/bin/env ruby
+=begin
+A multi-line comment.
+=end
+code
+# A single-line comment.
+more code  # and another comment, in-line.
+      INPUT
+    rHTML = <<-RHTML
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
+  <title><%= controller.controller_name.titleize %>: <%= controller.action_name %></title>
+  <%= stylesheet_link_tag 'scaffold' %>
+</head>
+<body>
+
+<p style="color: green"><%= flash[:notice] %></p>
+
+<div id="main">
+  <%= yield %>
+</div>
+
+</body>
+</html>
+      RHTML
+    assert_equal 0, CodeRay.scan(rHTML, :html).lines_of_code
+    assert_equal 0, CodeRay.scan(rHTML, :php).lines_of_code
+    assert_equal 0, CodeRay.scan(rHTML, :yaml).lines_of_code
+    assert_equal 4, CodeRay.scan(rHTML, :rhtml).lines_of_code
+  end
+  
+  def test_rubygems_not_loaded
+    assert_equal nil, defined? Gem
+  end if ENV['check_rubygems'] && RUBY_VERSION < '1.9'
+  
+  def test_list_of_encoders
+    assert_kind_of(Array, CodeRay::Encoders.list)
+    assert CodeRay::Encoders.list.include?('count')
+  end
+  
+  def test_list_of_scanners
+    assert_kind_of(Array, CodeRay::Scanners.list)
+    assert CodeRay::Scanners.list.include?('plaintext')
+  end
+  
+  def test_scan_a_frozen_string
+    CodeRay.scan RUBY_VERSION, :ruby
+  end
+  
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/basic.rbc.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,2022 @@
+!RBIX
+0
+x
+M
+1
+n
+n
+x
+10
+__script__
+i
+53
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+47
+49
+1
+1
+15
+99
+7
+3
+45
+4
+5
+43
+6
+43
+7
+65
+49
+8
+3
+13
+99
+12
+7
+9
+12
+7
+10
+12
+65
+12
+49
+11
+4
+15
+49
+9
+0
+15
+2
+11
+I
+6
+I
+0
+I
+0
+I
+0
+n
+p
+12
+s
+9
+test/unit
+x
+7
+require
+s
+7
+coderay
+x
+9
+BasicTest
+x
+4
+Test
+n
+x
+4
+Unit
+x
+8
+TestCase
+x
+10
+open_class
+x
+14
+__class_init__
+M
+1
+n
+n
+x
+9
+BasicTest
+i
+263
+5
+66
+99
+7
+0
+7
+1
+65
+67
+49
+2
+0
+49
+3
+4
+15
+65
+7
+4
+7
+5
+64
+49
+6
+2
+15
+65
+7
+7
+7
+8
+64
+7
+9
+35
+2
+7
+10
+64
+7
+11
+35
+2
+7
+12
+7
+13
+35
+2
+7
+14
+64
+7
+15
+35
+2
+7
+16
+64
+7
+17
+35
+2
+7
+14
+64
+7
+15
+35
+2
+7
+18
+7
+13
+35
+2
+35
+7
+49
+6
+2
+15
+99
+7
+19
+7
+20
+65
+67
+49
+2
+0
+49
+3
+4
+15
+65
+7
+21
+7
+22
+64
+7
+23
+64
+81
+24
+49
+6
+2
+15
+99
+7
+25
+7
+26
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+27
+7
+28
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+29
+7
+30
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+31
+7
+32
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+33
+7
+34
+65
+67
+49
+2
+0
+49
+3
+4
+15
+45
+35
+36
+7
+37
+64
+49
+38
+1
+13
+9
+202
+15
+45
+39
+40
+7
+41
+64
+84
+42
+9
+219
+99
+7
+43
+7
+44
+65
+67
+49
+2
+0
+49
+3
+4
+8
+220
+1
+15
+99
+7
+45
+7
+46
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+47
+7
+48
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+49
+7
+50
+65
+67
+49
+2
+0
+49
+3
+4
+11
+I
+a
+I
+0
+I
+0
+I
+0
+n
+p
+51
+x
+12
+test_version
+M
+1
+n
+n
+x
+12
+test_version
+i
+8
+5
+56
+0
+47
+50
+1
+0
+11
+I
+2
+I
+0
+I
+0
+I
+0
+n
+p
+2
+M
+1
+p
+2
+x
+9
+for_block
+t
+n
+x
+12
+test_version
+i
+29
+5
+7
+0
+13
+70
+9
+19
+15
+44
+43
+1
+7
+2
+78
+49
+3
+2
+6
+0
+45
+4
+5
+43
+6
+47
+49
+7
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+I
+-2
+p
+8
+n
+x
+6
+Regexp
+s
+14
+\A\d\.\d\.\d\z
+x
+3
+new
+x
+7
+CodeRay
+n
+x
+7
+VERSION
+x
+12
+assert_match
+p
+5
+I
+0
+I
+7
+I
+0
+I
+8
+I
+1d
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+21
+assert_nothing_raised
+p
+5
+I
+0
+I
+6
+I
+0
+I
+7
+I
+8
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+17
+method_visibility
+x
+15
+add_defn_method
+x
+14
+RUBY_TEST_CODE
+s
+20
+puts "Hello, World!"
+x
+9
+const_set
+x
+16
+RUBY_TEST_TOKENS
+s
+4
+puts
+x
+5
+ident
+s
+1
+ 
+x
+5
+space
+x
+4
+open
+x
+6
+string
+s
+1
+"
+x
+9
+delimiter
+s
+13
+Hello, World!
+x
+7
+content
+x
+5
+close
+x
+16
+test_simple_scan
+M
+1
+n
+n
+x
+16
+test_simple_scan
+i
+8
+5
+56
+0
+47
+50
+1
+0
+11
+I
+2
+I
+0
+I
+0
+I
+0
+n
+p
+2
+M
+1
+p
+2
+x
+9
+for_block
+t
+n
+x
+16
+test_simple_scan
+i
+23
+5
+45
+0
+1
+45
+2
+3
+45
+4
+5
+7
+6
+49
+7
+2
+49
+8
+0
+47
+49
+9
+2
+11
+I
+6
+I
+0
+I
+0
+I
+0
+I
+-2
+p
+10
+x
+16
+RUBY_TEST_TOKENS
+n
+x
+7
+CodeRay
+n
+x
+14
+RUBY_TEST_CODE
+n
+x
+4
+ruby
+x
+4
+scan
+x
+6
+to_ary
+x
+12
+assert_equal
+p
+5
+I
+0
+I
+18
+I
+0
+I
+19
+I
+17
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+21
+assert_nothing_raised
+p
+5
+I
+0
+I
+17
+I
+0
+I
+18
+I
+8
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+14
+RUBY_TEST_HTML
+s
+51
+puts <span class="s"><span class="dl">&quot;</span>
+s
+73
+<span class="k">Hello, World!</span><span class="dl">&quot;</span></span>
+x
+1
++
+x
+21
+test_simple_highlight
+M
+1
+n
+n
+x
+21
+test_simple_highlight
+i
+8
+5
+56
+0
+47
+50
+1
+0
+11
+I
+2
+I
+0
+I
+0
+I
+0
+n
+p
+2
+M
+1
+p
+2
+x
+9
+for_block
+t
+n
+x
+21
+test_simple_highlight
+i
+23
+5
+45
+0
+1
+45
+2
+3
+45
+4
+5
+7
+6
+49
+7
+2
+49
+8
+0
+47
+49
+9
+2
+11
+I
+6
+I
+0
+I
+0
+I
+0
+I
+-2
+p
+10
+x
+14
+RUBY_TEST_HTML
+n
+x
+7
+CodeRay
+n
+x
+14
+RUBY_TEST_CODE
+n
+x
+4
+ruby
+x
+4
+scan
+x
+4
+html
+x
+12
+assert_equal
+p
+5
+I
+0
+I
+20
+I
+0
+I
+21
+I
+17
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+21
+assert_nothing_raised
+p
+5
+I
+0
+I
+1f
+I
+0
+I
+20
+I
+8
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+8
+test_duo
+M
+1
+n
+n
+x
+8
+test_duo
+i
+66
+5
+45
+0
+1
+45
+2
+3
+43
+4
+7
+5
+7
+5
+49
+6
+2
+45
+0
+7
+49
+8
+1
+47
+49
+9
+2
+15
+5
+45
+0
+10
+45
+2
+11
+43
+4
+44
+43
+12
+79
+49
+13
+1
+13
+7
+5
+7
+5
+49
+14
+2
+15
+49
+6
+1
+45
+0
+15
+49
+8
+1
+47
+49
+9
+2
+11
+I
+7
+I
+0
+I
+0
+I
+0
+n
+p
+16
+x
+14
+RUBY_TEST_CODE
+n
+x
+7
+CodeRay
+n
+x
+3
+Duo
+x
+5
+plain
+x
+2
+[]
+n
+x
+9
+highlight
+x
+12
+assert_equal
+n
+n
+x
+4
+Hash
+x
+16
+new_from_literal
+x
+3
+[]=
+n
+p
+15
+I
+0
+I
+25
+I
+0
+I
+26
+I
+4
+I
+27
+I
+16
+I
+26
+I
+1b
+I
+28
+I
+1f
+I
+29
+I
+3d
+I
+28
+I
+42
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+15
+test_duo_stream
+M
+1
+n
+n
+x
+15
+test_duo_stream
+i
+42
+5
+45
+0
+1
+45
+2
+3
+43
+4
+7
+5
+7
+5
+49
+6
+2
+45
+0
+7
+44
+43
+8
+79
+49
+9
+1
+13
+7
+10
+2
+49
+11
+2
+15
+49
+12
+2
+47
+49
+13
+2
+11
+I
+8
+I
+0
+I
+0
+I
+0
+n
+p
+14
+x
+14
+RUBY_TEST_CODE
+n
+x
+7
+CodeRay
+n
+x
+3
+Duo
+x
+5
+plain
+x
+2
+[]
+n
+x
+4
+Hash
+x
+16
+new_from_literal
+x
+6
+stream
+x
+3
+[]=
+x
+9
+highlight
+x
+12
+assert_equal
+p
+9
+I
+0
+I
+2c
+I
+0
+I
+2d
+I
+4
+I
+2e
+I
+25
+I
+2d
+I
+2a
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+19
+test_comment_filter
+M
+1
+n
+n
+x
+19
+test_comment_filter
+i
+26
+5
+7
+0
+64
+45
+1
+2
+7
+3
+64
+7
+4
+49
+5
+2
+49
+6
+0
+49
+7
+0
+47
+49
+8
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+9
+s
+39
+#!/usr/bin/env ruby
+
+code
+
+more code  
+
+x
+7
+CodeRay
+n
+s
+127
+#!/usr/bin/env ruby
+=begin
+A multi-line comment.
+=end
+code
+# A single-line comment.
+more code  # and another comment, in-line.
+
+x
+4
+ruby
+x
+4
+scan
+x
+14
+comment_filter
+x
+4
+text
+x
+12
+assert_equal
+p
+5
+I
+0
+I
+31
+I
+0
+I
+32
+I
+1a
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+18
+test_lines_of_code
+M
+1
+n
+n
+x
+18
+test_lines_of_code
+i
+108
+5
+80
+45
+0
+1
+7
+2
+64
+7
+3
+49
+4
+2
+49
+5
+0
+47
+49
+6
+2
+15
+7
+7
+64
+19
+0
+15
+5
+78
+45
+0
+8
+20
+0
+7
+9
+49
+4
+2
+49
+5
+0
+47
+49
+6
+2
+15
+5
+78
+45
+0
+10
+20
+0
+7
+11
+49
+4
+2
+49
+5
+0
+47
+49
+6
+2
+15
+5
+78
+45
+0
+12
+20
+0
+7
+13
+49
+4
+2
+49
+5
+0
+47
+49
+6
+2
+15
+5
+4
+4
+45
+0
+14
+20
+0
+7
+15
+49
+4
+2
+49
+5
+0
+47
+49
+6
+2
+11
+I
+6
+I
+1
+I
+0
+I
+0
+n
+p
+16
+x
+7
+CodeRay
+n
+s
+127
+#!/usr/bin/env ruby
+=begin
+A multi-line comment.
+=end
+code
+# A single-line comment.
+more code  # and another comment, in-line.
+
+x
+4
+ruby
+x
+4
+scan
+x
+13
+lines_of_code
+x
+12
+assert_equal
+s
+514
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
+  <title><%= controller.controller_name.titleize %>: <%= controller.action_name %></title>
+  <%= stylesheet_link_tag 'scaffold' %>
+</head>
+<body>
+
+<p style="color: green"><%= flash[:notice] %></p>
+
+<div id="main">
+  <%= yield %>
+</div>
+
+</body>
+</html>
+
+n
+x
+4
+html
+n
+x
+3
+php
+n
+x
+4
+yaml
+n
+x
+5
+rhtml
+p
+15
+I
+0
+I
+43
+I
+0
+I
+44
+I
+15
+I
+4d
+I
+1b
+I
+62
+I
+2f
+I
+63
+I
+43
+I
+64
+I
+57
+I
+65
+I
+6c
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+1
+x
+5
+rHTML
+x
+3
+ENV
+n
+s
+14
+check_rubygems
+x
+2
+[]
+x
+12
+RUBY_VERSION
+n
+s
+3
+1.9
+x
+1
+<
+x
+24
+test_rubygems_not_loaded
+M
+1
+n
+n
+x
+24
+test_rubygems_not_loaded
+i
+34
+5
+1
+26
+93
+0
+15
+29
+17
+0
+7
+0
+98
+1
+1
+30
+8
+23
+25
+92
+0
+27
+8
+28
+15
+7
+2
+8
+29
+1
+47
+49
+3
+2
+11
+I
+4
+I
+0
+I
+0
+I
+0
+n
+p
+4
+x
+3
+Gem
+x
+16
+vm_const_defined
+s
+8
+constant
+x
+12
+assert_equal
+p
+5
+I
+0
+I
+68
+I
+0
+I
+69
+I
+22
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+21
+test_list_of_encoders
+M
+1
+n
+n
+x
+21
+test_list_of_encoders
+i
+37
+5
+45
+0
+1
+45
+2
+3
+43
+4
+49
+5
+0
+47
+49
+6
+2
+15
+5
+45
+2
+7
+43
+4
+49
+5
+0
+7
+8
+64
+49
+9
+1
+47
+49
+10
+1
+11
+I
+3
+I
+0
+I
+0
+I
+0
+n
+p
+11
+x
+5
+Array
+n
+x
+7
+CodeRay
+n
+x
+8
+Encoders
+x
+4
+list
+x
+14
+assert_kind_of
+n
+s
+5
+count
+x
+8
+include?
+x
+6
+assert
+p
+7
+I
+0
+I
+6c
+I
+0
+I
+6d
+I
+11
+I
+6e
+I
+25
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+21
+test_list_of_scanners
+M
+1
+n
+n
+x
+21
+test_list_of_scanners
+i
+37
+5
+45
+0
+1
+45
+2
+3
+43
+4
+49
+5
+0
+47
+49
+6
+2
+15
+5
+45
+2
+7
+43
+4
+49
+5
+0
+7
+8
+64
+49
+9
+1
+47
+49
+10
+1
+11
+I
+3
+I
+0
+I
+0
+I
+0
+n
+p
+11
+x
+5
+Array
+n
+x
+7
+CodeRay
+n
+x
+8
+Scanners
+x
+4
+list
+x
+14
+assert_kind_of
+n
+s
+9
+plaintext
+x
+8
+include?
+x
+6
+assert
+p
+7
+I
+0
+I
+71
+I
+0
+I
+72
+I
+11
+I
+73
+I
+25
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+25
+test_scan_a_frozen_string
+M
+1
+n
+n
+x
+25
+test_scan_a_frozen_string
+i
+12
+45
+0
+1
+45
+2
+3
+7
+4
+49
+5
+2
+11
+I
+3
+I
+0
+I
+0
+I
+0
+n
+p
+6
+x
+7
+CodeRay
+n
+x
+12
+RUBY_VERSION
+n
+x
+4
+ruby
+x
+4
+scan
+p
+5
+I
+0
+I
+76
+I
+0
+I
+77
+I
+c
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+p
+51
+I
+2
+I
+6
+I
+10
+I
+c
+I
+1a
+I
+e
+I
+1d
+I
+f
+I
+24
+I
+10
+I
+2b
+I
+11
+I
+31
+I
+12
+I
+38
+I
+13
+I
+3f
+I
+14
+I
+46
+I
+15
+I
+52
+I
+17
+I
+60
+I
+1d
+I
+63
+I
+1d
+I
+66
+I
+1e
+I
+6f
+I
+1f
+I
+7d
+I
+25
+I
+8b
+I
+2c
+I
+99
+I
+31
+I
+a7
+I
+43
+I
+b5
+I
+6a
+I
+cc
+I
+68
+I
+db
+I
+6a
+I
+dd
+I
+6c
+I
+eb
+I
+71
+I
+f9
+I
+76
+I
+107
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+13
+attach_method
+p
+7
+I
+0
+I
+1
+I
+9
+I
+2
+I
+12
+I
+4
+I
+35
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/for_redcloth.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,77 @@
+require 'test/unit'
+$:.unshift 'lib'
+require 'coderay'
+
+begin
+  require 'rubygems' unless defined? Gem
+  gem 'RedCloth', '>= 4.0.3' rescue nil
+  require 'redcloth'
+rescue LoadError
+  warn 'RedCloth not found - skipping for_redcloth tests.'
+end
+
+class BasicTest < Test::Unit::TestCase
+  
+  def test_for_redcloth
+    require 'coderay/for_redcloth'
+    assert_equal "<p><span lang=\"ruby\" class=\"CodeRay\">puts <span style=\"background-color:#fff0f0;color:#D20\"><span style=\"color:#710\">&quot;</span><span style=\"\">Hello, World!</span><span style=\"color:#710\">&quot;</span></span></span></p>",
+      RedCloth.new('@[ruby]puts "Hello, World!"@').to_html
+    assert_equal <<-BLOCKCODE.chomp,
+<div lang="ruby" class="CodeRay">
+  <div class="code"><pre>puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">Hello, World!</span><span style="color:#710">&quot;</span></span></pre></div>
+</div>
+      BLOCKCODE
+      RedCloth.new('bc[ruby]. puts "Hello, World!"').to_html
+  end
+  
+  def test_for_redcloth_no_lang
+    require 'coderay/for_redcloth'
+    assert_equal "<p><code>puts \"Hello, World!\"</code></p>",
+      RedCloth.new('@puts "Hello, World!"@').to_html
+    assert_equal <<-BLOCKCODE.chomp,
+<pre><code>puts \"Hello, World!\"</code></pre>
+      BLOCKCODE
+      RedCloth.new('bc. puts "Hello, World!"').to_html
+  end
+  
+  def test_for_redcloth_style
+    require 'coderay/for_redcloth'
+    assert_equal <<-BLOCKCODE.chomp,
+<pre style=\"color: red;\"><code style=\"color: red;\">puts \"Hello, World!\"</code></pre>
+      BLOCKCODE
+      RedCloth.new('bc{color: red}. puts "Hello, World!"').to_html
+  end
+  
+  def test_for_redcloth_escapes
+    require 'coderay/for_redcloth'
+    assert_equal '<p><span lang="ruby" class="CodeRay">&gt;</span></p>',
+      RedCloth.new('@[ruby]>@').to_html
+    assert_equal <<-BLOCKCODE.chomp,
+<div lang="ruby" class="CodeRay">
+  <div class="code"><pre>&amp;</pre></div>
+</div>
+      BLOCKCODE
+      RedCloth.new('bc[ruby]. &').to_html
+  end
+  
+  def test_for_redcloth_escapes2
+    require 'coderay/for_redcloth'
+    assert_equal "<p><span lang=\"c\" class=\"CodeRay\"><span style=\"color:#579\">#include</span> <span style=\"color:#B44;font-weight:bold\">&lt;test.h&gt;</span></span></p>",
+      RedCloth.new('@[c]#include <test.h>@').to_html
+  end
+  
+  # See http://jgarber.lighthouseapp.com/projects/13054/tickets/124-code-markup-does-not-allow-brackets.
+  def test_for_redcloth_false_positive
+    require 'coderay/for_redcloth'
+    assert_equal '<p><code>[project]_dff.skjd</code></p>',
+      RedCloth.new('@[project]_dff.skjd@').to_html
+    # false positive, but expected behavior / known issue
+    assert_equal "<p><span lang=\"ruby\" class=\"CodeRay\">_dff.skjd</span></p>",
+      RedCloth.new('@[ruby]_dff.skjd@').to_html
+    assert_equal <<-BLOCKCODE.chomp,
+<pre><code>[project]_dff.skjd</code></pre>
+      BLOCKCODE
+      RedCloth.new('bc. [project]_dff.skjd').to_html
+  end
+  
+end if defined? RedCloth
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/for_redcloth.rbc.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,1708 @@
+!RBIX
+0
+x
+M
+1
+n
+n
+x
+10
+__script__
+i
+249
+5
+7
+0
+64
+47
+49
+1
+1
+15
+99
+43
+2
+7
+3
+49
+4
+1
+7
+5
+64
+49
+6
+1
+15
+5
+7
+7
+64
+47
+49
+1
+1
+15
+26
+93
+0
+15
+29
+144
+0
+26
+93
+1
+15
+29
+55
+0
+7
+8
+98
+9
+1
+30
+8
+61
+25
+92
+1
+27
+8
+66
+15
+7
+10
+8
+67
+1
+9
+72
+1
+8
+80
+5
+7
+11
+64
+47
+49
+1
+1
+15
+26
+93
+2
+15
+29
+102
+0
+5
+7
+12
+64
+7
+13
+64
+47
+49
+14
+2
+30
+8
+129
+26
+93
+3
+15
+24
+13
+45
+15
+16
+12
+49
+17
+1
+10
+119
+8
+124
+15
+1
+25
+8
+129
+15
+92
+3
+27
+34
+92
+2
+27
+15
+5
+7
+18
+64
+47
+49
+1
+1
+30
+8
+178
+26
+93
+4
+15
+24
+13
+45
+19
+20
+12
+49
+17
+1
+10
+161
+8
+173
+15
+5
+7
+21
+64
+47
+49
+22
+1
+25
+8
+178
+15
+92
+4
+27
+34
+92
+0
+27
+15
+26
+93
+5
+15
+29
+197
+0
+7
+23
+98
+9
+1
+30
+8
+203
+25
+92
+5
+27
+8
+208
+15
+7
+10
+8
+209
+1
+9
+245
+99
+7
+24
+45
+25
+26
+43
+27
+43
+28
+65
+49
+29
+3
+13
+99
+12
+7
+30
+12
+7
+31
+12
+65
+12
+49
+32
+4
+15
+49
+30
+0
+8
+246
+1
+15
+2
+11
+I
+c
+I
+0
+I
+0
+I
+0
+n
+p
+33
+s
+9
+test/unit
+x
+7
+require
+x
+7
+Globals
+x
+2
+$:
+x
+2
+[]
+s
+3
+lib
+x
+2
+<<
+s
+7
+coderay
+x
+3
+Gem
+x
+16
+vm_const_defined
+s
+8
+constant
+s
+8
+rubygems
+s
+8
+RedCloth
+s
+8
+>= 4.0.3
+x
+3
+gem
+x
+13
+StandardError
+n
+x
+3
+===
+s
+8
+redcloth
+x
+9
+LoadError
+n
+s
+49
+RedCloth not found - skipping for_redcloth tests.
+x
+4
+warn
+x
+8
+RedCloth
+x
+9
+BasicTest
+x
+4
+Test
+n
+x
+4
+Unit
+x
+8
+TestCase
+x
+10
+open_class
+x
+14
+__class_init__
+M
+1
+n
+n
+x
+9
+BasicTest
+i
+86
+5
+66
+99
+7
+0
+7
+1
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+4
+7
+5
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+6
+7
+7
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+8
+7
+9
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+10
+7
+11
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+12
+7
+13
+65
+67
+49
+2
+0
+49
+3
+4
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+14
+x
+17
+test_for_redcloth
+M
+1
+n
+n
+x
+17
+test_for_redcloth
+i
+96
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+45
+3
+4
+13
+71
+5
+47
+9
+37
+47
+49
+6
+0
+13
+7
+7
+64
+47
+49
+8
+1
+15
+8
+43
+7
+7
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+15
+5
+7
+11
+64
+49
+12
+0
+45
+3
+13
+13
+71
+5
+47
+9
+82
+47
+49
+6
+0
+13
+7
+14
+64
+47
+49
+8
+1
+15
+8
+88
+7
+14
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+15
+s
+20
+coderay/for_redcloth
+x
+7
+require
+s
+221
+<p><span lang="ruby" class="CodeRay">puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">Hello, World!</span><span style="color:#710">&quot;</span></span></span></p>
+x
+8
+RedCloth
+n
+x
+3
+new
+x
+8
+allocate
+s
+28
+@[ruby]puts "Hello, World!"@
+x
+10
+initialize
+x
+7
+to_html
+x
+12
+assert_equal
+s
+252
+<div lang="ruby" class="CodeRay">
+  <div class="code"><pre>puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">Hello, World!</span><span style="color:#710">&quot;</span></span></pre></div>
+</div>
+
+x
+5
+chomp
+n
+s
+30
+bc[ruby]. puts "Hello, World!"
+p
+17
+I
+0
+I
+f
+I
+0
+I
+10
+I
+9
+I
+11
+I
+d
+I
+12
+I
+2e
+I
+11
+I
+33
+I
+13
+I
+3a
+I
+18
+I
+5b
+I
+13
+I
+60
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
+x
+17
+method_visibility
+x
+15
+add_defn_method
+x
+25
+test_for_redcloth_no_lang
+M
+1
+n
+n
+x
+25
+test_for_redcloth_no_lang
+i
+96
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+45
+3
+4
+13
+71
+5
+47
+9
+37
+47
+49
+6
+0
+13
+7
+7
+64
+47
+49
+8
+1
+15
+8
+43
+7
+7
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+15
+5
+7
+11
+64
+49
+12
+0
+45
+3
+13
+13
+71
+5
+47
+9
+82
+47
+49
+6
+0
+13
+7
+14
+64
+47
+49
+8
+1
+15
+8
+88
+7
+14
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+15
+s
+20
+coderay/for_redcloth
+x
+7
+require
+s
+40
+<p><code>puts "Hello, World!"</code></p>
+x
+8
+RedCloth
+n
+x
+3
+new
+x
+8
+allocate
+s
+22
+@puts "Hello, World!"@
+x
+10
+initialize
+x
+7
+to_html
+x
+12
+assert_equal
+s
+45
+<pre><code>puts "Hello, World!"</code></pre>
+
+x
+5
+chomp
+n
+s
+24
+bc. puts "Hello, World!"
+p
+17
+I
+0
+I
+1b
+I
+0
+I
+1c
+I
+9
+I
+1d
+I
+d
+I
+1e
+I
+2e
+I
+1d
+I
+33
+I
+1f
+I
+3a
+I
+22
+I
+5b
+I
+1f
+I
+60
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
+x
+23
+test_for_redcloth_style
+M
+1
+n
+n
+x
+23
+test_for_redcloth_style
+i
+54
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+49
+3
+0
+45
+4
+5
+13
+71
+6
+47
+9
+40
+47
+49
+7
+0
+13
+7
+8
+64
+47
+49
+9
+1
+15
+8
+46
+7
+8
+64
+49
+6
+1
+49
+10
+0
+47
+49
+11
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+12
+s
+20
+coderay/for_redcloth
+x
+7
+require
+s
+85
+<pre style="color: red;"><code style="color: red;">puts "Hello, World!"</code></pre>
+
+x
+5
+chomp
+x
+8
+RedCloth
+n
+x
+3
+new
+x
+8
+allocate
+s
+36
+bc{color: red}. puts "Hello, World!"
+x
+10
+initialize
+x
+7
+to_html
+x
+12
+assert_equal
+p
+11
+I
+0
+I
+25
+I
+0
+I
+26
+I
+9
+I
+27
+I
+10
+I
+2a
+I
+31
+I
+27
+I
+36
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
+x
+25
+test_for_redcloth_escapes
+M
+1
+n
+n
+x
+25
+test_for_redcloth_escapes
+i
+96
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+45
+3
+4
+13
+71
+5
+47
+9
+37
+47
+49
+6
+0
+13
+7
+7
+64
+47
+49
+8
+1
+15
+8
+43
+7
+7
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+15
+5
+7
+11
+64
+49
+12
+0
+45
+3
+13
+13
+71
+5
+47
+9
+82
+47
+49
+6
+0
+13
+7
+14
+64
+47
+49
+8
+1
+15
+8
+88
+7
+14
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+15
+s
+20
+coderay/for_redcloth
+x
+7
+require
+s
+52
+<p><span lang="ruby" class="CodeRay">&gt;</span></p>
+x
+8
+RedCloth
+n
+x
+3
+new
+x
+8
+allocate
+s
+9
+@[ruby]>@
+x
+10
+initialize
+x
+7
+to_html
+x
+12
+assert_equal
+s
+84
+<div lang="ruby" class="CodeRay">
+  <div class="code"><pre>&amp;</pre></div>
+</div>
+
+x
+5
+chomp
+n
+s
+11
+bc[ruby]. &
+p
+17
+I
+0
+I
+2d
+I
+0
+I
+2e
+I
+9
+I
+2f
+I
+d
+I
+30
+I
+2e
+I
+2f
+I
+33
+I
+31
+I
+3a
+I
+36
+I
+5b
+I
+31
+I
+60
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
+x
+26
+test_for_redcloth_escapes2
+M
+1
+n
+n
+x
+26
+test_for_redcloth_escapes2
+i
+51
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+45
+3
+4
+13
+71
+5
+47
+9
+37
+47
+49
+6
+0
+13
+7
+7
+64
+47
+49
+8
+1
+15
+8
+43
+7
+7
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+11
+s
+20
+coderay/for_redcloth
+x
+7
+require
+s
+149
+<p><span lang="c" class="CodeRay"><span style="color:#579">#include</span> <span style="color:#B44;font-weight:bold">&lt;test.h&gt;</span></span></p>
+x
+8
+RedCloth
+n
+x
+3
+new
+x
+8
+allocate
+s
+22
+@[c]#include <test.h>@
+x
+10
+initialize
+x
+7
+to_html
+x
+12
+assert_equal
+p
+11
+I
+0
+I
+39
+I
+0
+I
+3a
+I
+9
+I
+3b
+I
+d
+I
+3c
+I
+2e
+I
+3b
+I
+33
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
+x
+32
+test_for_redcloth_false_positive
+M
+1
+n
+n
+x
+32
+test_for_redcloth_false_positive
+i
+138
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+45
+3
+4
+13
+71
+5
+47
+9
+37
+47
+49
+6
+0
+13
+7
+7
+64
+47
+49
+8
+1
+15
+8
+43
+7
+7
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+15
+5
+7
+11
+64
+45
+3
+12
+13
+71
+5
+47
+9
+79
+47
+49
+6
+0
+13
+7
+13
+64
+47
+49
+8
+1
+15
+8
+85
+7
+13
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+15
+5
+7
+14
+64
+49
+15
+0
+45
+3
+16
+13
+71
+5
+47
+9
+124
+47
+49
+6
+0
+13
+7
+17
+64
+47
+49
+8
+1
+15
+8
+130
+7
+17
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+18
+s
+20
+coderay/for_redcloth
+x
+7
+require
+s
+38
+<p><code>[project]_dff.skjd</code></p>
+x
+8
+RedCloth
+n
+x
+3
+new
+x
+8
+allocate
+s
+20
+@[project]_dff.skjd@
+x
+10
+initialize
+x
+7
+to_html
+x
+12
+assert_equal
+s
+57
+<p><span lang="ruby" class="CodeRay">_dff.skjd</span></p>
+n
+s
+17
+@[ruby]_dff.skjd@
+s
+43
+<pre><code>[project]_dff.skjd</code></pre>
+
+x
+5
+chomp
+n
+s
+22
+bc. [project]_dff.skjd
+p
+23
+I
+0
+I
+40
+I
+0
+I
+41
+I
+9
+I
+42
+I
+d
+I
+43
+I
+2e
+I
+42
+I
+33
+I
+45
+I
+37
+I
+46
+I
+58
+I
+45
+I
+5d
+I
+47
+I
+64
+I
+4a
+I
+85
+I
+47
+I
+8a
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
+p
+13
+I
+2
+I
+f
+I
+10
+I
+1b
+I
+1e
+I
+25
+I
+2c
+I
+2d
+I
+3a
+I
+39
+I
+48
+I
+40
+I
+56
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
+x
+13
+attach_method
+p
+23
+I
+0
+I
+1
+I
+9
+I
+2
+I
+18
+I
+3
+I
+21
+I
+6
+I
+51
+I
+7
+I
+85
+I
+8
+I
+95
+I
+9
+I
+a2
+I
+a
+I
+b6
+I
+4d
+I
+d3
+I
+d
+I
+f5
+I
+4d
+I
+f9
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/load_plugin_scanner.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,11 @@
+require 'test/unit'
+require 'coderay'
+
+class PluginScannerTest < Test::Unit::TestCase
+  
+  def test_load
+    require File.join(File.dirname(__FILE__), 'vhdl')
+    assert_equal 'VHDL', CodeRay.scanner(:vhdl).class.name
+  end
+  
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/load_plugin_scanner.rbc.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,317 @@
+!RBIX
+0
+x
+M
+1
+n
+n
+x
+10
+__script__
+i
+53
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+47
+49
+1
+1
+15
+99
+7
+3
+45
+4
+5
+43
+6
+43
+7
+65
+49
+8
+3
+13
+99
+12
+7
+9
+12
+7
+10
+12
+65
+12
+49
+11
+4
+15
+49
+9
+0
+15
+2
+11
+I
+6
+I
+0
+I
+0
+I
+0
+n
+p
+12
+s
+9
+test/unit
+x
+7
+require
+s
+7
+coderay
+x
+17
+PluginScannerTest
+x
+4
+Test
+n
+x
+4
+Unit
+x
+8
+TestCase
+x
+10
+open_class
+x
+14
+__class_init__
+M
+1
+n
+n
+x
+17
+PluginScannerTest
+i
+16
+5
+66
+99
+7
+0
+7
+1
+65
+67
+49
+2
+0
+49
+3
+4
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+4
+x
+9
+test_load
+M
+1
+n
+n
+x
+9
+test_load
+i
+48
+5
+45
+0
+1
+45
+0
+2
+65
+49
+3
+0
+49
+4
+1
+7
+5
+64
+49
+6
+2
+47
+49
+7
+1
+15
+5
+7
+8
+64
+45
+9
+10
+7
+11
+49
+12
+1
+49
+13
+0
+49
+14
+0
+47
+49
+15
+2
+11
+I
+4
+I
+0
+I
+0
+I
+0
+n
+p
+16
+x
+4
+File
+n
+n
+x
+11
+active_path
+x
+7
+dirname
+s
+4
+vhdl
+x
+4
+join
+x
+7
+require
+s
+4
+VHDL
+x
+7
+CodeRay
+n
+x
+4
+vhdl
+x
+7
+scanner
+x
+5
+class
+x
+4
+name
+x
+12
+assert_equal
+p
+7
+I
+0
+I
+6
+I
+0
+I
+7
+I
+19
+I
+8
+I
+30
+x
+69
+/Users/murphy/ruby/coderay-0.9/test/functional/load_plugin_scanner.rb
+p
+0
+x
+17
+method_visibility
+x
+15
+add_defn_method
+p
+3
+I
+2
+I
+6
+I
+10
+x
+69
+/Users/murphy/ruby/coderay-0.9/test/functional/load_plugin_scanner.rb
+p
+0
+x
+13
+attach_method
+p
+7
+I
+0
+I
+1
+I
+9
+I
+2
+I
+12
+I
+4
+I
+35
+x
+69
+/Users/murphy/ruby/coderay-0.9/test/functional/load_plugin_scanner.rb
+p
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/suite.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,12 @@
+require 'test/unit'
+
+MYDIR = File.dirname(__FILE__)
+
+$:.unshift 'lib'
+require 'coderay'
+puts "Running basic CodeRay #{CodeRay::VERSION} tests..."
+
+suite = %w(basic load_plugin_scanner word_list)
+for test_case in suite
+  load File.join(MYDIR, test_case + '.rb')
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/suite.rbc.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,322 @@
+!RBIX
+0
+x
+M
+1
+n
+n
+x
+10
+__script__
+i
+95
+5
+7
+0
+64
+47
+49
+1
+1
+15
+65
+7
+2
+45
+3
+4
+65
+49
+5
+0
+49
+6
+1
+49
+7
+2
+15
+99
+43
+8
+7
+9
+49
+10
+1
+7
+11
+64
+49
+12
+1
+15
+5
+7
+13
+64
+47
+49
+1
+1
+15
+5
+7
+14
+45
+15
+16
+43
+17
+47
+49
+18
+0
+7
+19
+63
+3
+47
+49
+20
+1
+15
+7
+21
+64
+7
+22
+64
+7
+23
+64
+35
+3
+19
+0
+15
+20
+0
+56
+24
+50
+25
+0
+15
+2
+11
+I
+6
+I
+2
+I
+0
+I
+0
+n
+p
+26
+s
+9
+test/unit
+x
+7
+require
+x
+5
+MYDIR
+x
+4
+File
+n
+x
+11
+active_path
+x
+7
+dirname
+x
+9
+const_set
+x
+7
+Globals
+x
+2
+$:
+x
+2
+[]
+s
+3
+lib
+x
+2
+<<
+s
+7
+coderay
+s
+22
+Running basic CodeRay 
+x
+7
+CodeRay
+n
+x
+7
+VERSION
+x
+4
+to_s
+s
+9
+ tests...
+x
+4
+puts
+s
+5
+basic
+s
+19
+load_plugin_scanner
+s
+9
+word_list
+M
+1
+p
+2
+x
+9
+for_block
+t
+n
+x
+9
+__block__
+i
+28
+57
+22
+1
+1
+15
+5
+45
+0
+1
+45
+2
+3
+21
+1
+1
+7
+4
+64
+81
+5
+49
+6
+2
+47
+49
+7
+1
+11
+I
+6
+I
+0
+I
+1
+I
+1
+n
+p
+8
+x
+4
+File
+n
+x
+5
+MYDIR
+n
+s
+3
+.rb
+x
+1
++
+x
+4
+join
+x
+4
+load
+p
+5
+I
+0
+I
+a
+I
+5
+I
+b
+I
+1c
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/suite.rb
+p
+0
+x
+4
+each
+p
+15
+I
+0
+I
+1
+I
+9
+I
+3
+I
+1a
+I
+5
+I
+29
+I
+6
+I
+32
+I
+7
+I
+47
+I
+9
+I
+55
+I
+a
+I
+5f
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/suite.rb
+p
+2
+x
+5
+suite
+x
+9
+test_case
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/vhdl.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,126 @@
+class VHDL < CodeRay::Scanners::Scanner
+
+  register_for :vhdl
+
+  RESERVED_WORDS = [
+    'access','after','alias','all','assert','architecture','begin',
+    'block','body','buffer','bus','case','component','configuration','constant',
+    'disconnect','downto','else','elsif','end','entity','exit','file','for',
+    'function','generate','generic','group','guarded','if','impure','in',
+    'inertial','inout','is','label','library','linkage','literal','loop',
+    'map','new','next','null','of','on','open','others','out','package',
+    'port','postponed','procedure','process','pure','range','record','register',
+    'reject','report','return','select','severity','signal','shared','subtype',
+    'then','to','transport','type','unaffected','units','until','use','variable',
+    'wait','when','while','with','note','warning','error','failure','and',
+    'or','xor','not','nor',
+    'array'
+  ]
+
+  PREDEFINED_TYPES = [
+    'bit','bit_vector','character','boolean','integer','real','time','string',
+    'severity_level','positive','natural','signed','unsigned','line','text',
+    'std_logic','std_logic_vector','std_ulogic','std_ulogic_vector','qsim_state',
+    'qsim_state_vector','qsim_12state','qsim_12state_vector','qsim_strength',
+    'mux_bit','mux_vector','reg_bit','reg_vector','wor_bit','wor_vector'
+  ]
+
+  PREDEFINED_CONSTANTS = [
+
+  ]
+
+  IDENT_KIND = CodeRay::CaseIgnoringWordList.new(:ident).
+    add(RESERVED_WORDS, :reserved).
+    add(PREDEFINED_TYPES, :pre_type).
+    add(PREDEFINED_CONSTANTS, :pre_constant)
+
+  ESCAPE = / [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+  UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
+
+  def scan_tokens tokens, options
+
+    state = :initial
+
+    until eos?
+
+      kind = nil
+      match = nil
+
+      case state
+
+      when :initial
+
+        if scan(/ \s+ | \\\n /x)
+          kind = :space
+
+        elsif scan(/-- .*/x)
+          kind = :comment
+
+        elsif scan(/ [-+*\/=<>?:;,!&^|()\[\]{}~%]+ | \.(?!\d) /x)
+          kind = :operator
+
+        elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
+          kind = IDENT_KIND[match.downcase]
+
+        elsif match = scan(/[a-z]?"/i)
+          tokens << [:open, :string]
+          state = :string
+          kind = :delimiter
+
+        elsif scan(/ L?' (?: [^\'\n\\] | \\ #{ESCAPE} )? '? /ox)
+          kind = :char
+
+        elsif scan(/(?:\d+)(?![.eEfF])/)
+          kind = :integer
+
+        elsif scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
+          kind = :float
+
+        else
+          getch
+          kind = :error
+
+        end
+
+      when :string
+        if scan(/[^\\\n"]+/)
+          kind = :content
+        elsif scan(/"/)
+          tokens << ['"', :delimiter]
+          tokens << [:close, :string]
+          state = :initial
+          next
+        elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+          kind = :char
+        elsif scan(/ \\ | $ /x)
+          tokens << [:close, :string]
+          kind = :error
+          state = :initial
+        else
+          raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+        end
+
+      else
+        raise_inspect 'Unknown state', tokens
+
+      end
+
+      match ||= matched
+      if $DEBUG and not kind
+        raise_inspect 'Error token %p in line %d' %
+          [[match, kind], line], tokens
+      end
+      raise_inspect 'Empty token', tokens unless match
+
+      tokens << [match, kind]
+
+    end
+
+    if state == :string
+      tokens << [:close, :string]
+    end
+
+    tokens
+  end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/vhdl.rbc.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,2334 @@
+!RBIX
+0
+x
+M
+1
+n
+n
+x
+10
+__script__
+i
+35
+99
+7
+0
+45
+1
+2
+43
+3
+43
+4
+65
+49
+5
+3
+13
+99
+12
+7
+6
+12
+7
+7
+12
+65
+12
+49
+8
+4
+15
+49
+6
+0
+15
+2
+11
+I
+6
+I
+0
+I
+0
+I
+0
+n
+p
+9
+x
+4
+VHDL
+x
+7
+CodeRay
+n
+x
+8
+Scanners
+x
+7
+Scanner
+x
+10
+open_class
+x
+14
+__class_init__
+M
+1
+n
+n
+x
+4
+VHDL
+i
+519
+5
+66
+5
+7
+0
+47
+49
+1
+1
+15
+65
+7
+2
+7
+3
+64
+7
+4
+64
+7
+5
+64
+7
+6
+64
+7
+7
+64
+7
+8
+64
+7
+9
+64
+7
+10
+64
+7
+11
+64
+7
+12
+64
+7
+13
+64
+7
+14
+64
+7
+15
+64
+7
+16
+64
+7
+17
+64
+7
+18
+64
+7
+19
+64
+7
+20
+64
+7
+21
+64
+7
+22
+64
+7
+23
+64
+7
+24
+64
+7
+25
+64
+7
+26
+64
+7
+27
+64
+7
+28
+64
+7
+29
+64
+7
+30
+64
+7
+31
+64
+7
+32
+64
+7
+33
+64
+7
+34
+64
+7
+35
+64
+7
+36
+64
+7
+37
+64
+7
+38
+64
+7
+39
+64
+7
+40
+64
+7
+41
+64
+7
+42
+64
+7
+43
+64
+7
+44
+64
+7
+45
+64
+7
+46
+64
+7
+47
+64
+7
+48
+64
+7
+49
+64
+7
+50
+64
+7
+51
+64
+7
+52
+64
+7
+53
+64
+7
+54
+64
+7
+55
+64
+7
+56
+64
+7
+57
+64
+7
+58
+64
+7
+59
+64
+7
+60
+64
+7
+61
+64
+7
+62
+64
+7
+63
+64
+7
+64
+64
+7
+65
+64
+7
+66
+64
+7
+67
+64
+7
+68
+64
+7
+69
+64
+7
+70
+64
+7
+71
+64
+7
+72
+64
+7
+73
+64
+7
+74
+64
+7
+75
+64
+7
+76
+64
+7
+77
+64
+7
+78
+64
+7
+79
+64
+7
+80
+64
+7
+81
+64
+7
+82
+64
+7
+83
+64
+7
+84
+64
+7
+85
+64
+7
+86
+64
+7
+87
+64
+7
+88
+64
+7
+89
+64
+7
+90
+64
+7
+91
+64
+35
+89
+49
+92
+2
+15
+65
+7
+93
+7
+94
+64
+7
+95
+64
+7
+96
+64
+7
+97
+64
+7
+98
+64
+7
+99
+64
+7
+100
+64
+7
+101
+64
+7
+102
+64
+7
+103
+64
+7
+104
+64
+7
+105
+64
+7
+106
+64
+7
+107
+64
+7
+108
+64
+7
+109
+64
+7
+110
+64
+7
+111
+64
+7
+112
+64
+7
+113
+64
+7
+114
+64
+7
+115
+64
+7
+116
+64
+7
+117
+64
+7
+118
+64
+7
+119
+64
+7
+120
+64
+7
+121
+64
+7
+122
+64
+7
+123
+64
+35
+30
+49
+92
+2
+15
+65
+7
+124
+35
+0
+49
+92
+2
+15
+65
+7
+125
+45
+126
+127
+43
+128
+13
+71
+129
+47
+9
+422
+47
+49
+130
+0
+13
+7
+131
+47
+49
+132
+1
+15
+8
+427
+7
+131
+49
+129
+1
+45
+2
+133
+7
+134
+49
+135
+2
+45
+93
+136
+7
+137
+49
+135
+2
+45
+124
+138
+7
+139
+49
+135
+2
+49
+92
+2
+15
+65
+7
+140
+7
+141
+13
+70
+9
+476
+15
+44
+43
+142
+7
+143
+80
+49
+129
+2
+6
+141
+49
+92
+2
+15
+65
+7
+144
+7
+145
+13
+70
+9
+501
+15
+44
+43
+142
+7
+146
+80
+49
+129
+2
+6
+145
+49
+92
+2
+15
+99
+7
+147
+7
+148
+65
+67
+49
+149
+0
+49
+150
+4
+11
+I
+5b
+I
+0
+I
+0
+I
+0
+n
+p
+151
+x
+4
+vhdl
+x
+12
+register_for
+x
+14
+RESERVED_WORDS
+s
+6
+access
+s
+5
+after
+s
+5
+alias
+s
+3
+all
+s
+6
+assert
+s
+12
+architecture
+s
+5
+begin
+s
+5
+block
+s
+4
+body
+s
+6
+buffer
+s
+3
+bus
+s
+4
+case
+s
+9
+component
+s
+13
+configuration
+s
+8
+constant
+s
+10
+disconnect
+s
+6
+downto
+s
+4
+else
+s
+5
+elsif
+s
+3
+end
+s
+6
+entity
+s
+4
+exit
+s
+4
+file
+s
+3
+for
+s
+8
+function
+s
+8
+generate
+s
+7
+generic
+s
+5
+group
+s
+7
+guarded
+s
+2
+if
+s
+6
+impure
+s
+2
+in
+s
+8
+inertial
+s
+5
+inout
+s
+2
+is
+s
+5
+label
+s
+7
+library
+s
+7
+linkage
+s
+7
+literal
+s
+4
+loop
+s
+3
+map
+s
+3
+new
+s
+4
+next
+s
+4
+null
+s
+2
+of
+s
+2
+on
+s
+4
+open
+s
+6
+others
+s
+3
+out
+s
+7
+package
+s
+4
+port
+s
+9
+postponed
+s
+9
+procedure
+s
+7
+process
+s
+4
+pure
+s
+5
+range
+s
+6
+record
+s
+8
+register
+s
+6
+reject
+s
+6
+report
+s
+6
+return
+s
+6
+select
+s
+8
+severity
+s
+6
+signal
+s
+6
+shared
+s
+7
+subtype
+s
+4
+then
+s
+2
+to
+s
+9
+transport
+s
+4
+type
+s
+10
+unaffected
+s
+5
+units
+s
+5
+until
+s
+3
+use
+s
+8
+variable
+s
+4
+wait
+s
+4
+when
+s
+5
+while
+s
+4
+with
+s
+4
+note
+s
+7
+warning
+s
+5
+error
+s
+7
+failure
+s
+3
+and
+s
+2
+or
+s
+3
+xor
+s
+3
+not
+s
+3
+nor
+s
+5
+array
+x
+9
+const_set
+x
+16
+PREDEFINED_TYPES
+s
+3
+bit
+s
+10
+bit_vector
+s
+9
+character
+s
+7
+boolean
+s
+7
+integer
+s
+4
+real
+s
+4
+time
+s
+6
+string
+s
+14
+severity_level
+s
+8
+positive
+s
+7
+natural
+s
+6
+signed
+s
+8
+unsigned
+s
+4
+line
+s
+4
+text
+s
+9
+std_logic
+s
+16
+std_logic_vector
+s
+10
+std_ulogic
+s
+17
+std_ulogic_vector
+s
+10
+qsim_state
+s
+17
+qsim_state_vector
+s
+12
+qsim_12state
+s
+19
+qsim_12state_vector
+s
+13
+qsim_strength
+s
+7
+mux_bit
+s
+10
+mux_vector
+s
+7
+reg_bit
+s
+10
+reg_vector
+s
+7
+wor_bit
+s
+10
+wor_vector
+x
+20
+PREDEFINED_CONSTANTS
+x
+10
+IDENT_KIND
+x
+7
+CodeRay
+n
+x
+20
+CaseIgnoringWordList
+x
+3
+new
+x
+8
+allocate
+x
+5
+ident
+x
+10
+initialize
+n
+x
+8
+reserved
+x
+3
+add
+n
+x
+8
+pre_type
+n
+x
+12
+pre_constant
+x
+6
+ESCAPE
+n
+x
+6
+Regexp
+s
+49
+ [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} 
+x
+14
+UNICODE_ESCAPE
+n
+s
+35
+ u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} 
+x
+11
+scan_tokens
+M
+1
+n
+n
+x
+11
+scan_tokens
+i
+688
+7
+0
+19
+2
+15
+5
+47
+49
+1
+0
+10
+660
+1
+19
+3
+15
+1
+19
+4
+15
+20
+2
+13
+7
+0
+12
+49
+2
+1
+9
+331
+15
+5
+7
+3
+13
+70
+9
+51
+15
+44
+43
+4
+7
+5
+80
+49
+6
+2
+6
+3
+47
+49
+7
+1
+9
+63
+7
+8
+19
+3
+8
+329
+5
+7
+9
+13
+70
+9
+82
+15
+44
+43
+4
+7
+10
+80
+49
+6
+2
+6
+9
+47
+49
+7
+1
+9
+94
+7
+11
+19
+3
+8
+329
+5
+7
+12
+13
+70
+9
+113
+15
+44
+43
+4
+7
+13
+80
+49
+6
+2
+6
+12
+47
+49
+7
+1
+9
+125
+7
+14
+19
+3
+8
+329
+5
+7
+15
+13
+70
+9
+144
+15
+44
+43
+4
+7
+16
+80
+49
+6
+2
+6
+15
+47
+49
+7
+1
+19
+4
+9
+167
+45
+17
+18
+20
+4
+49
+19
+0
+49
+20
+1
+19
+3
+8
+329
+5
+7
+21
+13
+70
+9
+186
+15
+44
+43
+4
+7
+22
+79
+49
+6
+2
+6
+21
+47
+49
+7
+1
+19
+4
+9
+217
+20
+0
+7
+23
+7
+24
+35
+2
+49
+25
+1
+15
+7
+24
+19
+2
+15
+7
+26
+19
+3
+8
+329
+5
+7
+27
+13
+70
+9
+247
+15
+44
+43
+4
+7
+28
+45
+29
+30
+47
+49
+31
+0
+7
+32
+63
+3
+80
+49
+6
+2
+6
+27
+47
+49
+7
+1
+9
+259
+7
+33
+19
+3
+8
+329
+5
+7
+34
+13
+70
+9
+278
+15
+44
+43
+4
+7
+35
+78
+49
+6
+2
+6
+34
+47
+49
+7
+1
+9
+290
+7
+36
+19
+3
+8
+329
+5
+7
+37
+13
+70
+9
+309
+15
+44
+43
+4
+7
+38
+78
+49
+6
+2
+6
+37
+47
+49
+7
+1
+9
+321
+7
+39
+19
+3
+8
+329
+5
+48
+40
+15
+7
+41
+19
+3
+8
+564
+13
+7
+24
+12
+49
+2
+1
+9
+553
+15
+5
+7
+42
+13
+70
+9
+360
+15
+44
+43
+4
+7
+43
+78
+49
+6
+2
+6
+42
+47
+49
+7
+1
+9
+372
+7
+44
+19
+3
+8
+551
+5
+7
+45
+13
+70
+9
+391
+15
+44
+43
+4
+7
+46
+78
+49
+6
+2
+6
+45
+47
+49
+7
+1
+9
+432
+20
+0
+7
+46
+64
+7
+26
+35
+2
+49
+25
+1
+15
+20
+0
+7
+47
+7
+24
+35
+2
+49
+25
+1
+15
+7
+0
+19
+2
+15
+1
+8
+656
+8
+551
+5
+7
+48
+13
+70
+9
+472
+15
+44
+43
+4
+7
+49
+45
+29
+50
+47
+49
+31
+0
+7
+51
+45
+52
+53
+47
+49
+31
+0
+7
+54
+63
+5
+4
+6
+49
+6
+2
+6
+48
+47
+49
+7
+1
+9
+484
+7
+33
+19
+3
+8
+551
+5
+7
+55
+13
+70
+9
+503
+15
+44
+43
+4
+7
+56
+80
+49
+6
+2
+6
+55
+47
+49
+7
+1
+9
+532
+20
+0
+7
+47
+7
+24
+35
+2
+49
+25
+1
+15
+7
+41
+19
+3
+15
+7
+0
+19
+2
+8
+551
+5
+7
+57
+64
+5
+79
+47
+49
+58
+1
+49
+59
+1
+20
+0
+47
+49
+60
+2
+8
+564
+15
+5
+7
+61
+64
+20
+0
+47
+49
+60
+2
+15
+20
+4
+13
+10
+576
+15
+5
+48
+62
+19
+4
+15
+99
+43
+63
+7
+64
+49
+20
+1
+13
+9
+597
+15
+20
+3
+10
+596
+2
+8
+597
+3
+9
+625
+5
+7
+65
+64
+20
+4
+20
+3
+35
+2
+5
+48
+66
+35
+2
+49
+59
+1
+20
+0
+47
+49
+60
+2
+8
+626
+1
+15
+20
+4
+9
+634
+1
+8
+644
+5
+7
+67
+64
+20
+0
+47
+49
+60
+2
+15
+20
+0
+20
+4
+20
+3
+35
+2
+49
+25
+1
+15
+68
+8
+5
+1
+15
+20
+2
+7
+24
+83
+68
+9
+683
+20
+0
+7
+47
+7
+24
+35
+2
+49
+25
+1
+8
+684
+1
+15
+20
+0
+11
+I
+c
+I
+5
+I
+2
+I
+2
+n
+p
+69
+x
+7
+initial
+x
+4
+eos?
+x
+3
+===
+n
+x
+6
+Regexp
+s
+12
+ \s+ | \\\n 
+x
+3
+new
+x
+4
+scan
+x
+5
+space
+n
+s
+5
+-- .*
+x
+7
+comment
+n
+s
+42
+ [-+*\/=<>?:;,!&^|()\[\]{}~%]+ | \.(?!\d) 
+x
+8
+operator
+n
+s
+24
+ [A-Za-z_][A-Za-z_0-9]* 
+x
+10
+IDENT_KIND
+n
+x
+8
+downcase
+x
+2
+[]
+n
+s
+7
+[a-z]?"
+x
+4
+open
+x
+6
+string
+x
+2
+<<
+x
+9
+delimiter
+n
+s
+24
+ L?' (?: [^\'\n\\] | \\ 
+x
+6
+ESCAPE
+n
+x
+4
+to_s
+s
+7
+ )? '? 
+x
+4
+char
+n
+s
+18
+(?:\d+)(?![.eEfF])
+x
+7
+integer
+n
+s
+59
+\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?
+x
+5
+float
+x
+5
+getch
+x
+5
+error
+n
+s
+9
+[^\\\n"]+
+x
+7
+content
+n
+s
+1
+"
+x
+5
+close
+n
+s
+8
+ \\ (?: 
+n
+s
+3
+ | 
+x
+14
+UNICODE_ESCAPE
+n
+s
+3
+ ) 
+n
+s
+8
+ \\ | $ 
+s
+36
+else case " reached; %p not handled.
+x
+4
+peek
+x
+1
+%
+x
+13
+raise_inspect
+s
+13
+Unknown state
+x
+7
+matched
+x
+7
+Globals
+x
+6
+$DEBUG
+s
+25
+Error token %p in line %d
+x
+4
+line
+s
+11
+Empty token
+x
+2
+==
+p
+111
+I
+0
+I
+28
+I
+0
+I
+2a
+I
+5
+I
+2c
+I
+c
+I
+2e
+I
+10
+I
+2f
+I
+14
+I
+31
+I
+17
+I
+33
+I
+20
+I
+35
+I
+39
+I
+36
+I
+3f
+I
+38
+I
+58
+I
+39
+I
+5e
+I
+3b
+I
+77
+I
+3c
+I
+7d
+I
+3e
+I
+98
+I
+3f
+I
+a7
+I
+41
+I
+c2
+I
+42
+I
+ce
+I
+43
+I
+d3
+I
+44
+I
+d9
+I
+46
+I
+fd
+I
+47
+I
+103
+I
+49
+I
+11c
+I
+4a
+I
+122
+I
+4c
+I
+13b
+I
+4d
+I
+141
+I
+50
+I
+145
+I
+51
+I
+14c
+I
+55
+I
+155
+I
+56
+I
+16e
+I
+57
+I
+174
+I
+58
+I
+18d
+I
+59
+I
+19a
+I
+5a
+I
+1a6
+I
+5b
+I
+1ab
+I
+5c
+I
+1b0
+I
+5d
+I
+1de
+I
+5e
+I
+1e4
+I
+5f
+I
+1fd
+I
+60
+I
+209
+I
+61
+I
+20e
+I
+62
+I
+214
+I
+64
+I
+22a
+I
+68
+I
+235
+I
+6c
+I
+241
+I
+6d
+I
+257
+I
+6f
+I
+258
+I
+6e
+I
+25b
+I
+6f
+I
+271
+I
+6d
+I
+273
+I
+71
+I
+285
+I
+73
+I
+296
+I
+77
+I
+29e
+I
+78
+I
+2ab
+I
+77
+I
+2ad
+I
+7b
+I
+2b0
+x
+54
+/Users/murphy/ruby/coderay-0.9/test/functional/vhdl.rb
+p
+5
+x
+6
+tokens
+x
+7
+options
+x
+5
+state
+x
+4
+kind
+x
+5
+match
+x
+17
+method_visibility
+x
+15
+add_defn_method
+p
+65
+I
+2
+I
+3
+I
+a
+I
+5
+I
+d
+I
+6
+I
+22
+I
+7
+I
+3a
+I
+8
+I
+55
+I
+9
+I
+6d
+I
+a
+I
+85
+I
+b
+I
+a3
+I
+c
+I
+bb
+I
+d
+I
+d3
+I
+e
+I
+ee
+I
+f
+I
+109
+I
+10
+I
+115
+I
+11
+I
+11e
+I
+14
+I
+121
+I
+15
+I
+139
+I
+16
+I
+14e
+I
+17
+I
+15d
+I
+18
+I
+169
+I
+19
+I
+181
+I
+1c
+I
+184
+I
+1e
+I
+18a
+I
+20
+I
+1ab
+I
+21
+I
+1b0
+I
+20
+I
+1b3
+I
+22
+I
+1b8
+I
+20
+I
+1bb
+I
+23
+I
+1c0
+I
+20
+I
+1c7
+I
+25
+I
+1e0
+I
+26
+I
+1f9
+I
+28
+I
+207
+x
+54
+/Users/murphy/ruby/coderay-0.9/test/functional/vhdl.rb
+p
+0
+x
+13
+attach_method
+p
+3
+I
+0
+I
+1
+I
+23
+x
+54
+/Users/murphy/ruby/coderay-0.9/test/functional/vhdl.rb
+p
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/word_list.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,79 @@
+require 'test/unit'
+require 'coderay'
+
+class WordListTest < Test::Unit::TestCase
+  
+  include CodeRay
+  
+  # define word arrays
+  RESERVED_WORDS = %w[
+    asm break case continue default do else
+    ...
+  ]
+  
+  PREDEFINED_TYPES = %w[
+    int long short char void
+    ...
+  ]
+  
+  PREDEFINED_CONSTANTS = %w[
+    EOF NULL ...
+  ]
+  
+  # make a WordList
+  IDENT_KIND = WordList.new(:ident).
+    add(RESERVED_WORDS, :reserved).
+    add(PREDEFINED_TYPES, :pre_type).
+    add(PREDEFINED_CONSTANTS, :pre_constant)
+
+  def test_word_list_example
+    assert_equal :pre_type, IDENT_KIND['void']
+    # assert_equal :pre_constant, IDENT_KIND['...']  # not specified
+  end
+  
+  def test_word_list
+    list = WordList.new(:ident).add(['foobar'], :reserved)
+    assert_equal :reserved, list['foobar']
+    assert_equal :ident, list['FooBar']
+  end
+
+  def test_word_list_cached
+    list = WordList.new(:ident, true).add(['foobar'], :reserved)
+    assert_equal :reserved, list['foobar']
+    assert_equal :ident, list['FooBar']
+  end
+
+  def test_case_ignoring_word_list
+    list = CaseIgnoringWordList.new(:ident).add(['foobar'], :reserved)
+    assert_equal :ident, list['foo']
+    assert_equal :reserved, list['foobar']
+    assert_equal :reserved, list['FooBar']
+
+    list = CaseIgnoringWordList.new(:ident).add(['FooBar'], :reserved)
+    assert_equal :ident, list['foo']
+    assert_equal :reserved, list['foobar']
+    assert_equal :reserved, list['FooBar']
+  end
+
+  def test_case_ignoring_word_list_cached
+    list = CaseIgnoringWordList.new(:ident, true).add(['foobar'], :reserved)
+    assert_equal :ident, list['foo']
+    assert_equal :reserved, list['foobar']
+    assert_equal :reserved, list['FooBar']
+
+    list = CaseIgnoringWordList.new(:ident, true).add(['FooBar'], :reserved)
+    assert_equal :ident, list['foo']
+    assert_equal :reserved, list['foobar']
+    assert_equal :reserved, list['FooBar']
+  end
+
+  def test_dup
+    list = WordList.new(:ident).add(['foobar'], :reserved)
+    assert_equal :reserved, list['foobar']
+    list2 = list.dup
+    list2.add(%w[foobar], :keyword)
+    assert_equal :keyword, list2['foobar']
+    assert_equal :reserved, list['foobar']
+  end
+
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/.svn/text-base/word_list.rbc.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,1763 @@
+!RBIX
+0
+x
+M
+1
+n
+n
+x
+10
+__script__
+i
+53
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+47
+49
+1
+1
+15
+99
+7
+3
+45
+4
+5
+43
+6
+43
+7
+65
+49
+8
+3
+13
+99
+12
+7
+9
+12
+7
+10
+12
+65
+12
+49
+11
+4
+15
+49
+9
+0
+15
+2
+11
+I
+6
+I
+0
+I
+0
+I
+0
+n
+p
+12
+s
+9
+test/unit
+x
+7
+require
+s
+7
+coderay
+x
+12
+WordListTest
+x
+4
+Test
+n
+x
+4
+Unit
+x
+8
+TestCase
+x
+10
+open_class
+x
+14
+__class_init__
+M
+1
+n
+n
+x
+12
+WordListTest
+i
+232
+5
+66
+5
+45
+0
+1
+47
+49
+2
+1
+15
+65
+7
+3
+7
+4
+64
+7
+5
+64
+7
+6
+64
+7
+7
+64
+7
+8
+64
+7
+9
+64
+7
+10
+64
+7
+11
+64
+35
+8
+49
+12
+2
+15
+65
+7
+13
+7
+14
+64
+7
+15
+64
+7
+16
+64
+7
+17
+64
+7
+18
+64
+7
+11
+64
+35
+6
+49
+12
+2
+15
+65
+7
+19
+7
+20
+64
+7
+21
+64
+7
+11
+64
+35
+3
+49
+12
+2
+15
+65
+7
+22
+45
+23
+24
+13
+71
+25
+47
+9
+115
+47
+49
+26
+0
+13
+7
+27
+47
+49
+28
+1
+15
+8
+120
+7
+27
+49
+25
+1
+45
+3
+29
+7
+30
+49
+31
+2
+45
+13
+32
+7
+33
+49
+31
+2
+45
+19
+34
+7
+35
+49
+31
+2
+49
+12
+2
+15
+99
+7
+36
+7
+37
+65
+67
+49
+38
+0
+49
+39
+4
+15
+99
+7
+40
+7
+41
+65
+67
+49
+38
+0
+49
+39
+4
+15
+99
+7
+42
+7
+43
+65
+67
+49
+38
+0
+49
+39
+4
+15
+99
+7
+44
+7
+45
+65
+67
+49
+38
+0
+49
+39
+4
+15
+99
+7
+46
+7
+47
+65
+67
+49
+38
+0
+49
+39
+4
+15
+99
+7
+48
+7
+49
+65
+67
+49
+38
+0
+49
+39
+4
+11
+I
+a
+I
+0
+I
+0
+I
+0
+n
+p
+50
+x
+7
+CodeRay
+n
+x
+7
+include
+x
+14
+RESERVED_WORDS
+s
+3
+asm
+s
+5
+break
+s
+4
+case
+s
+8
+continue
+s
+7
+default
+s
+2
+do
+s
+4
+else
+s
+3
+...
+x
+9
+const_set
+x
+16
+PREDEFINED_TYPES
+s
+3
+int
+s
+4
+long
+s
+5
+short
+s
+4
+char
+s
+4
+void
+x
+20
+PREDEFINED_CONSTANTS
+s
+3
+EOF
+s
+4
+NULL
+x
+10
+IDENT_KIND
+x
+8
+WordList
+n
+x
+3
+new
+x
+8
+allocate
+x
+5
+ident
+x
+10
+initialize
+n
+x
+8
+reserved
+x
+3
+add
+n
+x
+8
+pre_type
+n
+x
+12
+pre_constant
+x
+22
+test_word_list_example
+M
+1
+n
+n
+x
+22
+test_word_list_example
+i
+17
+5
+7
+0
+45
+1
+2
+7
+3
+64
+49
+4
+1
+47
+49
+5
+2
+11
+I
+4
+I
+0
+I
+0
+I
+0
+n
+p
+6
+x
+8
+pre_type
+x
+10
+IDENT_KIND
+n
+s
+4
+void
+x
+2
+[]
+x
+12
+assert_equal
+p
+5
+I
+0
+I
+1d
+I
+0
+I
+1e
+I
+11
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+0
+x
+17
+method_visibility
+x
+15
+add_defn_method
+x
+14
+test_word_list
+M
+1
+n
+n
+x
+14
+test_word_list
+i
+73
+45
+0
+1
+13
+71
+2
+47
+9
+23
+47
+49
+3
+0
+13
+7
+4
+47
+49
+5
+1
+15
+8
+28
+7
+4
+49
+2
+1
+7
+6
+64
+35
+1
+7
+7
+49
+8
+2
+19
+0
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+9
+1
+47
+49
+10
+2
+15
+5
+7
+4
+20
+0
+7
+11
+64
+49
+9
+1
+47
+49
+10
+2
+11
+I
+5
+I
+1
+I
+0
+I
+0
+n
+p
+12
+x
+8
+WordList
+n
+x
+3
+new
+x
+8
+allocate
+x
+5
+ident
+x
+10
+initialize
+s
+6
+foobar
+x
+8
+reserved
+x
+3
+add
+x
+2
+[]
+x
+12
+assert_equal
+s
+6
+FooBar
+p
+9
+I
+0
+I
+22
+I
+0
+I
+23
+I
+29
+I
+24
+I
+39
+I
+25
+I
+49
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+1
+x
+4
+list
+x
+21
+test_word_list_cached
+M
+1
+n
+n
+x
+21
+test_word_list_cached
+i
+75
+45
+0
+1
+13
+71
+2
+47
+9
+24
+47
+49
+3
+0
+13
+7
+4
+2
+47
+49
+5
+2
+15
+8
+30
+7
+4
+2
+49
+2
+2
+7
+6
+64
+35
+1
+7
+7
+49
+8
+2
+19
+0
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+9
+1
+47
+49
+10
+2
+15
+5
+7
+4
+20
+0
+7
+11
+64
+49
+9
+1
+47
+49
+10
+2
+11
+I
+5
+I
+1
+I
+0
+I
+0
+n
+p
+12
+x
+8
+WordList
+n
+x
+3
+new
+x
+8
+allocate
+x
+5
+ident
+x
+10
+initialize
+s
+6
+foobar
+x
+8
+reserved
+x
+3
+add
+x
+2
+[]
+x
+12
+assert_equal
+s
+6
+FooBar
+p
+9
+I
+0
+I
+28
+I
+0
+I
+29
+I
+2b
+I
+2a
+I
+3b
+I
+2b
+I
+4b
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+1
+x
+4
+list
+x
+28
+test_case_ignoring_word_list
+M
+1
+n
+n
+x
+28
+test_case_ignoring_word_list
+i
+178
+45
+0
+1
+13
+71
+2
+47
+9
+23
+47
+49
+3
+0
+13
+7
+4
+47
+49
+5
+1
+15
+8
+28
+7
+4
+49
+2
+1
+7
+6
+64
+35
+1
+7
+7
+49
+8
+2
+19
+0
+15
+5
+7
+4
+20
+0
+7
+9
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+12
+64
+49
+10
+1
+47
+49
+11
+2
+15
+45
+0
+13
+13
+71
+2
+47
+9
+112
+47
+49
+3
+0
+13
+7
+4
+47
+49
+5
+1
+15
+8
+117
+7
+4
+49
+2
+1
+7
+12
+64
+35
+1
+7
+7
+49
+8
+2
+19
+0
+15
+5
+7
+4
+20
+0
+7
+9
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+12
+64
+49
+10
+1
+47
+49
+11
+2
+11
+I
+5
+I
+1
+I
+0
+I
+0
+n
+p
+14
+x
+20
+CaseIgnoringWordList
+n
+x
+3
+new
+x
+8
+allocate
+x
+5
+ident
+x
+10
+initialize
+s
+6
+foobar
+x
+8
+reserved
+x
+3
+add
+s
+3
+foo
+x
+2
+[]
+x
+12
+assert_equal
+s
+6
+FooBar
+n
+p
+19
+I
+0
+I
+2e
+I
+0
+I
+2f
+I
+29
+I
+30
+I
+39
+I
+31
+I
+49
+I
+32
+I
+59
+I
+34
+I
+82
+I
+35
+I
+92
+I
+36
+I
+a2
+I
+37
+I
+b2
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+1
+x
+4
+list
+x
+35
+test_case_ignoring_word_list_cached
+M
+1
+n
+n
+x
+35
+test_case_ignoring_word_list_cached
+i
+182
+45
+0
+1
+13
+71
+2
+47
+9
+24
+47
+49
+3
+0
+13
+7
+4
+2
+47
+49
+5
+2
+15
+8
+30
+7
+4
+2
+49
+2
+2
+7
+6
+64
+35
+1
+7
+7
+49
+8
+2
+19
+0
+15
+5
+7
+4
+20
+0
+7
+9
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+12
+64
+49
+10
+1
+47
+49
+11
+2
+15
+45
+0
+13
+13
+71
+2
+47
+9
+115
+47
+49
+3
+0
+13
+7
+4
+2
+47
+49
+5
+2
+15
+8
+121
+7
+4
+2
+49
+2
+2
+7
+12
+64
+35
+1
+7
+7
+49
+8
+2
+19
+0
+15
+5
+7
+4
+20
+0
+7
+9
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+12
+64
+49
+10
+1
+47
+49
+11
+2
+11
+I
+5
+I
+1
+I
+0
+I
+0
+n
+p
+14
+x
+20
+CaseIgnoringWordList
+n
+x
+3
+new
+x
+8
+allocate
+x
+5
+ident
+x
+10
+initialize
+s
+6
+foobar
+x
+8
+reserved
+x
+3
+add
+s
+3
+foo
+x
+2
+[]
+x
+12
+assert_equal
+s
+6
+FooBar
+n
+p
+19
+I
+0
+I
+3a
+I
+0
+I
+3b
+I
+2b
+I
+3c
+I
+3b
+I
+3d
+I
+4b
+I
+3e
+I
+5b
+I
+40
+I
+86
+I
+41
+I
+96
+I
+42
+I
+a6
+I
+43
+I
+b6
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+1
+x
+4
+list
+x
+8
+test_dup
+M
+1
+n
+n
+x
+8
+test_dup
+i
+110
+45
+0
+1
+13
+71
+2
+47
+9
+23
+47
+49
+3
+0
+13
+7
+4
+47
+49
+5
+1
+15
+8
+28
+7
+4
+49
+2
+1
+7
+6
+64
+35
+1
+7
+7
+49
+8
+2
+19
+0
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+9
+1
+47
+49
+10
+2
+15
+20
+0
+49
+11
+0
+19
+1
+15
+20
+1
+7
+6
+64
+35
+1
+7
+12
+49
+8
+2
+15
+5
+7
+12
+20
+1
+7
+6
+64
+49
+9
+1
+47
+49
+10
+2
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+9
+1
+47
+49
+10
+2
+11
+I
+6
+I
+2
+I
+0
+I
+0
+n
+p
+13
+x
+8
+WordList
+n
+x
+3
+new
+x
+8
+allocate
+x
+5
+ident
+x
+10
+initialize
+s
+6
+foobar
+x
+8
+reserved
+x
+3
+add
+x
+2
+[]
+x
+12
+assert_equal
+x
+3
+dup
+x
+7
+keyword
+p
+15
+I
+0
+I
+46
+I
+0
+I
+47
+I
+29
+I
+48
+I
+39
+I
+49
+I
+41
+I
+4a
+I
+4e
+I
+4b
+I
+5e
+I
+4c
+I
+6e
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+2
+x
+4
+list
+x
+5
+list2
+p
+45
+I
+2
+I
+6
+I
+b
+I
+9
+I
+e
+I
+a
+I
+23
+I
+b
+I
+2c
+I
+e
+I
+2f
+I
+f
+I
+3e
+I
+10
+I
+47
+I
+13
+I
+4a
+I
+14
+I
+59
+I
+18
+I
+78
+I
+19
+I
+7d
+I
+18
+I
+80
+I
+1a
+I
+85
+I
+18
+I
+88
+I
+1b
+I
+8d
+I
+18
+I
+94
+I
+1d
+I
+a2
+I
+22
+I
+b0
+I
+28
+I
+be
+I
+2e
+I
+cc
+I
+3a
+I
+da
+I
+46
+I
+e8
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+0
+x
+13
+attach_method
+p
+7
+I
+0
+I
+1
+I
+9
+I
+2
+I
+12
+I
+4
+I
+35
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/basic.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,122 @@
+require 'test/unit'
+require 'coderay'
+
+class BasicTest < Test::Unit::TestCase
+  
+  def test_version
+    assert_nothing_raised do
+      assert_match(/\A\d\.\d\.\d\z/, CodeRay::VERSION)
+    end
+  end
+  
+  RUBY_TEST_CODE = 'puts "Hello, World!"'
+  
+  RUBY_TEST_TOKENS = [
+    ['puts', :ident],
+    [' ', :space],
+    [:open, :string],
+      ['"', :delimiter],
+      ['Hello, World!', :content],
+      ['"', :delimiter],
+    [:close, :string]
+  ]
+  def test_simple_scan
+    assert_nothing_raised do
+      assert_equal RUBY_TEST_TOKENS, CodeRay.scan(RUBY_TEST_CODE, :ruby).to_ary
+    end
+  end
+  
+  RUBY_TEST_HTML = 'puts <span class="s"><span class="dl">&quot;</span>' + 
+    '<span class="k">Hello, World!</span><span class="dl">&quot;</span></span>'
+  def test_simple_highlight
+    assert_nothing_raised do
+      assert_equal RUBY_TEST_HTML, CodeRay.scan(RUBY_TEST_CODE, :ruby).html
+    end
+  end
+  
+  def test_duo
+    assert_equal(RUBY_TEST_CODE,
+      CodeRay::Duo[:plain, :plain].highlight(RUBY_TEST_CODE))
+    assert_equal(RUBY_TEST_CODE,
+      CodeRay::Duo[:plain => :plain].highlight(RUBY_TEST_CODE))
+  end
+  
+  def test_duo_stream
+    assert_equal(RUBY_TEST_CODE,
+      CodeRay::Duo[:plain, :plain].highlight(RUBY_TEST_CODE, :stream => true))
+  end
+  
+  def test_comment_filter
+    assert_equal <<-EXPECTED, CodeRay.scan(<<-INPUT, :ruby).comment_filter.text
+#!/usr/bin/env ruby
+
+code
+
+more code  
+      EXPECTED
+#!/usr/bin/env ruby
+=begin
+A multi-line comment.
+=end
+code
+# A single-line comment.
+more code  # and another comment, in-line.
+      INPUT
+  end
+  
+  def test_lines_of_code
+    assert_equal 2, CodeRay.scan(<<-INPUT, :ruby).lines_of_code
+#!/usr/bin/env ruby
+=begin
+A multi-line comment.
+=end
+code
+# A single-line comment.
+more code  # and another comment, in-line.
+      INPUT
+    rHTML = <<-RHTML
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
+  <title><%= controller.controller_name.titleize %>: <%= controller.action_name %></title>
+  <%= stylesheet_link_tag 'scaffold' %>
+</head>
+<body>
+
+<p style="color: green"><%= flash[:notice] %></p>
+
+<div id="main">
+  <%= yield %>
+</div>
+
+</body>
+</html>
+      RHTML
+    assert_equal 0, CodeRay.scan(rHTML, :html).lines_of_code
+    assert_equal 0, CodeRay.scan(rHTML, :php).lines_of_code
+    assert_equal 0, CodeRay.scan(rHTML, :yaml).lines_of_code
+    assert_equal 4, CodeRay.scan(rHTML, :rhtml).lines_of_code
+  end
+  
+  def test_rubygems_not_loaded
+    assert_equal nil, defined? Gem
+  end if ENV['check_rubygems'] && RUBY_VERSION < '1.9'
+  
+  def test_list_of_encoders
+    assert_kind_of(Array, CodeRay::Encoders.list)
+    assert CodeRay::Encoders.list.include?('count')
+  end
+  
+  def test_list_of_scanners
+    assert_kind_of(Array, CodeRay::Scanners.list)
+    assert CodeRay::Scanners.list.include?('plaintext')
+  end
+  
+  def test_scan_a_frozen_string
+    CodeRay.scan RUBY_VERSION, :ruby
+  end
+  
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/basic.rbc	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,2022 @@
+!RBIX
+0
+x
+M
+1
+n
+n
+x
+10
+__script__
+i
+53
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+47
+49
+1
+1
+15
+99
+7
+3
+45
+4
+5
+43
+6
+43
+7
+65
+49
+8
+3
+13
+99
+12
+7
+9
+12
+7
+10
+12
+65
+12
+49
+11
+4
+15
+49
+9
+0
+15
+2
+11
+I
+6
+I
+0
+I
+0
+I
+0
+n
+p
+12
+s
+9
+test/unit
+x
+7
+require
+s
+7
+coderay
+x
+9
+BasicTest
+x
+4
+Test
+n
+x
+4
+Unit
+x
+8
+TestCase
+x
+10
+open_class
+x
+14
+__class_init__
+M
+1
+n
+n
+x
+9
+BasicTest
+i
+263
+5
+66
+99
+7
+0
+7
+1
+65
+67
+49
+2
+0
+49
+3
+4
+15
+65
+7
+4
+7
+5
+64
+49
+6
+2
+15
+65
+7
+7
+7
+8
+64
+7
+9
+35
+2
+7
+10
+64
+7
+11
+35
+2
+7
+12
+7
+13
+35
+2
+7
+14
+64
+7
+15
+35
+2
+7
+16
+64
+7
+17
+35
+2
+7
+14
+64
+7
+15
+35
+2
+7
+18
+7
+13
+35
+2
+35
+7
+49
+6
+2
+15
+99
+7
+19
+7
+20
+65
+67
+49
+2
+0
+49
+3
+4
+15
+65
+7
+21
+7
+22
+64
+7
+23
+64
+81
+24
+49
+6
+2
+15
+99
+7
+25
+7
+26
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+27
+7
+28
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+29
+7
+30
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+31
+7
+32
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+33
+7
+34
+65
+67
+49
+2
+0
+49
+3
+4
+15
+45
+35
+36
+7
+37
+64
+49
+38
+1
+13
+9
+202
+15
+45
+39
+40
+7
+41
+64
+84
+42
+9
+219
+99
+7
+43
+7
+44
+65
+67
+49
+2
+0
+49
+3
+4
+8
+220
+1
+15
+99
+7
+45
+7
+46
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+47
+7
+48
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+49
+7
+50
+65
+67
+49
+2
+0
+49
+3
+4
+11
+I
+a
+I
+0
+I
+0
+I
+0
+n
+p
+51
+x
+12
+test_version
+M
+1
+n
+n
+x
+12
+test_version
+i
+8
+5
+56
+0
+47
+50
+1
+0
+11
+I
+2
+I
+0
+I
+0
+I
+0
+n
+p
+2
+M
+1
+p
+2
+x
+9
+for_block
+t
+n
+x
+12
+test_version
+i
+29
+5
+7
+0
+13
+70
+9
+19
+15
+44
+43
+1
+7
+2
+78
+49
+3
+2
+6
+0
+45
+4
+5
+43
+6
+47
+49
+7
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+I
+-2
+p
+8
+n
+x
+6
+Regexp
+s
+14
+\A\d\.\d\.\d\z
+x
+3
+new
+x
+7
+CodeRay
+n
+x
+7
+VERSION
+x
+12
+assert_match
+p
+5
+I
+0
+I
+7
+I
+0
+I
+8
+I
+1d
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+21
+assert_nothing_raised
+p
+5
+I
+0
+I
+6
+I
+0
+I
+7
+I
+8
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+17
+method_visibility
+x
+15
+add_defn_method
+x
+14
+RUBY_TEST_CODE
+s
+20
+puts "Hello, World!"
+x
+9
+const_set
+x
+16
+RUBY_TEST_TOKENS
+s
+4
+puts
+x
+5
+ident
+s
+1
+ 
+x
+5
+space
+x
+4
+open
+x
+6
+string
+s
+1
+"
+x
+9
+delimiter
+s
+13
+Hello, World!
+x
+7
+content
+x
+5
+close
+x
+16
+test_simple_scan
+M
+1
+n
+n
+x
+16
+test_simple_scan
+i
+8
+5
+56
+0
+47
+50
+1
+0
+11
+I
+2
+I
+0
+I
+0
+I
+0
+n
+p
+2
+M
+1
+p
+2
+x
+9
+for_block
+t
+n
+x
+16
+test_simple_scan
+i
+23
+5
+45
+0
+1
+45
+2
+3
+45
+4
+5
+7
+6
+49
+7
+2
+49
+8
+0
+47
+49
+9
+2
+11
+I
+6
+I
+0
+I
+0
+I
+0
+I
+-2
+p
+10
+x
+16
+RUBY_TEST_TOKENS
+n
+x
+7
+CodeRay
+n
+x
+14
+RUBY_TEST_CODE
+n
+x
+4
+ruby
+x
+4
+scan
+x
+6
+to_ary
+x
+12
+assert_equal
+p
+5
+I
+0
+I
+18
+I
+0
+I
+19
+I
+17
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+21
+assert_nothing_raised
+p
+5
+I
+0
+I
+17
+I
+0
+I
+18
+I
+8
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+14
+RUBY_TEST_HTML
+s
+51
+puts <span class="s"><span class="dl">&quot;</span>
+s
+73
+<span class="k">Hello, World!</span><span class="dl">&quot;</span></span>
+x
+1
++
+x
+21
+test_simple_highlight
+M
+1
+n
+n
+x
+21
+test_simple_highlight
+i
+8
+5
+56
+0
+47
+50
+1
+0
+11
+I
+2
+I
+0
+I
+0
+I
+0
+n
+p
+2
+M
+1
+p
+2
+x
+9
+for_block
+t
+n
+x
+21
+test_simple_highlight
+i
+23
+5
+45
+0
+1
+45
+2
+3
+45
+4
+5
+7
+6
+49
+7
+2
+49
+8
+0
+47
+49
+9
+2
+11
+I
+6
+I
+0
+I
+0
+I
+0
+I
+-2
+p
+10
+x
+14
+RUBY_TEST_HTML
+n
+x
+7
+CodeRay
+n
+x
+14
+RUBY_TEST_CODE
+n
+x
+4
+ruby
+x
+4
+scan
+x
+4
+html
+x
+12
+assert_equal
+p
+5
+I
+0
+I
+20
+I
+0
+I
+21
+I
+17
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+21
+assert_nothing_raised
+p
+5
+I
+0
+I
+1f
+I
+0
+I
+20
+I
+8
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+8
+test_duo
+M
+1
+n
+n
+x
+8
+test_duo
+i
+66
+5
+45
+0
+1
+45
+2
+3
+43
+4
+7
+5
+7
+5
+49
+6
+2
+45
+0
+7
+49
+8
+1
+47
+49
+9
+2
+15
+5
+45
+0
+10
+45
+2
+11
+43
+4
+44
+43
+12
+79
+49
+13
+1
+13
+7
+5
+7
+5
+49
+14
+2
+15
+49
+6
+1
+45
+0
+15
+49
+8
+1
+47
+49
+9
+2
+11
+I
+7
+I
+0
+I
+0
+I
+0
+n
+p
+16
+x
+14
+RUBY_TEST_CODE
+n
+x
+7
+CodeRay
+n
+x
+3
+Duo
+x
+5
+plain
+x
+2
+[]
+n
+x
+9
+highlight
+x
+12
+assert_equal
+n
+n
+x
+4
+Hash
+x
+16
+new_from_literal
+x
+3
+[]=
+n
+p
+15
+I
+0
+I
+25
+I
+0
+I
+26
+I
+4
+I
+27
+I
+16
+I
+26
+I
+1b
+I
+28
+I
+1f
+I
+29
+I
+3d
+I
+28
+I
+42
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+15
+test_duo_stream
+M
+1
+n
+n
+x
+15
+test_duo_stream
+i
+42
+5
+45
+0
+1
+45
+2
+3
+43
+4
+7
+5
+7
+5
+49
+6
+2
+45
+0
+7
+44
+43
+8
+79
+49
+9
+1
+13
+7
+10
+2
+49
+11
+2
+15
+49
+12
+2
+47
+49
+13
+2
+11
+I
+8
+I
+0
+I
+0
+I
+0
+n
+p
+14
+x
+14
+RUBY_TEST_CODE
+n
+x
+7
+CodeRay
+n
+x
+3
+Duo
+x
+5
+plain
+x
+2
+[]
+n
+x
+4
+Hash
+x
+16
+new_from_literal
+x
+6
+stream
+x
+3
+[]=
+x
+9
+highlight
+x
+12
+assert_equal
+p
+9
+I
+0
+I
+2c
+I
+0
+I
+2d
+I
+4
+I
+2e
+I
+25
+I
+2d
+I
+2a
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+19
+test_comment_filter
+M
+1
+n
+n
+x
+19
+test_comment_filter
+i
+26
+5
+7
+0
+64
+45
+1
+2
+7
+3
+64
+7
+4
+49
+5
+2
+49
+6
+0
+49
+7
+0
+47
+49
+8
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+9
+s
+39
+#!/usr/bin/env ruby
+
+code
+
+more code  
+
+x
+7
+CodeRay
+n
+s
+127
+#!/usr/bin/env ruby
+=begin
+A multi-line comment.
+=end
+code
+# A single-line comment.
+more code  # and another comment, in-line.
+
+x
+4
+ruby
+x
+4
+scan
+x
+14
+comment_filter
+x
+4
+text
+x
+12
+assert_equal
+p
+5
+I
+0
+I
+31
+I
+0
+I
+32
+I
+1a
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+18
+test_lines_of_code
+M
+1
+n
+n
+x
+18
+test_lines_of_code
+i
+108
+5
+80
+45
+0
+1
+7
+2
+64
+7
+3
+49
+4
+2
+49
+5
+0
+47
+49
+6
+2
+15
+7
+7
+64
+19
+0
+15
+5
+78
+45
+0
+8
+20
+0
+7
+9
+49
+4
+2
+49
+5
+0
+47
+49
+6
+2
+15
+5
+78
+45
+0
+10
+20
+0
+7
+11
+49
+4
+2
+49
+5
+0
+47
+49
+6
+2
+15
+5
+78
+45
+0
+12
+20
+0
+7
+13
+49
+4
+2
+49
+5
+0
+47
+49
+6
+2
+15
+5
+4
+4
+45
+0
+14
+20
+0
+7
+15
+49
+4
+2
+49
+5
+0
+47
+49
+6
+2
+11
+I
+6
+I
+1
+I
+0
+I
+0
+n
+p
+16
+x
+7
+CodeRay
+n
+s
+127
+#!/usr/bin/env ruby
+=begin
+A multi-line comment.
+=end
+code
+# A single-line comment.
+more code  # and another comment, in-line.
+
+x
+4
+ruby
+x
+4
+scan
+x
+13
+lines_of_code
+x
+12
+assert_equal
+s
+514
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
+  <title><%= controller.controller_name.titleize %>: <%= controller.action_name %></title>
+  <%= stylesheet_link_tag 'scaffold' %>
+</head>
+<body>
+
+<p style="color: green"><%= flash[:notice] %></p>
+
+<div id="main">
+  <%= yield %>
+</div>
+
+</body>
+</html>
+
+n
+x
+4
+html
+n
+x
+3
+php
+n
+x
+4
+yaml
+n
+x
+5
+rhtml
+p
+15
+I
+0
+I
+43
+I
+0
+I
+44
+I
+15
+I
+4d
+I
+1b
+I
+62
+I
+2f
+I
+63
+I
+43
+I
+64
+I
+57
+I
+65
+I
+6c
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+1
+x
+5
+rHTML
+x
+3
+ENV
+n
+s
+14
+check_rubygems
+x
+2
+[]
+x
+12
+RUBY_VERSION
+n
+s
+3
+1.9
+x
+1
+<
+x
+24
+test_rubygems_not_loaded
+M
+1
+n
+n
+x
+24
+test_rubygems_not_loaded
+i
+34
+5
+1
+26
+93
+0
+15
+29
+17
+0
+7
+0
+98
+1
+1
+30
+8
+23
+25
+92
+0
+27
+8
+28
+15
+7
+2
+8
+29
+1
+47
+49
+3
+2
+11
+I
+4
+I
+0
+I
+0
+I
+0
+n
+p
+4
+x
+3
+Gem
+x
+16
+vm_const_defined
+s
+8
+constant
+x
+12
+assert_equal
+p
+5
+I
+0
+I
+68
+I
+0
+I
+69
+I
+22
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+21
+test_list_of_encoders
+M
+1
+n
+n
+x
+21
+test_list_of_encoders
+i
+37
+5
+45
+0
+1
+45
+2
+3
+43
+4
+49
+5
+0
+47
+49
+6
+2
+15
+5
+45
+2
+7
+43
+4
+49
+5
+0
+7
+8
+64
+49
+9
+1
+47
+49
+10
+1
+11
+I
+3
+I
+0
+I
+0
+I
+0
+n
+p
+11
+x
+5
+Array
+n
+x
+7
+CodeRay
+n
+x
+8
+Encoders
+x
+4
+list
+x
+14
+assert_kind_of
+n
+s
+5
+count
+x
+8
+include?
+x
+6
+assert
+p
+7
+I
+0
+I
+6c
+I
+0
+I
+6d
+I
+11
+I
+6e
+I
+25
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+21
+test_list_of_scanners
+M
+1
+n
+n
+x
+21
+test_list_of_scanners
+i
+37
+5
+45
+0
+1
+45
+2
+3
+43
+4
+49
+5
+0
+47
+49
+6
+2
+15
+5
+45
+2
+7
+43
+4
+49
+5
+0
+7
+8
+64
+49
+9
+1
+47
+49
+10
+1
+11
+I
+3
+I
+0
+I
+0
+I
+0
+n
+p
+11
+x
+5
+Array
+n
+x
+7
+CodeRay
+n
+x
+8
+Scanners
+x
+4
+list
+x
+14
+assert_kind_of
+n
+s
+9
+plaintext
+x
+8
+include?
+x
+6
+assert
+p
+7
+I
+0
+I
+71
+I
+0
+I
+72
+I
+11
+I
+73
+I
+25
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+25
+test_scan_a_frozen_string
+M
+1
+n
+n
+x
+25
+test_scan_a_frozen_string
+i
+12
+45
+0
+1
+45
+2
+3
+7
+4
+49
+5
+2
+11
+I
+3
+I
+0
+I
+0
+I
+0
+n
+p
+6
+x
+7
+CodeRay
+n
+x
+12
+RUBY_VERSION
+n
+x
+4
+ruby
+x
+4
+scan
+p
+5
+I
+0
+I
+76
+I
+0
+I
+77
+I
+c
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+p
+51
+I
+2
+I
+6
+I
+10
+I
+c
+I
+1a
+I
+e
+I
+1d
+I
+f
+I
+24
+I
+10
+I
+2b
+I
+11
+I
+31
+I
+12
+I
+38
+I
+13
+I
+3f
+I
+14
+I
+46
+I
+15
+I
+52
+I
+17
+I
+60
+I
+1d
+I
+63
+I
+1d
+I
+66
+I
+1e
+I
+6f
+I
+1f
+I
+7d
+I
+25
+I
+8b
+I
+2c
+I
+99
+I
+31
+I
+a7
+I
+43
+I
+b5
+I
+6a
+I
+cc
+I
+68
+I
+db
+I
+6a
+I
+dd
+I
+6c
+I
+eb
+I
+71
+I
+f9
+I
+76
+I
+107
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
+x
+13
+attach_method
+p
+7
+I
+0
+I
+1
+I
+9
+I
+2
+I
+12
+I
+4
+I
+35
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/basic.rb
+p
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/for_redcloth.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,77 @@
+require 'test/unit'
+$:.unshift 'lib'
+require 'coderay'
+
+begin
+  require 'rubygems' unless defined? Gem
+  gem 'RedCloth', '>= 4.0.3' rescue nil
+  require 'redcloth'
+rescue LoadError
+  warn 'RedCloth not found - skipping for_redcloth tests.'
+end
+
+class BasicTest < Test::Unit::TestCase
+  
+  def test_for_redcloth
+    require 'coderay/for_redcloth'
+    assert_equal "<p><span lang=\"ruby\" class=\"CodeRay\">puts <span style=\"background-color:#fff0f0;color:#D20\"><span style=\"color:#710\">&quot;</span><span style=\"\">Hello, World!</span><span style=\"color:#710\">&quot;</span></span></span></p>",
+      RedCloth.new('@[ruby]puts "Hello, World!"@').to_html
+    assert_equal <<-BLOCKCODE.chomp,
+<div lang="ruby" class="CodeRay">
+  <div class="code"><pre>puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">Hello, World!</span><span style="color:#710">&quot;</span></span></pre></div>
+</div>
+      BLOCKCODE
+      RedCloth.new('bc[ruby]. puts "Hello, World!"').to_html
+  end
+  
+  def test_for_redcloth_no_lang
+    require 'coderay/for_redcloth'
+    assert_equal "<p><code>puts \"Hello, World!\"</code></p>",
+      RedCloth.new('@puts "Hello, World!"@').to_html
+    assert_equal <<-BLOCKCODE.chomp,
+<pre><code>puts \"Hello, World!\"</code></pre>
+      BLOCKCODE
+      RedCloth.new('bc. puts "Hello, World!"').to_html
+  end
+  
+  def test_for_redcloth_style
+    require 'coderay/for_redcloth'
+    assert_equal <<-BLOCKCODE.chomp,
+<pre style=\"color: red;\"><code style=\"color: red;\">puts \"Hello, World!\"</code></pre>
+      BLOCKCODE
+      RedCloth.new('bc{color: red}. puts "Hello, World!"').to_html
+  end
+  
+  def test_for_redcloth_escapes
+    require 'coderay/for_redcloth'
+    assert_equal '<p><span lang="ruby" class="CodeRay">&gt;</span></p>',
+      RedCloth.new('@[ruby]>@').to_html
+    assert_equal <<-BLOCKCODE.chomp,
+<div lang="ruby" class="CodeRay">
+  <div class="code"><pre>&amp;</pre></div>
+</div>
+      BLOCKCODE
+      RedCloth.new('bc[ruby]. &').to_html
+  end
+  
+  def test_for_redcloth_escapes2
+    require 'coderay/for_redcloth'
+    assert_equal "<p><span lang=\"c\" class=\"CodeRay\"><span style=\"color:#579\">#include</span> <span style=\"color:#B44;font-weight:bold\">&lt;test.h&gt;</span></span></p>",
+      RedCloth.new('@[c]#include <test.h>@').to_html
+  end
+  
+  # See http://jgarber.lighthouseapp.com/projects/13054/tickets/124-code-markup-does-not-allow-brackets.
+  def test_for_redcloth_false_positive
+    require 'coderay/for_redcloth'
+    assert_equal '<p><code>[project]_dff.skjd</code></p>',
+      RedCloth.new('@[project]_dff.skjd@').to_html
+    # false positive, but expected behavior / known issue
+    assert_equal "<p><span lang=\"ruby\" class=\"CodeRay\">_dff.skjd</span></p>",
+      RedCloth.new('@[ruby]_dff.skjd@').to_html
+    assert_equal <<-BLOCKCODE.chomp,
+<pre><code>[project]_dff.skjd</code></pre>
+      BLOCKCODE
+      RedCloth.new('bc. [project]_dff.skjd').to_html
+  end
+  
+end if defined? RedCloth
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/for_redcloth.rbc	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,1708 @@
+!RBIX
+0
+x
+M
+1
+n
+n
+x
+10
+__script__
+i
+249
+5
+7
+0
+64
+47
+49
+1
+1
+15
+99
+43
+2
+7
+3
+49
+4
+1
+7
+5
+64
+49
+6
+1
+15
+5
+7
+7
+64
+47
+49
+1
+1
+15
+26
+93
+0
+15
+29
+144
+0
+26
+93
+1
+15
+29
+55
+0
+7
+8
+98
+9
+1
+30
+8
+61
+25
+92
+1
+27
+8
+66
+15
+7
+10
+8
+67
+1
+9
+72
+1
+8
+80
+5
+7
+11
+64
+47
+49
+1
+1
+15
+26
+93
+2
+15
+29
+102
+0
+5
+7
+12
+64
+7
+13
+64
+47
+49
+14
+2
+30
+8
+129
+26
+93
+3
+15
+24
+13
+45
+15
+16
+12
+49
+17
+1
+10
+119
+8
+124
+15
+1
+25
+8
+129
+15
+92
+3
+27
+34
+92
+2
+27
+15
+5
+7
+18
+64
+47
+49
+1
+1
+30
+8
+178
+26
+93
+4
+15
+24
+13
+45
+19
+20
+12
+49
+17
+1
+10
+161
+8
+173
+15
+5
+7
+21
+64
+47
+49
+22
+1
+25
+8
+178
+15
+92
+4
+27
+34
+92
+0
+27
+15
+26
+93
+5
+15
+29
+197
+0
+7
+23
+98
+9
+1
+30
+8
+203
+25
+92
+5
+27
+8
+208
+15
+7
+10
+8
+209
+1
+9
+245
+99
+7
+24
+45
+25
+26
+43
+27
+43
+28
+65
+49
+29
+3
+13
+99
+12
+7
+30
+12
+7
+31
+12
+65
+12
+49
+32
+4
+15
+49
+30
+0
+8
+246
+1
+15
+2
+11
+I
+c
+I
+0
+I
+0
+I
+0
+n
+p
+33
+s
+9
+test/unit
+x
+7
+require
+x
+7
+Globals
+x
+2
+$:
+x
+2
+[]
+s
+3
+lib
+x
+2
+<<
+s
+7
+coderay
+x
+3
+Gem
+x
+16
+vm_const_defined
+s
+8
+constant
+s
+8
+rubygems
+s
+8
+RedCloth
+s
+8
+>= 4.0.3
+x
+3
+gem
+x
+13
+StandardError
+n
+x
+3
+===
+s
+8
+redcloth
+x
+9
+LoadError
+n
+s
+49
+RedCloth not found - skipping for_redcloth tests.
+x
+4
+warn
+x
+8
+RedCloth
+x
+9
+BasicTest
+x
+4
+Test
+n
+x
+4
+Unit
+x
+8
+TestCase
+x
+10
+open_class
+x
+14
+__class_init__
+M
+1
+n
+n
+x
+9
+BasicTest
+i
+86
+5
+66
+99
+7
+0
+7
+1
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+4
+7
+5
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+6
+7
+7
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+8
+7
+9
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+10
+7
+11
+65
+67
+49
+2
+0
+49
+3
+4
+15
+99
+7
+12
+7
+13
+65
+67
+49
+2
+0
+49
+3
+4
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+14
+x
+17
+test_for_redcloth
+M
+1
+n
+n
+x
+17
+test_for_redcloth
+i
+96
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+45
+3
+4
+13
+71
+5
+47
+9
+37
+47
+49
+6
+0
+13
+7
+7
+64
+47
+49
+8
+1
+15
+8
+43
+7
+7
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+15
+5
+7
+11
+64
+49
+12
+0
+45
+3
+13
+13
+71
+5
+47
+9
+82
+47
+49
+6
+0
+13
+7
+14
+64
+47
+49
+8
+1
+15
+8
+88
+7
+14
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+15
+s
+20
+coderay/for_redcloth
+x
+7
+require
+s
+221
+<p><span lang="ruby" class="CodeRay">puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">Hello, World!</span><span style="color:#710">&quot;</span></span></span></p>
+x
+8
+RedCloth
+n
+x
+3
+new
+x
+8
+allocate
+s
+28
+@[ruby]puts "Hello, World!"@
+x
+10
+initialize
+x
+7
+to_html
+x
+12
+assert_equal
+s
+252
+<div lang="ruby" class="CodeRay">
+  <div class="code"><pre>puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">Hello, World!</span><span style="color:#710">&quot;</span></span></pre></div>
+</div>
+
+x
+5
+chomp
+n
+s
+30
+bc[ruby]. puts "Hello, World!"
+p
+17
+I
+0
+I
+f
+I
+0
+I
+10
+I
+9
+I
+11
+I
+d
+I
+12
+I
+2e
+I
+11
+I
+33
+I
+13
+I
+3a
+I
+18
+I
+5b
+I
+13
+I
+60
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
+x
+17
+method_visibility
+x
+15
+add_defn_method
+x
+25
+test_for_redcloth_no_lang
+M
+1
+n
+n
+x
+25
+test_for_redcloth_no_lang
+i
+96
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+45
+3
+4
+13
+71
+5
+47
+9
+37
+47
+49
+6
+0
+13
+7
+7
+64
+47
+49
+8
+1
+15
+8
+43
+7
+7
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+15
+5
+7
+11
+64
+49
+12
+0
+45
+3
+13
+13
+71
+5
+47
+9
+82
+47
+49
+6
+0
+13
+7
+14
+64
+47
+49
+8
+1
+15
+8
+88
+7
+14
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+15
+s
+20
+coderay/for_redcloth
+x
+7
+require
+s
+40
+<p><code>puts "Hello, World!"</code></p>
+x
+8
+RedCloth
+n
+x
+3
+new
+x
+8
+allocate
+s
+22
+@puts "Hello, World!"@
+x
+10
+initialize
+x
+7
+to_html
+x
+12
+assert_equal
+s
+45
+<pre><code>puts "Hello, World!"</code></pre>
+
+x
+5
+chomp
+n
+s
+24
+bc. puts "Hello, World!"
+p
+17
+I
+0
+I
+1b
+I
+0
+I
+1c
+I
+9
+I
+1d
+I
+d
+I
+1e
+I
+2e
+I
+1d
+I
+33
+I
+1f
+I
+3a
+I
+22
+I
+5b
+I
+1f
+I
+60
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
+x
+23
+test_for_redcloth_style
+M
+1
+n
+n
+x
+23
+test_for_redcloth_style
+i
+54
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+49
+3
+0
+45
+4
+5
+13
+71
+6
+47
+9
+40
+47
+49
+7
+0
+13
+7
+8
+64
+47
+49
+9
+1
+15
+8
+46
+7
+8
+64
+49
+6
+1
+49
+10
+0
+47
+49
+11
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+12
+s
+20
+coderay/for_redcloth
+x
+7
+require
+s
+85
+<pre style="color: red;"><code style="color: red;">puts "Hello, World!"</code></pre>
+
+x
+5
+chomp
+x
+8
+RedCloth
+n
+x
+3
+new
+x
+8
+allocate
+s
+36
+bc{color: red}. puts "Hello, World!"
+x
+10
+initialize
+x
+7
+to_html
+x
+12
+assert_equal
+p
+11
+I
+0
+I
+25
+I
+0
+I
+26
+I
+9
+I
+27
+I
+10
+I
+2a
+I
+31
+I
+27
+I
+36
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
+x
+25
+test_for_redcloth_escapes
+M
+1
+n
+n
+x
+25
+test_for_redcloth_escapes
+i
+96
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+45
+3
+4
+13
+71
+5
+47
+9
+37
+47
+49
+6
+0
+13
+7
+7
+64
+47
+49
+8
+1
+15
+8
+43
+7
+7
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+15
+5
+7
+11
+64
+49
+12
+0
+45
+3
+13
+13
+71
+5
+47
+9
+82
+47
+49
+6
+0
+13
+7
+14
+64
+47
+49
+8
+1
+15
+8
+88
+7
+14
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+15
+s
+20
+coderay/for_redcloth
+x
+7
+require
+s
+52
+<p><span lang="ruby" class="CodeRay">&gt;</span></p>
+x
+8
+RedCloth
+n
+x
+3
+new
+x
+8
+allocate
+s
+9
+@[ruby]>@
+x
+10
+initialize
+x
+7
+to_html
+x
+12
+assert_equal
+s
+84
+<div lang="ruby" class="CodeRay">
+  <div class="code"><pre>&amp;</pre></div>
+</div>
+
+x
+5
+chomp
+n
+s
+11
+bc[ruby]. &
+p
+17
+I
+0
+I
+2d
+I
+0
+I
+2e
+I
+9
+I
+2f
+I
+d
+I
+30
+I
+2e
+I
+2f
+I
+33
+I
+31
+I
+3a
+I
+36
+I
+5b
+I
+31
+I
+60
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
+x
+26
+test_for_redcloth_escapes2
+M
+1
+n
+n
+x
+26
+test_for_redcloth_escapes2
+i
+51
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+45
+3
+4
+13
+71
+5
+47
+9
+37
+47
+49
+6
+0
+13
+7
+7
+64
+47
+49
+8
+1
+15
+8
+43
+7
+7
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+11
+s
+20
+coderay/for_redcloth
+x
+7
+require
+s
+149
+<p><span lang="c" class="CodeRay"><span style="color:#579">#include</span> <span style="color:#B44;font-weight:bold">&lt;test.h&gt;</span></span></p>
+x
+8
+RedCloth
+n
+x
+3
+new
+x
+8
+allocate
+s
+22
+@[c]#include <test.h>@
+x
+10
+initialize
+x
+7
+to_html
+x
+12
+assert_equal
+p
+11
+I
+0
+I
+39
+I
+0
+I
+3a
+I
+9
+I
+3b
+I
+d
+I
+3c
+I
+2e
+I
+3b
+I
+33
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
+x
+32
+test_for_redcloth_false_positive
+M
+1
+n
+n
+x
+32
+test_for_redcloth_false_positive
+i
+138
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+45
+3
+4
+13
+71
+5
+47
+9
+37
+47
+49
+6
+0
+13
+7
+7
+64
+47
+49
+8
+1
+15
+8
+43
+7
+7
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+15
+5
+7
+11
+64
+45
+3
+12
+13
+71
+5
+47
+9
+79
+47
+49
+6
+0
+13
+7
+13
+64
+47
+49
+8
+1
+15
+8
+85
+7
+13
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+15
+5
+7
+14
+64
+49
+15
+0
+45
+3
+16
+13
+71
+5
+47
+9
+124
+47
+49
+6
+0
+13
+7
+17
+64
+47
+49
+8
+1
+15
+8
+130
+7
+17
+64
+49
+5
+1
+49
+9
+0
+47
+49
+10
+2
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+18
+s
+20
+coderay/for_redcloth
+x
+7
+require
+s
+38
+<p><code>[project]_dff.skjd</code></p>
+x
+8
+RedCloth
+n
+x
+3
+new
+x
+8
+allocate
+s
+20
+@[project]_dff.skjd@
+x
+10
+initialize
+x
+7
+to_html
+x
+12
+assert_equal
+s
+57
+<p><span lang="ruby" class="CodeRay">_dff.skjd</span></p>
+n
+s
+17
+@[ruby]_dff.skjd@
+s
+43
+<pre><code>[project]_dff.skjd</code></pre>
+
+x
+5
+chomp
+n
+s
+22
+bc. [project]_dff.skjd
+p
+23
+I
+0
+I
+40
+I
+0
+I
+41
+I
+9
+I
+42
+I
+d
+I
+43
+I
+2e
+I
+42
+I
+33
+I
+45
+I
+37
+I
+46
+I
+58
+I
+45
+I
+5d
+I
+47
+I
+64
+I
+4a
+I
+85
+I
+47
+I
+8a
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
+p
+13
+I
+2
+I
+f
+I
+10
+I
+1b
+I
+1e
+I
+25
+I
+2c
+I
+2d
+I
+3a
+I
+39
+I
+48
+I
+40
+I
+56
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
+x
+13
+attach_method
+p
+23
+I
+0
+I
+1
+I
+9
+I
+2
+I
+18
+I
+3
+I
+21
+I
+6
+I
+51
+I
+7
+I
+85
+I
+8
+I
+95
+I
+9
+I
+a2
+I
+a
+I
+b6
+I
+4d
+I
+d3
+I
+d
+I
+f5
+I
+4d
+I
+f9
+x
+62
+/Users/murphy/ruby/coderay-0.9/test/functional/for_redcloth.rb
+p
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/load_plugin_scanner.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,11 @@
+require 'test/unit'
+require 'coderay'
+
+class PluginScannerTest < Test::Unit::TestCase
+  
+  def test_load
+    require File.join(File.dirname(__FILE__), 'vhdl')
+    assert_equal 'VHDL', CodeRay.scanner(:vhdl).class.name
+  end
+  
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/load_plugin_scanner.rbc	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,317 @@
+!RBIX
+0
+x
+M
+1
+n
+n
+x
+10
+__script__
+i
+53
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+47
+49
+1
+1
+15
+99
+7
+3
+45
+4
+5
+43
+6
+43
+7
+65
+49
+8
+3
+13
+99
+12
+7
+9
+12
+7
+10
+12
+65
+12
+49
+11
+4
+15
+49
+9
+0
+15
+2
+11
+I
+6
+I
+0
+I
+0
+I
+0
+n
+p
+12
+s
+9
+test/unit
+x
+7
+require
+s
+7
+coderay
+x
+17
+PluginScannerTest
+x
+4
+Test
+n
+x
+4
+Unit
+x
+8
+TestCase
+x
+10
+open_class
+x
+14
+__class_init__
+M
+1
+n
+n
+x
+17
+PluginScannerTest
+i
+16
+5
+66
+99
+7
+0
+7
+1
+65
+67
+49
+2
+0
+49
+3
+4
+11
+I
+5
+I
+0
+I
+0
+I
+0
+n
+p
+4
+x
+9
+test_load
+M
+1
+n
+n
+x
+9
+test_load
+i
+48
+5
+45
+0
+1
+45
+0
+2
+65
+49
+3
+0
+49
+4
+1
+7
+5
+64
+49
+6
+2
+47
+49
+7
+1
+15
+5
+7
+8
+64
+45
+9
+10
+7
+11
+49
+12
+1
+49
+13
+0
+49
+14
+0
+47
+49
+15
+2
+11
+I
+4
+I
+0
+I
+0
+I
+0
+n
+p
+16
+x
+4
+File
+n
+n
+x
+11
+active_path
+x
+7
+dirname
+s
+4
+vhdl
+x
+4
+join
+x
+7
+require
+s
+4
+VHDL
+x
+7
+CodeRay
+n
+x
+4
+vhdl
+x
+7
+scanner
+x
+5
+class
+x
+4
+name
+x
+12
+assert_equal
+p
+7
+I
+0
+I
+6
+I
+0
+I
+7
+I
+19
+I
+8
+I
+30
+x
+69
+/Users/murphy/ruby/coderay-0.9/test/functional/load_plugin_scanner.rb
+p
+0
+x
+17
+method_visibility
+x
+15
+add_defn_method
+p
+3
+I
+2
+I
+6
+I
+10
+x
+69
+/Users/murphy/ruby/coderay-0.9/test/functional/load_plugin_scanner.rb
+p
+0
+x
+13
+attach_method
+p
+7
+I
+0
+I
+1
+I
+9
+I
+2
+I
+12
+I
+4
+I
+35
+x
+69
+/Users/murphy/ruby/coderay-0.9/test/functional/load_plugin_scanner.rb
+p
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/suite.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,12 @@
+require 'test/unit'
+
+MYDIR = File.dirname(__FILE__)
+
+$:.unshift 'lib'
+require 'coderay'
+puts "Running basic CodeRay #{CodeRay::VERSION} tests..."
+
+suite = %w(basic load_plugin_scanner word_list)
+for test_case in suite
+  load File.join(MYDIR, test_case + '.rb')
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/suite.rbc	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,322 @@
+!RBIX
+0
+x
+M
+1
+n
+n
+x
+10
+__script__
+i
+95
+5
+7
+0
+64
+47
+49
+1
+1
+15
+65
+7
+2
+45
+3
+4
+65
+49
+5
+0
+49
+6
+1
+49
+7
+2
+15
+99
+43
+8
+7
+9
+49
+10
+1
+7
+11
+64
+49
+12
+1
+15
+5
+7
+13
+64
+47
+49
+1
+1
+15
+5
+7
+14
+45
+15
+16
+43
+17
+47
+49
+18
+0
+7
+19
+63
+3
+47
+49
+20
+1
+15
+7
+21
+64
+7
+22
+64
+7
+23
+64
+35
+3
+19
+0
+15
+20
+0
+56
+24
+50
+25
+0
+15
+2
+11
+I
+6
+I
+2
+I
+0
+I
+0
+n
+p
+26
+s
+9
+test/unit
+x
+7
+require
+x
+5
+MYDIR
+x
+4
+File
+n
+x
+11
+active_path
+x
+7
+dirname
+x
+9
+const_set
+x
+7
+Globals
+x
+2
+$:
+x
+2
+[]
+s
+3
+lib
+x
+2
+<<
+s
+7
+coderay
+s
+22
+Running basic CodeRay 
+x
+7
+CodeRay
+n
+x
+7
+VERSION
+x
+4
+to_s
+s
+9
+ tests...
+x
+4
+puts
+s
+5
+basic
+s
+19
+load_plugin_scanner
+s
+9
+word_list
+M
+1
+p
+2
+x
+9
+for_block
+t
+n
+x
+9
+__block__
+i
+28
+57
+22
+1
+1
+15
+5
+45
+0
+1
+45
+2
+3
+21
+1
+1
+7
+4
+64
+81
+5
+49
+6
+2
+47
+49
+7
+1
+11
+I
+6
+I
+0
+I
+1
+I
+1
+n
+p
+8
+x
+4
+File
+n
+x
+5
+MYDIR
+n
+s
+3
+.rb
+x
+1
++
+x
+4
+join
+x
+4
+load
+p
+5
+I
+0
+I
+a
+I
+5
+I
+b
+I
+1c
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/suite.rb
+p
+0
+x
+4
+each
+p
+15
+I
+0
+I
+1
+I
+9
+I
+3
+I
+1a
+I
+5
+I
+29
+I
+6
+I
+32
+I
+7
+I
+47
+I
+9
+I
+55
+I
+a
+I
+5f
+x
+55
+/Users/murphy/ruby/coderay-0.9/test/functional/suite.rb
+p
+2
+x
+5
+suite
+x
+9
+test_case
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/vhdl.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,126 @@
+class VHDL < CodeRay::Scanners::Scanner
+
+  register_for :vhdl
+
+  RESERVED_WORDS = [
+    'access','after','alias','all','assert','architecture','begin',
+    'block','body','buffer','bus','case','component','configuration','constant',
+    'disconnect','downto','else','elsif','end','entity','exit','file','for',
+    'function','generate','generic','group','guarded','if','impure','in',
+    'inertial','inout','is','label','library','linkage','literal','loop',
+    'map','new','next','null','of','on','open','others','out','package',
+    'port','postponed','procedure','process','pure','range','record','register',
+    'reject','report','return','select','severity','signal','shared','subtype',
+    'then','to','transport','type','unaffected','units','until','use','variable',
+    'wait','when','while','with','note','warning','error','failure','and',
+    'or','xor','not','nor',
+    'array'
+  ]
+
+  PREDEFINED_TYPES = [
+    'bit','bit_vector','character','boolean','integer','real','time','string',
+    'severity_level','positive','natural','signed','unsigned','line','text',
+    'std_logic','std_logic_vector','std_ulogic','std_ulogic_vector','qsim_state',
+    'qsim_state_vector','qsim_12state','qsim_12state_vector','qsim_strength',
+    'mux_bit','mux_vector','reg_bit','reg_vector','wor_bit','wor_vector'
+  ]
+
+  PREDEFINED_CONSTANTS = [
+
+  ]
+
+  IDENT_KIND = CodeRay::CaseIgnoringWordList.new(:ident).
+    add(RESERVED_WORDS, :reserved).
+    add(PREDEFINED_TYPES, :pre_type).
+    add(PREDEFINED_CONSTANTS, :pre_constant)
+
+  ESCAPE = / [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
+  UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
+
+  def scan_tokens tokens, options
+
+    state = :initial
+
+    until eos?
+
+      kind = nil
+      match = nil
+
+      case state
+
+      when :initial
+
+        if scan(/ \s+ | \\\n /x)
+          kind = :space
+
+        elsif scan(/-- .*/x)
+          kind = :comment
+
+        elsif scan(/ [-+*\/=<>?:;,!&^|()\[\]{}~%]+ | \.(?!\d) /x)
+          kind = :operator
+
+        elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
+          kind = IDENT_KIND[match.downcase]
+
+        elsif match = scan(/[a-z]?"/i)
+          tokens << [:open, :string]
+          state = :string
+          kind = :delimiter
+
+        elsif scan(/ L?' (?: [^\'\n\\] | \\ #{ESCAPE} )? '? /ox)
+          kind = :char
+
+        elsif scan(/(?:\d+)(?![.eEfF])/)
+          kind = :integer
+
+        elsif scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
+          kind = :float
+
+        else
+          getch
+          kind = :error
+
+        end
+
+      when :string
+        if scan(/[^\\\n"]+/)
+          kind = :content
+        elsif scan(/"/)
+          tokens << ['"', :delimiter]
+          tokens << [:close, :string]
+          state = :initial
+          next
+        elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
+          kind = :char
+        elsif scan(/ \\ | $ /x)
+          tokens << [:close, :string]
+          kind = :error
+          state = :initial
+        else
+          raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
+        end
+
+      else
+        raise_inspect 'Unknown state', tokens
+
+      end
+
+      match ||= matched
+      if $DEBUG and not kind
+        raise_inspect 'Error token %p in line %d' %
+          [[match, kind], line], tokens
+      end
+      raise_inspect 'Empty token', tokens unless match
+
+      tokens << [match, kind]
+
+    end
+
+    if state == :string
+      tokens << [:close, :string]
+    end
+
+    tokens
+  end
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/vhdl.rbc	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,2334 @@
+!RBIX
+0
+x
+M
+1
+n
+n
+x
+10
+__script__
+i
+35
+99
+7
+0
+45
+1
+2
+43
+3
+43
+4
+65
+49
+5
+3
+13
+99
+12
+7
+6
+12
+7
+7
+12
+65
+12
+49
+8
+4
+15
+49
+6
+0
+15
+2
+11
+I
+6
+I
+0
+I
+0
+I
+0
+n
+p
+9
+x
+4
+VHDL
+x
+7
+CodeRay
+n
+x
+8
+Scanners
+x
+7
+Scanner
+x
+10
+open_class
+x
+14
+__class_init__
+M
+1
+n
+n
+x
+4
+VHDL
+i
+519
+5
+66
+5
+7
+0
+47
+49
+1
+1
+15
+65
+7
+2
+7
+3
+64
+7
+4
+64
+7
+5
+64
+7
+6
+64
+7
+7
+64
+7
+8
+64
+7
+9
+64
+7
+10
+64
+7
+11
+64
+7
+12
+64
+7
+13
+64
+7
+14
+64
+7
+15
+64
+7
+16
+64
+7
+17
+64
+7
+18
+64
+7
+19
+64
+7
+20
+64
+7
+21
+64
+7
+22
+64
+7
+23
+64
+7
+24
+64
+7
+25
+64
+7
+26
+64
+7
+27
+64
+7
+28
+64
+7
+29
+64
+7
+30
+64
+7
+31
+64
+7
+32
+64
+7
+33
+64
+7
+34
+64
+7
+35
+64
+7
+36
+64
+7
+37
+64
+7
+38
+64
+7
+39
+64
+7
+40
+64
+7
+41
+64
+7
+42
+64
+7
+43
+64
+7
+44
+64
+7
+45
+64
+7
+46
+64
+7
+47
+64
+7
+48
+64
+7
+49
+64
+7
+50
+64
+7
+51
+64
+7
+52
+64
+7
+53
+64
+7
+54
+64
+7
+55
+64
+7
+56
+64
+7
+57
+64
+7
+58
+64
+7
+59
+64
+7
+60
+64
+7
+61
+64
+7
+62
+64
+7
+63
+64
+7
+64
+64
+7
+65
+64
+7
+66
+64
+7
+67
+64
+7
+68
+64
+7
+69
+64
+7
+70
+64
+7
+71
+64
+7
+72
+64
+7
+73
+64
+7
+74
+64
+7
+75
+64
+7
+76
+64
+7
+77
+64
+7
+78
+64
+7
+79
+64
+7
+80
+64
+7
+81
+64
+7
+82
+64
+7
+83
+64
+7
+84
+64
+7
+85
+64
+7
+86
+64
+7
+87
+64
+7
+88
+64
+7
+89
+64
+7
+90
+64
+7
+91
+64
+35
+89
+49
+92
+2
+15
+65
+7
+93
+7
+94
+64
+7
+95
+64
+7
+96
+64
+7
+97
+64
+7
+98
+64
+7
+99
+64
+7
+100
+64
+7
+101
+64
+7
+102
+64
+7
+103
+64
+7
+104
+64
+7
+105
+64
+7
+106
+64
+7
+107
+64
+7
+108
+64
+7
+109
+64
+7
+110
+64
+7
+111
+64
+7
+112
+64
+7
+113
+64
+7
+114
+64
+7
+115
+64
+7
+116
+64
+7
+117
+64
+7
+118
+64
+7
+119
+64
+7
+120
+64
+7
+121
+64
+7
+122
+64
+7
+123
+64
+35
+30
+49
+92
+2
+15
+65
+7
+124
+35
+0
+49
+92
+2
+15
+65
+7
+125
+45
+126
+127
+43
+128
+13
+71
+129
+47
+9
+422
+47
+49
+130
+0
+13
+7
+131
+47
+49
+132
+1
+15
+8
+427
+7
+131
+49
+129
+1
+45
+2
+133
+7
+134
+49
+135
+2
+45
+93
+136
+7
+137
+49
+135
+2
+45
+124
+138
+7
+139
+49
+135
+2
+49
+92
+2
+15
+65
+7
+140
+7
+141
+13
+70
+9
+476
+15
+44
+43
+142
+7
+143
+80
+49
+129
+2
+6
+141
+49
+92
+2
+15
+65
+7
+144
+7
+145
+13
+70
+9
+501
+15
+44
+43
+142
+7
+146
+80
+49
+129
+2
+6
+145
+49
+92
+2
+15
+99
+7
+147
+7
+148
+65
+67
+49
+149
+0
+49
+150
+4
+11
+I
+5b
+I
+0
+I
+0
+I
+0
+n
+p
+151
+x
+4
+vhdl
+x
+12
+register_for
+x
+14
+RESERVED_WORDS
+s
+6
+access
+s
+5
+after
+s
+5
+alias
+s
+3
+all
+s
+6
+assert
+s
+12
+architecture
+s
+5
+begin
+s
+5
+block
+s
+4
+body
+s
+6
+buffer
+s
+3
+bus
+s
+4
+case
+s
+9
+component
+s
+13
+configuration
+s
+8
+constant
+s
+10
+disconnect
+s
+6
+downto
+s
+4
+else
+s
+5
+elsif
+s
+3
+end
+s
+6
+entity
+s
+4
+exit
+s
+4
+file
+s
+3
+for
+s
+8
+function
+s
+8
+generate
+s
+7
+generic
+s
+5
+group
+s
+7
+guarded
+s
+2
+if
+s
+6
+impure
+s
+2
+in
+s
+8
+inertial
+s
+5
+inout
+s
+2
+is
+s
+5
+label
+s
+7
+library
+s
+7
+linkage
+s
+7
+literal
+s
+4
+loop
+s
+3
+map
+s
+3
+new
+s
+4
+next
+s
+4
+null
+s
+2
+of
+s
+2
+on
+s
+4
+open
+s
+6
+others
+s
+3
+out
+s
+7
+package
+s
+4
+port
+s
+9
+postponed
+s
+9
+procedure
+s
+7
+process
+s
+4
+pure
+s
+5
+range
+s
+6
+record
+s
+8
+register
+s
+6
+reject
+s
+6
+report
+s
+6
+return
+s
+6
+select
+s
+8
+severity
+s
+6
+signal
+s
+6
+shared
+s
+7
+subtype
+s
+4
+then
+s
+2
+to
+s
+9
+transport
+s
+4
+type
+s
+10
+unaffected
+s
+5
+units
+s
+5
+until
+s
+3
+use
+s
+8
+variable
+s
+4
+wait
+s
+4
+when
+s
+5
+while
+s
+4
+with
+s
+4
+note
+s
+7
+warning
+s
+5
+error
+s
+7
+failure
+s
+3
+and
+s
+2
+or
+s
+3
+xor
+s
+3
+not
+s
+3
+nor
+s
+5
+array
+x
+9
+const_set
+x
+16
+PREDEFINED_TYPES
+s
+3
+bit
+s
+10
+bit_vector
+s
+9
+character
+s
+7
+boolean
+s
+7
+integer
+s
+4
+real
+s
+4
+time
+s
+6
+string
+s
+14
+severity_level
+s
+8
+positive
+s
+7
+natural
+s
+6
+signed
+s
+8
+unsigned
+s
+4
+line
+s
+4
+text
+s
+9
+std_logic
+s
+16
+std_logic_vector
+s
+10
+std_ulogic
+s
+17
+std_ulogic_vector
+s
+10
+qsim_state
+s
+17
+qsim_state_vector
+s
+12
+qsim_12state
+s
+19
+qsim_12state_vector
+s
+13
+qsim_strength
+s
+7
+mux_bit
+s
+10
+mux_vector
+s
+7
+reg_bit
+s
+10
+reg_vector
+s
+7
+wor_bit
+s
+10
+wor_vector
+x
+20
+PREDEFINED_CONSTANTS
+x
+10
+IDENT_KIND
+x
+7
+CodeRay
+n
+x
+20
+CaseIgnoringWordList
+x
+3
+new
+x
+8
+allocate
+x
+5
+ident
+x
+10
+initialize
+n
+x
+8
+reserved
+x
+3
+add
+n
+x
+8
+pre_type
+n
+x
+12
+pre_constant
+x
+6
+ESCAPE
+n
+x
+6
+Regexp
+s
+49
+ [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} 
+x
+14
+UNICODE_ESCAPE
+n
+s
+35
+ u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} 
+x
+11
+scan_tokens
+M
+1
+n
+n
+x
+11
+scan_tokens
+i
+688
+7
+0
+19
+2
+15
+5
+47
+49
+1
+0
+10
+660
+1
+19
+3
+15
+1
+19
+4
+15
+20
+2
+13
+7
+0
+12
+49
+2
+1
+9
+331
+15
+5
+7
+3
+13
+70
+9
+51
+15
+44
+43
+4
+7
+5
+80
+49
+6
+2
+6
+3
+47
+49
+7
+1
+9
+63
+7
+8
+19
+3
+8
+329
+5
+7
+9
+13
+70
+9
+82
+15
+44
+43
+4
+7
+10
+80
+49
+6
+2
+6
+9
+47
+49
+7
+1
+9
+94
+7
+11
+19
+3
+8
+329
+5
+7
+12
+13
+70
+9
+113
+15
+44
+43
+4
+7
+13
+80
+49
+6
+2
+6
+12
+47
+49
+7
+1
+9
+125
+7
+14
+19
+3
+8
+329
+5
+7
+15
+13
+70
+9
+144
+15
+44
+43
+4
+7
+16
+80
+49
+6
+2
+6
+15
+47
+49
+7
+1
+19
+4
+9
+167
+45
+17
+18
+20
+4
+49
+19
+0
+49
+20
+1
+19
+3
+8
+329
+5
+7
+21
+13
+70
+9
+186
+15
+44
+43
+4
+7
+22
+79
+49
+6
+2
+6
+21
+47
+49
+7
+1
+19
+4
+9
+217
+20
+0
+7
+23
+7
+24
+35
+2
+49
+25
+1
+15
+7
+24
+19
+2
+15
+7
+26
+19
+3
+8
+329
+5
+7
+27
+13
+70
+9
+247
+15
+44
+43
+4
+7
+28
+45
+29
+30
+47
+49
+31
+0
+7
+32
+63
+3
+80
+49
+6
+2
+6
+27
+47
+49
+7
+1
+9
+259
+7
+33
+19
+3
+8
+329
+5
+7
+34
+13
+70
+9
+278
+15
+44
+43
+4
+7
+35
+78
+49
+6
+2
+6
+34
+47
+49
+7
+1
+9
+290
+7
+36
+19
+3
+8
+329
+5
+7
+37
+13
+70
+9
+309
+15
+44
+43
+4
+7
+38
+78
+49
+6
+2
+6
+37
+47
+49
+7
+1
+9
+321
+7
+39
+19
+3
+8
+329
+5
+48
+40
+15
+7
+41
+19
+3
+8
+564
+13
+7
+24
+12
+49
+2
+1
+9
+553
+15
+5
+7
+42
+13
+70
+9
+360
+15
+44
+43
+4
+7
+43
+78
+49
+6
+2
+6
+42
+47
+49
+7
+1
+9
+372
+7
+44
+19
+3
+8
+551
+5
+7
+45
+13
+70
+9
+391
+15
+44
+43
+4
+7
+46
+78
+49
+6
+2
+6
+45
+47
+49
+7
+1
+9
+432
+20
+0
+7
+46
+64
+7
+26
+35
+2
+49
+25
+1
+15
+20
+0
+7
+47
+7
+24
+35
+2
+49
+25
+1
+15
+7
+0
+19
+2
+15
+1
+8
+656
+8
+551
+5
+7
+48
+13
+70
+9
+472
+15
+44
+43
+4
+7
+49
+45
+29
+50
+47
+49
+31
+0
+7
+51
+45
+52
+53
+47
+49
+31
+0
+7
+54
+63
+5
+4
+6
+49
+6
+2
+6
+48
+47
+49
+7
+1
+9
+484
+7
+33
+19
+3
+8
+551
+5
+7
+55
+13
+70
+9
+503
+15
+44
+43
+4
+7
+56
+80
+49
+6
+2
+6
+55
+47
+49
+7
+1
+9
+532
+20
+0
+7
+47
+7
+24
+35
+2
+49
+25
+1
+15
+7
+41
+19
+3
+15
+7
+0
+19
+2
+8
+551
+5
+7
+57
+64
+5
+79
+47
+49
+58
+1
+49
+59
+1
+20
+0
+47
+49
+60
+2
+8
+564
+15
+5
+7
+61
+64
+20
+0
+47
+49
+60
+2
+15
+20
+4
+13
+10
+576
+15
+5
+48
+62
+19
+4
+15
+99
+43
+63
+7
+64
+49
+20
+1
+13
+9
+597
+15
+20
+3
+10
+596
+2
+8
+597
+3
+9
+625
+5
+7
+65
+64
+20
+4
+20
+3
+35
+2
+5
+48
+66
+35
+2
+49
+59
+1
+20
+0
+47
+49
+60
+2
+8
+626
+1
+15
+20
+4
+9
+634
+1
+8
+644
+5
+7
+67
+64
+20
+0
+47
+49
+60
+2
+15
+20
+0
+20
+4
+20
+3
+35
+2
+49
+25
+1
+15
+68
+8
+5
+1
+15
+20
+2
+7
+24
+83
+68
+9
+683
+20
+0
+7
+47
+7
+24
+35
+2
+49
+25
+1
+8
+684
+1
+15
+20
+0
+11
+I
+c
+I
+5
+I
+2
+I
+2
+n
+p
+69
+x
+7
+initial
+x
+4
+eos?
+x
+3
+===
+n
+x
+6
+Regexp
+s
+12
+ \s+ | \\\n 
+x
+3
+new
+x
+4
+scan
+x
+5
+space
+n
+s
+5
+-- .*
+x
+7
+comment
+n
+s
+42
+ [-+*\/=<>?:;,!&^|()\[\]{}~%]+ | \.(?!\d) 
+x
+8
+operator
+n
+s
+24
+ [A-Za-z_][A-Za-z_0-9]* 
+x
+10
+IDENT_KIND
+n
+x
+8
+downcase
+x
+2
+[]
+n
+s
+7
+[a-z]?"
+x
+4
+open
+x
+6
+string
+x
+2
+<<
+x
+9
+delimiter
+n
+s
+24
+ L?' (?: [^\'\n\\] | \\ 
+x
+6
+ESCAPE
+n
+x
+4
+to_s
+s
+7
+ )? '? 
+x
+4
+char
+n
+s
+18
+(?:\d+)(?![.eEfF])
+x
+7
+integer
+n
+s
+59
+\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?
+x
+5
+float
+x
+5
+getch
+x
+5
+error
+n
+s
+9
+[^\\\n"]+
+x
+7
+content
+n
+s
+1
+"
+x
+5
+close
+n
+s
+8
+ \\ (?: 
+n
+s
+3
+ | 
+x
+14
+UNICODE_ESCAPE
+n
+s
+3
+ ) 
+n
+s
+8
+ \\ | $ 
+s
+36
+else case " reached; %p not handled.
+x
+4
+peek
+x
+1
+%
+x
+13
+raise_inspect
+s
+13
+Unknown state
+x
+7
+matched
+x
+7
+Globals
+x
+6
+$DEBUG
+s
+25
+Error token %p in line %d
+x
+4
+line
+s
+11
+Empty token
+x
+2
+==
+p
+111
+I
+0
+I
+28
+I
+0
+I
+2a
+I
+5
+I
+2c
+I
+c
+I
+2e
+I
+10
+I
+2f
+I
+14
+I
+31
+I
+17
+I
+33
+I
+20
+I
+35
+I
+39
+I
+36
+I
+3f
+I
+38
+I
+58
+I
+39
+I
+5e
+I
+3b
+I
+77
+I
+3c
+I
+7d
+I
+3e
+I
+98
+I
+3f
+I
+a7
+I
+41
+I
+c2
+I
+42
+I
+ce
+I
+43
+I
+d3
+I
+44
+I
+d9
+I
+46
+I
+fd
+I
+47
+I
+103
+I
+49
+I
+11c
+I
+4a
+I
+122
+I
+4c
+I
+13b
+I
+4d
+I
+141
+I
+50
+I
+145
+I
+51
+I
+14c
+I
+55
+I
+155
+I
+56
+I
+16e
+I
+57
+I
+174
+I
+58
+I
+18d
+I
+59
+I
+19a
+I
+5a
+I
+1a6
+I
+5b
+I
+1ab
+I
+5c
+I
+1b0
+I
+5d
+I
+1de
+I
+5e
+I
+1e4
+I
+5f
+I
+1fd
+I
+60
+I
+209
+I
+61
+I
+20e
+I
+62
+I
+214
+I
+64
+I
+22a
+I
+68
+I
+235
+I
+6c
+I
+241
+I
+6d
+I
+257
+I
+6f
+I
+258
+I
+6e
+I
+25b
+I
+6f
+I
+271
+I
+6d
+I
+273
+I
+71
+I
+285
+I
+73
+I
+296
+I
+77
+I
+29e
+I
+78
+I
+2ab
+I
+77
+I
+2ad
+I
+7b
+I
+2b0
+x
+54
+/Users/murphy/ruby/coderay-0.9/test/functional/vhdl.rb
+p
+5
+x
+6
+tokens
+x
+7
+options
+x
+5
+state
+x
+4
+kind
+x
+5
+match
+x
+17
+method_visibility
+x
+15
+add_defn_method
+p
+65
+I
+2
+I
+3
+I
+a
+I
+5
+I
+d
+I
+6
+I
+22
+I
+7
+I
+3a
+I
+8
+I
+55
+I
+9
+I
+6d
+I
+a
+I
+85
+I
+b
+I
+a3
+I
+c
+I
+bb
+I
+d
+I
+d3
+I
+e
+I
+ee
+I
+f
+I
+109
+I
+10
+I
+115
+I
+11
+I
+11e
+I
+14
+I
+121
+I
+15
+I
+139
+I
+16
+I
+14e
+I
+17
+I
+15d
+I
+18
+I
+169
+I
+19
+I
+181
+I
+1c
+I
+184
+I
+1e
+I
+18a
+I
+20
+I
+1ab
+I
+21
+I
+1b0
+I
+20
+I
+1b3
+I
+22
+I
+1b8
+I
+20
+I
+1bb
+I
+23
+I
+1c0
+I
+20
+I
+1c7
+I
+25
+I
+1e0
+I
+26
+I
+1f9
+I
+28
+I
+207
+x
+54
+/Users/murphy/ruby/coderay-0.9/test/functional/vhdl.rb
+p
+0
+x
+13
+attach_method
+p
+3
+I
+0
+I
+1
+I
+23
+x
+54
+/Users/murphy/ruby/coderay-0.9/test/functional/vhdl.rb
+p
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/word_list.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,79 @@
+require 'test/unit'
+require 'coderay'
+
+class WordListTest < Test::Unit::TestCase
+  
+  include CodeRay
+  
+  # define word arrays
+  RESERVED_WORDS = %w[
+    asm break case continue default do else
+    ...
+  ]
+  
+  PREDEFINED_TYPES = %w[
+    int long short char void
+    ...
+  ]
+  
+  PREDEFINED_CONSTANTS = %w[
+    EOF NULL ...
+  ]
+  
+  # make a WordList
+  IDENT_KIND = WordList.new(:ident).
+    add(RESERVED_WORDS, :reserved).
+    add(PREDEFINED_TYPES, :pre_type).
+    add(PREDEFINED_CONSTANTS, :pre_constant)
+
+  def test_word_list_example
+    assert_equal :pre_type, IDENT_KIND['void']
+    # assert_equal :pre_constant, IDENT_KIND['...']  # not specified
+  end
+  
+  def test_word_list
+    list = WordList.new(:ident).add(['foobar'], :reserved)
+    assert_equal :reserved, list['foobar']
+    assert_equal :ident, list['FooBar']
+  end
+
+  def test_word_list_cached
+    list = WordList.new(:ident, true).add(['foobar'], :reserved)
+    assert_equal :reserved, list['foobar']
+    assert_equal :ident, list['FooBar']
+  end
+
+  def test_case_ignoring_word_list
+    list = CaseIgnoringWordList.new(:ident).add(['foobar'], :reserved)
+    assert_equal :ident, list['foo']
+    assert_equal :reserved, list['foobar']
+    assert_equal :reserved, list['FooBar']
+
+    list = CaseIgnoringWordList.new(:ident).add(['FooBar'], :reserved)
+    assert_equal :ident, list['foo']
+    assert_equal :reserved, list['foobar']
+    assert_equal :reserved, list['FooBar']
+  end
+
+  def test_case_ignoring_word_list_cached
+    list = CaseIgnoringWordList.new(:ident, true).add(['foobar'], :reserved)
+    assert_equal :ident, list['foo']
+    assert_equal :reserved, list['foobar']
+    assert_equal :reserved, list['FooBar']
+
+    list = CaseIgnoringWordList.new(:ident, true).add(['FooBar'], :reserved)
+    assert_equal :ident, list['foo']
+    assert_equal :reserved, list['foobar']
+    assert_equal :reserved, list['FooBar']
+  end
+
+  def test_dup
+    list = WordList.new(:ident).add(['foobar'], :reserved)
+    assert_equal :reserved, list['foobar']
+    list2 = list.dup
+    list2.add(%w[foobar], :keyword)
+    assert_equal :keyword, list2['foobar']
+    assert_equal :reserved, list['foobar']
+  end
+
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/gems/coderay-0.9.7/test/functional/word_list.rbc	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,1763 @@
+!RBIX
+0
+x
+M
+1
+n
+n
+x
+10
+__script__
+i
+53
+5
+7
+0
+64
+47
+49
+1
+1
+15
+5
+7
+2
+64
+47
+49
+1
+1
+15
+99
+7
+3
+45
+4
+5
+43
+6
+43
+7
+65
+49
+8
+3
+13
+99
+12
+7
+9
+12
+7
+10
+12
+65
+12
+49
+11
+4
+15
+49
+9
+0
+15
+2
+11
+I
+6
+I
+0
+I
+0
+I
+0
+n
+p
+12
+s
+9
+test/unit
+x
+7
+require
+s
+7
+coderay
+x
+12
+WordListTest
+x
+4
+Test
+n
+x
+4
+Unit
+x
+8
+TestCase
+x
+10
+open_class
+x
+14
+__class_init__
+M
+1
+n
+n
+x
+12
+WordListTest
+i
+232
+5
+66
+5
+45
+0
+1
+47
+49
+2
+1
+15
+65
+7
+3
+7
+4
+64
+7
+5
+64
+7
+6
+64
+7
+7
+64
+7
+8
+64
+7
+9
+64
+7
+10
+64
+7
+11
+64
+35
+8
+49
+12
+2
+15
+65
+7
+13
+7
+14
+64
+7
+15
+64
+7
+16
+64
+7
+17
+64
+7
+18
+64
+7
+11
+64
+35
+6
+49
+12
+2
+15
+65
+7
+19
+7
+20
+64
+7
+21
+64
+7
+11
+64
+35
+3
+49
+12
+2
+15
+65
+7
+22
+45
+23
+24
+13
+71
+25
+47
+9
+115
+47
+49
+26
+0
+13
+7
+27
+47
+49
+28
+1
+15
+8
+120
+7
+27
+49
+25
+1
+45
+3
+29
+7
+30
+49
+31
+2
+45
+13
+32
+7
+33
+49
+31
+2
+45
+19
+34
+7
+35
+49
+31
+2
+49
+12
+2
+15
+99
+7
+36
+7
+37
+65
+67
+49
+38
+0
+49
+39
+4
+15
+99
+7
+40
+7
+41
+65
+67
+49
+38
+0
+49
+39
+4
+15
+99
+7
+42
+7
+43
+65
+67
+49
+38
+0
+49
+39
+4
+15
+99
+7
+44
+7
+45
+65
+67
+49
+38
+0
+49
+39
+4
+15
+99
+7
+46
+7
+47
+65
+67
+49
+38
+0
+49
+39
+4
+15
+99
+7
+48
+7
+49
+65
+67
+49
+38
+0
+49
+39
+4
+11
+I
+a
+I
+0
+I
+0
+I
+0
+n
+p
+50
+x
+7
+CodeRay
+n
+x
+7
+include
+x
+14
+RESERVED_WORDS
+s
+3
+asm
+s
+5
+break
+s
+4
+case
+s
+8
+continue
+s
+7
+default
+s
+2
+do
+s
+4
+else
+s
+3
+...
+x
+9
+const_set
+x
+16
+PREDEFINED_TYPES
+s
+3
+int
+s
+4
+long
+s
+5
+short
+s
+4
+char
+s
+4
+void
+x
+20
+PREDEFINED_CONSTANTS
+s
+3
+EOF
+s
+4
+NULL
+x
+10
+IDENT_KIND
+x
+8
+WordList
+n
+x
+3
+new
+x
+8
+allocate
+x
+5
+ident
+x
+10
+initialize
+n
+x
+8
+reserved
+x
+3
+add
+n
+x
+8
+pre_type
+n
+x
+12
+pre_constant
+x
+22
+test_word_list_example
+M
+1
+n
+n
+x
+22
+test_word_list_example
+i
+17
+5
+7
+0
+45
+1
+2
+7
+3
+64
+49
+4
+1
+47
+49
+5
+2
+11
+I
+4
+I
+0
+I
+0
+I
+0
+n
+p
+6
+x
+8
+pre_type
+x
+10
+IDENT_KIND
+n
+s
+4
+void
+x
+2
+[]
+x
+12
+assert_equal
+p
+5
+I
+0
+I
+1d
+I
+0
+I
+1e
+I
+11
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+0
+x
+17
+method_visibility
+x
+15
+add_defn_method
+x
+14
+test_word_list
+M
+1
+n
+n
+x
+14
+test_word_list
+i
+73
+45
+0
+1
+13
+71
+2
+47
+9
+23
+47
+49
+3
+0
+13
+7
+4
+47
+49
+5
+1
+15
+8
+28
+7
+4
+49
+2
+1
+7
+6
+64
+35
+1
+7
+7
+49
+8
+2
+19
+0
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+9
+1
+47
+49
+10
+2
+15
+5
+7
+4
+20
+0
+7
+11
+64
+49
+9
+1
+47
+49
+10
+2
+11
+I
+5
+I
+1
+I
+0
+I
+0
+n
+p
+12
+x
+8
+WordList
+n
+x
+3
+new
+x
+8
+allocate
+x
+5
+ident
+x
+10
+initialize
+s
+6
+foobar
+x
+8
+reserved
+x
+3
+add
+x
+2
+[]
+x
+12
+assert_equal
+s
+6
+FooBar
+p
+9
+I
+0
+I
+22
+I
+0
+I
+23
+I
+29
+I
+24
+I
+39
+I
+25
+I
+49
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+1
+x
+4
+list
+x
+21
+test_word_list_cached
+M
+1
+n
+n
+x
+21
+test_word_list_cached
+i
+75
+45
+0
+1
+13
+71
+2
+47
+9
+24
+47
+49
+3
+0
+13
+7
+4
+2
+47
+49
+5
+2
+15
+8
+30
+7
+4
+2
+49
+2
+2
+7
+6
+64
+35
+1
+7
+7
+49
+8
+2
+19
+0
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+9
+1
+47
+49
+10
+2
+15
+5
+7
+4
+20
+0
+7
+11
+64
+49
+9
+1
+47
+49
+10
+2
+11
+I
+5
+I
+1
+I
+0
+I
+0
+n
+p
+12
+x
+8
+WordList
+n
+x
+3
+new
+x
+8
+allocate
+x
+5
+ident
+x
+10
+initialize
+s
+6
+foobar
+x
+8
+reserved
+x
+3
+add
+x
+2
+[]
+x
+12
+assert_equal
+s
+6
+FooBar
+p
+9
+I
+0
+I
+28
+I
+0
+I
+29
+I
+2b
+I
+2a
+I
+3b
+I
+2b
+I
+4b
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+1
+x
+4
+list
+x
+28
+test_case_ignoring_word_list
+M
+1
+n
+n
+x
+28
+test_case_ignoring_word_list
+i
+178
+45
+0
+1
+13
+71
+2
+47
+9
+23
+47
+49
+3
+0
+13
+7
+4
+47
+49
+5
+1
+15
+8
+28
+7
+4
+49
+2
+1
+7
+6
+64
+35
+1
+7
+7
+49
+8
+2
+19
+0
+15
+5
+7
+4
+20
+0
+7
+9
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+12
+64
+49
+10
+1
+47
+49
+11
+2
+15
+45
+0
+13
+13
+71
+2
+47
+9
+112
+47
+49
+3
+0
+13
+7
+4
+47
+49
+5
+1
+15
+8
+117
+7
+4
+49
+2
+1
+7
+12
+64
+35
+1
+7
+7
+49
+8
+2
+19
+0
+15
+5
+7
+4
+20
+0
+7
+9
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+12
+64
+49
+10
+1
+47
+49
+11
+2
+11
+I
+5
+I
+1
+I
+0
+I
+0
+n
+p
+14
+x
+20
+CaseIgnoringWordList
+n
+x
+3
+new
+x
+8
+allocate
+x
+5
+ident
+x
+10
+initialize
+s
+6
+foobar
+x
+8
+reserved
+x
+3
+add
+s
+3
+foo
+x
+2
+[]
+x
+12
+assert_equal
+s
+6
+FooBar
+n
+p
+19
+I
+0
+I
+2e
+I
+0
+I
+2f
+I
+29
+I
+30
+I
+39
+I
+31
+I
+49
+I
+32
+I
+59
+I
+34
+I
+82
+I
+35
+I
+92
+I
+36
+I
+a2
+I
+37
+I
+b2
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+1
+x
+4
+list
+x
+35
+test_case_ignoring_word_list_cached
+M
+1
+n
+n
+x
+35
+test_case_ignoring_word_list_cached
+i
+182
+45
+0
+1
+13
+71
+2
+47
+9
+24
+47
+49
+3
+0
+13
+7
+4
+2
+47
+49
+5
+2
+15
+8
+30
+7
+4
+2
+49
+2
+2
+7
+6
+64
+35
+1
+7
+7
+49
+8
+2
+19
+0
+15
+5
+7
+4
+20
+0
+7
+9
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+12
+64
+49
+10
+1
+47
+49
+11
+2
+15
+45
+0
+13
+13
+71
+2
+47
+9
+115
+47
+49
+3
+0
+13
+7
+4
+2
+47
+49
+5
+2
+15
+8
+121
+7
+4
+2
+49
+2
+2
+7
+12
+64
+35
+1
+7
+7
+49
+8
+2
+19
+0
+15
+5
+7
+4
+20
+0
+7
+9
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+10
+1
+47
+49
+11
+2
+15
+5
+7
+7
+20
+0
+7
+12
+64
+49
+10
+1
+47
+49
+11
+2
+11
+I
+5
+I
+1
+I
+0
+I
+0
+n
+p
+14
+x
+20
+CaseIgnoringWordList
+n
+x
+3
+new
+x
+8
+allocate
+x
+5
+ident
+x
+10
+initialize
+s
+6
+foobar
+x
+8
+reserved
+x
+3
+add
+s
+3
+foo
+x
+2
+[]
+x
+12
+assert_equal
+s
+6
+FooBar
+n
+p
+19
+I
+0
+I
+3a
+I
+0
+I
+3b
+I
+2b
+I
+3c
+I
+3b
+I
+3d
+I
+4b
+I
+3e
+I
+5b
+I
+40
+I
+86
+I
+41
+I
+96
+I
+42
+I
+a6
+I
+43
+I
+b6
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+1
+x
+4
+list
+x
+8
+test_dup
+M
+1
+n
+n
+x
+8
+test_dup
+i
+110
+45
+0
+1
+13
+71
+2
+47
+9
+23
+47
+49
+3
+0
+13
+7
+4
+47
+49
+5
+1
+15
+8
+28
+7
+4
+49
+2
+1
+7
+6
+64
+35
+1
+7
+7
+49
+8
+2
+19
+0
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+9
+1
+47
+49
+10
+2
+15
+20
+0
+49
+11
+0
+19
+1
+15
+20
+1
+7
+6
+64
+35
+1
+7
+12
+49
+8
+2
+15
+5
+7
+12
+20
+1
+7
+6
+64
+49
+9
+1
+47
+49
+10
+2
+15
+5
+7
+7
+20
+0
+7
+6
+64
+49
+9
+1
+47
+49
+10
+2
+11
+I
+6
+I
+2
+I
+0
+I
+0
+n
+p
+13
+x
+8
+WordList
+n
+x
+3
+new
+x
+8
+allocate
+x
+5
+ident
+x
+10
+initialize
+s
+6
+foobar
+x
+8
+reserved
+x
+3
+add
+x
+2
+[]
+x
+12
+assert_equal
+x
+3
+dup
+x
+7
+keyword
+p
+15
+I
+0
+I
+46
+I
+0
+I
+47
+I
+29
+I
+48
+I
+39
+I
+49
+I
+41
+I
+4a
+I
+4e
+I
+4b
+I
+5e
+I
+4c
+I
+6e
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+2
+x
+4
+list
+x
+5
+list2
+p
+45
+I
+2
+I
+6
+I
+b
+I
+9
+I
+e
+I
+a
+I
+23
+I
+b
+I
+2c
+I
+e
+I
+2f
+I
+f
+I
+3e
+I
+10
+I
+47
+I
+13
+I
+4a
+I
+14
+I
+59
+I
+18
+I
+78
+I
+19
+I
+7d
+I
+18
+I
+80
+I
+1a
+I
+85
+I
+18
+I
+88
+I
+1b
+I
+8d
+I
+18
+I
+94
+I
+1d
+I
+a2
+I
+22
+I
+b0
+I
+28
+I
+be
+I
+2e
+I
+cc
+I
+3a
+I
+da
+I
+46
+I
+e8
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+0
+x
+13
+attach_method
+p
+7
+I
+0
+I
+1
+I
+9
+I
+2
+I
+12
+I
+4
+I
+35
+x
+59
+/Users/murphy/ruby/coderay-0.9/test/functional/word_list.rb
+p
+0
--- a/vendor/gems/rubytree-0.5.2/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/gems/rubytree-0.5.2/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/gems/rubytree-0.5.2
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 48b46ff6764d5b76e1ad138669923aff
 2009-11-25T05:36:44.792571Z
 3090
@@ -69,7 +69,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 954df52967073c3833d9c565bb4b1ea8
 2009-11-25T05:36:44.792571Z
 3090
@@ -103,7 +103,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 f3e96d4b9eeb3d0c4d841c7c7ea6259c
 2009-11-25T05:36:44.792571Z
 3090
@@ -137,7 +137,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 7a9a6ee34490c5d9c4148c7cf8f85034
 2009-11-25T05:36:44.792571Z
 3090
@@ -171,7 +171,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 82301a43d2504d992ba1cfd7839b2d7e
 2009-11-25T05:36:44.792571Z
 3090
@@ -208,7 +208,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 b15b8164d281daa7c7028cdda9635950
 2009-11-25T05:36:44.792571Z
 3090
@@ -242,7 +242,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 25d0fdd6b9633f784544a5c000dc1351
 2009-11-25T05:36:44.792571Z
 3090
@@ -276,7 +276,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 13d490389c788748b3931b9e09b2b4d4
 2009-11-25T05:36:44.792571Z
 3090
@@ -310,7 +310,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 5906fb8bdb4197fe19171f795952ed9d
 2009-11-25T05:36:44.792571Z
 3090
--- a/vendor/gems/rubytree-0.5.2/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/gems/rubytree-0.5.2/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/gems/rubytree-0.5.2/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 46e46766767dc3a96b3019d385a5af83
 2009-11-25T05:36:44.792571Z
 3090
--- a/vendor/gems/rubytree-0.5.2/lib/tree/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/gems/rubytree-0.5.2/lib/tree/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/gems/rubytree-0.5.2/lib/tree
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2/lib/tree
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 54320f0ffbb41fa9d99ab2d617636ea1
 2009-11-25T05:36:44.792571Z
 3090
--- a/vendor/gems/rubytree-0.5.2/test/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/gems/rubytree-0.5.2/test/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/gems/rubytree-0.5.2/test
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/gems/rubytree-0.5.2/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 bd5257614b958bab00916feffc4fa9ae
 2009-11-25T05:36:44.792571Z
 3090
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 b9b4a1d43e859491e80fb1e2c7499d20
 2009-11-25T05:36:44.792571Z
 3090
--- a/vendor/plugins/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,5 +1,5 @@
 K 25
 svn:wc:ra_dav:version-url
 V 39
-/svn/!svn/ver/4602/trunk/vendor/plugins
+/svn/!svn/ver/4891/trunk/vendor/plugins
 END
--- a/vendor/plugins/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins
 http://redmine.rubyforge.org/svn
 
 
 
-2011-01-01T11:45:12.617336Z
-4602
+2011-02-20T14:26:23.957459Z
+4891
 jplang
 
 
@@ -44,9 +44,6 @@
 classic_pagination
 dir
 
-coderay-0.9.2
-dir
-
 acts_as_versioned
 dir
 
--- a/vendor/plugins/acts_as_activity_provider/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_activity_provider/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_activity_provider
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_activity_provider
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 779d73c171dc111df084a0798cca73e2
 2008-07-27T17:54:09.197937Z
 1701
--- a/vendor/plugins/acts_as_activity_provider/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_activity_provider/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_activity_provider/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_activity_provider/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 21fbeb28c4ce556d2534306b96be9497
 2008-12-08T18:20:26.452857Z
 2114
--- a/vendor/plugins/acts_as_attachable/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_attachable/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_attachable
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_attachable
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 b215588c95e69b4bb8f91ad91606bfbe
 2008-12-09T16:54:46.963649Z
 2116
--- a/vendor/plugins/acts_as_attachable/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_attachable/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_attachable/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_attachable/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 982227c44f1fe848c8aeed862ea027f3
 2010-03-03T17:05:00.967826Z
 3528
--- a/vendor/plugins/acts_as_customizable/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_customizable/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 K 25
 svn:wc:ra_dav:version-url
 V 60
-/svn/!svn/ver/4481/trunk/vendor/plugins/acts_as_customizable
+/svn/!svn/ver/4891/trunk/vendor/plugins/acts_as_customizable
 END
 init.rb
 K 25
--- a/vendor/plugins/acts_as_customizable/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_customizable/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_customizable
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_customizable
 http://redmine.rubyforge.org/svn
 
 
 
-2010-12-10T10:48:16.342425Z
-4481
+2011-02-20T14:26:23.957459Z
+4891
 jplang
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 0d1f178b7636d6712b38304954530928
 2008-06-27T20:13:56.888432Z
 1592
--- a/vendor/plugins/acts_as_customizable/lib/.svn/all-wcprops	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_customizable/lib/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -1,11 +1,11 @@
 K 25
 svn:wc:ra_dav:version-url
 V 64
-/svn/!svn/ver/4481/trunk/vendor/plugins/acts_as_customizable/lib
+/svn/!svn/ver/4891/trunk/vendor/plugins/acts_as_customizable/lib
 END
 acts_as_customizable.rb
 K 25
 svn:wc:ra_dav:version-url
 V 88
-/svn/!svn/ver/4481/trunk/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb
+/svn/!svn/ver/4891/trunk/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb
 END
--- a/vendor/plugins/acts_as_customizable/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_customizable/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_customizable/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2010-12-10T10:48:16.342425Z
-4481
+2011-02-20T14:26:23.957459Z
+4891
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2011-01-13T14:09:38.000000Z
-cef2f70b94f09391acec6dea08160454
-2010-12-10T10:48:16.342425Z
-4481
+2011-03-03T11:40:18.000000Z
+2a7f0cd4a6b5d7f58a12567604697208
+2011-02-20T14:26:23.957459Z
+4891
 jplang
 has-props
 
@@ -58,5 +58,5 @@
 
 
 
-4418
+4469
 
--- a/vendor/plugins/acts_as_customizable/lib/.svn/text-base/acts_as_customizable.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_customizable/lib/.svn/text-base/acts_as_customizable.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -71,6 +71,7 @@
           custom_field_values.each do |custom_value|
             custom_value.value = values[custom_value.custom_field_id.to_s] if values.has_key?(custom_value.custom_field_id.to_s)
           end if values.is_a?(Hash)
+          self.custom_values = custom_field_values
         end
         
         def custom_field_values
--- a/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_customizable/lib/acts_as_customizable.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -71,6 +71,7 @@
           custom_field_values.each do |custom_value|
             custom_value.value = values[custom_value.custom_field_id.to_s] if values.has_key?(custom_value.custom_field_id.to_s)
           end if values.is_a?(Hash)
+          self.custom_values = custom_field_values
         end
         
         def custom_field_values
--- a/vendor/plugins/acts_as_event/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_event/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_event
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_event
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 60df7ab698ddd0c3701bb0efbb8233cf
 2007-08-29T16:52:35.680643Z
 674
--- a/vendor/plugins/acts_as_event/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_event/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_event/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_event/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 ca8e33777d59976db870f71defe5f66d
 2010-04-30T10:45:21.145380Z
 3703
--- a/vendor/plugins/acts_as_list/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_list/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_list
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 0bdbdc825f80fda1a94852a82b68ffd4
 2007-12-10T17:58:07.273873Z
 975
@@ -72,7 +72,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 42212b5cb681c9888d56f9c0f36e1e02
 2007-12-10T17:58:07.273873Z
 975
--- a/vendor/plugins/acts_as_list/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_list/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_list/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/lib
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/acts_as_list/lib/active_record/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_list/lib/active_record/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_list/lib/active_record
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/lib/active_record
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/acts_as_list/lib/active_record/acts/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_list/lib/active_record/acts/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_list/lib/active_record/acts
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/lib/active_record/acts
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 a3ee41e8bed56868bc2e4ab2cb7df73a
 2009-02-26T09:21:41.696815Z
 2526
--- a/vendor/plugins/acts_as_list/test/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_list/test/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_list/test
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_list/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 3d41debf5c631e88295d337507c3b5b6
 2007-12-10T17:58:07.273873Z
 975
--- a/vendor/plugins/acts_as_searchable/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_searchable/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_searchable
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_searchable
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 7512fe68c7dfbb57e956d22b9aa8f8ed
 2007-09-27T17:28:22.154371Z
 766
--- a/vendor/plugins/acts_as_searchable/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_searchable/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_searchable/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_searchable/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 f282f30a34a9560d7ef3d5883aba5fe9
 2010-02-17T20:20:51.097274Z
 3445
--- a/vendor/plugins/acts_as_tree/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_tree/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_tree
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 77667cb4c41516750075eefb98896a93
 2007-12-10T17:58:07.273873Z
 975
@@ -69,7 +69,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 581c104f87fe90cfe9a7d1d41d77c84f
 2007-12-10T17:58:07.273873Z
 975
@@ -106,7 +106,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 918c85e850eb84259c178529b9aafd62
 2007-12-10T17:58:07.273873Z
 975
--- a/vendor/plugins/acts_as_tree/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_tree/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_tree/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/lib
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/acts_as_tree/lib/active_record/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_tree/lib/active_record/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_tree/lib/active_record
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/lib/active_record
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_tree/lib/active_record/acts/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_tree/lib/active_record/acts
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/lib/active_record/acts
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 544900d884182d6888334ce14323bef0
 2009-04-21T12:19:56.547537Z
 2676
--- a/vendor/plugins/acts_as_tree/test/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_tree/test/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_tree/test
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2007-12-10T17:58:07.273873Z
 975
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2007-12-10T17:58:07.273873Z
 975
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2007-12-10T17:58:07.273873Z
 975
@@ -137,7 +137,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 7bd3d48984d0e563b9f5e20ca8fdff81
 2007-12-10T17:58:07.273873Z
 975
--- a/vendor/plugins/acts_as_tree/test/fixtures/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_tree/test/fixtures/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_tree/test/fixtures
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_tree/test/fixtures
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2007-12-10T17:58:07.273873Z
 975
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2007-12-10T17:58:07.273873Z
 975
--- a/vendor/plugins/acts_as_versioned/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_versioned/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_versioned
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 8aae554c93cc60ef98cb3da2dd7c1b4b
 2007-03-04T13:40:21.895320Z
 290
@@ -69,7 +69,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 1f57ce7fac2d625797b9ec6d6480cf5b
 2008-07-04T17:58:14.743502Z
 1623
@@ -103,7 +103,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 1d117218f55938f9c75f1f814a4915d1
 2007-03-04T13:40:21.895320Z
 290
@@ -140,7 +140,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 3aa6f483cf322e248d4a1281160f8845
 2007-03-04T13:40:21.895320Z
 290
@@ -174,7 +174,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 e4ba7226e637685b5cca7a9cc5c05af2
 2007-03-04T13:40:21.895320Z
 290
@@ -208,7 +208,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 06ee73d1b4ad386b681f88b9326a0685
 2007-03-04T13:40:21.895320Z
 290
--- a/vendor/plugins/acts_as_versioned/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_versioned/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_versioned/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 474fc02132fce15712540924bb7b22cf
 2008-07-04T17:58:14.743502Z
 1623
--- a/vendor/plugins/acts_as_versioned/test/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_versioned/test/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_versioned/test
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 8a2eaa42c29dc84e0c018e78c99987f1
 2008-07-04T17:58:14.743502Z
 1623
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 df4118ed0edd4b3a0bae0cbb3b7a8a6b
 2007-03-04T13:40:21.895320Z
 290
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 99f5a4aa22b79a8f8c7521a0b1e9ec3e
 2008-07-04T17:58:14.743502Z
 1623
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 c5ac373bf98e48576df3a63ab4349883
 2007-03-04T13:40:21.895320Z
 290
@@ -171,7 +171,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 eb28101ab94f672b3a99998fc03f0d38
 2008-07-04T17:58:14.743502Z
 1623
--- a/vendor/plugins/acts_as_versioned/test/fixtures/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_versioned/test/fixtures/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_versioned/test/fixtures
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/test/fixtures
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 6052582a74186e97a71e6d50ff1c3558
 2007-03-04T13:40:21.895320Z
 290
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 35aca448cc30c958ad2f3a8130903701
 2007-03-04T13:40:21.895320Z
 290
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 df240cb0129f29834aea167ea97df5c9
 2007-03-04T13:40:21.895320Z
 290
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 3e63e88f04d92531412a5e328670313d
 2007-03-04T13:40:21.895320Z
 290
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 9e0c65a239dc63caf3ba5b61e5acd86b
 2007-03-04T13:40:21.895320Z
 290
@@ -202,7 +202,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 c9631a233cff08e617f783f2c5d4ebcb
 2007-03-04T13:40:21.895320Z
 290
@@ -236,7 +236,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 6cbb9a0d4b22160edce9cdd270943fcd
 2008-07-04T17:58:14.743502Z
 1623
@@ -270,7 +270,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 7845068722476900746d101729c30187
 2007-03-04T13:40:21.895320Z
 290
@@ -307,7 +307,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 ebfb47357586fa12e4524a65ba0a714a
 2007-03-04T13:40:21.895320Z
 290
@@ -341,7 +341,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 a93535c95869678b16df898b8de4259f
 2007-03-04T13:40:21.895320Z
 290
--- a/vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_versioned/test/fixtures/migrations/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_versioned/test/fixtures/migrations
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_versioned/test/fixtures/migrations
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 8fca6192aeeba1c8456bd6ac6199839f
 2007-03-04T13:40:21.895320Z
 290
--- a/vendor/plugins/acts_as_watchable/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_watchable/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_watchable
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_watchable
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 7051267daa625f991f2b604afde255ff
 2007-04-21T12:08:31.130506Z
 453
--- a/vendor/plugins/acts_as_watchable/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/acts_as_watchable/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/acts_as_watchable/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/acts_as_watchable/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 30f73616865f02dadce09f9511269b70
 2010-06-20T18:41:30.111362Z
 3803
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/awesome_nested_set/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,35 @@
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/svn/!svn/ver/4735/trunk/vendor/plugins/awesome_nested_set
+END
+awesome_nested_set.gemspec
+K 25
+svn:wc:ra_dav:version-url
+V 85
+/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/awesome_nested_set.gemspec
+END
+Rakefile
+K 25
+svn:wc:ra_dav:version-url
+V 67
+/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/Rakefile
+END
+README.rdoc
+K 25
+svn:wc:ra_dav:version-url
+V 70
+/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/README.rdoc
+END
+init.rb
+K 25
+svn:wc:ra_dav:version-url
+V 66
+/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/init.rb
+END
+MIT-LICENSE
+K 25
+svn:wc:ra_dav:version-url
+V 70
+/svn/!svn/ver/2304/trunk/vendor/plugins/awesome_nested_set/MIT-LICENSE
+END
--- a/vendor/plugins/awesome_nested_set/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/awesome_nested_set
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set
 http://redmine.rubyforge.org/svn
 
 
 
-2010-11-14T16:24:21.989522Z
-4406
+2011-01-22T11:46:15.415880Z
+4735
 jplang
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 c1f9a7c7c81a0c9150d260757c895ab3
 2008-12-20T12:22:38.158335Z
 2149
@@ -69,7 +69,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 75ea4a8e8109afdbce9214ac3e9aa40a
 2008-12-20T12:22:38.158335Z
 2149
@@ -103,7 +103,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 5d897290320b00753c366c59f40b213e
 2008-12-20T12:22:38.158335Z
 2149
@@ -137,7 +137,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 af5f1806895c92bb03e8855a96d13a64
 2008-12-20T12:22:38.158335Z
 2149
@@ -174,7 +174,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 ba826ae68593d063b726b4e66dcb1e8f
 2008-12-20T12:22:38.158335Z
 2149
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/plugins/awesome_nested_set/lib/.svn/all-wcprops	Thu Mar 03 12:02:03 2011 +0000
@@ -0,0 +1,11 @@
+K 25
+svn:wc:ra_dav:version-url
+V 62
+/svn/!svn/ver/4735/trunk/vendor/plugins/awesome_nested_set/lib
+END
+awesome_nested_set.rb
+K 25
+svn:wc:ra_dav:version-url
+V 84
+/svn/!svn/ver/4735/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb
+END
--- a/vendor/plugins/awesome_nested_set/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,14 +1,14 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/awesome_nested_set/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/lib
 http://redmine.rubyforge.org/svn
 
 
 
-2010-11-14T16:24:21.989522Z
-4406
+2011-01-22T11:46:15.415880Z
+4735
 jplang
 
 
@@ -32,10 +32,10 @@
 
 
 
-2010-11-30T13:11:54.000000Z
-e8fd989882fd3a10519da66c2a73e982
-2010-11-14T16:24:21.989522Z
-4406
+2011-03-03T11:05:12.000000Z
+30e0732ab58f6380af97e08261871486
+2011-01-22T11:46:15.415880Z
+4735
 jplang
 has-props
 
@@ -58,7 +58,7 @@
 
 
 
-21530
+21619
 
 awesome_nested_set
 dir
--- a/vendor/plugins/awesome_nested_set/lib/.svn/text-base/awesome_nested_set.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/lib/.svn/text-base/awesome_nested_set.rb.svn-base	Thu Mar 03 12:02:03 2011 +0000
@@ -444,17 +444,19 @@
         # Prunes a branch off of the tree, shifting all of the elements on the right
         # back to the left so the counts still work.
         def prune_from_tree
-          return if right.nil? || left.nil?
-          diff = right - left + 1
+          return if right.nil? || left.nil? || !self.class.exists?(id)
 
           delete_method = acts_as_nested_set_options[:dependent] == :destroy ?
             :destroy_all : :delete_all
 
           self.class.base_class.transaction do
+            reload_nested_set
             nested_set_scope.send(delete_method,
               ["#{quoted_left_column_name} > ? AND #{quoted_right_column_name} < ?",
                 left, right]
             )
+            reload_nested_set
+            diff = right - left + 1
             nested_set_scope.update_all(
               ["#{quoted_left_column_name} = (#{quoted_left_column_name} - ?)", diff],
               ["#{quoted_left_column_name} >= ?", right]
--- a/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb	Thu Mar 03 12:02:03 2011 +0000
@@ -444,17 +444,19 @@
         # Prunes a branch off of the tree, shifting all of the elements on the right
         # back to the left so the counts still work.
         def prune_from_tree
-          return if right.nil? || left.nil?
-          diff = right - left + 1
+          return if right.nil? || left.nil? || !self.class.exists?(id)
 
           delete_method = acts_as_nested_set_options[:dependent] == :destroy ?
             :destroy_all : :delete_all
 
           self.class.base_class.transaction do
+            reload_nested_set
             nested_set_scope.send(delete_method,
               ["#{quoted_left_column_name} > ? AND #{quoted_right_column_name} < ?",
                 left, right]
             )
+            reload_nested_set
+            diff = right - left + 1
             nested_set_scope.update_all(
               ["#{quoted_left_column_name} = (#{quoted_left_column_name} - ?)", diff],
               ["#{quoted_left_column_name} >= ?", right]
--- a/vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/lib/awesome_nested_set/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/awesome_nested_set/lib/awesome_nested_set
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/lib/awesome_nested_set
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 d15393e7ec4757df0e53641d9a8d76f4
 2008-12-20T12:22:38.158335Z
 2149
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 d4a9622144313fa6b56117a6c1f11e61
 2008-12-20T12:22:38.158335Z
 2149
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 cebe8bf25e6f479251be38c80a246574
 2008-12-20T12:22:38.158335Z
 2149
--- a/vendor/plugins/awesome_nested_set/rails/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/rails/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/awesome_nested_set/rails
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/rails
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:13.000000Z
 d5995cbfa2abdc12b57c44d69dc0085b
 2008-12-20T12:22:38.158335Z
 2149
--- a/vendor/plugins/awesome_nested_set/test/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/test/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/awesome_nested_set/test
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 41b65aff686211d45ba085c1b0791218
 2008-12-20T12:22:38.158335Z
 2149
@@ -75,7 +75,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 d177339aefb3c4a8f280efff48c974b6
 2008-12-20T12:22:38.158335Z
 2149
--- a/vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/test/awesome_nested_set/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/awesome_nested_set/test/awesome_nested_set
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test/awesome_nested_set
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 03a414e3247544a5a2334aed005764f3
 2008-12-20T12:22:38.158335Z
 2149
--- a/vendor/plugins/awesome_nested_set/test/db/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/test/db/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/awesome_nested_set/test/db
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test/db
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 ae23aecda935bb66e29aa4f02ea9de0a
 2008-12-20T12:22:38.158335Z
 2149
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 359889e11314c2969bdf7e37475bdc62
 2008-12-20T12:22:38.158335Z
 2149
--- a/vendor/plugins/awesome_nested_set/test/fixtures/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/awesome_nested_set/test/fixtures/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/awesome_nested_set/test/fixtures
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/awesome_nested_set/test/fixtures
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 460e90d6f219f339e8e4c64aaae0063c
 2008-12-20T12:22:38.158335Z
 2149
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 4b6a06e11c21a3aadd09e60dee443110
 2008-12-20T12:22:38.158335Z
 2149
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 e4eb5dbc7f2a2aa2fee79dba9210e769
 2008-12-20T12:22:38.158335Z
 2149
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 e8b507fd94ed89b9997c3f9f137290cf
 2008-12-20T12:22:38.158335Z
 2149
--- a/vendor/plugins/classic_pagination/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/classic_pagination/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/classic_pagination
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 b14424b71d2f606a775061237c8226f1
 2007-12-10T17:58:07.273873Z
 975
@@ -69,7 +69,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 181539722e198d92992a94f40310f4fc
 2007-12-10T17:58:07.273873Z
 975
@@ -106,7 +106,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 3ef206f381b42341342908fcc0001210
 2007-12-09T21:53:46.068689Z
 966
@@ -140,7 +140,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 1c88d6bc27aa809cd6ef26543c18b1e6
 2007-12-10T17:58:07.273873Z
 975
@@ -174,7 +174,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 f1df690ff1ea0da74f8fe161f50722ad
 2007-12-10T17:58:07.273873Z
 975
--- a/vendor/plugins/classic_pagination/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/classic_pagination/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/classic_pagination/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 535b7515c14fb3964e97be32c2d36415
 2007-12-10T17:58:07.273873Z
 975
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 d770c57066726c423cc9de4ca5b552cd
 2008-12-14T15:36:59.418123Z
 2134
--- a/vendor/plugins/classic_pagination/test/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/classic_pagination/test/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/classic_pagination/test
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 50c7fabeb3d6728ce24eada59d5b2b67
 2007-12-10T17:58:07.273873Z
 975
@@ -69,7 +69,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 0a02d28a37b53a8e19af7935db5be1a8
 2007-12-10T17:58:07.273873Z
 975
@@ -103,7 +103,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 597b7501984a5ecd10242163d06c33e7
 2007-12-10T17:58:07.273873Z
 975
--- a/vendor/plugins/classic_pagination/test/fixtures/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/classic_pagination/test/fixtures/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/classic_pagination/test/fixtures
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/classic_pagination/test/fixtures
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 4e923be7fd534a67635192bcfcbed5cf
 2007-12-10T17:58:07.273873Z
 975
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 021192cd31a5c3a39cbe7bd14144425a
 2007-12-10T17:58:07.273873Z
 975
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 5953f128689c82c1d5c9ab2709a682e4
 2007-12-10T17:58:07.273873Z
 975
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 cc2715c9793cffccefbac86e97dd5a08
 2007-12-10T17:58:07.273873Z
 975
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 92e8d8a3cd6b419bdabbafc91be07b13
 2007-12-10T17:58:07.273873Z
 975
@@ -202,7 +202,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 182661632986d51f75c49d74b19df40c
 2007-12-10T17:58:07.273873Z
 975
@@ -236,7 +236,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 f1bf372057211d4a6d86499e561d903c
 2007-12-10T17:58:07.273873Z
 975
@@ -270,7 +270,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 98f978d0e16223524ee8dc769136a3c4
 2007-12-10T17:58:07.273873Z
 975
@@ -304,7 +304,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 3605b2a8f1cf10cbc34343bd7c49330d
 2007-12-10T17:58:07.273873Z
 975
@@ -338,7 +338,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 dccebb95780c20b896fe26306d904e9d
 2007-12-10T17:58:07.273873Z
 975
@@ -372,7 +372,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 318c27008dc35148da64e32ff9bf53c7
 2007-12-10T17:58:07.273873Z
 975
@@ -406,7 +406,7 @@
 
 
 
-2010-08-12T15:03:26.000000Z
+2011-03-03T11:05:12.000000Z
 78b664b5dbb72751888e7f6bf4cd12f8
 2007-12-09T21:53:46.068689Z
 966
--- a/vendor/plugins/coderay-0.9.2/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-10
-
-dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/coderay-0.9.2
-http://redmine.rubyforge.org/svn
-
-
-
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-e93f8b46-1217-0410-a6f0-8f06a7374b81
-
-LICENSE
-file
-
-
-
-
-2010-08-12T15:03:26.000000Z
-071d975e884a936b40eab0b865ea4da1
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-26534
-
-lib
-dir
-
--- a/vendor/plugins/coderay-0.9.2/.svn/prop-base/LICENSE.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/.svn/text-base/LICENSE.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,504 +0,0 @@
-                  GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-                  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                            NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
--- a/vendor/plugins/coderay-0.9.2/LICENSE	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,504 +0,0 @@
-                  GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-                  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                            NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
--- a/vendor/plugins/coderay-0.9.2/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-10
-
-dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/coderay-0.9.2/lib
-http://redmine.rubyforge.org/svn
-
-
-
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-e93f8b46-1217-0410-a6f0-8f06a7374b81
-
-coderay
-dir
-
-coderay.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-c736c3ed620d59c1c6799d6fa340b0af
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-10050
-
-README
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-0d50df22acd760dc1905c7ef55e509e6
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4998
-
--- a/vendor/plugins/coderay-0.9.2/lib/.svn/prop-base/README.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/.svn/prop-base/coderay.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/.svn/text-base/README.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-= CodeRay
-
-[- Tired of blue'n'gray? Try the original version of this documentation on
-coderay.rubychan.de[http://coderay.rubychan.de/doc/] (use Ctrl+Click to open it in its own frame.) -]
-
-== About
-CodeRay is a Ruby library for syntax highlighting.
-
-Syntax highlighting means: You put your code in, and you get it back colored;
-Keywords, strings, floats, comments - all in different colors.
-And with line numbers.
-
-*Syntax* *Highlighting*...
-* makes code easier to read and maintain
-* lets you detect syntax errors faster
-* helps you to understand the syntax of a language
-* looks nice
-* is what everybody should have on their website
-* solves all your problems and makes the girls run after you
-
-Version: 0.9.2
-Author:: murphy (Kornelius Kalnbach)
-Contact:: murphy rubychan de
-Website:: coderay.rubychan.de[http://coderay.rubychan.de]
-License:: GNU LGPL; see LICENSE file in the main directory.
-
-== Installation
-
-You need RubyGems[http://rubyforge.org/frs/?group_id=126].
-
- % gem install coderay
-
-
-=== Dependencies
-
-CodeRay needs Ruby 1.8.6 or later. It also runs with Ruby 1.9.1+ and JRuby 1.1+.
-
-
-== Example Usage
-(Forgive me, but this is not highlighted.)
-
- require 'coderay'
- 
- tokens = CodeRay.scan "puts 'Hello, world!'", :ruby
- page = tokens.html :line_numbers => :inline, :wrap => :page
- puts page
-
-
-== Documentation
-
-See CodeRay.
-
-Please report errors in this documentation to <murphy rubychan de>.
-
-
-== Credits
-
-=== Special Thanks to
-
-* licenser (Heinz N. Gies) for ending my QBasic career, inventing the Coder
-  project and the input/output plugin system.
-  CodeRay would not exist without him.
-* bovi (Daniel Bovensiepen) for helping me out on various occasions.
-
-=== Thanks to
-
-* Caleb Clausen for writing RubyLexer (see
-  http://rubyforge.org/projects/rubylexer) and lots of very interesting mail
-  traffic
-* birkenfeld (Georg Brandl) and mitsuhiku (Arnim Ronacher) for PyKleur, now pygments.
-  You guys rock!
-* Jamis Buck for writing Syntax (see http://rubyforge.org/projects/syntax)
-  I got some useful ideas from it.
-* Doug Kearns and everyone else who worked on ruby.vim - it not only helped me
-  coding CodeRay, but also gave me a wonderful target to reach for the Ruby
-  scanner.
-* everyone who uses CodeBB on http://www.rubyforen.de and http://www.python-forum.de
-* iGEL, magichisoka, manveru, WoNáDo and everyone I forgot from rubyforen.de
-* Dethix from ruby-mine.de
-* zickzackw
-* Dookie (who is no longer with us...) and Leonidas from http://www.python-forum.de
-* Andreas Schwarz for finding out that CaseIgnoringWordList was not case
-  ignoring! Such things really make you write tests.
-* closure for the first version of the Scheme scanner.
-* Stefan Walk for the first version of the JavaScript and PHP scanners.
-* Josh Goebel for another version of the JavaScript scanner, a SQL and a Diff scanner.
-* Jonathan Younger for pointing out the licence confusion caused by wrong LICENSE file.
-* Jeremy Hinegardner for finding the shebang-on-empty-file bug in FileType.
-* Charles Oliver Nutter and Yehuda Katz for helping me benchmark CodeRay on JRuby.
-* Andreas Neuhaus for pointing out a markup bug in coderay/for_redcloth.
-* 0xf30fc7 for the FileType patch concerning Delphi file extensions.
-* The folks at redmine.org - thank you for using and fixing CodeRay!
-* Keith Pitt for his SQL scanners
-* Rob Aldred for the terminal encoder
-* Trans for pointing out $DEBUG dependencies
-* Flameeyes for finding that Term::ANSIColor was obsolete
-* matz and all Ruby gods and gurus
-* The inventors of: the computer, the internet, the true color display, HTML &
-  CSS, VIM, Ruby, pizza, microwaves, guitars, scouting, programming, anime, 
-  manga, coke and green ice tea.
-
-Where would we be without all those people?
-
-=== Created using
-
-* Ruby[http://ruby-lang.org/]
-* Chihiro (my Sony VAIO laptop); Henrietta (my old MacBook);
-  Triella, born Rico (my new MacBook); as well as
-  Seras and Hikari (my PCs)
-* RDE[http://homepage2.nifty.com/sakazuki/rde_e.html],
-  VIM[http://vim.org] and TextMate[http://macromates.com]
-* Subversion[http://subversion.tigris.org/]
-* Redmine[http://redmine.org/]
-* Firefox[http://www.mozilla.org/products/firefox/],
-  Firebug[http://getfirebug.com/], Safari[http://www.apple.com/safari/], and
-  Thunderbird[http://www.mozilla.org/products/thunderbird/]
-* RubyGems[http://docs.rubygems.org/] and Rake[http://rake.rubyforge.org/]
-* TortoiseSVN[http://tortoisesvn.tigris.org/] using Apache via
-  XAMPP[http://www.apachefriends.org/en/xampp.html]
-* RDoc (though I'm quite unsatisfied with it)
-* Microsoft Windows (yes, I confess!) and MacOS X
-* GNUWin32, MinGW and some other tools to make the shell under windows a bit
-  less useless
-* Term::ANSIColor[http://term-ansicolor.rubyforge.org/]
-* PLEAC[http://pleac.sourceforge.net/] code examples
-
-=== Free
-
-* As you can see, CodeRay was created under heavy use of *free* software.
-* So CodeRay is also *free*.
-* If you use CodeRay to create software, think about making this software
-  *free*, too.
-* Thanks :)
--- a/vendor/plugins/coderay-0.9.2/lib/.svn/text-base/coderay.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,322 +0,0 @@
-# = CodeRay Library
-#
-# CodeRay is a Ruby library for syntax highlighting.
-#
-# I try to make CodeRay easy to use and intuitive, but at the same time fully featured, complete,
-# fast and efficient.
-# 
-# See README.
-# 
-# It consists mainly of
-# * the main engine: CodeRay (Scanners::Scanner, Tokens/TokenStream, Encoders::Encoder), PluginHost
-# * the scanners in CodeRay::Scanners
-# * the encoders in CodeRay::Encoders
-# 
-# Here's a fancy graphic to light up this gray docu:
-# 
-# http://cycnus.de/raindark/coderay/scheme.png
-# 
-# == Documentation
-#
-# See CodeRay, Encoders, Scanners, Tokens.
-#
-# == Usage
-#
-# Remember you need RubyGems to use CodeRay, unless you have it in your load path. Run Ruby with
-# -rubygems option if required.
-#
-# === Highlight Ruby code in a string as html
-# 
-#   require 'coderay'
-#   print CodeRay.scan('puts "Hello, world!"', :ruby).html
-#
-#   # prints something like this:
-#   puts <span class="s">&quot;Hello, world!&quot;</span>
-# 
-# 
-# === Highlight C code from a file in a html div
-# 
-#   require 'coderay'
-#   print CodeRay.scan(File.read('ruby.h'), :c).div
-#   print CodeRay.scan_file('ruby.h').html.div
-# 
-# You can include this div in your page. The used CSS styles can be printed with
-# 
-#   % coderay_stylesheet
-# 
-# === Highlight without typing too much
-# 
-# If you are one of the hasty (or lazy, or extremely curious) people, just run this file:
-# 
-#   % ruby -rubygems /path/to/coderay/coderay.rb > example.html
-# 
-# and look at the file it created in your browser.
-# 
-# = CodeRay Module
-#
-# The CodeRay module provides convenience methods for the engine.
-#
-# * The +lang+ and +format+ arguments select Scanner and Encoder to use. These are
-#   simply lower-case symbols, like <tt>:python</tt> or <tt>:html</tt>.
-# * All methods take an optional hash as last parameter, +options+, that is send to
-#   the Encoder / Scanner.
-# * Input and language are always sorted in this order: +code+, +lang+.
-#   (This is in alphabetical order, if you need a mnemonic ;)
-# 
-# You should be able to highlight everything you want just using these methods;
-# so there is no need to dive into CodeRay's deep class hierarchy.
-#
-# The examples in the demo directory demonstrate common cases using this interface.
-#  
-# = Basic Access Ways
-#
-# Read this to get a general view what CodeRay provides.
-# 
-# == Scanning
-#  
-#  Scanning means analysing an input string, splitting it up into Tokens.
-#  Each Token knows about what type it is: string, comment, class name, etc.
-#
-#  Each +lang+ (language) has its own Scanner; for example, <tt>:ruby</tt> code is
-#  handled by CodeRay::Scanners::Ruby.
-# 
-# CodeRay.scan:: Scan a string in a given language into Tokens.
-#                This is the most common method to use.
-# CodeRay.scan_file:: Scan a file and guess the language using FileType.
-# 
-# The Tokens object you get from these methods can encode itself; see Tokens.
-# 
-# == Encoding
-#
-# Encoding means compiling Tokens into an output. This can be colored HTML or
-# LaTeX, a textual statistic or just the number of non-whitespace tokens.
-# 
-# Each Encoder provides output in a specific +format+, so you select Encoders via
-# formats like <tt>:html</tt> or <tt>:statistic</tt>.
-# 
-# CodeRay.encode:: Scan and encode a string in a given language.
-# CodeRay.encode_tokens:: Encode the given tokens.
-# CodeRay.encode_file:: Scan a file, guess the language using FileType and encode it.
-#
-# == Streaming
-#
-# Streaming saves RAM by running Scanner and Encoder in some sort of
-# pipe mode; see TokenStream.
-#
-# CodeRay.scan_stream:: Scan in stream mode.
-#
-# == All-in-One Encoding
-#
-# CodeRay.encode:: Highlight a string with a given input and output format.
-#
-# == Instanciating
-#
-# You can use an Encoder instance to highlight multiple inputs. This way, the setup
-# for this Encoder must only be done once.
-#
-# CodeRay.encoder:: Create an Encoder instance with format and options.
-# CodeRay.scanner:: Create an Scanner instance for lang, with '' as default code.
-#
-# To make use of CodeRay.scanner, use CodeRay::Scanner::code=.
-#
-# The scanning methods provide more flexibility; we recommend to use these.
-# 
-# == Reusing Scanners and Encoders
-# 
-# If you want to re-use scanners and encoders (because that is faster), see
-# CodeRay::Duo for the most convenient (and recommended) interface.
-module CodeRay
-  
-  $CODERAY_DEBUG ||= false
-  
-  # Version: Major.Minor.Teeny[.Revision]
-  # Major: 0 for pre-stable, 1 for stable
-  # Minor: feature milestone
-  # Teeny: development state, 0 for pre-release
-  # Revision: Subversion Revision number (generated on rake gem:make)
-  VERSION = '0.9.2'
-
-  require 'coderay/tokens'
-  require 'coderay/token_classes'
-  require 'coderay/scanner'
-  require 'coderay/encoder'
-  require 'coderay/duo'
-  require 'coderay/style'
-
-
-  class << self
-
-    # Scans the given +code+ (a String) with the Scanner for +lang+.
-    #
-    # This is a simple way to use CodeRay. Example:
-    #  require 'coderay'
-    #  page = CodeRay.scan("puts 'Hello, world!'", :ruby).html
-    #
-    # See also demo/demo_simple.
-    def scan code, lang, options = {}, &block
-      scanner = Scanners[lang].new code, options, &block
-      scanner.tokenize
-    end
-
-    # Scans +filename+ (a path to a code file) with the Scanner for +lang+.
-    #
-    # If +lang+ is :auto or omitted, the CodeRay::FileType module is used to
-    # determine it. If it cannot find out what type it is, it uses
-    # CodeRay::Scanners::Plaintext.
-    #
-    # Calls CodeRay.scan.
-    #
-    # Example:
-    #  require 'coderay'
-    #  page = CodeRay.scan_file('some_c_code.c').html
-    def scan_file filename, lang = :auto, options = {}, &block
-      file = IO.read filename
-      if lang == :auto
-        require 'coderay/helpers/file_type'
-        lang = FileType.fetch filename, :plaintext, true
-      end
-      scan file, lang, options = {}, &block
-    end
-
-    # Scan the +code+ (a string) with the scanner for +lang+.
-    #
-    # Calls scan.
-    #
-    # See CodeRay.scan.
-    def scan_stream code, lang, options = {}, &block
-      options[:stream] = true
-      scan code, lang, options, &block
-    end
-
-    # Encode a string in Streaming mode.
-    #
-    # This starts scanning +code+ with the the Scanner for +lang+
-    # while encodes the output with the Encoder for +format+.
-    # +options+ will be passed to the Encoder.
-    #
-    # See CodeRay::Encoder.encode_stream
-    def encode_stream code, lang, format, options = {}
-      encoder(format, options).encode_stream code, lang, options
-    end
-
-    # Encode a string.
-    #
-    # This scans +code+ with the the Scanner for +lang+ and then
-    # encodes it with the Encoder for +format+.
-    # +options+ will be passed to the Encoder.
-    #
-    # See CodeRay::Encoder.encode
-    def encode code, lang, format, options = {}
-      encoder(format, options).encode code, lang, options
-    end
-
-    # Highlight a string into a HTML <div>.
-    #
-    # CSS styles use classes, so you have to include a stylesheet
-    # in your output.
-    #
-    # See encode.
-    def highlight code, lang, options = { :css => :class }, format = :div
-      encode code, lang, format, options
-    end
-
-    # Encode pre-scanned Tokens.
-    # Use this together with CodeRay.scan:
-    #
-    #  require 'coderay'
-    #  
-    #  # Highlight a short Ruby code example in a HTML span
-    #  tokens = CodeRay.scan '1 + 2', :ruby
-    #  puts CodeRay.encode_tokens(tokens, :span)
-    #
-    def encode_tokens tokens, format, options = {}
-      encoder(format, options).encode_tokens tokens, options
-    end
-
-    # Encodes +filename+ (a path to a code file) with the Scanner for +lang+.
-    #
-    # See CodeRay.scan_file.
-    # Notice that the second argument is the output +format+, not the input language.
-    #
-    # Example:
-    #  require 'coderay'
-    #  page = CodeRay.encode_file 'some_c_code.c', :html
-    def encode_file filename, format, options = {}
-      tokens = scan_file filename, :auto, get_scanner_options(options)
-      encode_tokens tokens, format, options
-    end
-
-    # Highlight a file into a HTML <div>.
-    #
-    # CSS styles use classes, so you have to include a stylesheet
-    # in your output.
-    #
-    # See encode.
-    def highlight_file filename, options = { :css => :class }, format = :div
-      encode_file filename, format, options
-    end
-
-    # Finds the Encoder class for +format+ and creates an instance, passing
-    # +options+ to it.
-    #
-    # Example:
-    #  require 'coderay'
-    #  
-    #  stats = CodeRay.encoder(:statistic)
-    #  stats.encode("puts 17 + 4\n", :ruby)
-    #  
-    #  puts '%d out of %d tokens have the kind :integer.' % [
-    #    stats.type_stats[:integer].count,
-    #    stats.real_token_count
-    #  ]
-    #  #-> 2 out of 4 tokens have the kind :integer.
-    def encoder format, options = {}
-      Encoders[format].new options
-    end
-
-    # Finds the Scanner class for +lang+ and creates an instance, passing
-    # +options+ to it.
-    #
-    # See Scanner.new.
-    def scanner lang, options = {}
-      Scanners[lang].new '', options
-    end
-
-    # Extract the options for the scanner from the +options+ hash.
-    #
-    # Returns an empty Hash if <tt>:scanner_options</tt> is not set.
-    #
-    # This is used if a method like CodeRay.encode has to provide options
-    # for Encoder _and_ scanner.
-    def get_scanner_options options
-      options.fetch :scanner_options, {}
-    end
-
-  end
-
-  # This Exception is raised when you try to stream with something that is not
-  # capable of streaming.
-  class NotStreamableError < Exception
-    def initialize obj
-      @obj = obj
-    end
-
-    def to_s
-      '%s is not Streamable!' % @obj.class
-    end
-  end
-
-  # A dummy module that is included by subclasses of CodeRay::Scanner an CodeRay::Encoder
-  # to show that they are able to handle streams.
-  module Streamable
-  end
-
-end
-
-# Run a test script.
-if $0 == __FILE__
-  $stderr.print 'Press key to print demo.'; gets
-  # Just use this file as an example of Ruby code.
-  code = File.read(__FILE__)[/module CodeRay.*/m]
-  print CodeRay.scan(code, :ruby).html
-end
--- a/vendor/plugins/coderay-0.9.2/lib/README	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-= CodeRay
-
-[- Tired of blue'n'gray? Try the original version of this documentation on
-coderay.rubychan.de[http://coderay.rubychan.de/doc/] (use Ctrl+Click to open it in its own frame.) -]
-
-== About
-CodeRay is a Ruby library for syntax highlighting.
-
-Syntax highlighting means: You put your code in, and you get it back colored;
-Keywords, strings, floats, comments - all in different colors.
-And with line numbers.
-
-*Syntax* *Highlighting*...
-* makes code easier to read and maintain
-* lets you detect syntax errors faster
-* helps you to understand the syntax of a language
-* looks nice
-* is what everybody should have on their website
-* solves all your problems and makes the girls run after you
-
-Version: 0.9.2
-Author:: murphy (Kornelius Kalnbach)
-Contact:: murphy rubychan de
-Website:: coderay.rubychan.de[http://coderay.rubychan.de]
-License:: GNU LGPL; see LICENSE file in the main directory.
-
-== Installation
-
-You need RubyGems[http://rubyforge.org/frs/?group_id=126].
-
- % gem install coderay
-
-
-=== Dependencies
-
-CodeRay needs Ruby 1.8.6 or later. It also runs with Ruby 1.9.1+ and JRuby 1.1+.
-
-
-== Example Usage
-(Forgive me, but this is not highlighted.)
-
- require 'coderay'
- 
- tokens = CodeRay.scan "puts 'Hello, world!'", :ruby
- page = tokens.html :line_numbers => :inline, :wrap => :page
- puts page
-
-
-== Documentation
-
-See CodeRay.
-
-Please report errors in this documentation to <murphy rubychan de>.
-
-
-== Credits
-
-=== Special Thanks to
-
-* licenser (Heinz N. Gies) for ending my QBasic career, inventing the Coder
-  project and the input/output plugin system.
-  CodeRay would not exist without him.
-* bovi (Daniel Bovensiepen) for helping me out on various occasions.
-
-=== Thanks to
-
-* Caleb Clausen for writing RubyLexer (see
-  http://rubyforge.org/projects/rubylexer) and lots of very interesting mail
-  traffic
-* birkenfeld (Georg Brandl) and mitsuhiku (Arnim Ronacher) for PyKleur, now pygments.
-  You guys rock!
-* Jamis Buck for writing Syntax (see http://rubyforge.org/projects/syntax)
-  I got some useful ideas from it.
-* Doug Kearns and everyone else who worked on ruby.vim - it not only helped me
-  coding CodeRay, but also gave me a wonderful target to reach for the Ruby
-  scanner.
-* everyone who uses CodeBB on http://www.rubyforen.de and http://www.python-forum.de
-* iGEL, magichisoka, manveru, WoNáDo and everyone I forgot from rubyforen.de
-* Dethix from ruby-mine.de
-* zickzackw
-* Dookie (who is no longer with us...) and Leonidas from http://www.python-forum.de
-* Andreas Schwarz for finding out that CaseIgnoringWordList was not case
-  ignoring! Such things really make you write tests.
-* closure for the first version of the Scheme scanner.
-* Stefan Walk for the first version of the JavaScript and PHP scanners.
-* Josh Goebel for another version of the JavaScript scanner, a SQL and a Diff scanner.
-* Jonathan Younger for pointing out the licence confusion caused by wrong LICENSE file.
-* Jeremy Hinegardner for finding the shebang-on-empty-file bug in FileType.
-* Charles Oliver Nutter and Yehuda Katz for helping me benchmark CodeRay on JRuby.
-* Andreas Neuhaus for pointing out a markup bug in coderay/for_redcloth.
-* 0xf30fc7 for the FileType patch concerning Delphi file extensions.
-* The folks at redmine.org - thank you for using and fixing CodeRay!
-* Keith Pitt for his SQL scanners
-* Rob Aldred for the terminal encoder
-* Trans for pointing out $DEBUG dependencies
-* Flameeyes for finding that Term::ANSIColor was obsolete
-* matz and all Ruby gods and gurus
-* The inventors of: the computer, the internet, the true color display, HTML &
-  CSS, VIM, Ruby, pizza, microwaves, guitars, scouting, programming, anime, 
-  manga, coke and green ice tea.
-
-Where would we be without all those people?
-
-=== Created using
-
-* Ruby[http://ruby-lang.org/]
-* Chihiro (my Sony VAIO laptop); Henrietta (my old MacBook);
-  Triella, born Rico (my new MacBook); as well as
-  Seras and Hikari (my PCs)
-* RDE[http://homepage2.nifty.com/sakazuki/rde_e.html],
-  VIM[http://vim.org] and TextMate[http://macromates.com]
-* Subversion[http://subversion.tigris.org/]
-* Redmine[http://redmine.org/]
-* Firefox[http://www.mozilla.org/products/firefox/],
-  Firebug[http://getfirebug.com/], Safari[http://www.apple.com/safari/], and
-  Thunderbird[http://www.mozilla.org/products/thunderbird/]
-* RubyGems[http://docs.rubygems.org/] and Rake[http://rake.rubyforge.org/]
-* TortoiseSVN[http://tortoisesvn.tigris.org/] using Apache via
-  XAMPP[http://www.apachefriends.org/en/xampp.html]
-* RDoc (though I'm quite unsatisfied with it)
-* Microsoft Windows (yes, I confess!) and MacOS X
-* GNUWin32, MinGW and some other tools to make the shell under windows a bit
-  less useless
-* Term::ANSIColor[http://term-ansicolor.rubyforge.org/]
-* PLEAC[http://pleac.sourceforge.net/] code examples
-
-=== Free
-
-* As you can see, CodeRay was created under heavy use of *free* software.
-* So CodeRay is also *free*.
-* If you use CodeRay to create software, think about making this software
-  *free*, too.
-* Thanks :)
--- a/vendor/plugins/coderay-0.9.2/lib/coderay.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,322 +0,0 @@
-# = CodeRay Library
-#
-# CodeRay is a Ruby library for syntax highlighting.
-#
-# I try to make CodeRay easy to use and intuitive, but at the same time fully featured, complete,
-# fast and efficient.
-# 
-# See README.
-# 
-# It consists mainly of
-# * the main engine: CodeRay (Scanners::Scanner, Tokens/TokenStream, Encoders::Encoder), PluginHost
-# * the scanners in CodeRay::Scanners
-# * the encoders in CodeRay::Encoders
-# 
-# Here's a fancy graphic to light up this gray docu:
-# 
-# http://cycnus.de/raindark/coderay/scheme.png
-# 
-# == Documentation
-#
-# See CodeRay, Encoders, Scanners, Tokens.
-#
-# == Usage
-#
-# Remember you need RubyGems to use CodeRay, unless you have it in your load path. Run Ruby with
-# -rubygems option if required.
-#
-# === Highlight Ruby code in a string as html
-# 
-#   require 'coderay'
-#   print CodeRay.scan('puts "Hello, world!"', :ruby).html
-#
-#   # prints something like this:
-#   puts <span class="s">&quot;Hello, world!&quot;</span>
-# 
-# 
-# === Highlight C code from a file in a html div
-# 
-#   require 'coderay'
-#   print CodeRay.scan(File.read('ruby.h'), :c).div
-#   print CodeRay.scan_file('ruby.h').html.div
-# 
-# You can include this div in your page. The used CSS styles can be printed with
-# 
-#   % coderay_stylesheet
-# 
-# === Highlight without typing too much
-# 
-# If you are one of the hasty (or lazy, or extremely curious) people, just run this file:
-# 
-#   % ruby -rubygems /path/to/coderay/coderay.rb > example.html
-# 
-# and look at the file it created in your browser.
-# 
-# = CodeRay Module
-#
-# The CodeRay module provides convenience methods for the engine.
-#
-# * The +lang+ and +format+ arguments select Scanner and Encoder to use. These are
-#   simply lower-case symbols, like <tt>:python</tt> or <tt>:html</tt>.
-# * All methods take an optional hash as last parameter, +options+, that is send to
-#   the Encoder / Scanner.
-# * Input and language are always sorted in this order: +code+, +lang+.
-#   (This is in alphabetical order, if you need a mnemonic ;)
-# 
-# You should be able to highlight everything you want just using these methods;
-# so there is no need to dive into CodeRay's deep class hierarchy.
-#
-# The examples in the demo directory demonstrate common cases using this interface.
-#  
-# = Basic Access Ways
-#
-# Read this to get a general view what CodeRay provides.
-# 
-# == Scanning
-#  
-#  Scanning means analysing an input string, splitting it up into Tokens.
-#  Each Token knows about what type it is: string, comment, class name, etc.
-#
-#  Each +lang+ (language) has its own Scanner; for example, <tt>:ruby</tt> code is
-#  handled by CodeRay::Scanners::Ruby.
-# 
-# CodeRay.scan:: Scan a string in a given language into Tokens.
-#                This is the most common method to use.
-# CodeRay.scan_file:: Scan a file and guess the language using FileType.
-# 
-# The Tokens object you get from these methods can encode itself; see Tokens.
-# 
-# == Encoding
-#
-# Encoding means compiling Tokens into an output. This can be colored HTML or
-# LaTeX, a textual statistic or just the number of non-whitespace tokens.
-# 
-# Each Encoder provides output in a specific +format+, so you select Encoders via
-# formats like <tt>:html</tt> or <tt>:statistic</tt>.
-# 
-# CodeRay.encode:: Scan and encode a string in a given language.
-# CodeRay.encode_tokens:: Encode the given tokens.
-# CodeRay.encode_file:: Scan a file, guess the language using FileType and encode it.
-#
-# == Streaming
-#
-# Streaming saves RAM by running Scanner and Encoder in some sort of
-# pipe mode; see TokenStream.
-#
-# CodeRay.scan_stream:: Scan in stream mode.
-#
-# == All-in-One Encoding
-#
-# CodeRay.encode:: Highlight a string with a given input and output format.
-#
-# == Instanciating
-#
-# You can use an Encoder instance to highlight multiple inputs. This way, the setup
-# for this Encoder must only be done once.
-#
-# CodeRay.encoder:: Create an Encoder instance with format and options.
-# CodeRay.scanner:: Create an Scanner instance for lang, with '' as default code.
-#
-# To make use of CodeRay.scanner, use CodeRay::Scanner::code=.
-#
-# The scanning methods provide more flexibility; we recommend to use these.
-# 
-# == Reusing Scanners and Encoders
-# 
-# If you want to re-use scanners and encoders (because that is faster), see
-# CodeRay::Duo for the most convenient (and recommended) interface.
-module CodeRay
-  
-  $CODERAY_DEBUG ||= false
-  
-  # Version: Major.Minor.Teeny[.Revision]
-  # Major: 0 for pre-stable, 1 for stable
-  # Minor: feature milestone
-  # Teeny: development state, 0 for pre-release
-  # Revision: Subversion Revision number (generated on rake gem:make)
-  VERSION = '0.9.2'
-
-  require 'coderay/tokens'
-  require 'coderay/token_classes'
-  require 'coderay/scanner'
-  require 'coderay/encoder'
-  require 'coderay/duo'
-  require 'coderay/style'
-
-
-  class << self
-
-    # Scans the given +code+ (a String) with the Scanner for +lang+.
-    #
-    # This is a simple way to use CodeRay. Example:
-    #  require 'coderay'
-    #  page = CodeRay.scan("puts 'Hello, world!'", :ruby).html
-    #
-    # See also demo/demo_simple.
-    def scan code, lang, options = {}, &block
-      scanner = Scanners[lang].new code, options, &block
-      scanner.tokenize
-    end
-
-    # Scans +filename+ (a path to a code file) with the Scanner for +lang+.
-    #
-    # If +lang+ is :auto or omitted, the CodeRay::FileType module is used to
-    # determine it. If it cannot find out what type it is, it uses
-    # CodeRay::Scanners::Plaintext.
-    #
-    # Calls CodeRay.scan.
-    #
-    # Example:
-    #  require 'coderay'
-    #  page = CodeRay.scan_file('some_c_code.c').html
-    def scan_file filename, lang = :auto, options = {}, &block
-      file = IO.read filename
-      if lang == :auto
-        require 'coderay/helpers/file_type'
-        lang = FileType.fetch filename, :plaintext, true
-      end
-      scan file, lang, options = {}, &block
-    end
-
-    # Scan the +code+ (a string) with the scanner for +lang+.
-    #
-    # Calls scan.
-    #
-    # See CodeRay.scan.
-    def scan_stream code, lang, options = {}, &block
-      options[:stream] = true
-      scan code, lang, options, &block
-    end
-
-    # Encode a string in Streaming mode.
-    #
-    # This starts scanning +code+ with the the Scanner for +lang+
-    # while encodes the output with the Encoder for +format+.
-    # +options+ will be passed to the Encoder.
-    #
-    # See CodeRay::Encoder.encode_stream
-    def encode_stream code, lang, format, options = {}
-      encoder(format, options).encode_stream code, lang, options
-    end
-
-    # Encode a string.
-    #
-    # This scans +code+ with the the Scanner for +lang+ and then
-    # encodes it with the Encoder for +format+.
-    # +options+ will be passed to the Encoder.
-    #
-    # See CodeRay::Encoder.encode
-    def encode code, lang, format, options = {}
-      encoder(format, options).encode code, lang, options
-    end
-
-    # Highlight a string into a HTML <div>.
-    #
-    # CSS styles use classes, so you have to include a stylesheet
-    # in your output.
-    #
-    # See encode.
-    def highlight code, lang, options = { :css => :class }, format = :div
-      encode code, lang, format, options
-    end
-
-    # Encode pre-scanned Tokens.
-    # Use this together with CodeRay.scan:
-    #
-    #  require 'coderay'
-    #  
-    #  # Highlight a short Ruby code example in a HTML span
-    #  tokens = CodeRay.scan '1 + 2', :ruby
-    #  puts CodeRay.encode_tokens(tokens, :span)
-    #
-    def encode_tokens tokens, format, options = {}
-      encoder(format, options).encode_tokens tokens, options
-    end
-
-    # Encodes +filename+ (a path to a code file) with the Scanner for +lang+.
-    #
-    # See CodeRay.scan_file.
-    # Notice that the second argument is the output +format+, not the input language.
-    #
-    # Example:
-    #  require 'coderay'
-    #  page = CodeRay.encode_file 'some_c_code.c', :html
-    def encode_file filename, format, options = {}
-      tokens = scan_file filename, :auto, get_scanner_options(options)
-      encode_tokens tokens, format, options
-    end
-
-    # Highlight a file into a HTML <div>.
-    #
-    # CSS styles use classes, so you have to include a stylesheet
-    # in your output.
-    #
-    # See encode.
-    def highlight_file filename, options = { :css => :class }, format = :div
-      encode_file filename, format, options
-    end
-
-    # Finds the Encoder class for +format+ and creates an instance, passing
-    # +options+ to it.
-    #
-    # Example:
-    #  require 'coderay'
-    #  
-    #  stats = CodeRay.encoder(:statistic)
-    #  stats.encode("puts 17 + 4\n", :ruby)
-    #  
-    #  puts '%d out of %d tokens have the kind :integer.' % [
-    #    stats.type_stats[:integer].count,
-    #    stats.real_token_count
-    #  ]
-    #  #-> 2 out of 4 tokens have the kind :integer.
-    def encoder format, options = {}
-      Encoders[format].new options
-    end
-
-    # Finds the Scanner class for +lang+ and creates an instance, passing
-    # +options+ to it.
-    #
-    # See Scanner.new.
-    def scanner lang, options = {}
-      Scanners[lang].new '', options
-    end
-
-    # Extract the options for the scanner from the +options+ hash.
-    #
-    # Returns an empty Hash if <tt>:scanner_options</tt> is not set.
-    #
-    # This is used if a method like CodeRay.encode has to provide options
-    # for Encoder _and_ scanner.
-    def get_scanner_options options
-      options.fetch :scanner_options, {}
-    end
-
-  end
-
-  # This Exception is raised when you try to stream with something that is not
-  # capable of streaming.
-  class NotStreamableError < Exception
-    def initialize obj
-      @obj = obj
-    end
-
-    def to_s
-      '%s is not Streamable!' % @obj.class
-    end
-  end
-
-  # A dummy module that is included by subclasses of CodeRay::Scanner an CodeRay::Encoder
-  # to show that they are able to handle streams.
-  module Streamable
-  end
-
-end
-
-# Run a test script.
-if $0 == __FILE__
-  $stderr.print 'Press key to print demo.'; gets
-  # Just use this file as an example of Ruby code.
-  code = File.read(__FILE__)[/module CodeRay.*/m]
-  print CodeRay.scan(code, :ruby).html
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,278 +0,0 @@
-10
-
-dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/coderay-0.9.2/lib/coderay
-http://redmine.rubyforge.org/svn
-
-
-
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-e93f8b46-1217-0410-a6f0-8f06a7374b81
-
-token_classes.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-4f17211f3874899049db6111ef282a3b
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2287
-
-encoder.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-f0ead48eaa86c8b4d6a5587e9b5450ca
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-6565
-
-encoders
-dir
-
-helpers
-dir
-
-style.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-409fa492a5470a8bed5ae969f270decf
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-293
-
-styles
-dir
-
-tokens.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-b7662592ff38046174f935548f579ce4
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-10153
-
-duo.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-b33e5b83e354c09655f46d37ae662f64
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2549
-
-scanner.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-f75f38c93ee8de3e6df1c08773b62319
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-7803
-
-scanners
-dir
-
-for_redcloth.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-d216c2f1c7a84a23ce3feff0b1358d60
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3001
-
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/duo.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/encoder.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/for_redcloth.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/scanner.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/style.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/token_classes.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/prop-base/tokens.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/duo.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-module CodeRay
-  
-  # = Duo
-  #
-  # A Duo is a convenient way to use CodeRay. You just create a Duo,
-  # giving it a lang (language of the input code) and a format (desired
-  # output format), and call Duo#highlight with the code.
-  # 
-  # Duo makes it easy to re-use both scanner and encoder for a repetitive
-  # task. It also provides a very easy interface syntax:
-  # 
-  #   require 'coderay'
-  #   CodeRay::Duo[:python, :div].highlight 'import this'
-  # 
-  # Until you want to do uncommon things with CodeRay, I recommend to use
-  # this method, since it takes care of everything.
-  class Duo
-
-    attr_accessor :lang, :format, :options
-    
-    # Create a new Duo, holding a lang and a format to highlight code.
-    # 
-    # simple:
-    #   CodeRay::Duo[:ruby, :page].highlight 'bla 42'
-    # 
-    # streaming:
-    #   CodeRay::Duo[:ruby, :page].highlight 'bar 23', :stream => true
-    # 
-    # with options:
-    #   CodeRay::Duo[:ruby, :html, :hint => :debug].highlight '????::??'
-    # 
-    # alternative syntax without options:
-    #   CodeRay::Duo[:ruby => :statistic].encode 'class << self; end'
-    # 
-    # alternative syntax with options:
-    #   CodeRay::Duo[{ :ruby => :statistic }, :do => :something].encode 'abc'
-    # 
-    # The options are forwarded to scanner and encoder
-    # (see CodeRay.get_scanner_options).
-    def initialize lang = nil, format = nil, options = {}
-      if format == nil and lang.is_a? Hash and lang.size == 1
-        @lang = lang.keys.first
-        @format = lang[@lang]
-      else
-        @lang = lang
-        @format = format
-      end
-      @options = options
-    end
-
-    class << self
-      # To allow calls like Duo[:ruby, :html].highlight.
-      alias [] new
-    end
-
-    # The scanner of the duo. Only created once.
-    def scanner
-      @scanner ||= CodeRay.scanner @lang, CodeRay.get_scanner_options(@options)
-    end
-    
-    # The encoder of the duo. Only created once.
-    def encoder
-      @encoder ||= CodeRay.encoder @format, @options
-    end
-    
-    # Tokenize and highlight the code using +scanner+ and +encoder+.
-    #
-    # If the :stream option is set, the Duo will go into streaming mode,
-    # saving memory for the cost of time.
-    def encode code, options = { :stream => false }
-      stream = options.delete :stream
-      options = @options.merge options
-      if stream
-        encoder.encode_stream(code, @lang, options)
-      else
-        scanner.code = code
-        encoder.encode_tokens(scanner.tokenize, options)
-      end
-    end
-    alias highlight encode
-
-  end
-
-end
-
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/encoder.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,213 +0,0 @@
-module CodeRay
-
-  # This module holds the Encoder class and its subclasses.
-  # For example, the HTML encoder is named CodeRay::Encoders::HTML
-  # can be found in coderay/encoders/html.
-  #
-  # Encoders also provides methods and constants for the register
-  # mechanism and the [] method that returns the Encoder class
-  # belonging to the given format.
-  module Encoders
-    extend PluginHost
-    plugin_path File.dirname(__FILE__), 'encoders'
-
-    # = Encoder
-    #
-    # The Encoder base class. Together with Scanner and
-    # Tokens, it forms the highlighting triad.
-    #
-    # Encoder instances take a Tokens object and do something with it.
-    #
-    # The most common Encoder is surely the HTML encoder
-    # (CodeRay::Encoders::HTML). It highlights the code in a colorful
-    # html page.
-    # If you want the highlighted code in a div or a span instead,
-    # use its subclasses Div and Span.
-    class Encoder
-      extend Plugin
-      plugin_host Encoders
-
-      attr_reader :token_stream
-
-      class << self
-
-        # Returns if the Encoder can be used in streaming mode.
-        def streamable?
-          is_a? Streamable
-        end
-
-        # If FILE_EXTENSION isn't defined, this method returns the
-        # downcase class name instead.
-        def const_missing sym
-          if sym == :FILE_EXTENSION
-            plugin_id
-          else
-            super
-          end
-        end
-
-      end
-
-      # Subclasses are to store their default options in this constant.
-      DEFAULT_OPTIONS = { :stream => false }
-
-      # The options you gave the Encoder at creating.
-      attr_accessor :options
-
-      # Creates a new Encoder.
-      # +options+ is saved and used for all encode operations, as long
-      # as you don't overwrite it there by passing additional options.
-      #
-      # Encoder objects provide three encode methods:
-      # - encode simply takes a +code+ string and a +lang+
-      # - encode_tokens expects a +tokens+ object instead
-      # - encode_stream is like encode, but uses streaming mode.
-      #
-      # Each method has an optional +options+ parameter. These are
-      # added to the options you passed at creation.
-      def initialize options = {}
-        @options = self.class::DEFAULT_OPTIONS.merge options
-        raise "I am only the basic Encoder class. I can't encode "\
-          "anything. :( Use my subclasses." if self.class == Encoder
-      end
-
-      # Encode a Tokens object.
-      def encode_tokens tokens, options = {}
-        options = @options.merge options
-        setup options
-        compile tokens, options
-        finish options
-      end
-
-      # Encode the given +code+ after tokenizing it using the Scanner
-      # for +lang+.
-      def encode code, lang, options = {}
-        options = @options.merge options
-        scanner_options = CodeRay.get_scanner_options(options)
-        tokens = CodeRay.scan code, lang, scanner_options
-        encode_tokens tokens, options
-      end
-
-      # You can use highlight instead of encode, if that seems
-      # more clear to you.
-      alias highlight encode
-
-      # Encode the given +code+ using the Scanner for +lang+ in
-      # streaming mode.
-      def encode_stream code, lang, options = {}
-        raise NotStreamableError, self unless kind_of? Streamable
-        options = @options.merge options
-        setup options
-        scanner_options = CodeRay.get_scanner_options options
-        @token_stream =
-          CodeRay.scan_stream code, lang, scanner_options, &self
-        finish options
-      end
-
-      # Behave like a proc. The token method is converted to a proc.
-      def to_proc
-        method(:token).to_proc
-      end
-
-      # Return the default file extension for outputs of this encoder.
-      def file_extension
-        self.class::FILE_EXTENSION
-      end
-
-    protected
-
-      # Called with merged options before encoding starts.
-      # Sets @out to an empty string.
-      #
-      # See the HTML Encoder for an example of option caching.
-      def setup options
-        @out = ''
-      end
-
-      # Called with +content+ and +kind+ of the currently scanned token.
-      # For simple scanners, it's enougth to implement this method.
-      #
-      # By default, it calls text_token or block_token, depending on
-      # whether +content+ is a String.
-      def token content, kind
-        encoded_token =
-          if content.is_a? ::String
-            text_token content, kind
-          elsif content.is_a? ::Symbol
-            block_token content, kind
-          else
-            raise 'Unknown token content type: %p' % [content]
-          end
-        append_encoded_token_to_output encoded_token
-      end
-      
-      def append_encoded_token_to_output encoded_token
-        @out << encoded_token if encoded_token && defined?(@out) && @out
-      end
-      
-      # Called for each text token ([text, kind]), where text is a String.
-      def text_token text, kind
-      end
-      
-      # Called for each block (non-text) token ([action, kind]),
-      # where +action+ is a Symbol.
-      # 
-      # Calls open_token, close_token, begin_line, and end_line according to
-      # the value of +action+.
-      def block_token action, kind
-        case action
-        when :open
-          open_token kind
-        when :close
-          close_token kind
-        when :begin_line
-          begin_line kind
-        when :end_line
-          end_line kind
-        else
-          raise 'unknown block action: %p' % action
-        end
-      end
-      
-      # Called for each block token at the start of the block ([:open, kind]).
-      def open_token kind
-      end
-      
-      # Called for each block token end of the block ([:close, kind]).
-      def close_token kind
-      end
-      
-      # Called for each line token block at the start of the line ([:begin_line, kind]).
-      def begin_line kind
-      end
-      
-      # Called for each line token block at the end of the line ([:end_line, kind]).
-      def end_line kind
-      end
-
-      # Called with merged options after encoding starts.
-      # The return value is the result of encoding, typically @out.
-      def finish options
-        @out
-      end
-
-      # Do the encoding.
-      #
-      # The already created +tokens+ object must be used; it can be a
-      # TokenStream or a Tokens object.
-      if RUBY_VERSION >= '1.9'
-        def compile tokens, options
-          for text, kind in tokens
-            token text, kind
-          end
-        end
-      else
-        def compile tokens, options
-          tokens.each(&self)
-        end
-      end
-
-    end
-
-  end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/for_redcloth.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-module CodeRay
-  
-  # A little hack to enable CodeRay highlighting in RedCloth.
-  # 
-  # Usage:
-  #  require 'coderay'
-  #  require 'coderay/for_redcloth'
-  #  RedCloth.new('@[ruby]puts "Hello, World!"@').to_html
-  # 
-  # Make sure you have RedCloth 4.0.3 activated, for example by calling
-  #  require 'rubygems'
-  # before RedCloth is loaded and before calling CodeRay.for_redcloth.
-  module ForRedCloth
-    
-    def self.install
-      gem 'RedCloth', '>= 4.0.3' if defined? gem
-      require 'redcloth'
-      unless RedCloth::VERSION.to_s >= '4.0.3'
-        if defined? gem
-          raise 'CodeRay.for_redcloth needs RedCloth version 4.0.3 or later. ' +
-            "You have #{RedCloth::VERSION}. Please gem install RedCloth."
-        else
-          $".delete 'redcloth.rb'  # sorry, but it works
-          require 'rubygems'
-          return install  # retry
-        end
-      end
-      unless RedCloth::VERSION.to_s >= '4.2.2'
-        warn 'CodeRay.for_redcloth works best with RedCloth version 4.2.2 or later.'
-      end
-      RedCloth::TextileDoc.send :include, ForRedCloth::TextileDoc
-      RedCloth::Formatters::HTML.module_eval do
-        def unescape(html)
-          replacements = {
-            '&amp;' => '&',
-            '&quot;' => '"',
-            '&gt;' => '>',
-            '&lt;' => '<',
-          }
-          html.gsub(/&(?:amp|quot|[gl]t);/) { |entity| replacements[entity] }
-        end
-        undef code, bc_open, bc_close, escape_pre
-        def code(opts)  # :nodoc:
-          opts[:block] = true
-          if !opts[:lang] && RedCloth::VERSION.to_s >= '4.2.0'
-            # simulating pre-4.2 behavior
-            if opts[:text].sub!(/\A\[(\w+)\]/, '')
-              if CodeRay::Scanners[$1].plugin_id == 'plaintext'
-                opts[:text] = $& + opts[:text]
-              else
-                opts[:lang] = $1
-              end
-            end
-          end
-          if opts[:lang] && !filter_coderay
-            require 'coderay'
-            @in_bc ||= nil
-            format = @in_bc ? :div : :span
-            opts[:text] = unescape(opts[:text]) unless @in_bc
-            highlighted_code = CodeRay.encode opts[:text], opts[:lang], format, :stream => true
-            highlighted_code.sub!(/\A<(span|div)/) { |m| m + pba(@in_bc || opts) }
-            highlighted_code
-          else
-            "<code#{pba(opts)}>#{opts[:text]}</code>"
-          end
-        end
-        def bc_open(opts)  # :nodoc:
-          opts[:block] = true
-          @in_bc = opts
-          opts[:lang] ? '' : "<pre#{pba(opts)}>"
-        end
-        def bc_close(opts)  # :nodoc:
-          opts = @in_bc
-          @in_bc = nil
-          opts[:lang] ? '' : "</pre>\n"
-        end
-        def escape_pre(text)
-          if @in_bc ||= nil
-            text
-          else
-            html_esc(text, :html_escape_preformatted)
-          end
-        end
-      end
-    end
-
-    module TextileDoc  # :nodoc:
-      attr_accessor :filter_coderay
-    end
-    
-  end
-  
-end
-
-CodeRay::ForRedCloth.install
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/scanner.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,292 +0,0 @@
-module CodeRay
-
-  require 'coderay/helpers/plugin'
-
-  # = Scanners
-  #
-  # This module holds the Scanner class and its subclasses.
-  # For example, the Ruby scanner is named CodeRay::Scanners::Ruby
-  # can be found in coderay/scanners/ruby.
-  #
-  # Scanner also provides methods and constants for the register
-  # mechanism and the [] method that returns the Scanner class
-  # belonging to the given lang.
-  #
-  # See PluginHost.
-  module Scanners
-    extend PluginHost
-    plugin_path File.dirname(__FILE__), 'scanners'
-
-    require 'strscan'
-
-    # = Scanner
-    #
-    # The base class for all Scanners.
-    #
-    # It is a subclass of Ruby's great +StringScanner+, which
-    # makes it easy to access the scanning methods inside.
-    #
-    # It is also +Enumerable+, so you can use it like an Array of
-    # Tokens:
-    #
-    #   require 'coderay'
-    #   
-    #   c_scanner = CodeRay::Scanners[:c].new "if (*p == '{') nest++;"
-    #   
-    #   for text, kind in c_scanner
-    #     puts text if kind == :operator
-    #   end
-    #   
-    #   # prints: (*==)++;
-    #
-    # OK, this is a very simple example :)
-    # You can also use +map+, +any?+, +find+ and even +sort_by+,
-    # if you want.
-    class Scanner < StringScanner
-      
-      extend Plugin
-      plugin_host Scanners
-
-      # Raised if a Scanner fails while scanning
-      ScanError = Class.new(Exception)
-
-      require 'coderay/helpers/word_list'
-
-      # The default options for all scanner classes.
-      #
-      # Define @default_options for subclasses.
-      DEFAULT_OPTIONS = { :stream => false }
-      
-      KINDS_NOT_LOC = [:comment, :doctype]
-
-      class << self
-
-        # Returns if the Scanner can be used in streaming mode.
-        def streamable?
-          is_a? Streamable
-        end
-
-        def normify code
-          code = code.to_s
-          if code.respond_to? :force_encoding
-            debug, $DEBUG = $DEBUG, false
-            begin
-              code.force_encoding 'utf-8'
-              code[/\z/]  # raises an ArgumentError when code contains a non-UTF-8 char
-            rescue ArgumentError
-              code.force_encoding 'binary'
-            ensure
-              $DEBUG = debug
-            end
-          end
-          code.to_unix
-        end
-        
-        def file_extension extension = nil
-          if extension
-            @file_extension = extension.to_s
-          else
-            @file_extension ||= plugin_id.to_s
-          end
-        end
-
-      end
-
-=begin
-## Excluded for speed reasons; protected seems to make methods slow.
-
-  # Save the StringScanner methods from being called.
-  # This would not be useful for highlighting.
-  strscan_public_methods =
-    StringScanner.instance_methods -
-    StringScanner.ancestors[1].instance_methods
-  protected(*strscan_public_methods)
-=end
-
-      # Create a new Scanner.
-      #
-      # * +code+ is the input String and is handled by the superclass
-      #   StringScanner.
-      # * +options+ is a Hash with Symbols as keys.
-      #   It is merged with the default options of the class (you can
-      #   overwrite default options here.)
-      # * +block+ is the callback for streamed highlighting.
-      #
-      # If you set :stream to +true+ in the options, the Scanner uses a
-      # TokenStream with the +block+ as callback to handle the tokens.
-      #
-      # Else, a Tokens object is used.
-      def initialize code='', options = {}, &block
-        raise "I am only the basic Scanner class. I can't scan "\
-          "anything. :( Use my subclasses." if self.class == Scanner
-        
-        @options = self.class::DEFAULT_OPTIONS.merge options
-
-        super Scanner.normify(code)
-
-        @tokens = options[:tokens]
-        if @options[:stream]
-          warn "warning in CodeRay::Scanner.new: :stream is set, "\
-            "but no block was given" unless block_given?
-          raise NotStreamableError, self unless kind_of? Streamable
-          @tokens ||= TokenStream.new(&block)
-        else
-          warn "warning in CodeRay::Scanner.new: Block given, "\
-            "but :stream is #{@options[:stream]}" if block_given?
-          @tokens ||= Tokens.new
-        end
-        @tokens.scanner = self
-
-        setup
-      end
-
-      def reset
-        super
-        reset_instance
-      end
-
-      def string= code
-        code = Scanner.normify(code)
-        super code
-        reset_instance
-      end
-
-      # More mnemonic accessor name for the input string.
-      alias code string
-      alias code= string=
-
-      # Returns the Plugin ID for this scanner.
-      def lang
-        self.class.plugin_id
-      end
-
-      # Scans the code and returns all tokens in a Tokens object.
-      def tokenize new_string=nil, options = {}
-        options = @options.merge(options)
-        self.string = new_string if new_string
-        @cached_tokens =
-          if @options[:stream]  # :stream must have been set already
-            reset unless new_string
-            scan_tokens @tokens, options
-            @tokens
-          else
-            scan_tokens @tokens, options
-          end
-      end
-
-      def tokens
-        @cached_tokens ||= tokenize
-      end
-      
-      # Whether the scanner is in streaming mode.
-      def streaming?
-        !!@options[:stream]
-      end
-
-      # Traverses the tokens.
-      def each &block
-        raise ArgumentError,
-          'Cannot traverse TokenStream.' if @options[:stream]
-        tokens.each(&block)
-      end
-      include Enumerable
-
-      # The current line position of the scanner.
-      #
-      # Beware, this is implemented inefficiently. It should be used
-      # for debugging only.
-      def line
-        string[0..pos].count("\n") + 1
-      end
-      
-      def column pos = self.pos
-        return 0 if pos <= 0
-        string = string()
-        if string.respond_to?(:bytesize) && (defined?(@bin_string) || string.bytesize != string.size)
-          @bin_string ||= string.dup.force_encoding('binary')
-          string = @bin_string
-        end
-        pos - (string.rindex(?\n, pos) || 0)
-      end
-      
-      def marshal_dump
-        @options
-      end
-      
-      def marshal_load options
-        @options = options
-      end
-
-    protected
-
-      # Can be implemented by subclasses to do some initialization
-      # that has to be done once per instance.
-      #
-      # Use reset for initialization that has to be done once per
-      # scan.
-      def setup
-      end
-
-      # This is the central method, and commonly the only one a
-      # subclass implements.
-      #
-      # Subclasses must implement this method; it must return +tokens+
-      # and must only use Tokens#<< for storing scanned tokens!
-      def scan_tokens tokens, options
-        raise NotImplementedError,
-          "#{self.class}#scan_tokens not implemented."
-      end
-
-      def reset_instance
-        @tokens.clear unless @options[:keep_tokens]
-        @cached_tokens = nil
-        @bin_string = nil if defined? @bin_string
-      end
-
-      # Scanner error with additional status information
-      def raise_inspect msg, tokens, state = 'No state given!', ambit = 30
-        raise ScanError, <<-EOE % [
-
-
-***ERROR in %s: %s (after %d tokens)
-
-tokens:
-%s
-
-current line: %d  column: %d  pos: %d
-matched: %p  state: %p
-bol? = %p,  eos? = %p
-
-surrounding code:
-%p  ~~  %p
-
-
-***ERROR***
-
-        EOE
-          File.basename(caller[0]),
-          msg,
-          tokens.size,
-          tokens.last(10).map { |t| t.inspect }.join("\n"),
-          line, column, pos,
-          matched, state, bol?, eos?,
-          string[pos - ambit, ambit],
-          string[pos, ambit],
-        ]
-      end
-
-    end
-
-  end
-end
-
-class String
-  # I love this hack. It seems to silence all dos/unix/mac newline problems.
-  def to_unix
-    if index ?\r
-      gsub(/\r\n?/, "\n")
-    else
-      self
-    end
-  end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/style.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-module CodeRay
-
-  # This module holds the Style class and its subclasses.
-  #
-  # See Plugin.
-  module Styles
-    extend PluginHost
-    plugin_path File.dirname(__FILE__), 'styles'
-
-    class Style
-      extend Plugin
-      plugin_host Styles
-
-      DEFAULT_OPTIONS = { }
-
-    end
-
-  end
-
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/token_classes.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-module CodeRay
-  class Tokens
-    ClassOfKind = Hash.new do |h, k|
-      h[k] = k.to_s
-    end
-    ClassOfKind.update with = {
-      :annotation => 'at',
-      :attribute_name => 'an',
-      :attribute_name_fat => 'af',
-      :attribute_value => 'av',
-      :attribute_value_fat => 'aw',
-      :bin => 'bi',
-      :char => 'ch',
-      :class => 'cl',
-      :class_variable => 'cv',
-      :color => 'cr',
-      :comment => 'c',
-      :complex => 'cm',
-      :constant => 'co',
-      :content => 'k',
-      :decorator => 'de',
-      :definition => 'df',
-      :delimiter => 'dl',
-      :directive => 'di',
-      :doc => 'do',
-      :doctype => 'dt',
-      :doc_string => 'ds',
-      :entity => 'en',
-      :error => 'er',
-      :escape => 'e',
-      :exception => 'ex',
-      :float => 'fl',
-      :function => 'fu',
-      :global_variable => 'gv',
-      :hex => 'hx',
-      :imaginary => 'cm',
-      :important => 'im',
-      :include => 'ic',
-      :inline => 'il',
-      :inline_delimiter => 'idl',
-      :instance_variable => 'iv',
-      :integer => 'i',
-      :interpreted => 'in',
-      :keyword => 'kw',
-      :key => 'ke',
-      :label => 'la',
-      :local_variable => 'lv',
-      :modifier => 'mod',
-      :oct => 'oc',
-      :operator_fat => 'of',
-      :pre_constant => 'pc',
-      :pre_type => 'pt',
-      :predefined => 'pd',
-      :preprocessor => 'pp',
-      :pseudo_class => 'ps',
-      :regexp => 'rx',
-      :reserved => 'r',
-      :shell => 'sh',
-      :string => 's',
-      :symbol => 'sy',
-      :tag => 'ta',
-      :tag_fat => 'tf',
-      :tag_special => 'ts',
-      :type => 'ty',
-      :variable => 'v',
-      :value => 'vl',
-      :xml_text => 'xt',
-      
-      :insert => 'ins',
-      :delete => 'del',
-      :change => 'chg',
-      :head => 'head',
-
-      :ident => :NO_HIGHLIGHT, # 'id'
-      #:operator => 'op',
-      :operator => :NO_HIGHLIGHT,  # 'op'
-      :space => :NO_HIGHLIGHT,  # 'sp'
-      :plain => :NO_HIGHLIGHT,
-    }
-    ClassOfKind[:method] = ClassOfKind[:function]
-    ClassOfKind[:open] = ClassOfKind[:close] = ClassOfKind[:delimiter]
-    ClassOfKind[:nesting_delimiter] = ClassOfKind[:delimiter]
-    ClassOfKind[:escape] = ClassOfKind[:delimiter]
-    #ClassOfKind.default = ClassOfKind[:error] or raise 'no class found for :error!'
-  end
-end
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/.svn/text-base/tokens.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,388 +0,0 @@
-module CodeRay
-
-  # = Tokens
-  #
-  # The Tokens class represents a list of tokens returnd from
-  # a Scanner.
-  #
-  # A token is not a special object, just a two-element Array
-  # consisting of
-  # * the _token_ _kind_ (a Symbol representing the type of the token)
-  # * the _token_ _text_ (the original source of the token in a String)
-  #
-  # A token looks like this:
-  #
-  #   [:comment, '# It looks like this']
-  #   [:float, '3.1415926']
-  #   [:error, '$^']
-  #
-  # Some scanners also yield some kind of sub-tokens, represented by special
-  # token texts, namely :open and :close .
-  #
-  # The Ruby scanner, for example, splits "a string" into:
-  #
-  #  [
-  #   [:open, :string],
-  #   [:delimiter, '"'],
-  #   [:content, 'a string'],
-  #   [:delimiter, '"'],
-  #   [:close, :string]
-  #  ]
-  #
-  # Tokens is also the interface between Scanners and Encoders:
-  # The input is split and saved into a Tokens object. The Encoder
-  # then builds the output from this object.
-  #
-  # Thus, the syntax below becomes clear:
-  #
-  #   CodeRay.scan('price = 2.59', :ruby).html
-  #   # the Tokens object is here -------^
-  #
-  # See how small it is? ;)
-  #
-  # Tokens gives you the power to handle pre-scanned code very easily:
-  # You can convert it to a webpage, a YAML file, or dump it into a gzip'ed string
-  # that you put in your DB.
-  #
-  # Tokens' subclass TokenStream allows streaming to save memory.
-  class Tokens < Array
-    
-    # The Scanner instance that created the tokens.
-    attr_accessor :scanner
-    
-    # Whether the object is a TokenStream.
-    #
-    # Returns false.
-    def stream?
-      false
-    end
-
-    # Iterates over all tokens.
-    #
-    # If a filter is given, only tokens of that kind are yielded.
-    def each kind_filter = nil, &block
-      unless kind_filter
-        super(&block)
-      else
-        super() do |text, kind|
-          next unless kind == kind_filter
-          yield text, kind
-        end
-      end
-    end
-
-    # Iterates over all text tokens.
-    # Range tokens like [:open, :string] are left out.
-    #
-    # Example:
-    #   tokens.each_text_token { |text, kind| text.replace html_escape(text) }
-    def each_text_token
-      each do |text, kind|
-        next unless text.is_a? ::String
-        yield text, kind
-      end
-    end
-
-    # Encode the tokens using encoder.
-    #
-    # encoder can be
-    # * a symbol like :html oder :statistic
-    # * an Encoder class
-    # * an Encoder object
-    #
-    # options are passed to the encoder.
-    def encode encoder, options = {}
-      unless encoder.is_a? Encoders::Encoder
-        unless encoder.is_a? Class
-          encoder_class = Encoders[encoder]
-        end
-        encoder = encoder_class.new options
-      end
-      encoder.encode_tokens self, options
-    end
-
-
-    # Turn into a string using Encoders::Text.
-    #
-    # +options+ are passed to the encoder if given.
-    def to_s options = {}
-      encode :text, options
-    end
-
-    # Redirects unknown methods to encoder calls.
-    #
-    # For example, if you call +tokens.html+, the HTML encoder
-    # is used to highlight the tokens.
-    def method_missing meth, options = {}
-      Encoders[meth].new(options).encode_tokens self
-    end
-
-    # Returns the tokens compressed by joining consecutive
-    # tokens of the same kind.
-    #
-    # This can not be undone, but should yield the same output
-    # in most Encoders.  It basically makes the output smaller.
-    #
-    # Combined with dump, it saves space for the cost of time.
-    #
-    # If the scanner is written carefully, this is not required -
-    # for example, consecutive //-comment lines could already be
-    # joined in one comment token by the Scanner.
-    def optimize
-      last_kind = last_text = nil
-      new = self.class.new
-      for text, kind in self
-        if text.is_a? String
-          if kind == last_kind
-            last_text << text
-          else
-            new << [last_text, last_kind] if last_kind
-            last_text = text
-            last_kind = kind
-          end
-        else
-          new << [last_text, last_kind] if last_kind
-          last_kind = last_text = nil
-          new << [text, kind]
-        end
-      end
-      new << [last_text, last_kind] if last_kind
-      new
-    end
-
-    # Compact the object itself; see optimize.
-    def optimize!
-      replace optimize
-    end
-    
-    # Ensure that all :open tokens have a correspondent :close one.
-    #
-    # TODO: Test this!
-    def fix
-      tokens = self.class.new
-      # Check token nesting using a stack of kinds.
-      opened = []
-      for type, kind in self
-        case type
-        when :open
-          opened.push [:close, kind]
-        when :begin_line
-          opened.push [:end_line, kind]
-        when :close, :end_line
-          expected = opened.pop
-          if [type, kind] != expected
-            # Unexpected :close; decide what to do based on the kind:
-            # - token was never opened: delete the :close (just skip it)
-            next unless opened.rindex expected
-            # - token was opened earlier: also close tokens in between
-            tokens << token until (token = opened.pop) == expected
-          end
-        end
-        tokens << [type, kind]
-      end
-      # Close remaining opened tokens
-      tokens << token while token = opened.pop
-      tokens
-    end
-    
-    def fix!
-      replace fix
-    end
-    
-    # TODO: Scanner#split_into_lines
-    # 
-    # Makes sure that:
-    # - newlines are single tokens
-    #   (which means all other token are single-line)
-    # - there are no open tokens at the end the line
-    #
-    # This makes it simple for encoders that work line-oriented,
-    # like HTML with list-style numeration.
-    def split_into_lines
-      raise NotImplementedError
-    end
-
-    def split_into_lines!
-      replace split_into_lines
-    end
-
-    # Dumps the object into a String that can be saved
-    # in files or databases.
-    #
-    # The dump is created with Marshal.dump;
-    # In addition, it is gzipped using GZip.gzip.
-    #
-    # The returned String object includes Undumping
-    # so it has an #undump method. See Tokens.load.
-    #
-    # You can configure the level of compression,
-    # but the default value 7 should be what you want
-    # in most cases as it is a good compromise between
-    # speed and compression rate.
-    #
-    # See GZip module.
-    def dump gzip_level = 7
-      require 'coderay/helpers/gzip_simple'
-      dump = Marshal.dump self
-      dump = dump.gzip gzip_level
-      dump.extend Undumping
-    end
-
-    # The total size of the tokens.
-    # Should be equal to the input size before
-    # scanning.
-    def text_size
-      size = 0
-      each_text_token do |t, k|
-        size + t.size
-      end
-      size
-    end
-
-    # The total size of the tokens.
-    # Should be equal to the input size before
-    # scanning.
-    def text
-      map { |t, k| t if t.is_a? ::String }.join
-    end
-
-    # Include this module to give an object an #undump
-    # method.
-    #
-    # The string returned by Tokens.dump includes Undumping.
-    module Undumping
-      # Calls Tokens.load with itself.
-      def undump
-        Tokens.load self
-      end
-    end
-
-    # Undump the object using Marshal.load, then
-    # unzip it using GZip.gunzip.
-    #
-    # The result is commonly a Tokens object, but
-    # this is not guaranteed.
-    def Tokens.load dump
-      require 'coderay/helpers/gzip_simple'
-      dump = dump.gunzip
-      @dump = Marshal.load dump
-    end
-
-  end
-
-
-  # = TokenStream
-  #
-  # The TokenStream class is a fake Array without elements.
-  #
-  # It redirects the method << to a block given at creation.
-  #
-  # This allows scanners and Encoders to use streaming (no
-  # tokens are saved, the input is highlighted the same time it
-  # is scanned) with the same code.
-  #
-  # See CodeRay.encode_stream and CodeRay.scan_stream
-  class TokenStream < Tokens
-
-    # Whether the object is a TokenStream.
-    #
-    # Returns true.
-    def stream?
-      true
-    end
-
-    # The Array is empty, but size counts the tokens given by <<.
-    attr_reader :size
-
-    # Creates a new TokenStream that calls +block+ whenever
-    # its << method is called.
-    #
-    # Example:
-    #
-    #   require 'coderay'
-    #   
-    #   token_stream = CodeRay::TokenStream.new do |kind, text|
-    #     puts 'kind: %s, text size: %d.' % [kind, text.size]
-    #   end
-    #   
-    #   token_stream << [:regexp, '/\d+/']
-    #   #-> kind: rexpexp, text size: 5.
-    #
-    def initialize &block
-      raise ArgumentError, 'Block expected for streaming.' unless block
-      @callback = block
-      @size = 0
-    end
-
-    # Calls +block+ with +token+ and increments size.
-    #
-    # Returns self.
-    def << token
-      @callback.call(*token)
-      @size += 1
-      self
-    end
-
-    # This method is not implemented due to speed reasons. Use Tokens.
-    def text_size
-      raise NotImplementedError,
-        'This method is not implemented due to speed reasons.'
-    end
-
-    # A TokenStream cannot be dumped. Use Tokens.
-    def dump
-      raise NotImplementedError, 'A TokenStream cannot be dumped.'
-    end
-
-    # A TokenStream cannot be optimized. Use Tokens.
-    def optimize
-      raise NotImplementedError, 'A TokenStream cannot be optimized.'
-    end
-
-  end
-
-end
-
-if $0 == __FILE__
-  $VERBOSE = true
-  $: << File.join(File.dirname(__FILE__), '..')
-  eval DATA.read, nil, $0, __LINE__ + 4
-end
-
-__END__
-require 'test/unit'
-
-class TokensTest < Test::Unit::TestCase
-  
-  def test_creation
-    assert CodeRay::Tokens < Array
-    tokens = nil
-    assert_nothing_raised do
-      tokens = CodeRay::Tokens.new
-    end
-    assert_kind_of Array, tokens
-  end
-  
-  def test_adding_tokens
-    tokens = CodeRay::Tokens.new
-    assert_nothing_raised do
-      tokens << ['string', :type]
-      tokens << ['()', :operator]
-    end
-    assert_equal tokens.size, 2
-  end
-  
-  def test_dump_undump
-    tokens = CodeRay::Tokens.new
-    assert_nothing_raised do
-      tokens << ['string', :type]
-      tokens << ['()', :operator]
-    end
-    tokens2 = nil
-    assert_nothing_raised do
-      tokens2 = tokens.dump.undump
-    end
-    assert_equal tokens, tokens2
-  end
-  
-end
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/duo.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-module CodeRay
-  
-  # = Duo
-  #
-  # A Duo is a convenient way to use CodeRay. You just create a Duo,
-  # giving it a lang (language of the input code) and a format (desired
-  # output format), and call Duo#highlight with the code.
-  # 
-  # Duo makes it easy to re-use both scanner and encoder for a repetitive
-  # task. It also provides a very easy interface syntax:
-  # 
-  #   require 'coderay'
-  #   CodeRay::Duo[:python, :div].highlight 'import this'
-  # 
-  # Until you want to do uncommon things with CodeRay, I recommend to use
-  # this method, since it takes care of everything.
-  class Duo
-
-    attr_accessor :lang, :format, :options
-    
-    # Create a new Duo, holding a lang and a format to highlight code.
-    # 
-    # simple:
-    #   CodeRay::Duo[:ruby, :page].highlight 'bla 42'
-    # 
-    # streaming:
-    #   CodeRay::Duo[:ruby, :page].highlight 'bar 23', :stream => true
-    # 
-    # with options:
-    #   CodeRay::Duo[:ruby, :html, :hint => :debug].highlight '????::??'
-    # 
-    # alternative syntax without options:
-    #   CodeRay::Duo[:ruby => :statistic].encode 'class << self; end'
-    # 
-    # alternative syntax with options:
-    #   CodeRay::Duo[{ :ruby => :statistic }, :do => :something].encode 'abc'
-    # 
-    # The options are forwarded to scanner and encoder
-    # (see CodeRay.get_scanner_options).
-    def initialize lang = nil, format = nil, options = {}
-      if format == nil and lang.is_a? Hash and lang.size == 1
-        @lang = lang.keys.first
-        @format = lang[@lang]
-      else
-        @lang = lang
-        @format = format
-      end
-      @options = options
-    end
-
-    class << self
-      # To allow calls like Duo[:ruby, :html].highlight.
-      alias [] new
-    end
-
-    # The scanner of the duo. Only created once.
-    def scanner
-      @scanner ||= CodeRay.scanner @lang, CodeRay.get_scanner_options(@options)
-    end
-    
-    # The encoder of the duo. Only created once.
-    def encoder
-      @encoder ||= CodeRay.encoder @format, @options
-    end
-    
-    # Tokenize and highlight the code using +scanner+ and +encoder+.
-    #
-    # If the :stream option is set, the Duo will go into streaming mode,
-    # saving memory for the cost of time.
-    def encode code, options = { :stream => false }
-      stream = options.delete :stream
-      options = @options.merge options
-      if stream
-        encoder.encode_stream(code, @lang, options)
-      else
-        scanner.code = code
-        encoder.encode_tokens(scanner.tokenize, options)
-      end
-    end
-    alias highlight encode
-
-  end
-
-end
-
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoder.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,213 +0,0 @@
-module CodeRay
-
-  # This module holds the Encoder class and its subclasses.
-  # For example, the HTML encoder is named CodeRay::Encoders::HTML
-  # can be found in coderay/encoders/html.
-  #
-  # Encoders also provides methods and constants for the register
-  # mechanism and the [] method that returns the Encoder class
-  # belonging to the given format.
-  module Encoders
-    extend PluginHost
-    plugin_path File.dirname(__FILE__), 'encoders'
-
-    # = Encoder
-    #
-    # The Encoder base class. Together with Scanner and
-    # Tokens, it forms the highlighting triad.
-    #
-    # Encoder instances take a Tokens object and do something with it.
-    #
-    # The most common Encoder is surely the HTML encoder
-    # (CodeRay::Encoders::HTML). It highlights the code in a colorful
-    # html page.
-    # If you want the highlighted code in a div or a span instead,
-    # use its subclasses Div and Span.
-    class Encoder
-      extend Plugin
-      plugin_host Encoders
-
-      attr_reader :token_stream
-
-      class << self
-
-        # Returns if the Encoder can be used in streaming mode.
-        def streamable?
-          is_a? Streamable
-        end
-
-        # If FILE_EXTENSION isn't defined, this method returns the
-        # downcase class name instead.
-        def const_missing sym
-          if sym == :FILE_EXTENSION
-            plugin_id
-          else
-            super
-          end
-        end
-
-      end
-
-      # Subclasses are to store their default options in this constant.
-      DEFAULT_OPTIONS = { :stream => false }
-
-      # The options you gave the Encoder at creating.
-      attr_accessor :options
-
-      # Creates a new Encoder.
-      # +options+ is saved and used for all encode operations, as long
-      # as you don't overwrite it there by passing additional options.
-      #
-      # Encoder objects provide three encode methods:
-      # - encode simply takes a +code+ string and a +lang+
-      # - encode_tokens expects a +tokens+ object instead
-      # - encode_stream is like encode, but uses streaming mode.
-      #
-      # Each method has an optional +options+ parameter. These are
-      # added to the options you passed at creation.
-      def initialize options = {}
-        @options = self.class::DEFAULT_OPTIONS.merge options
-        raise "I am only the basic Encoder class. I can't encode "\
-          "anything. :( Use my subclasses." if self.class == Encoder
-      end
-
-      # Encode a Tokens object.
-      def encode_tokens tokens, options = {}
-        options = @options.merge options
-        setup options
-        compile tokens, options
-        finish options
-      end
-
-      # Encode the given +code+ after tokenizing it using the Scanner
-      # for +lang+.
-      def encode code, lang, options = {}
-        options = @options.merge options
-        scanner_options = CodeRay.get_scanner_options(options)
-        tokens = CodeRay.scan code, lang, scanner_options
-        encode_tokens tokens, options
-      end
-
-      # You can use highlight instead of encode, if that seems
-      # more clear to you.
-      alias highlight encode
-
-      # Encode the given +code+ using the Scanner for +lang+ in
-      # streaming mode.
-      def encode_stream code, lang, options = {}
-        raise NotStreamableError, self unless kind_of? Streamable
-        options = @options.merge options
-        setup options
-        scanner_options = CodeRay.get_scanner_options options
-        @token_stream =
-          CodeRay.scan_stream code, lang, scanner_options, &self
-        finish options
-      end
-
-      # Behave like a proc. The token method is converted to a proc.
-      def to_proc
-        method(:token).to_proc
-      end
-
-      # Return the default file extension for outputs of this encoder.
-      def file_extension
-        self.class::FILE_EXTENSION
-      end
-
-    protected
-
-      # Called with merged options before encoding starts.
-      # Sets @out to an empty string.
-      #
-      # See the HTML Encoder for an example of option caching.
-      def setup options
-        @out = ''
-      end
-
-      # Called with +content+ and +kind+ of the currently scanned token.
-      # For simple scanners, it's enougth to implement this method.
-      #
-      # By default, it calls text_token or block_token, depending on
-      # whether +content+ is a String.
-      def token content, kind
-        encoded_token =
-          if content.is_a? ::String
-            text_token content, kind
-          elsif content.is_a? ::Symbol
-            block_token content, kind
-          else
-            raise 'Unknown token content type: %p' % [content]
-          end
-        append_encoded_token_to_output encoded_token
-      end
-      
-      def append_encoded_token_to_output encoded_token
-        @out << encoded_token if encoded_token && defined?(@out) && @out
-      end
-      
-      # Called for each text token ([text, kind]), where text is a String.
-      def text_token text, kind
-      end
-      
-      # Called for each block (non-text) token ([action, kind]),
-      # where +action+ is a Symbol.
-      # 
-      # Calls open_token, close_token, begin_line, and end_line according to
-      # the value of +action+.
-      def block_token action, kind
-        case action
-        when :open
-          open_token kind
-        when :close
-          close_token kind
-        when :begin_line
-          begin_line kind
-        when :end_line
-          end_line kind
-        else
-          raise 'unknown block action: %p' % action
-        end
-      end
-      
-      # Called for each block token at the start of the block ([:open, kind]).
-      def open_token kind
-      end
-      
-      # Called for each block token end of the block ([:close, kind]).
-      def close_token kind
-      end
-      
-      # Called for each line token block at the start of the line ([:begin_line, kind]).
-      def begin_line kind
-      end
-      
-      # Called for each line token block at the end of the line ([:end_line, kind]).
-      def end_line kind
-      end
-
-      # Called with merged options after encoding starts.
-      # The return value is the result of encoding, typically @out.
-      def finish options
-        @out
-      end
-
-      # Do the encoding.
-      #
-      # The already created +tokens+ object must be used; it can be a
-      # TokenStream or a Tokens object.
-      if RUBY_VERSION >= '1.9'
-        def compile tokens, options
-          for text, kind in tokens
-            token text, kind
-          end
-        end
-      else
-        def compile tokens, options
-          tokens.each(&self)
-        end
-      end
-
-    end
-
-  end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,643 +0,0 @@
-10
-
-dir
-4732
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/encoders
-http://redmine.rubyforge.org/svn
-
-
-
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-e93f8b46-1217-0410-a6f0-8f06a7374b81
-
-div.rb
-file
-
-
-
-
-2010-09-23T14:37:45.643761Z
-f0c5be15265facadc46889fbbc2613f1
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-232
-
-text.rb
-file
-
-
-
-
-2010-09-23T14:37:45.651759Z
-2914ed90921556a01a79f3fb6d549b09
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-400
-
-filter.rb
-file
-
-
-
-
-2010-09-23T14:37:45.643761Z
-08591bbd1f20dc7dce67030a294d1636
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1595
-
-debug.rb
-file
-
-
-
-
-2010-09-23T14:37:45.643761Z
-9e878089035fe9ad88c808bd1a15cf7a
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-835
-
-count.rb
-file
-
-
-
-
-2010-09-23T14:37:45.643761Z
-c262d84ddbdf37e99ff6bcf6dd6a66c2
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-230
-
-lines_of_code.rb
-file
-
-
-
-
-2010-09-23T14:37:45.647759Z
-966e154458fb6c665b6d62aa90d07e18
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2395
-
-xml.rb
-file
-
-
-
-
-2010-09-23T14:37:45.651759Z
-ada7effba81bbc28f41efeaef69dcc51
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1367
-
-span.rb
-file
-
-
-
-
-2010-09-23T14:37:45.647759Z
-e4228be45ad0f818a0e125caee838d56
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-236
-
-html
-dir
-
-yaml.rb
-file
-
-
-
-
-2010-09-23T14:37:45.651759Z
-04c428b240ef44de896ad15827cf51df
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-264
-
-html.rb
-file
-
-
-
-
-2010-09-23T14:37:45.643761Z
-85370d734631d5ad2c034541e66e2910
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-7856
-
-comment_filter.rb
-file
-
-
-
-
-2010-09-23T14:37:45.643761Z
-32f2d1a9db6f58636d3946a43b5a60f0
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-808
-
-statistic.rb
-file
-
-
-
-
-2010-09-23T14:37:45.647759Z
-49017735ef679f73dd65795e30d8e5c7
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1800
-
-term.rb
-file
-
-
-
-
-2010-09-23T14:37:45.647759Z
-422a51cd181de3cc0a55aba7f9915c18
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4324
-
-json.rb
-file
-
-
-
-
-2010-09-23T14:37:45.647759Z
-86a2dcae2ef0a971f70386c3b794469f
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1570
-
-null.rb
-file
-
-
-
-
-2010-09-23T14:37:45.647759Z
-9c9dcf3ba3f2effa5ebd4cd37417db36
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-320
-
-token_class_filter.rb
-file
-
-
-
-
-2010-09-23T14:37:45.651759Z
-e59791dbcdce328f09240e7e5c8b3d0e
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2546
-
-page.rb
-file
-
-
-
-
-2010-09-23T14:37:45.647759Z
-26da5aef43dc8731fbd63dcffea259bf
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-262
-
-_map.rb
-file
-
-
-
-
-2010-09-23T14:37:45.643761Z
-964d7ee16d213ab2e41418257f1eb8aa
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-167
-
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/_map.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/comment_filter.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/count.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/debug.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/div.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/filter.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/html.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/json.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/lines_of_code.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/null.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/page.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/span.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/statistic.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/term.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/text.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/token_class_filter.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/xml.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/prop-base/yaml.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/_map.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-module CodeRay
-module Encoders
-
-  map \
-    :loc => :lines_of_code,
-    :plain => :text,
-    :stats => :statistic,
-    :terminal => :term,
-    :tex => :latex
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/comment_filter.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-($:.unshift '../..'; require 'coderay') unless defined? CodeRay
-module CodeRay
-module Encoders
-  
-  load :token_class_filter
-  
-  class CommentFilter < TokenClassFilter
-    
-    register_for :comment_filter
-    
-    DEFAULT_OPTIONS = superclass::DEFAULT_OPTIONS.merge \
-      :exclude => [:comment]
-    
-  end
-  
-end
-end
-
-if $0 == __FILE__
-  $VERBOSE = true
-  $: << File.join(File.dirname(__FILE__), '..')
-  eval DATA.read, nil, $0, __LINE__ + 4
-end
-
-__END__
-require 'test/unit'
-
-class CommentFilterTest < Test::Unit::TestCase
-  
-  def test_filtering_comments
-    tokens = CodeRay.scan <<-RUBY, :ruby
-#!/usr/bin/env ruby
-# a minimal Ruby program
-puts "Hello world!"
-    RUBY
-    assert_equal <<-RUBY_FILTERED, tokens.comment_filter.text
-#!/usr/bin/env ruby
-
-puts "Hello world!"
-    RUBY_FILTERED
-  end
-  
-end
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/count.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-module CodeRay
-module Encoders
-
-  class Count < Encoder
-
-    include Streamable
-    register_for :count
-
-    protected
-
-    def setup options
-      @out = 0
-    end
-
-    def token text, kind
-      @out += 1
-    end
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/debug.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-module CodeRay
-module Encoders
-
-  # = Debug Encoder
-  #
-  # Fast encoder producing simple debug output.
-  #
-  # It is readable and diff-able and is used for testing.
-  #
-  # You cannot fully restore the tokens information from the
-  # output, because consecutive :space tokens are merged.
-  # Use Tokens#dump for caching purposes.
-  class Debug < Encoder
-
-    include Streamable
-    register_for :debug
-
-    FILE_EXTENSION = 'raydebug'
-
-  protected
-    def text_token text, kind
-      if kind == :space
-        text
-      else
-        text = text.gsub(/[)\\]/, '\\\\\0')  # escape ) and \
-        "#{kind}(#{text})"
-      end
-    end
-
-    def open_token kind
-      "#{kind}<"
-    end
-
-    def close_token kind
-      ">"
-    end
-
-    def begin_line kind
-      "#{kind}["
-    end
-
-    def end_line kind
-      "]"
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/div.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-module CodeRay
-module Encoders
-
-  load :html
-
-  class Div < HTML
-
-    FILE_EXTENSION = 'div.html'
-
-    register_for :div
-
-    DEFAULT_OPTIONS = HTML::DEFAULT_OPTIONS.merge \
-      :css => :style,
-      :wrap => :div
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/filter.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-($:.unshift '../..'; require 'coderay') unless defined? CodeRay
-module CodeRay
-module Encoders
-  
-  class Filter < Encoder
-    
-    register_for :filter
-    
-  protected
-    def setup options
-      @out = Tokens.new
-    end
-    
-    def text_token text, kind
-      [text, kind] if include_text_token? text, kind
-    end
-    
-    def include_text_token? text, kind
-      true
-    end
-    
-    def block_token action, kind
-      [action, kind] if include_block_token? action, kind
-    end
-    
-    def include_block_token? action, kind
-      true
-    end
-    
-  end
-  
-end
-end
-
-if $0 == __FILE__
-  $VERBOSE = true
-  $: << File.join(File.dirname(__FILE__), '..')
-  eval DATA.read, nil, $0, __LINE__ + 4
-end
-
-__END__
-require 'test/unit'
-
-class FilterTest < Test::Unit::TestCase
-  
-  def test_creation
-    assert CodeRay::Encoders::Filter < CodeRay::Encoders::Encoder
-    filter = nil
-    assert_nothing_raised do
-      filter = CodeRay.encoder :filter
-    end
-    assert_kind_of CodeRay::Encoders::Encoder, filter
-  end
-  
-  def test_filtering_text_tokens
-    tokens = CodeRay::Tokens.new
-    10.times do |i|
-      tokens << [i.to_s, :index]
-    end
-    assert_equal tokens, CodeRay::Encoders::Filter.new.encode_tokens(tokens)
-    assert_equal tokens, tokens.filter
-  end
-  
-  def test_filtering_block_tokens
-    tokens = CodeRay::Tokens.new
-    10.times do |i|
-      tokens << [:open, :index]
-      tokens << [i.to_s, :content]
-      tokens << [:close, :index]
-    end
-    assert_equal tokens, CodeRay::Encoders::Filter.new.encode_tokens(tokens)
-    assert_equal tokens, tokens.filter
-  end
-  
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/html.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,305 +0,0 @@
-require 'set'
-
-module CodeRay
-module Encoders
-
-  # = HTML Encoder
-  #
-  # This is CodeRay's most important highlighter:
-  # It provides save, fast XHTML generation and CSS support.
-  #
-  # == Usage
-  #
-  #  require 'coderay'
-  #  puts CodeRay.scan('Some /code/', :ruby).html  #-> a HTML page
-  #  puts CodeRay.scan('Some /code/', :ruby).html(:wrap => :span)
-  #  #-> <span class="CodeRay"><span class="co">Some</span> /code/</span>
-  #  puts CodeRay.scan('Some /code/', :ruby).span  #-> the same
-  #  
-  #  puts CodeRay.scan('Some code', :ruby).html(
-  #    :wrap => nil,
-  #    :line_numbers => :inline,
-  #    :css => :style
-  #  )
-  #  #-> <span class="no">1</span>  <span style="color:#036; font-weight:bold;">Some</span> code
-  #
-  # == Options
-  #
-  # === :tab_width
-  # Convert \t characters to +n+ spaces (a number.)
-  # Default: 8
-  #
-  # === :css
-  # How to include the styles; can be :class or :style.
-  #
-  # Default: :class
-  #
-  # === :wrap
-  # Wrap in :page, :div, :span or nil.
-  #
-  # You can also use Encoders::Div and Encoders::Span.
-  #
-  # Default: nil
-  #
-  # === :title
-  # 
-  # The title of the HTML page (works only when :wrap is set to :page.)
-  #
-  # Default: 'CodeRay output'
-  #
-  # === :line_numbers
-  # Include line numbers in :table, :inline, :list or nil (no line numbers)
-  #
-  # Default: nil
-  #
-  # === :line_number_start
-  # Where to start with line number counting.
-  #
-  # Default: 1
-  #
-  # === :bold_every
-  # Make every +n+-th number appear bold.
-  #
-  # Default: 10
-  #
-  # === :highlight_lines
-  # 
-  # Highlights certain line numbers.
-  # Can be any Enumerable, typically just an Array or Range, of numbers.
-  # 
-  # Bolding is deactivated when :highlight_lines is set. It only makes sense
-  # in combination with :line_numbers.
-  #
-  # Default: nil
-  #
-  # === :hint
-  # Include some information into the output using the title attribute.
-  # Can be :info (show token type on mouse-over), :info_long (with full path)
-  # or :debug (via inspect).
-  #
-  # Default: false
-  class HTML < Encoder
-
-    include Streamable
-    register_for :html
-
-    FILE_EXTENSION = 'html'
-
-    DEFAULT_OPTIONS = {
-      :tab_width => 8,
-
-      :css => :class,
-
-      :style => :cycnus,
-      :wrap => nil,
-      :title => 'CodeRay output',
-
-      :line_numbers => nil,
-      :line_number_start => 1,
-      :bold_every => 10,
-      :highlight_lines => nil,
-
-      :hint => false,
-    }
-
-    helper :output, :css
-
-    attr_reader :css
-
-  protected
-
-    HTML_ESCAPE = {  #:nodoc:
-      '&' => '&amp;',
-      '"' => '&quot;',
-      '>' => '&gt;',
-      '<' => '&lt;',
-    }
-
-    # This was to prevent illegal HTML.
-    # Strange chars should still be avoided in codes.
-    evil_chars = Array(0x00...0x20) - [?\n, ?\t, ?\s]
-    evil_chars.each { |i| HTML_ESCAPE[i.chr] = ' ' }
-    #ansi_chars = Array(0x7f..0xff)
-    #ansi_chars.each { |i| HTML_ESCAPE[i.chr] = '&#%d;' % i }
-    # \x9 (\t) and \xA (\n) not included
-    #HTML_ESCAPE_PATTERN = /[\t&"><\0-\x8\xB-\x1f\x7f-\xff]/
-    HTML_ESCAPE_PATTERN = /[\t"&><\0-\x8\xB-\x1f]/
-
-    TOKEN_KIND_TO_INFO = Hash.new { |h, kind|
-      h[kind] =
-        case kind
-        when :pre_constant
-          'Predefined constant'
-        else
-          kind.to_s.gsub(/_/, ' ').gsub(/\b\w/) { $&.capitalize }
-        end
-    }
-
-    TRANSPARENT_TOKEN_KINDS = [
-      :delimiter, :modifier, :content, :escape, :inline_delimiter,
-    ].to_set
-
-    # Generate a hint about the given +classes+ in a +hint+ style.
-    #
-    # +hint+ may be :info, :info_long or :debug.
-    def self.token_path_to_hint hint, classes
-      title =
-        case hint
-        when :info
-          TOKEN_KIND_TO_INFO[classes.first]
-        when :info_long
-          classes.reverse.map { |kind| TOKEN_KIND_TO_INFO[kind] }.join('/')
-        when :debug
-          classes.inspect
-        end
-      title ? " title=\"#{title}\"" : ''
-    end
-
-    def setup options
-      super
-
-      @HTML_ESCAPE = HTML_ESCAPE.dup
-      @HTML_ESCAPE["\t"] = ' ' * options[:tab_width]
-
-      @opened = [nil]
-      @css = CSS.new options[:style]
-
-      hint = options[:hint]
-      if hint and not [:debug, :info, :info_long].include? hint
-        raise ArgumentError, "Unknown value %p for :hint; \
-          expected :info, :debug, false, or nil." % hint
-      end
-
-      case options[:css]
-
-      when :class
-        @css_style = Hash.new do |h, k|
-          c = CodeRay::Tokens::ClassOfKind[k.first]
-          if c == :NO_HIGHLIGHT and not hint
-            h[k.dup] = false
-          else
-            title = if hint
-              HTML.token_path_to_hint(hint, k[1..-1] << k.first)
-            else
-              ''
-            end
-            if c == :NO_HIGHLIGHT
-              h[k.dup] = '<span%s>' % [title]
-            else
-              h[k.dup] = '<span%s class="%s">' % [title, c]
-            end
-          end
-        end
-
-      when :style
-        @css_style = Hash.new do |h, k|
-          if k.is_a? ::Array
-            styles = k.dup
-          else
-            styles = [k]
-          end
-          type = styles.first
-          classes = styles.map { |c| Tokens::ClassOfKind[c] }
-          if classes.first == :NO_HIGHLIGHT and not hint
-            h[k] = false
-          else
-            styles.shift if TRANSPARENT_TOKEN_KINDS.include? styles.first
-            title = HTML.token_path_to_hint hint, styles
-            style = @css[*classes]
-            h[k] =
-              if style
-                '<span%s style="%s">' % [title, style]
-              else
-                false
-              end
-          end
-        end
-
-      else
-        raise ArgumentError, "Unknown value %p for :css." % options[:css]
-
-      end
-    end
-
-    def finish options
-      not_needed = @opened.shift
-      @out << '</span>' * @opened.size
-      unless @opened.empty?
-        warn '%d tokens still open: %p' % [@opened.size, @opened]
-      end
-
-      @out.extend Output
-      @out.css = @css
-      @out.numerize! options[:line_numbers], options
-      @out.wrap! options[:wrap]
-      @out.apply_title! options[:title]
-
-      super
-    end
-
-    def token text, type = :plain
-      case text
-      
-      when nil
-        # raise 'Token with nil as text was given: %p' % [[text, type]] 
-      
-      when String
-        if text =~ /#{HTML_ESCAPE_PATTERN}/o
-          text = text.gsub(/#{HTML_ESCAPE_PATTERN}/o) { |m| @HTML_ESCAPE[m] }
-        end
-        @opened[0] = type
-        if text != "\n" && style = @css_style[@opened]
-          @out << style << text << '</span>'
-        else
-          @out << text
-        end
-        
-      
-      # token groups, eg. strings
-      when :open
-        @opened[0] = type
-        @out << (@css_style[@opened] || '<span>')
-        @opened << type
-      when :close
-        if @opened.empty?
-          # nothing to close
-        else
-          if $CODERAY_DEBUG and (@opened.size == 1 or @opened.last != type)
-            raise 'Malformed token stream: Trying to close a token (%p) \
-              that is not open. Open are: %p.' % [type, @opened[1..-1]]
-          end
-          @out << '</span>'
-          @opened.pop
-        end
-      
-      # whole lines to be highlighted, eg. a deleted line in a diff
-      when :begin_line
-        @opened[0] = type
-        if style = @css_style[@opened]
-          @out << style.sub('<span', '<div')
-        else
-          @out << '<div>'
-        end
-        @opened << type
-      when :end_line
-        if @opened.empty?
-          # nothing to close
-        else
-          if $CODERAY_DEBUG and (@opened.size == 1 or @opened.last != type)
-            raise 'Malformed token stream: Trying to close a line (%p) \
-              that is not open. Open are: %p.' % [type, @opened[1..-1]]
-          end
-          @out << '</div>'
-          @opened.pop
-        end
-      
-      else
-        raise 'unknown token kind: %p' % [text]
-        
-      end
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/json.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-($:.unshift '../..'; require 'coderay') unless defined? CodeRay
-module CodeRay
-module Encoders
-  
-  # = JSON Encoder
-  class JSON < Encoder
-    
-    register_for :json
-    FILE_EXTENSION = 'json'
-    
-  protected
-    def setup options
-      begin
-        require 'json'
-      rescue LoadError
-        require 'rubygems'
-        require 'json'
-      end
-      @out = []
-    end
-    
-    def text_token text, kind
-      { :type => 'text', :text => text, :kind => kind }
-    end
-    
-    def block_token action, kind
-      { :type => 'block', :action => action, :kind => kind }
-    end
-    
-    def finish options
-      @out.to_json
-    end
-    
-  end
-  
-end
-end
-
-if $0 == __FILE__
-  $VERBOSE = true
-  $: << File.join(File.dirname(__FILE__), '..')
-  eval DATA.read, nil, $0, __LINE__ + 4
-end
-
-__END__
-require 'test/unit'
-$:.delete '.'
-require 'rubygems' if RUBY_VERSION < '1.9'
-
-class JSONEncoderTest < Test::Unit::TestCase
-  
-  def test_json_output
-    tokens = CodeRay.scan <<-RUBY, :ruby
-puts "Hello world!"
-    RUBY
-    require 'json'
-    assert_equal [
-      {"type"=>"text", "text"=>"puts", "kind"=>"ident"},
-      {"type"=>"text", "text"=>" ", "kind"=>"space"},
-      {"type"=>"block", "action"=>"open", "kind"=>"string"},
-      {"type"=>"text", "text"=>"\"", "kind"=>"delimiter"},
-      {"type"=>"text", "text"=>"Hello world!", "kind"=>"content"},
-      {"type"=>"text", "text"=>"\"", "kind"=>"delimiter"},
-      {"type"=>"block", "action"=>"close", "kind"=>"string"},
-      {"type"=>"text", "text"=>"\n", "kind"=>"space"}
-    ], JSON.load(tokens.json)
-  end
-  
-end
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/lines_of_code.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-($:.unshift '../..'; require 'coderay') unless defined? CodeRay
-module CodeRay
-module Encoders
-  
-  # Counts the LoC (Lines of Code). Returns an Integer >= 0.
-  # 
-  # Alias: :loc
-  # 
-  # Everything that is not comment, markup, doctype/shebang, or an empty line,
-  # is considered to be code.
-  # 
-  # For example,
-  # * HTML files not containing JavaScript have 0 LoC
-  # * in a Java class without comments, LoC is the number of non-empty lines
-  # 
-  # A Scanner class should define the token kinds that are not code in the
-  # KINDS_NOT_LOC constant, which defaults to [:comment, :doctype].
-  class LinesOfCode < Encoder
-    
-    register_for :lines_of_code
-    
-    NON_EMPTY_LINE = /^\s*\S.*$/
-    
-    def compile tokens, options
-      if scanner = tokens.scanner
-        kinds_not_loc = scanner.class::KINDS_NOT_LOC
-      else
-        warn ArgumentError, 'Tokens have no scanner.' if $VERBOSE
-        kinds_not_loc = CodeRay::Scanners::Scanner::KINDS_NOT_LOC
-      end
-      code = tokens.token_class_filter :exclude => kinds_not_loc
-      @loc = code.text.scan(NON_EMPTY_LINE).size
-    end
-    
-    def finish options
-      @loc
-    end
-    
-  end
-  
-end
-end
-
-if $0 == __FILE__
-  $VERBOSE = true
-  $: << File.join(File.dirname(__FILE__), '..')
-  eval DATA.read, nil, $0, __LINE__ + 4
-end
-
-__END__
-require 'test/unit'
-
-class LinesOfCodeTest < Test::Unit::TestCase
-  
-  def test_creation
-    assert CodeRay::Encoders::LinesOfCode < CodeRay::Encoders::Encoder
-    filter = nil
-    assert_nothing_raised do
-      filter = CodeRay.encoder :loc
-    end
-    assert_kind_of CodeRay::Encoders::LinesOfCode, filter
-    assert_nothing_raised do
-      filter = CodeRay.encoder :lines_of_code
-    end
-    assert_kind_of CodeRay::Encoders::LinesOfCode, filter
-  end
-  
-  def test_lines_of_code
-    tokens = CodeRay.scan <<-RUBY, :ruby
-#!/usr/bin/env ruby
-
-# a minimal Ruby program
-puts "Hello world!"
-    RUBY
-    assert_equal 1, CodeRay::Encoders::LinesOfCode.new.encode_tokens(tokens)
-    assert_equal 1, tokens.lines_of_code
-    assert_equal 1, tokens.loc
-  end
-  
-  def test_filtering_block_tokens
-    tokens = CodeRay::Tokens.new
-    tokens << ["Hello\n", :world]
-    tokens << ["Hello\n", :space]
-    tokens << ["Hello\n", :comment]
-    assert_equal 2, CodeRay::Encoders::LinesOfCode.new.encode_tokens(tokens)
-    assert_equal 2, tokens.lines_of_code
-    assert_equal 2, tokens.loc
-  end
-  
-end
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/null.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-module CodeRay
-module Encoders
-
-  # = Null Encoder
-  #
-  # Does nothing and returns an empty string.
-  class Null < Encoder
-
-    include Streamable
-    register_for :null
-
-    # Defined for faster processing
-    def to_proc
-      proc {}
-    end
-
-  protected
-
-    def token(*)
-      # do nothing
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/page.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-module CodeRay
-module Encoders
-
-  load :html
-
-  class Page < HTML
-
-    FILE_EXTENSION = 'html'
-
-    register_for :page
-
-    DEFAULT_OPTIONS = HTML::DEFAULT_OPTIONS.merge \
-      :css => :class,
-      :wrap => :page,
-      :line_numbers => :table
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/span.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-module CodeRay
-module Encoders
-
-  load :html
-
-  class Span < HTML
-
-    FILE_EXTENSION = 'span.html'
-
-    register_for :span
-
-    DEFAULT_OPTIONS = HTML::DEFAULT_OPTIONS.merge \
-      :css => :style,
-      :wrap => :span
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/statistic.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-module CodeRay
-module Encoders
-
-  # Makes a statistic for the given tokens.
-  class Statistic < Encoder
-
-    include Streamable
-    register_for :stats, :statistic
-
-    attr_reader :type_stats, :real_token_count
-
-  protected
-
-    TypeStats = Struct.new :count, :size
-
-    def setup options
-      @type_stats = Hash.new { |h, k| h[k] = TypeStats.new 0, 0 }
-      @real_token_count = 0
-    end
-
-    def generate tokens, options
-      @tokens = tokens
-      super
-    end
-
-    def text_token text, kind
-      @real_token_count += 1 unless kind == :space
-      @type_stats[kind].count += 1
-      @type_stats[kind].size += text.size
-      @type_stats['TOTAL'].size += text.size
-      @type_stats['TOTAL'].count += 1
-    end
-
-    # TODO Hierarchy handling
-    def block_token action, kind
-      @type_stats['TOTAL'].count += 1
-      @type_stats['open/close'].count += 1
-    end
-
-    STATS = <<-STATS
-
-Code Statistics
-
-Tokens            %8d
-  Non-Whitespace  %8d
-Bytes Total       %8d
-
-Token Types (%d):
-  type                     count     ratio    size (average)
--------------------------------------------------------------
-%s
-      STATS
-# space                    12007   33.81 %     1.7
-    TOKEN_TYPES_ROW = <<-TKR
-  %-20s  %8d  %6.2f %%   %5.1f
-      TKR
-
-    def finish options
-      all = @type_stats['TOTAL']
-      all_count, all_size = all.count, all.size
-      @type_stats.each do |type, stat|
-        stat.size /= stat.count.to_f
-      end
-      types_stats = @type_stats.sort_by { |k, v| [-v.count, k.to_s] }.map do |k, v|
-        TOKEN_TYPES_ROW % [k, v.count, 100.0 * v.count / all_count, v.size]
-      end.join
-      STATS % [
-        all_count, @real_token_count, all_size,
-        @type_stats.delete_if { |k, v| k.is_a? String }.size,
-        types_stats
-      ]
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/term.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,158 +0,0 @@
-# encoders/term.rb
-# By Rob Aldred (http://robaldred.co.uk)
-# Based on idea by Nathan Weizenbaum (http://nex-3.com)
-# MIT License (http://www.opensource.org/licenses/mit-license.php)
-#
-# A CodeRay encoder that outputs code highlighted for a color terminal.
-# Check out http://robaldred.co.uk
-
-module CodeRay
-  module Encoders
-    class Term < Encoder
-      register_for :term
-
-      TOKEN_COLORS = {
-        :annotation => '35',
-        :attribute_name => '33',
-        :attribute_name_fat => '33',
-        :attribute_value => '31',
-        :attribute_value_fat => '31',
-        :bin => '1;35',
-        :char => {:self => '36', :delimiter => '34'},
-        :class => '1;35',
-        :class_variable => '36',
-        :color => '32',
-        :comment => '37',
-        :complex => '34',
-        :constant => ['34', '4'],
-        :decoration => '35',
-        :definition => '1;32',
-        :directive => ['32', '4'],
-        :doc => '46',
-        :doctype => '1;30',
-        :doc_string => ['31', '4'],
-        :entity => '33',
-        :error => ['1;33', '41'],
-        :exception => '1;31',
-        :float => '1;35',
-        :function => '1;34',
-        :global_variable => '42',
-        :hex => '1;36',
-        :important => '1;31',
-        :include => '33',
-        :integer => '1;34',
-        :interpreted => '1;35',
-        :key => '35',
-        :label => '1;4',
-        :local_variable => '33',
-        :oct => '1;35',
-        :operator_name => '1;29',
-        :pre_constant => '1;36',
-        :pre_type => '1;30',
-        :predefined => ['4', '1;34'],
-        :preprocessor => '36',
-        :pseudo_class => '34',
-        :regexp => {
-          :content => '31',
-          :delimiter => '1;29',
-          :modifier => '35',
-          :function => '1;29'
-        },
-        :reserved => '1;31',
-        :shell => {
-          :self => '42',
-          :content => '1;29',
-          :delimiter => '37',
-        },
-        :string => {
-          :self => '32',
-          :modifier => '1;32',
-          :escape => '1;36',
-          :delimiter => '1;32',
-        },
-        :symbol => '1;32',
-        :tag => '34',
-        :tag_fat => '1;34',
-        :tag_special => ['34', '4'],
-        :type => '1;34',
-        :value => '36',
-        :variable => '34',
-        :insert => '42',
-        :delete => '41',
-        :change => '44',
-        :head => '45',
-      }
-      TOKEN_COLORS[:keyword] = TOKEN_COLORS[:reserved]
-      TOKEN_COLORS[:method] = TOKEN_COLORS[:function]
-      TOKEN_COLORS[:imaginary] = TOKEN_COLORS[:complex]
-      TOKEN_COLORS[:open] = TOKEN_COLORS[:close] = TOKEN_COLORS[:nesting_delimiter] = TOKEN_COLORS[:escape] = TOKEN_COLORS[:delimiter]
-
-      protected
-
-      def setup(options)
-        @out = ''
-        @opened = [nil]
-        @subcolors = nil
-      end
-
-      def finish(options)
-        super
-      end
-    
-      def token text, type = :plain
-        case text
-      
-        when nil
-          # raise 'Token with nil as text was given: %p' % [[text, type]] 
-      
-        when String
-        
-          if color = (@subcolors || TOKEN_COLORS)[type]
-            color = color[:self] || return if Hash === color
-
-            @out << col(color) + text.gsub("\n", col(0) + "\n" + col(color)) + col(0)
-            @out << col(@subcolors[:self]) if @subcolors && @subcolors[:self]
-          else
-            @out << text
-          end
-      
-        # token groups, eg. strings
-        when :open
-          @opened[0] = type
-          if color = TOKEN_COLORS[type]
-            if Hash === color
-              @subcolors = color
-              @out << col(color[:self]) if color[:self]
-            else
-              @subcolors = {}
-              @out << col(color)
-            end
-          end
-          @opened << type
-        when :close
-          if @opened.empty?
-            # nothing to close
-          else
-            @out << col(0) if (@subcolors || {})[:self]
-            @subcolors = nil
-            @opened.pop
-          end
-      
-        # whole lines to be highlighted, eg. a added/modified/deleted lines in a diff
-        when :begin_line
-        
-        when :end_line        
-      
-        else
-          raise 'unknown token kind: %p' % [text]
-        end
-      end
-
-      private
-
-      def col(color)
-        Array(color).map { |c| "\e[#{c}m" }.join
-      end
-    end
-  end
-end
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/text.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-module CodeRay
-module Encoders
-
-  class Text < Encoder
-
-    include Streamable
-    register_for :text
-
-    FILE_EXTENSION = 'txt'
-
-    DEFAULT_OPTIONS = {
-      :separator => ''
-    }
-
-  protected
-    def setup options
-      super
-      @sep = options[:separator]
-    end
-
-    def text_token text, kind
-      text + @sep
-    end
-
-    def finish options
-      super.chomp @sep
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/token_class_filter.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-($:.unshift '../..'; require 'coderay') unless defined? CodeRay
-module CodeRay
-module Encoders
-  
-  load :filter
-  
-  class TokenClassFilter < Filter
-
-    include Streamable
-    register_for :token_class_filter
-
-    DEFAULT_OPTIONS = {
-      :exclude => [],
-      :include => :all
-    }
-
-  protected
-    def setup options
-      super
-      @exclude = options[:exclude]
-      @exclude = Array(@exclude) unless @exclude == :all
-      @include = options[:include]
-      @include = Array(@include) unless @include == :all
-    end
-    
-    def include_text_token? text, kind
-       (@include == :all || @include.include?(kind)) &&
-      !(@exclude == :all || @exclude.include?(kind))
-    end
-    
-  end
-
-end
-end
-
-if $0 == __FILE__
-  $VERBOSE = true
-  $: << File.join(File.dirname(__FILE__), '..')
-  eval DATA.read, nil, $0, __LINE__ + 4
-end
-
-__END__
-require 'test/unit'
-
-class TokenClassFilterTest < Test::Unit::TestCase
-  
-  def test_creation
-    assert CodeRay::Encoders::TokenClassFilter < CodeRay::Encoders::Encoder
-    assert CodeRay::Encoders::TokenClassFilter < CodeRay::Encoders::Filter
-    filter = nil
-    assert_nothing_raised do
-      filter = CodeRay.encoder :token_class_filter
-    end
-    assert_instance_of CodeRay::Encoders::TokenClassFilter, filter
-  end
-  
-  def test_filtering_text_tokens
-    tokens = CodeRay::Tokens.new
-    for i in 1..10
-      tokens << [i.to_s, :index]
-      tokens << [' ', :space] if i < 10
-    end
-    assert_equal 10, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :exclude => :space).size
-    assert_equal 10, tokens.token_class_filter(:exclude => :space).size
-    assert_equal 9, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :include => :space).size
-    assert_equal 9, tokens.token_class_filter(:include => :space).size
-    assert_equal 0, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :exclude => :all).size
-    assert_equal 0, tokens.token_class_filter(:exclude => :all).size
-  end
-  
-  def test_filtering_block_tokens
-    tokens = CodeRay::Tokens.new
-    10.times do |i|
-      tokens << [:open, :index]
-      tokens << [i.to_s, :content]
-      tokens << [:close, :index]
-    end
-    assert_equal 20, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :include => :blubb).size
-    assert_equal 20, tokens.token_class_filter(:include => :blubb).size
-    assert_equal 30, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :exclude => :index).size
-    assert_equal 30, tokens.token_class_filter(:exclude => :index).size
-  end
-  
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/xml.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-module CodeRay
-module Encoders
-
-  # = XML Encoder
-  #
-  # Uses REXML. Very slow.
-  class XML < Encoder
-
-    include Streamable
-    register_for :xml
-
-    FILE_EXTENSION = 'xml'
-
-    require 'rexml/document'
-
-    DEFAULT_OPTIONS = {
-      :tab_width => 8,
-      :pretty => -1,
-      :transitive => false,
-    }
-
-  protected
-
-    def setup options
-      @doc = REXML::Document.new
-      @doc << REXML::XMLDecl.new
-      @tab_width = options[:tab_width]
-      @root = @node = @doc.add_element('coderay-tokens')
-    end
-
-    def finish options
-      @out = ''
-      @doc.write @out, options[:pretty], options[:transitive], true
-      @out
-    end
-    
-    def text_token text, kind
-      if kind == :space
-        token = @node
-      else
-        token = @node.add_element kind.to_s
-      end
-      text.scan(/(\x20+)|(\t+)|(\n)|[^\x20\t\n]+/) do |space, tab, nl|
-        case
-        when space
-          token << REXML::Text.new(space, true)
-        when tab
-          token << REXML::Text.new(tab, true)
-        when nl
-          token << REXML::Text.new(nl, true)
-        else
-          token << REXML::Text.new($&)
-        end
-      end
-    end
-
-    def open_token kind
-      @node = @node.add_element kind.to_s
-    end
-
-    def close_token kind
-      if @node == @root
-        raise 'no token to close!'
-      end
-      @node = @node.parent
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/yaml.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-module CodeRay
-module Encoders
-
-  # = YAML Encoder
-  #
-  # Slow.
-  class YAML < Encoder
-
-    register_for :yaml
-
-    FILE_EXTENSION = 'yaml'
-
-  protected
-    def compile tokens, options
-      require 'yaml'
-      @out = tokens.to_a.to_yaml
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/_map.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-module CodeRay
-module Encoders
-
-  map \
-    :loc => :lines_of_code,
-    :plain => :text,
-    :stats => :statistic,
-    :terminal => :term,
-    :tex => :latex
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/comment_filter.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-($:.unshift '../..'; require 'coderay') unless defined? CodeRay
-module CodeRay
-module Encoders
-  
-  load :token_class_filter
-  
-  class CommentFilter < TokenClassFilter
-    
-    register_for :comment_filter
-    
-    DEFAULT_OPTIONS = superclass::DEFAULT_OPTIONS.merge \
-      :exclude => [:comment]
-    
-  end
-  
-end
-end
-
-if $0 == __FILE__
-  $VERBOSE = true
-  $: << File.join(File.dirname(__FILE__), '..')
-  eval DATA.read, nil, $0, __LINE__ + 4
-end
-
-__END__
-require 'test/unit'
-
-class CommentFilterTest < Test::Unit::TestCase
-  
-  def test_filtering_comments
-    tokens = CodeRay.scan <<-RUBY, :ruby
-#!/usr/bin/env ruby
-# a minimal Ruby program
-puts "Hello world!"
-    RUBY
-    assert_equal <<-RUBY_FILTERED, tokens.comment_filter.text
-#!/usr/bin/env ruby
-
-puts "Hello world!"
-    RUBY_FILTERED
-  end
-  
-end
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/count.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-module CodeRay
-module Encoders
-
-  class Count < Encoder
-
-    include Streamable
-    register_for :count
-
-    protected
-
-    def setup options
-      @out = 0
-    end
-
-    def token text, kind
-      @out += 1
-    end
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/debug.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-module CodeRay
-module Encoders
-
-  # = Debug Encoder
-  #
-  # Fast encoder producing simple debug output.
-  #
-  # It is readable and diff-able and is used for testing.
-  #
-  # You cannot fully restore the tokens information from the
-  # output, because consecutive :space tokens are merged.
-  # Use Tokens#dump for caching purposes.
-  class Debug < Encoder
-
-    include Streamable
-    register_for :debug
-
-    FILE_EXTENSION = 'raydebug'
-
-  protected
-    def text_token text, kind
-      if kind == :space
-        text
-      else
-        text = text.gsub(/[)\\]/, '\\\\\0')  # escape ) and \
-        "#{kind}(#{text})"
-      end
-    end
-
-    def open_token kind
-      "#{kind}<"
-    end
-
-    def close_token kind
-      ">"
-    end
-
-    def begin_line kind
-      "#{kind}["
-    end
-
-    def end_line kind
-      "]"
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/div.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-module CodeRay
-module Encoders
-
-  load :html
-
-  class Div < HTML
-
-    FILE_EXTENSION = 'div.html'
-
-    register_for :div
-
-    DEFAULT_OPTIONS = HTML::DEFAULT_OPTIONS.merge \
-      :css => :style,
-      :wrap => :div
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/filter.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-($:.unshift '../..'; require 'coderay') unless defined? CodeRay
-module CodeRay
-module Encoders
-  
-  class Filter < Encoder
-    
-    register_for :filter
-    
-  protected
-    def setup options
-      @out = Tokens.new
-    end
-    
-    def text_token text, kind
-      [text, kind] if include_text_token? text, kind
-    end
-    
-    def include_text_token? text, kind
-      true
-    end
-    
-    def block_token action, kind
-      [action, kind] if include_block_token? action, kind
-    end
-    
-    def include_block_token? action, kind
-      true
-    end
-    
-  end
-  
-end
-end
-
-if $0 == __FILE__
-  $VERBOSE = true
-  $: << File.join(File.dirname(__FILE__), '..')
-  eval DATA.read, nil, $0, __LINE__ + 4
-end
-
-__END__
-require 'test/unit'
-
-class FilterTest < Test::Unit::TestCase
-  
-  def test_creation
-    assert CodeRay::Encoders::Filter < CodeRay::Encoders::Encoder
-    filter = nil
-    assert_nothing_raised do
-      filter = CodeRay.encoder :filter
-    end
-    assert_kind_of CodeRay::Encoders::Encoder, filter
-  end
-  
-  def test_filtering_text_tokens
-    tokens = CodeRay::Tokens.new
-    10.times do |i|
-      tokens << [i.to_s, :index]
-    end
-    assert_equal tokens, CodeRay::Encoders::Filter.new.encode_tokens(tokens)
-    assert_equal tokens, tokens.filter
-  end
-  
-  def test_filtering_block_tokens
-    tokens = CodeRay::Tokens.new
-    10.times do |i|
-      tokens << [:open, :index]
-      tokens << [i.to_s, :content]
-      tokens << [:close, :index]
-    end
-    assert_equal tokens, CodeRay::Encoders::Filter.new.encode_tokens(tokens)
-    assert_equal tokens, tokens.filter
-  end
-  
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,305 +0,0 @@
-require 'set'
-
-module CodeRay
-module Encoders
-
-  # = HTML Encoder
-  #
-  # This is CodeRay's most important highlighter:
-  # It provides save, fast XHTML generation and CSS support.
-  #
-  # == Usage
-  #
-  #  require 'coderay'
-  #  puts CodeRay.scan('Some /code/', :ruby).html  #-> a HTML page
-  #  puts CodeRay.scan('Some /code/', :ruby).html(:wrap => :span)
-  #  #-> <span class="CodeRay"><span class="co">Some</span> /code/</span>
-  #  puts CodeRay.scan('Some /code/', :ruby).span  #-> the same
-  #  
-  #  puts CodeRay.scan('Some code', :ruby).html(
-  #    :wrap => nil,
-  #    :line_numbers => :inline,
-  #    :css => :style
-  #  )
-  #  #-> <span class="no">1</span>  <span style="color:#036; font-weight:bold;">Some</span> code
-  #
-  # == Options
-  #
-  # === :tab_width
-  # Convert \t characters to +n+ spaces (a number.)
-  # Default: 8
-  #
-  # === :css
-  # How to include the styles; can be :class or :style.
-  #
-  # Default: :class
-  #
-  # === :wrap
-  # Wrap in :page, :div, :span or nil.
-  #
-  # You can also use Encoders::Div and Encoders::Span.
-  #
-  # Default: nil
-  #
-  # === :title
-  # 
-  # The title of the HTML page (works only when :wrap is set to :page.)
-  #
-  # Default: 'CodeRay output'
-  #
-  # === :line_numbers
-  # Include line numbers in :table, :inline, :list or nil (no line numbers)
-  #
-  # Default: nil
-  #
-  # === :line_number_start
-  # Where to start with line number counting.
-  #
-  # Default: 1
-  #
-  # === :bold_every
-  # Make every +n+-th number appear bold.
-  #
-  # Default: 10
-  #
-  # === :highlight_lines
-  # 
-  # Highlights certain line numbers.
-  # Can be any Enumerable, typically just an Array or Range, of numbers.
-  # 
-  # Bolding is deactivated when :highlight_lines is set. It only makes sense
-  # in combination with :line_numbers.
-  #
-  # Default: nil
-  #
-  # === :hint
-  # Include some information into the output using the title attribute.
-  # Can be :info (show token type on mouse-over), :info_long (with full path)
-  # or :debug (via inspect).
-  #
-  # Default: false
-  class HTML < Encoder
-
-    include Streamable
-    register_for :html
-
-    FILE_EXTENSION = 'html'
-
-    DEFAULT_OPTIONS = {
-      :tab_width => 8,
-
-      :css => :class,
-
-      :style => :cycnus,
-      :wrap => nil,
-      :title => 'CodeRay output',
-
-      :line_numbers => nil,
-      :line_number_start => 1,
-      :bold_every => 10,
-      :highlight_lines => nil,
-
-      :hint => false,
-    }
-
-    helper :output, :css
-
-    attr_reader :css
-
-  protected
-
-    HTML_ESCAPE = {  #:nodoc:
-      '&' => '&amp;',
-      '"' => '&quot;',
-      '>' => '&gt;',
-      '<' => '&lt;',
-    }
-
-    # This was to prevent illegal HTML.
-    # Strange chars should still be avoided in codes.
-    evil_chars = Array(0x00...0x20) - [?\n, ?\t, ?\s]
-    evil_chars.each { |i| HTML_ESCAPE[i.chr] = ' ' }
-    #ansi_chars = Array(0x7f..0xff)
-    #ansi_chars.each { |i| HTML_ESCAPE[i.chr] = '&#%d;' % i }
-    # \x9 (\t) and \xA (\n) not included
-    #HTML_ESCAPE_PATTERN = /[\t&"><\0-\x8\xB-\x1f\x7f-\xff]/
-    HTML_ESCAPE_PATTERN = /[\t"&><\0-\x8\xB-\x1f]/
-
-    TOKEN_KIND_TO_INFO = Hash.new { |h, kind|
-      h[kind] =
-        case kind
-        when :pre_constant
-          'Predefined constant'
-        else
-          kind.to_s.gsub(/_/, ' ').gsub(/\b\w/) { $&.capitalize }
-        end
-    }
-
-    TRANSPARENT_TOKEN_KINDS = [
-      :delimiter, :modifier, :content, :escape, :inline_delimiter,
-    ].to_set
-
-    # Generate a hint about the given +classes+ in a +hint+ style.
-    #
-    # +hint+ may be :info, :info_long or :debug.
-    def self.token_path_to_hint hint, classes
-      title =
-        case hint
-        when :info
-          TOKEN_KIND_TO_INFO[classes.first]
-        when :info_long
-          classes.reverse.map { |kind| TOKEN_KIND_TO_INFO[kind] }.join('/')
-        when :debug
-          classes.inspect
-        end
-      title ? " title=\"#{title}\"" : ''
-    end
-
-    def setup options
-      super
-
-      @HTML_ESCAPE = HTML_ESCAPE.dup
-      @HTML_ESCAPE["\t"] = ' ' * options[:tab_width]
-
-      @opened = [nil]
-      @css = CSS.new options[:style]
-
-      hint = options[:hint]
-      if hint and not [:debug, :info, :info_long].include? hint
-        raise ArgumentError, "Unknown value %p for :hint; \
-          expected :info, :debug, false, or nil." % hint
-      end
-
-      case options[:css]
-
-      when :class
-        @css_style = Hash.new do |h, k|
-          c = CodeRay::Tokens::ClassOfKind[k.first]
-          if c == :NO_HIGHLIGHT and not hint
-            h[k.dup] = false
-          else
-            title = if hint
-              HTML.token_path_to_hint(hint, k[1..-1] << k.first)
-            else
-              ''
-            end
-            if c == :NO_HIGHLIGHT
-              h[k.dup] = '<span%s>' % [title]
-            else
-              h[k.dup] = '<span%s class="%s">' % [title, c]
-            end
-          end
-        end
-
-      when :style
-        @css_style = Hash.new do |h, k|
-          if k.is_a? ::Array
-            styles = k.dup
-          else
-            styles = [k]
-          end
-          type = styles.first
-          classes = styles.map { |c| Tokens::ClassOfKind[c] }
-          if classes.first == :NO_HIGHLIGHT and not hint
-            h[k] = false
-          else
-            styles.shift if TRANSPARENT_TOKEN_KINDS.include? styles.first
-            title = HTML.token_path_to_hint hint, styles
-            style = @css[*classes]
-            h[k] =
-              if style
-                '<span%s style="%s">' % [title, style]
-              else
-                false
-              end
-          end
-        end
-
-      else
-        raise ArgumentError, "Unknown value %p for :css." % options[:css]
-
-      end
-    end
-
-    def finish options
-      not_needed = @opened.shift
-      @out << '</span>' * @opened.size
-      unless @opened.empty?
-        warn '%d tokens still open: %p' % [@opened.size, @opened]
-      end
-
-      @out.extend Output
-      @out.css = @css
-      @out.numerize! options[:line_numbers], options
-      @out.wrap! options[:wrap]
-      @out.apply_title! options[:title]
-
-      super
-    end
-
-    def token text, type = :plain
-      case text
-      
-      when nil
-        # raise 'Token with nil as text was given: %p' % [[text, type]] 
-      
-      when String
-        if text =~ /#{HTML_ESCAPE_PATTERN}/o
-          text = text.gsub(/#{HTML_ESCAPE_PATTERN}/o) { |m| @HTML_ESCAPE[m] }
-        end
-        @opened[0] = type
-        if text != "\n" && style = @css_style[@opened]
-          @out << style << text << '</span>'
-        else
-          @out << text
-        end
-        
-      
-      # token groups, eg. strings
-      when :open
-        @opened[0] = type
-        @out << (@css_style[@opened] || '<span>')
-        @opened << type
-      when :close
-        if @opened.empty?
-          # nothing to close
-        else
-          if $CODERAY_DEBUG and (@opened.size == 1 or @opened.last != type)
-            raise 'Malformed token stream: Trying to close a token (%p) \
-              that is not open. Open are: %p.' % [type, @opened[1..-1]]
-          end
-          @out << '</span>'
-          @opened.pop
-        end
-      
-      # whole lines to be highlighted, eg. a deleted line in a diff
-      when :begin_line
-        @opened[0] = type
-        if style = @css_style[@opened]
-          @out << style.sub('<span', '<div')
-        else
-          @out << '<div>'
-        end
-        @opened << type
-      when :end_line
-        if @opened.empty?
-          # nothing to close
-        else
-          if $CODERAY_DEBUG and (@opened.size == 1 or @opened.last != type)
-            raise 'Malformed token stream: Trying to close a line (%p) \
-              that is not open. Open are: %p.' % [type, @opened[1..-1]]
-          end
-          @out << '</div>'
-          @opened.pop
-        end
-      
-      else
-        raise 'unknown token kind: %p' % [text]
-        
-      end
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-10
-
-dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html
-http://redmine.rubyforge.org/svn
-
-
-
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-e93f8b46-1217-0410-a6f0-8f06a7374b81
-
-output.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-8d0cea50dc9e6743bd10a8e0c6f1db17
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5271
-
-numerization.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-6f9a2f0d033d9af4d4804ecd8751a3f7
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4226
-
-css.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-aa931c09ed5f16abfed3b7c99f0f684d
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1626
-
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/prop-base/css.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/prop-base/numerization.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/prop-base/output.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/text-base/css.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-module CodeRay
-module Encoders
-
-  class HTML
-    class CSS
-
-      attr :stylesheet
-
-      def CSS.load_stylesheet style = nil
-        CodeRay::Styles[style]
-      end
-
-      def initialize style = :default
-        @classes = Hash.new
-        style = CSS.load_stylesheet style
-        @stylesheet = [
-          style::CSS_MAIN_STYLES,
-          style::TOKEN_COLORS.gsub(/^(?!$)/, '.CodeRay ')
-        ].join("\n")
-        parse style::TOKEN_COLORS
-      end
-
-      def [] *styles
-        cl = @classes[styles.first]
-        return '' unless cl
-        style = ''
-        1.upto(styles.size) do |offset|
-          break if style = cl[styles[offset .. -1]]
-        end
-        # warn 'Style not found: %p' % [styles] if style.empty?
-        return style
-      end
-
-    private
-
-      CSS_CLASS_PATTERN = /
-        (                    # $1 = selectors
-          (?:
-            (?: \s* \. [-\w]+ )+
-            \s* ,?
-          )+
-        )
-        \s* \{ \s*
-        ( [^\}]+ )?          # $2 = style
-        \s* \} \s*
-      |
-        ( . )                # $3 = error
-      /mx
-      def parse stylesheet
-        stylesheet.scan CSS_CLASS_PATTERN do |selectors, style, error|
-          raise "CSS parse error: '#{error.inspect}' not recognized" if error
-          for selector in selectors.split(',')
-            classes = selector.scan(/[-\w]+/)
-            cl = classes.pop
-            @classes[cl] ||= Hash.new
-            @classes[cl][classes] = style.to_s.strip.delete(' ').chomp(';')
-          end
-        end
-      end
-
-    end
-  end
-
-end
-end
-
-if $0 == __FILE__
-  require 'pp'
-  pp CodeRay::Encoders::HTML::CSS.new
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/text-base/numerization.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-module CodeRay
-module Encoders
-
-  class HTML
-
-    module Output
-
-      def numerize *args
-        clone.numerize!(*args)
-      end
-
-=begin      NUMERIZABLE_WRAPPINGS = {
-        :table => [:div, :page, nil],
-        :inline => :all,
-        :list => [:div, :page, nil]
-      }
-      NUMERIZABLE_WRAPPINGS.default = :all
-=end
-      def numerize! mode = :table, options = {}
-        return self unless mode
-
-        options = DEFAULT_OPTIONS.merge options
-
-        start = options[:line_number_start]
-        unless start.is_a? Integer
-          raise ArgumentError, "Invalid value %p for :line_number_start; Integer expected." % start
-        end
-
-        #allowed_wrappings = NUMERIZABLE_WRAPPINGS[mode]
-        #unless allowed_wrappings == :all or allowed_wrappings.include? options[:wrap]
-        #  raise ArgumentError, "Can't numerize, :wrap must be in %p, but is %p" % [NUMERIZABLE_WRAPPINGS, options[:wrap]]
-        #end
-
-        bold_every = options[:bold_every]
-        highlight_lines = options[:highlight_lines]
-        bolding =
-          if bold_every == false && highlight_lines == nil
-            proc { |line| line.to_s }
-          elsif highlight_lines.is_a? Enumerable
-            highlight_lines = highlight_lines.to_set
-            proc do |line|
-              if highlight_lines.include? line
-                "<strong class=\"highlighted\">#{line}</strong>"  # highlighted line numbers in bold
-              else
-                line.to_s
-              end
-            end
-          elsif bold_every.is_a? Integer
-            raise ArgumentError, ":bolding can't be 0." if bold_every == 0
-            proc do |line|
-              if line % bold_every == 0
-                "<strong>#{line}</strong>"  # every bold_every-th number in bold
-              else
-                line.to_s
-              end
-            end
-          else
-            raise ArgumentError, 'Invalid value %p for :bolding; false or Integer expected.' % bold_every
-          end
-
-        case mode
-        when :inline
-          max_width = (start + line_count).to_s.size
-          line_number = start
-          gsub!(/^/) do
-            line_number_text = bolding.call line_number
-            indent = ' ' * (max_width - line_number.to_s.size)  # TODO: Optimize (10^x)
-            res = "<span class=\"no\">#{indent}#{line_number_text}</span> "
-            line_number += 1
-            res
-          end
-
-        when :table
-          # This is really ugly.
-          # Because even monospace fonts seem to have different heights when bold,
-          # I make the newline bold, both in the code and the line numbers.
-          # FIXME Still not working perfect for Mr. Internet Exploder
-          line_numbers = (start ... start + line_count).to_a.map(&bolding).join("\n")
-          line_numbers << "\n"  # also for Mr. MS Internet Exploder :-/
-          line_numbers.gsub!(/\n/) { "<tt>\n</tt>" }
-
-          line_numbers_table_tpl = TABLE.apply('LINE_NUMBERS', line_numbers)
-          gsub!(/<\/div>\n/) { '</div>' }
-          gsub!(/\n/) { "<tt>\n</tt>" }
-          wrap_in! line_numbers_table_tpl
-          @wrapped_in = :div
-
-        when :list
-          opened_tags = []
-          gsub!(/^.*$\n?/) do |line|
-            line.chomp!
-
-            open = opened_tags.join
-            line.scan(%r!<(/)?span[^>]*>?!) do |close,|
-              if close
-                opened_tags.pop
-              else
-                opened_tags << $&
-              end
-            end
-            close = '</span>' * opened_tags.size
-
-            "<li>#{open}#{line}#{close}</li>\n"
-          end
-          chomp!("\n")
-          wrap_in! LIST
-          @wrapped_in = :div
-
-        else
-          raise ArgumentError, 'Unknown value %p for mode: expected one of %p' %
-            [mode, [:table, :list, :inline]]
-        end
-
-        self
-      end
-
-      def line_count
-        line_count = count("\n")
-        position_of_last_newline = rindex(?\n)
-        if position_of_last_newline
-          after_last_newline = self[position_of_last_newline + 1 .. -1]
-          ends_with_newline = after_last_newline[/\A(?:<\/span>)*\z/]
-          line_count += 1 if not ends_with_newline
-        end
-        line_count
-      end
-
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/.svn/text-base/output.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,206 +0,0 @@
-module CodeRay
-module Encoders
-
-  class HTML
-
-    # This module is included in the output String from thew HTML Encoder.
-    #
-    # It provides methods like wrap, div, page etc.
-    #
-    # Remember to use #clone instead of #dup to keep the modules the object was
-    # extended with.
-    #
-    # TODO: more doc.
-    module Output
-
-      require 'coderay/encoders/html/numerization.rb'
-
-      attr_accessor :css
-
-      class << self
-
-        # This makes Output look like a class.
-        #
-        # Example:
-        #
-        #  a = Output.new '<span class="co">Code</span>'
-        #  a.wrap! :page
-        def new string, css = CSS.new, element = nil
-          output = string.clone.extend self
-          output.wrapped_in = element
-          output.css = css
-          output
-        end
-
-        # Raises an exception if an object that doesn't respond to to_str is extended by Output,
-        # to prevent users from misuse. Use Module#remove_method to disable.
-        def extended o
-          warn "The Output module is intended to extend instances of String, not #{o.class}." unless o.respond_to? :to_str
-        end
-
-        def make_stylesheet css, in_tag = false
-          sheet = css.stylesheet
-          sheet = <<-CSS if in_tag
-<style type="text/css">
-#{sheet}
-</style>
-          CSS
-          sheet
-        end
-
-        def page_template_for_css css
-          sheet = make_stylesheet css
-          PAGE.apply 'CSS', sheet
-        end
-
-        # Define a new wrapper. This is meta programming.
-        def wrapper *wrappers
-          wrappers.each do |wrapper|
-            define_method wrapper do |*args|
-              wrap wrapper, *args
-            end
-            define_method "#{wrapper}!".to_sym do |*args|
-              wrap! wrapper, *args
-            end
-          end
-        end
-
-      end
-
-      wrapper :div, :span, :page
-
-      def wrapped_in? element
-        wrapped_in == element
-      end
-
-      def wrapped_in
-        @wrapped_in ||= nil
-      end
-      attr_writer :wrapped_in
-
-      def wrap_in template
-        clone.wrap_in! template
-      end
-
-      def wrap_in! template
-        Template.wrap! self, template, 'CONTENT'
-        self
-      end
-      
-      def apply_title! title
-        self.sub!(/(<title>)(<\/title>)/) { $1 + title + $2 }
-        self
-      end
-
-      def wrap! element, *args
-        return self if not element or element == wrapped_in
-        case element
-        when :div
-          raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? nil
-          wrap_in! DIV
-        when :span
-          raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? nil
-          wrap_in! SPAN
-        when :page
-          wrap! :div if wrapped_in? nil
-          raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? :div
-          wrap_in! Output.page_template_for_css(@css)
-          if args.first.is_a?(Hash) && title = args.first[:title]
-            apply_title! title
-          end
-          self
-        when nil
-          return self
-        else
-          raise "Unknown value %p for :wrap" % element
-        end
-        @wrapped_in = element
-        self
-      end
-
-      def wrap *args
-        clone.wrap!(*args)
-      end
-
-      def stylesheet in_tag = false
-        Output.make_stylesheet @css, in_tag
-      end
-
-      class Template < String
-
-        def self.wrap! str, template, target
-          target = Regexp.new(Regexp.escape("<%#{target}%>"))
-          if template =~ target
-            str[0,0] = $`
-            str << $'
-          else
-            raise "Template target <%%%p%%> not found" % target
-          end
-        end
-
-        def apply target, replacement
-          target = Regexp.new(Regexp.escape("<%#{target}%>"))
-          if self =~ target
-            Template.new($` + replacement + $')
-          else
-            raise "Template target <%%%p%%> not found" % target
-          end
-        end
-
-        module Simple
-          def ` str  #` <-- for stupid editors
-            Template.new str
-          end
-        end
-      end
-
-      extend Template::Simple
-
-#-- don't include the templates in docu
-
-      SPAN = `<span class="CodeRay"><%CONTENT%></span>`
-
-      DIV = <<-`DIV`
-<div class="CodeRay">
-  <div class="code"><pre><%CONTENT%></pre></div>
-</div>
-      DIV
-
-      TABLE = <<-`TABLE`
-<table class="CodeRay"><tr>
-  <td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"><pre><%LINE_NUMBERS%></pre></td>
-  <td class="code"><pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"><%CONTENT%></pre></td>
-</tr></table>
-      TABLE
-      # title="double click to expand"
-
-      LIST = <<-`LIST`
-<ol class="CodeRay">
-<%CONTENT%>
-</ol>
-      LIST
-
-      PAGE = <<-`PAGE`
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="de">
-<head>
-  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-  <title></title>
-  <style type="text/css">
-<%CSS%>
-  </style>
-</head>
-<body style="background-color: white;">
-
-<%CONTENT%>
-</body>
-</html>
-      PAGE
-
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/css.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-module CodeRay
-module Encoders
-
-  class HTML
-    class CSS
-
-      attr :stylesheet
-
-      def CSS.load_stylesheet style = nil
-        CodeRay::Styles[style]
-      end
-
-      def initialize style = :default
-        @classes = Hash.new
-        style = CSS.load_stylesheet style
-        @stylesheet = [
-          style::CSS_MAIN_STYLES,
-          style::TOKEN_COLORS.gsub(/^(?!$)/, '.CodeRay ')
-        ].join("\n")
-        parse style::TOKEN_COLORS
-      end
-
-      def [] *styles
-        cl = @classes[styles.first]
-        return '' unless cl
-        style = ''
-        1.upto(styles.size) do |offset|
-          break if style = cl[styles[offset .. -1]]
-        end
-        # warn 'Style not found: %p' % [styles] if style.empty?
-        return style
-      end
-
-    private
-
-      CSS_CLASS_PATTERN = /
-        (                    # $1 = selectors
-          (?:
-            (?: \s* \. [-\w]+ )+
-            \s* ,?
-          )+
-        )
-        \s* \{ \s*
-        ( [^\}]+ )?          # $2 = style
-        \s* \} \s*
-      |
-        ( . )                # $3 = error
-      /mx
-      def parse stylesheet
-        stylesheet.scan CSS_CLASS_PATTERN do |selectors, style, error|
-          raise "CSS parse error: '#{error.inspect}' not recognized" if error
-          for selector in selectors.split(',')
-            classes = selector.scan(/[-\w]+/)
-            cl = classes.pop
-            @classes[cl] ||= Hash.new
-            @classes[cl][classes] = style.to_s.strip.delete(' ').chomp(';')
-          end
-        end
-      end
-
-    end
-  end
-
-end
-end
-
-if $0 == __FILE__
-  require 'pp'
-  pp CodeRay::Encoders::HTML::CSS.new
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/numerization.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-module CodeRay
-module Encoders
-
-  class HTML
-
-    module Output
-
-      def numerize *args
-        clone.numerize!(*args)
-      end
-
-=begin      NUMERIZABLE_WRAPPINGS = {
-        :table => [:div, :page, nil],
-        :inline => :all,
-        :list => [:div, :page, nil]
-      }
-      NUMERIZABLE_WRAPPINGS.default = :all
-=end
-      def numerize! mode = :table, options = {}
-        return self unless mode
-
-        options = DEFAULT_OPTIONS.merge options
-
-        start = options[:line_number_start]
-        unless start.is_a? Integer
-          raise ArgumentError, "Invalid value %p for :line_number_start; Integer expected." % start
-        end
-
-        #allowed_wrappings = NUMERIZABLE_WRAPPINGS[mode]
-        #unless allowed_wrappings == :all or allowed_wrappings.include? options[:wrap]
-        #  raise ArgumentError, "Can't numerize, :wrap must be in %p, but is %p" % [NUMERIZABLE_WRAPPINGS, options[:wrap]]
-        #end
-
-        bold_every = options[:bold_every]
-        highlight_lines = options[:highlight_lines]
-        bolding =
-          if bold_every == false && highlight_lines == nil
-            proc { |line| line.to_s }
-          elsif highlight_lines.is_a? Enumerable
-            highlight_lines = highlight_lines.to_set
-            proc do |line|
-              if highlight_lines.include? line
-                "<strong class=\"highlighted\">#{line}</strong>"  # highlighted line numbers in bold
-              else
-                line.to_s
-              end
-            end
-          elsif bold_every.is_a? Integer
-            raise ArgumentError, ":bolding can't be 0." if bold_every == 0
-            proc do |line|
-              if line % bold_every == 0
-                "<strong>#{line}</strong>"  # every bold_every-th number in bold
-              else
-                line.to_s
-              end
-            end
-          else
-            raise ArgumentError, 'Invalid value %p for :bolding; false or Integer expected.' % bold_every
-          end
-
-        case mode
-        when :inline
-          max_width = (start + line_count).to_s.size
-          line_number = start
-          gsub!(/^/) do
-            line_number_text = bolding.call line_number
-            indent = ' ' * (max_width - line_number.to_s.size)  # TODO: Optimize (10^x)
-            res = "<span class=\"no\">#{indent}#{line_number_text}</span> "
-            line_number += 1
-            res
-          end
-
-        when :table
-          # This is really ugly.
-          # Because even monospace fonts seem to have different heights when bold,
-          # I make the newline bold, both in the code and the line numbers.
-          # FIXME Still not working perfect for Mr. Internet Exploder
-          line_numbers = (start ... start + line_count).to_a.map(&bolding).join("\n")
-          line_numbers << "\n"  # also for Mr. MS Internet Exploder :-/
-          line_numbers.gsub!(/\n/) { "<tt>\n</tt>" }
-
-          line_numbers_table_tpl = TABLE.apply('LINE_NUMBERS', line_numbers)
-          gsub!(/<\/div>\n/) { '</div>' }
-          gsub!(/\n/) { "<tt>\n</tt>" }
-          wrap_in! line_numbers_table_tpl
-          @wrapped_in = :div
-
-        when :list
-          opened_tags = []
-          gsub!(/^.*$\n?/) do |line|
-            line.chomp!
-
-            open = opened_tags.join
-            line.scan(%r!<(/)?span[^>]*>?!) do |close,|
-              if close
-                opened_tags.pop
-              else
-                opened_tags << $&
-              end
-            end
-            close = '</span>' * opened_tags.size
-
-            "<li>#{open}#{line}#{close}</li>\n"
-          end
-          chomp!("\n")
-          wrap_in! LIST
-          @wrapped_in = :div
-
-        else
-          raise ArgumentError, 'Unknown value %p for mode: expected one of %p' %
-            [mode, [:table, :list, :inline]]
-        end
-
-        self
-      end
-
-      def line_count
-        line_count = count("\n")
-        position_of_last_newline = rindex(?\n)
-        if position_of_last_newline
-          after_last_newline = self[position_of_last_newline + 1 .. -1]
-          ends_with_newline = after_last_newline[/\A(?:<\/span>)*\z/]
-          line_count += 1 if not ends_with_newline
-        end
-        line_count
-      end
-
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/html/output.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,206 +0,0 @@
-module CodeRay
-module Encoders
-
-  class HTML
-
-    # This module is included in the output String from thew HTML Encoder.
-    #
-    # It provides methods like wrap, div, page etc.
-    #
-    # Remember to use #clone instead of #dup to keep the modules the object was
-    # extended with.
-    #
-    # TODO: more doc.
-    module Output
-
-      require 'coderay/encoders/html/numerization.rb'
-
-      attr_accessor :css
-
-      class << self
-
-        # This makes Output look like a class.
-        #
-        # Example:
-        #
-        #  a = Output.new '<span class="co">Code</span>'
-        #  a.wrap! :page
-        def new string, css = CSS.new, element = nil
-          output = string.clone.extend self
-          output.wrapped_in = element
-          output.css = css
-          output
-        end
-
-        # Raises an exception if an object that doesn't respond to to_str is extended by Output,
-        # to prevent users from misuse. Use Module#remove_method to disable.
-        def extended o
-          warn "The Output module is intended to extend instances of String, not #{o.class}." unless o.respond_to? :to_str
-        end
-
-        def make_stylesheet css, in_tag = false
-          sheet = css.stylesheet
-          sheet = <<-CSS if in_tag
-<style type="text/css">
-#{sheet}
-</style>
-          CSS
-          sheet
-        end
-
-        def page_template_for_css css
-          sheet = make_stylesheet css
-          PAGE.apply 'CSS', sheet
-        end
-
-        # Define a new wrapper. This is meta programming.
-        def wrapper *wrappers
-          wrappers.each do |wrapper|
-            define_method wrapper do |*args|
-              wrap wrapper, *args
-            end
-            define_method "#{wrapper}!".to_sym do |*args|
-              wrap! wrapper, *args
-            end
-          end
-        end
-
-      end
-
-      wrapper :div, :span, :page
-
-      def wrapped_in? element
-        wrapped_in == element
-      end
-
-      def wrapped_in
-        @wrapped_in ||= nil
-      end
-      attr_writer :wrapped_in
-
-      def wrap_in template
-        clone.wrap_in! template
-      end
-
-      def wrap_in! template
-        Template.wrap! self, template, 'CONTENT'
-        self
-      end
-      
-      def apply_title! title
-        self.sub!(/(<title>)(<\/title>)/) { $1 + title + $2 }
-        self
-      end
-
-      def wrap! element, *args
-        return self if not element or element == wrapped_in
-        case element
-        when :div
-          raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? nil
-          wrap_in! DIV
-        when :span
-          raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? nil
-          wrap_in! SPAN
-        when :page
-          wrap! :div if wrapped_in? nil
-          raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? :div
-          wrap_in! Output.page_template_for_css(@css)
-          if args.first.is_a?(Hash) && title = args.first[:title]
-            apply_title! title
-          end
-          self
-        when nil
-          return self
-        else
-          raise "Unknown value %p for :wrap" % element
-        end
-        @wrapped_in = element
-        self
-      end
-
-      def wrap *args
-        clone.wrap!(*args)
-      end
-
-      def stylesheet in_tag = false
-        Output.make_stylesheet @css, in_tag
-      end
-
-      class Template < String
-
-        def self.wrap! str, template, target
-          target = Regexp.new(Regexp.escape("<%#{target}%>"))
-          if template =~ target
-            str[0,0] = $`
-            str << $'
-          else
-            raise "Template target <%%%p%%> not found" % target
-          end
-        end
-
-        def apply target, replacement
-          target = Regexp.new(Regexp.escape("<%#{target}%>"))
-          if self =~ target
-            Template.new($` + replacement + $')
-          else
-            raise "Template target <%%%p%%> not found" % target
-          end
-        end
-
-        module Simple
-          def ` str  #` <-- for stupid editors
-            Template.new str
-          end
-        end
-      end
-
-      extend Template::Simple
-
-#-- don't include the templates in docu
-
-      SPAN = `<span class="CodeRay"><%CONTENT%></span>`
-
-      DIV = <<-`DIV`
-<div class="CodeRay">
-  <div class="code"><pre><%CONTENT%></pre></div>
-</div>
-      DIV
-
-      TABLE = <<-`TABLE`
-<table class="CodeRay"><tr>
-  <td class="line_numbers" title="click to toggle" onclick="with (this.firstChild.style) { display = (display == '') ? 'none' : '' }"><pre><%LINE_NUMBERS%></pre></td>
-  <td class="code"><pre ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"><%CONTENT%></pre></td>
-</tr></table>
-      TABLE
-      # title="double click to expand"
-
-      LIST = <<-`LIST`
-<ol class="CodeRay">
-<%CONTENT%>
-</ol>
-      LIST
-
-      PAGE = <<-`PAGE`
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="de">
-<head>
-  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-  <title></title>
-  <style type="text/css">
-<%CSS%>
-  </style>
-</head>
-<body style="background-color: white;">
-
-<%CONTENT%>
-</body>
-</html>
-      PAGE
-
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/json.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-($:.unshift '../..'; require 'coderay') unless defined? CodeRay
-module CodeRay
-module Encoders
-  
-  # = JSON Encoder
-  class JSON < Encoder
-    
-    register_for :json
-    FILE_EXTENSION = 'json'
-    
-  protected
-    def setup options
-      begin
-        require 'json'
-      rescue LoadError
-        require 'rubygems'
-        require 'json'
-      end
-      @out = []
-    end
-    
-    def text_token text, kind
-      { :type => 'text', :text => text, :kind => kind }
-    end
-    
-    def block_token action, kind
-      { :type => 'block', :action => action, :kind => kind }
-    end
-    
-    def finish options
-      @out.to_json
-    end
-    
-  end
-  
-end
-end
-
-if $0 == __FILE__
-  $VERBOSE = true
-  $: << File.join(File.dirname(__FILE__), '..')
-  eval DATA.read, nil, $0, __LINE__ + 4
-end
-
-__END__
-require 'test/unit'
-$:.delete '.'
-require 'rubygems' if RUBY_VERSION < '1.9'
-
-class JSONEncoderTest < Test::Unit::TestCase
-  
-  def test_json_output
-    tokens = CodeRay.scan <<-RUBY, :ruby
-puts "Hello world!"
-    RUBY
-    require 'json'
-    assert_equal [
-      {"type"=>"text", "text"=>"puts", "kind"=>"ident"},
-      {"type"=>"text", "text"=>" ", "kind"=>"space"},
-      {"type"=>"block", "action"=>"open", "kind"=>"string"},
-      {"type"=>"text", "text"=>"\"", "kind"=>"delimiter"},
-      {"type"=>"text", "text"=>"Hello world!", "kind"=>"content"},
-      {"type"=>"text", "text"=>"\"", "kind"=>"delimiter"},
-      {"type"=>"block", "action"=>"close", "kind"=>"string"},
-      {"type"=>"text", "text"=>"\n", "kind"=>"space"}
-    ], JSON.load(tokens.json)
-  end
-  
-end
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/lines_of_code.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-($:.unshift '../..'; require 'coderay') unless defined? CodeRay
-module CodeRay
-module Encoders
-  
-  # Counts the LoC (Lines of Code). Returns an Integer >= 0.
-  # 
-  # Alias: :loc
-  # 
-  # Everything that is not comment, markup, doctype/shebang, or an empty line,
-  # is considered to be code.
-  # 
-  # For example,
-  # * HTML files not containing JavaScript have 0 LoC
-  # * in a Java class without comments, LoC is the number of non-empty lines
-  # 
-  # A Scanner class should define the token kinds that are not code in the
-  # KINDS_NOT_LOC constant, which defaults to [:comment, :doctype].
-  class LinesOfCode < Encoder
-    
-    register_for :lines_of_code
-    
-    NON_EMPTY_LINE = /^\s*\S.*$/
-    
-    def compile tokens, options
-      if scanner = tokens.scanner
-        kinds_not_loc = scanner.class::KINDS_NOT_LOC
-      else
-        warn ArgumentError, 'Tokens have no scanner.' if $VERBOSE
-        kinds_not_loc = CodeRay::Scanners::Scanner::KINDS_NOT_LOC
-      end
-      code = tokens.token_class_filter :exclude => kinds_not_loc
-      @loc = code.text.scan(NON_EMPTY_LINE).size
-    end
-    
-    def finish options
-      @loc
-    end
-    
-  end
-  
-end
-end
-
-if $0 == __FILE__
-  $VERBOSE = true
-  $: << File.join(File.dirname(__FILE__), '..')
-  eval DATA.read, nil, $0, __LINE__ + 4
-end
-
-__END__
-require 'test/unit'
-
-class LinesOfCodeTest < Test::Unit::TestCase
-  
-  def test_creation
-    assert CodeRay::Encoders::LinesOfCode < CodeRay::Encoders::Encoder
-    filter = nil
-    assert_nothing_raised do
-      filter = CodeRay.encoder :loc
-    end
-    assert_kind_of CodeRay::Encoders::LinesOfCode, filter
-    assert_nothing_raised do
-      filter = CodeRay.encoder :lines_of_code
-    end
-    assert_kind_of CodeRay::Encoders::LinesOfCode, filter
-  end
-  
-  def test_lines_of_code
-    tokens = CodeRay.scan <<-RUBY, :ruby
-#!/usr/bin/env ruby
-
-# a minimal Ruby program
-puts "Hello world!"
-    RUBY
-    assert_equal 1, CodeRay::Encoders::LinesOfCode.new.encode_tokens(tokens)
-    assert_equal 1, tokens.lines_of_code
-    assert_equal 1, tokens.loc
-  end
-  
-  def test_filtering_block_tokens
-    tokens = CodeRay::Tokens.new
-    tokens << ["Hello\n", :world]
-    tokens << ["Hello\n", :space]
-    tokens << ["Hello\n", :comment]
-    assert_equal 2, CodeRay::Encoders::LinesOfCode.new.encode_tokens(tokens)
-    assert_equal 2, tokens.lines_of_code
-    assert_equal 2, tokens.loc
-  end
-  
-end
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/null.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-module CodeRay
-module Encoders
-
-  # = Null Encoder
-  #
-  # Does nothing and returns an empty string.
-  class Null < Encoder
-
-    include Streamable
-    register_for :null
-
-    # Defined for faster processing
-    def to_proc
-      proc {}
-    end
-
-  protected
-
-    def token(*)
-      # do nothing
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/page.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-module CodeRay
-module Encoders
-
-  load :html
-
-  class Page < HTML
-
-    FILE_EXTENSION = 'html'
-
-    register_for :page
-
-    DEFAULT_OPTIONS = HTML::DEFAULT_OPTIONS.merge \
-      :css => :class,
-      :wrap => :page,
-      :line_numbers => :table
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/span.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-module CodeRay
-module Encoders
-
-  load :html
-
-  class Span < HTML
-
-    FILE_EXTENSION = 'span.html'
-
-    register_for :span
-
-    DEFAULT_OPTIONS = HTML::DEFAULT_OPTIONS.merge \
-      :css => :style,
-      :wrap => :span
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/statistic.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-module CodeRay
-module Encoders
-
-  # Makes a statistic for the given tokens.
-  class Statistic < Encoder
-
-    include Streamable
-    register_for :stats, :statistic
-
-    attr_reader :type_stats, :real_token_count
-
-  protected
-
-    TypeStats = Struct.new :count, :size
-
-    def setup options
-      @type_stats = Hash.new { |h, k| h[k] = TypeStats.new 0, 0 }
-      @real_token_count = 0
-    end
-
-    def generate tokens, options
-      @tokens = tokens
-      super
-    end
-
-    def text_token text, kind
-      @real_token_count += 1 unless kind == :space
-      @type_stats[kind].count += 1
-      @type_stats[kind].size += text.size
-      @type_stats['TOTAL'].size += text.size
-      @type_stats['TOTAL'].count += 1
-    end
-
-    # TODO Hierarchy handling
-    def block_token action, kind
-      @type_stats['TOTAL'].count += 1
-      @type_stats['open/close'].count += 1
-    end
-
-    STATS = <<-STATS
-
-Code Statistics
-
-Tokens            %8d
-  Non-Whitespace  %8d
-Bytes Total       %8d
-
-Token Types (%d):
-  type                     count     ratio    size (average)
--------------------------------------------------------------
-%s
-      STATS
-# space                    12007   33.81 %     1.7
-    TOKEN_TYPES_ROW = <<-TKR
-  %-20s  %8d  %6.2f %%   %5.1f
-      TKR
-
-    def finish options
-      all = @type_stats['TOTAL']
-      all_count, all_size = all.count, all.size
-      @type_stats.each do |type, stat|
-        stat.size /= stat.count.to_f
-      end
-      types_stats = @type_stats.sort_by { |k, v| [-v.count, k.to_s] }.map do |k, v|
-        TOKEN_TYPES_ROW % [k, v.count, 100.0 * v.count / all_count, v.size]
-      end.join
-      STATS % [
-        all_count, @real_token_count, all_size,
-        @type_stats.delete_if { |k, v| k.is_a? String }.size,
-        types_stats
-      ]
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/term.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,158 +0,0 @@
-# encoders/term.rb
-# By Rob Aldred (http://robaldred.co.uk)
-# Based on idea by Nathan Weizenbaum (http://nex-3.com)
-# MIT License (http://www.opensource.org/licenses/mit-license.php)
-#
-# A CodeRay encoder that outputs code highlighted for a color terminal.
-# Check out http://robaldred.co.uk
-
-module CodeRay
-  module Encoders
-    class Term < Encoder
-      register_for :term
-
-      TOKEN_COLORS = {
-        :annotation => '35',
-        :attribute_name => '33',
-        :attribute_name_fat => '33',
-        :attribute_value => '31',
-        :attribute_value_fat => '31',
-        :bin => '1;35',
-        :char => {:self => '36', :delimiter => '34'},
-        :class => '1;35',
-        :class_variable => '36',
-        :color => '32',
-        :comment => '37',
-        :complex => '34',
-        :constant => ['34', '4'],
-        :decoration => '35',
-        :definition => '1;32',
-        :directive => ['32', '4'],
-        :doc => '46',
-        :doctype => '1;30',
-        :doc_string => ['31', '4'],
-        :entity => '33',
-        :error => ['1;33', '41'],
-        :exception => '1;31',
-        :float => '1;35',
-        :function => '1;34',
-        :global_variable => '42',
-        :hex => '1;36',
-        :important => '1;31',
-        :include => '33',
-        :integer => '1;34',
-        :interpreted => '1;35',
-        :key => '35',
-        :label => '1;4',
-        :local_variable => '33',
-        :oct => '1;35',
-        :operator_name => '1;29',
-        :pre_constant => '1;36',
-        :pre_type => '1;30',
-        :predefined => ['4', '1;34'],
-        :preprocessor => '36',
-        :pseudo_class => '34',
-        :regexp => {
-          :content => '31',
-          :delimiter => '1;29',
-          :modifier => '35',
-          :function => '1;29'
-        },
-        :reserved => '1;31',
-        :shell => {
-          :self => '42',
-          :content => '1;29',
-          :delimiter => '37',
-        },
-        :string => {
-          :self => '32',
-          :modifier => '1;32',
-          :escape => '1;36',
-          :delimiter => '1;32',
-        },
-        :symbol => '1;32',
-        :tag => '34',
-        :tag_fat => '1;34',
-        :tag_special => ['34', '4'],
-        :type => '1;34',
-        :value => '36',
-        :variable => '34',
-        :insert => '42',
-        :delete => '41',
-        :change => '44',
-        :head => '45',
-      }
-      TOKEN_COLORS[:keyword] = TOKEN_COLORS[:reserved]
-      TOKEN_COLORS[:method] = TOKEN_COLORS[:function]
-      TOKEN_COLORS[:imaginary] = TOKEN_COLORS[:complex]
-      TOKEN_COLORS[:open] = TOKEN_COLORS[:close] = TOKEN_COLORS[:nesting_delimiter] = TOKEN_COLORS[:escape] = TOKEN_COLORS[:delimiter]
-
-      protected
-
-      def setup(options)
-        @out = ''
-        @opened = [nil]
-        @subcolors = nil
-      end
-
-      def finish(options)
-        super
-      end
-    
-      def token text, type = :plain
-        case text
-      
-        when nil
-          # raise 'Token with nil as text was given: %p' % [[text, type]] 
-      
-        when String
-        
-          if color = (@subcolors || TOKEN_COLORS)[type]
-            color = color[:self] || return if Hash === color
-
-            @out << col(color) + text.gsub("\n", col(0) + "\n" + col(color)) + col(0)
-            @out << col(@subcolors[:self]) if @subcolors && @subcolors[:self]
-          else
-            @out << text
-          end
-      
-        # token groups, eg. strings
-        when :open
-          @opened[0] = type
-          if color = TOKEN_COLORS[type]
-            if Hash === color
-              @subcolors = color
-              @out << col(color[:self]) if color[:self]
-            else
-              @subcolors = {}
-              @out << col(color)
-            end
-          end
-          @opened << type
-        when :close
-          if @opened.empty?
-            # nothing to close
-          else
-            @out << col(0) if (@subcolors || {})[:self]
-            @subcolors = nil
-            @opened.pop
-          end
-      
-        # whole lines to be highlighted, eg. a added/modified/deleted lines in a diff
-        when :begin_line
-        
-        when :end_line        
-      
-        else
-          raise 'unknown token kind: %p' % [text]
-        end
-      end
-
-      private
-
-      def col(color)
-        Array(color).map { |c| "\e[#{c}m" }.join
-      end
-    end
-  end
-end
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/text.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-module CodeRay
-module Encoders
-
-  class Text < Encoder
-
-    include Streamable
-    register_for :text
-
-    FILE_EXTENSION = 'txt'
-
-    DEFAULT_OPTIONS = {
-      :separator => ''
-    }
-
-  protected
-    def setup options
-      super
-      @sep = options[:separator]
-    end
-
-    def text_token text, kind
-      text + @sep
-    end
-
-    def finish options
-      super.chomp @sep
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/token_class_filter.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-($:.unshift '../..'; require 'coderay') unless defined? CodeRay
-module CodeRay
-module Encoders
-  
-  load :filter
-  
-  class TokenClassFilter < Filter
-
-    include Streamable
-    register_for :token_class_filter
-
-    DEFAULT_OPTIONS = {
-      :exclude => [],
-      :include => :all
-    }
-
-  protected
-    def setup options
-      super
-      @exclude = options[:exclude]
-      @exclude = Array(@exclude) unless @exclude == :all
-      @include = options[:include]
-      @include = Array(@include) unless @include == :all
-    end
-    
-    def include_text_token? text, kind
-       (@include == :all || @include.include?(kind)) &&
-      !(@exclude == :all || @exclude.include?(kind))
-    end
-    
-  end
-
-end
-end
-
-if $0 == __FILE__
-  $VERBOSE = true
-  $: << File.join(File.dirname(__FILE__), '..')
-  eval DATA.read, nil, $0, __LINE__ + 4
-end
-
-__END__
-require 'test/unit'
-
-class TokenClassFilterTest < Test::Unit::TestCase
-  
-  def test_creation
-    assert CodeRay::Encoders::TokenClassFilter < CodeRay::Encoders::Encoder
-    assert CodeRay::Encoders::TokenClassFilter < CodeRay::Encoders::Filter
-    filter = nil
-    assert_nothing_raised do
-      filter = CodeRay.encoder :token_class_filter
-    end
-    assert_instance_of CodeRay::Encoders::TokenClassFilter, filter
-  end
-  
-  def test_filtering_text_tokens
-    tokens = CodeRay::Tokens.new
-    for i in 1..10
-      tokens << [i.to_s, :index]
-      tokens << [' ', :space] if i < 10
-    end
-    assert_equal 10, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :exclude => :space).size
-    assert_equal 10, tokens.token_class_filter(:exclude => :space).size
-    assert_equal 9, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :include => :space).size
-    assert_equal 9, tokens.token_class_filter(:include => :space).size
-    assert_equal 0, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :exclude => :all).size
-    assert_equal 0, tokens.token_class_filter(:exclude => :all).size
-  end
-  
-  def test_filtering_block_tokens
-    tokens = CodeRay::Tokens.new
-    10.times do |i|
-      tokens << [:open, :index]
-      tokens << [i.to_s, :content]
-      tokens << [:close, :index]
-    end
-    assert_equal 20, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :include => :blubb).size
-    assert_equal 20, tokens.token_class_filter(:include => :blubb).size
-    assert_equal 30, CodeRay::Encoders::TokenClassFilter.new.encode_tokens(tokens, :exclude => :index).size
-    assert_equal 30, tokens.token_class_filter(:exclude => :index).size
-  end
-  
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/xml.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-module CodeRay
-module Encoders
-
-  # = XML Encoder
-  #
-  # Uses REXML. Very slow.
-  class XML < Encoder
-
-    include Streamable
-    register_for :xml
-
-    FILE_EXTENSION = 'xml'
-
-    require 'rexml/document'
-
-    DEFAULT_OPTIONS = {
-      :tab_width => 8,
-      :pretty => -1,
-      :transitive => false,
-    }
-
-  protected
-
-    def setup options
-      @doc = REXML::Document.new
-      @doc << REXML::XMLDecl.new
-      @tab_width = options[:tab_width]
-      @root = @node = @doc.add_element('coderay-tokens')
-    end
-
-    def finish options
-      @out = ''
-      @doc.write @out, options[:pretty], options[:transitive], true
-      @out
-    end
-    
-    def text_token text, kind
-      if kind == :space
-        token = @node
-      else
-        token = @node.add_element kind.to_s
-      end
-      text.scan(/(\x20+)|(\t+)|(\n)|[^\x20\t\n]+/) do |space, tab, nl|
-        case
-        when space
-          token << REXML::Text.new(space, true)
-        when tab
-          token << REXML::Text.new(tab, true)
-        when nl
-          token << REXML::Text.new(nl, true)
-        else
-          token << REXML::Text.new($&)
-        end
-      end
-    end
-
-    def open_token kind
-      @node = @node.add_element kind.to_s
-    end
-
-    def close_token kind
-      if @node == @root
-        raise 'no token to close!'
-      end
-      @node = @node.parent
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/encoders/yaml.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-module CodeRay
-module Encoders
-
-  # = YAML Encoder
-  #
-  # Slow.
-  class YAML < Encoder
-
-    register_for :yaml
-
-    FILE_EXTENSION = 'yaml'
-
-  protected
-    def compile tokens, options
-      require 'yaml'
-      @out = tokens.to_a.to_yaml
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/for_redcloth.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-module CodeRay
-  
-  # A little hack to enable CodeRay highlighting in RedCloth.
-  # 
-  # Usage:
-  #  require 'coderay'
-  #  require 'coderay/for_redcloth'
-  #  RedCloth.new('@[ruby]puts "Hello, World!"@').to_html
-  # 
-  # Make sure you have RedCloth 4.0.3 activated, for example by calling
-  #  require 'rubygems'
-  # before RedCloth is loaded and before calling CodeRay.for_redcloth.
-  module ForRedCloth
-    
-    def self.install
-      gem 'RedCloth', '>= 4.0.3' if defined? gem
-      require 'redcloth'
-      unless RedCloth::VERSION.to_s >= '4.0.3'
-        if defined? gem
-          raise 'CodeRay.for_redcloth needs RedCloth version 4.0.3 or later. ' +
-            "You have #{RedCloth::VERSION}. Please gem install RedCloth."
-        else
-          $".delete 'redcloth.rb'  # sorry, but it works
-          require 'rubygems'
-          return install  # retry
-        end
-      end
-      unless RedCloth::VERSION.to_s >= '4.2.2'
-        warn 'CodeRay.for_redcloth works best with RedCloth version 4.2.2 or later.'
-      end
-      RedCloth::TextileDoc.send :include, ForRedCloth::TextileDoc
-      RedCloth::Formatters::HTML.module_eval do
-        def unescape(html)
-          replacements = {
-            '&amp;' => '&',
-            '&quot;' => '"',
-            '&gt;' => '>',
-            '&lt;' => '<',
-          }
-          html.gsub(/&(?:amp|quot|[gl]t);/) { |entity| replacements[entity] }
-        end
-        undef code, bc_open, bc_close, escape_pre
-        def code(opts)  # :nodoc:
-          opts[:block] = true
-          if !opts[:lang] && RedCloth::VERSION.to_s >= '4.2.0'
-            # simulating pre-4.2 behavior
-            if opts[:text].sub!(/\A\[(\w+)\]/, '')
-              if CodeRay::Scanners[$1].plugin_id == 'plaintext'
-                opts[:text] = $& + opts[:text]
-              else
-                opts[:lang] = $1
-              end
-            end
-          end
-          if opts[:lang] && !filter_coderay
-            require 'coderay'
-            @in_bc ||= nil
-            format = @in_bc ? :div : :span
-            opts[:text] = unescape(opts[:text]) unless @in_bc
-            highlighted_code = CodeRay.encode opts[:text], opts[:lang], format, :stream => true
-            highlighted_code.sub!(/\A<(span|div)/) { |m| m + pba(@in_bc || opts) }
-            highlighted_code
-          else
-            "<code#{pba(opts)}>#{opts[:text]}</code>"
-          end
-        end
-        def bc_open(opts)  # :nodoc:
-          opts[:block] = true
-          @in_bc = opts
-          opts[:lang] ? '' : "<pre#{pba(opts)}>"
-        end
-        def bc_close(opts)  # :nodoc:
-          opts = @in_bc
-          @in_bc = nil
-          opts[:lang] ? '' : "</pre>\n"
-        end
-        def escape_pre(text)
-          if @in_bc ||= nil
-            text
-          else
-            html_esc(text, :html_escape_preformatted)
-          end
-        end
-      end
-    end
-
-    module TextileDoc  # :nodoc:
-      attr_accessor :filter_coderay
-    end
-    
-  end
-  
-end
-
-CodeRay::ForRedCloth.install
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,164 +0,0 @@
-10
-
-dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/coderay-0.9.2/lib/coderay/helpers
-http://redmine.rubyforge.org/svn
-
-
-
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-e93f8b46-1217-0410-a6f0-8f06a7374b81
-
-plugin.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-a8ef4aea22392cc4012ee679fc1d15ba
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-7926
-
-file_type.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-107e3d46dc60830e87b1a4ce4d467ce8
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-6494
-
-gzip_simple.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-ffacc98651f60a6fe698427bbc3c3c86
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2701
-
-word_list.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-86d05af27cbe342789f28ed543956aa5
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3229
-
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/file_type.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/gzip_simple.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/plugin.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/prop-base/word_list.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/file_type.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,255 +0,0 @@
-#!/usr/bin/env ruby
-module CodeRay
-
-# = FileType
-#
-# A simple filetype recognizer.
-#
-# Copyright (c) 2006 by murphy (Kornelius Kalnbach) <murphy rubychan de>
-#
-# License:: LGPL / ask the author
-# Version:: 0.1 (2005-09-01)
-#
-# == Documentation
-#
-#  # determine the type of the given
-#   lang = FileType[ARGV.first]
-#  
-#   # return :plaintext if the file type is unknown
-#   lang = FileType.fetch ARGV.first, :plaintext
-#  
-#   # try the shebang line, too
-#   lang = FileType.fetch ARGV.first, :plaintext, true
-module FileType
-
-  UnknownFileType = Class.new Exception
-
-  class << self
-
-    # Try to determine the file type of the file.
-    #
-    # +filename+ is a relative or absolute path to a file.
-    #
-    # The file itself is only accessed when +read_shebang+ is set to true.
-    # That means you can get filetypes from files that don't exist.
-    def [] filename, read_shebang = false
-      name = File.basename filename
-      ext = File.extname(name).sub(/^\./, '')  # from last dot, delete the leading dot
-      ext2 = filename.to_s[/\.(.*)/, 1]  # from first dot
-
-      type =
-        TypeFromExt[ext] ||
-        TypeFromExt[ext.downcase] ||
-        (TypeFromExt[ext2] if ext2) ||
-        (TypeFromExt[ext2.downcase] if ext2) ||
-        TypeFromName[name] ||
-        TypeFromName[name.downcase]
-      type ||= shebang(filename) if read_shebang
-
-      type
-    end
-
-    def shebang filename
-      begin
-        File.open filename, 'r' do |f|
-          if first_line = f.gets
-            if type = first_line[TypeFromShebang]
-              type.to_sym
-            end
-          end
-        end
-      rescue IOError
-        nil
-      end
-    end
-
-    # This works like Hash#fetch.
-    #
-    # If the filetype cannot be found, the +default+ value
-    # is returned.
-    def fetch filename, default = nil, read_shebang = false
-      if default and block_given?
-        warn 'block supersedes default value argument'
-      end
-
-      unless type = self[filename, read_shebang]
-        return yield if block_given?
-        return default if default
-        raise UnknownFileType, 'Could not determine type of %p.' % filename
-      end
-      type
-    end
-
-  end
-
-  TypeFromExt = {
-    'c' => :c,
-    'css' => :css,
-    'diff' => :diff,
-    'dpr' => :delphi,
-    'groovy' => :groovy,
-    'gvy' => :groovy,
-    'h' => :c,
-    'htm' => :html,
-    'html' => :html,
-    'html.erb' => :rhtml,
-    'java' => :java,
-    'js' => :java_script,
-    'json' => :json,
-    'mab' => :ruby,
-    'pas' => :delphi,
-    'patch' => :diff,
-    'php' => :php,
-    'php3' => :php,
-    'php4' => :php,
-    'php5' => :php,
-    'py' => :python,
-    'py3' => :python,
-    'pyw' => :python,
-    'rake' => :ruby,
-    'raydebug' => :debug,
-    'rb' => :ruby,
-    'rbw' => :ruby,
-    'rhtml' => :rhtml,
-    'rxml' => :ruby,
-    'sch' => :scheme,
-    'sql' => :sql,
-    'ss' => :scheme,
-    'xhtml' => :xhtml,
-    'xml' => :xml,
-    'yaml' => :yaml,
-    'yml' => :yaml,
-  }
-  for cpp_alias in %w[cc cpp cp cxx c++ C hh hpp h++ cu]
-    TypeFromExt[cpp_alias] = :cpp
-  end
-
-  TypeFromShebang = /\b(?:ruby|perl|python|sh)\b/
-
-  TypeFromName = {
-    'Rakefile' => :ruby,
-    'Rantfile' => :ruby,
-  }
-
-end
-
-end
-
-if $0 == __FILE__
-  $VERBOSE = true
-  eval DATA.read, nil, $0, __LINE__ + 4
-end
-
-__END__
-require 'test/unit'
-
-class FileTypeTests < Test::Unit::TestCase
-  
-  include CodeRay
-  
-  def test_fetch
-    assert_raise FileType::UnknownFileType do
-      FileType.fetch ''
-    end
-
-    assert_throws :not_found do
-      FileType.fetch '.' do
-        throw :not_found
-      end
-    end
-
-    assert_equal :default, FileType.fetch('c', :default)
-
-    stderr, fake_stderr = $stderr, Object.new
-    $err = ''
-    def fake_stderr.write x
-      $err << x
-    end
-    $stderr = fake_stderr
-    FileType.fetch('c', :default) { }
-    assert_equal "block supersedes default value argument\n", $err
-    $stderr = stderr
-  end
-
-  def test_ruby
-    assert_equal :ruby, FileType['test.rb']
-    assert_equal :ruby, FileType['test.java.rb']
-    assert_equal :java, FileType['test.rb.java']
-    assert_equal :ruby, FileType['C:\\Program Files\\x\\y\\c\\test.rbw']
-    assert_equal :ruby, FileType['/usr/bin/something/Rakefile']
-    assert_equal :ruby, FileType['~/myapp/gem/Rantfile']
-    assert_equal :ruby, FileType['./lib/tasks\repository.rake']
-    assert_not_equal :ruby, FileType['test_rb']
-    assert_not_equal :ruby, FileType['Makefile']
-    assert_not_equal :ruby, FileType['set.rb/set']
-    assert_not_equal :ruby, FileType['~/projects/blabla/rb']
-  end
-
-  def test_c
-    assert_equal :c, FileType['test.c']
-    assert_equal :c, FileType['C:\\Program Files\\x\\y\\c\\test.h']
-    assert_not_equal :c, FileType['test_c']
-    assert_not_equal :c, FileType['Makefile']
-    assert_not_equal :c, FileType['set.h/set']
-    assert_not_equal :c, FileType['~/projects/blabla/c']
-  end
-
-  def test_cpp
-    assert_equal :cpp, FileType['test.c++']
-    assert_equal :cpp, FileType['test.cxx']
-    assert_equal :cpp, FileType['test.hh']
-    assert_equal :cpp, FileType['test.hpp']
-    assert_equal :cpp, FileType['test.cu']
-    assert_equal :cpp, FileType['test.C']
-    assert_not_equal :cpp, FileType['test.c']
-    assert_not_equal :cpp, FileType['test.h']
-  end
-
-  def test_html
-    assert_equal :html, FileType['test.htm']
-    assert_equal :xhtml, FileType['test.xhtml']
-    assert_equal :xhtml, FileType['test.html.xhtml']
-    assert_equal :rhtml, FileType['_form.rhtml']
-    assert_equal :rhtml, FileType['_form.html.erb']
-  end
-
-  def test_yaml
-    assert_equal :yaml, FileType['test.yml']
-    assert_equal :yaml, FileType['test.yaml']
-    assert_equal :yaml, FileType['my.html.yaml']
-    assert_not_equal :yaml, FileType['YAML']
-  end
-
-  def test_pathname
-    require 'pathname'
-    pn = Pathname.new 'test.rb'
-    assert_equal :ruby, FileType[pn]
-    dir = Pathname.new '/etc/var/blubb'
-    assert_equal :ruby, FileType[dir + pn]
-    assert_equal :cpp, FileType[dir + 'test.cpp']
-  end
-
-  def test_no_shebang
-    dir = './test'
-    if File.directory? dir
-      Dir.chdir dir do
-        assert_equal :c, FileType['test.c']
-      end
-    end
-  end
-  
-  def test_shebang_empty_file
-    require 'tmpdir'
-    tmpfile = File.join(Dir.tmpdir, 'bla')
-    File.open(tmpfile, 'w') { }  # touch
-    assert_equal nil, FileType[tmpfile]
-  end
-  
-  def test_shebang
-    require 'tmpdir'
-    tmpfile = File.join(Dir.tmpdir, 'bla')
-    File.open(tmpfile, 'w') { |f| f.puts '#!/usr/bin/env ruby' }
-    assert_equal :ruby, FileType[tmpfile, true]
-  end
-
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/gzip_simple.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-# =GZip Simple
-#
-# A simplified interface to the gzip library +zlib+ (from the Ruby Standard Library.)
-#
-# Author: murphy (mail to murphy rubychan de)
-#
-# Version: 0.2 (2005.may.28)
-#
-# ==Documentation
-#
-# See +GZip+ module and the +String+ extensions.
-#
-module GZip
-
-  require 'zlib'
-
-  # The default zipping level. 7 zips good and fast.
-  DEFAULT_GZIP_LEVEL = 7
-
-  # Unzips the given string +s+.
-  #
-  # Example:
-  #   require 'gzip_simple'
-  #   print GZip.gunzip(File.read('adresses.gz'))
-  def GZip.gunzip s
-    Zlib::Inflate.inflate s
-  end
-
-  # Zips the given string +s+.
-  #
-  # Example:
-  #   require 'gzip_simple'
-  #   File.open('adresses.gz', 'w') do |file
-  #     file.write GZip.gzip('Mum: 0123 456 789', 9)
-  #   end
-  #
-  # If you provide a +level+, you can control how strong
-  # the string is compressed:
-  # - 0: no compression, only convert to gzip format
-  # - 1: compress fast
-  # - 7: compress more, but still fast (default)
-  # - 8: compress more, slower
-  # - 9: compress best, very slow
-  def GZip.gzip s, level = DEFAULT_GZIP_LEVEL
-    Zlib::Deflate.new(level).deflate s, Zlib::FINISH
-  end
-end
-
-
-# String extensions to use the GZip module.
-#
-# The methods gzip and gunzip provide an even more simple
-# interface to the ZLib:
-#
-#   # create a big string
-#   x = 'a' * 1000
-#   
-#   # zip it
-#   x_gz = x.gzip
-#   
-#   # test the result
-#   puts 'Zipped %d bytes to %d bytes.' % [x.size, x_gz.size]
-#   #-> Zipped 1000 bytes to 19 bytes.
-#   
-#   # unzipping works
-#   p x_gz.gunzip == x  #-> true
-class String
-  # Returns the string, unzipped.
-  # See GZip.gunzip
-  def gunzip
-    GZip.gunzip self
-  end
-  # Replaces the string with its unzipped value.
-  # See GZip.gunzip
-  def gunzip!
-    replace gunzip
-  end
-
-  # Returns the string, zipped.
-  # +level+ is the gzip compression level, see GZip.gzip.
-  def gzip level = GZip::DEFAULT_GZIP_LEVEL
-    GZip.gzip self, level
-  end
-  # Replaces the string with its zipped value.
-  # See GZip.gzip.
-  def gzip!(*args)
-    replace gzip(*args)
-  end
-end
-
-if $0 == __FILE__
-  eval DATA.read, nil, $0, __LINE__+4
-end
-
-__END__
-#CODE
-
-# Testing / Benchmark
-x = 'a' * 1000
-x_gz = x.gzip
-puts 'Zipped %d bytes to %d bytes.' % [x.size, x_gz.size]  #-> Zipped 1000 bytes to 19 bytes.
-p x_gz.gunzip == x  #-> true
-
-require 'benchmark'
-
-INFO = 'packed to %0.3f%%'  # :nodoc:
-
-x = Array.new(100000) { rand(255).chr + 'aaaaaaaaa' + rand(255).chr }.join
-Benchmark.bm(10) do |bm|
-  for level in 0..9
-    bm.report "zip #{level}" do
-      $x = x.gzip level
-    end
-    puts INFO % [100.0 * $x.size / x.size]
-  end
-  bm.report 'zip' do
-    $x = x.gzip
-  end
-  puts INFO % [100.0 * $x.size / x.size]
-  bm.report 'unzip' do
-    $x.gunzip
-  end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/plugin.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,349 +0,0 @@
-module CodeRay
-  
-# = PluginHost
-#
-# A simple subclass plugin system.
-#
-#  Example:
-#    class Generators < PluginHost
-#      plugin_path 'app/generators'
-#    end
-#    
-#    class Generator
-#      extend Plugin
-#      PLUGIN_HOST = Generators
-#    end
-#    
-#    class FancyGenerator < Generator
-#      register_for :fancy
-#    end
-#
-#    Generators[:fancy]  #-> FancyGenerator
-#    # or
-#    CodeRay.require_plugin 'Generators/fancy'
-module PluginHost
-
-  # Raised if Encoders::[] fails because:
-  # * a file could not be found
-  # * the requested Encoder is not registered
-  PluginNotFound = Class.new Exception
-  HostNotFound = Class.new Exception
-
-  PLUGIN_HOSTS = []
-  PLUGIN_HOSTS_BY_ID = {}  # dummy hash
-
-  # Loads all plugins using list and load.
-  def load_all
-    for plugin in list
-      load plugin
-    end
-  end
-
-  # Returns the Plugin for +id+.
-  #
-  # Example:
-  #  yaml_plugin = MyPluginHost[:yaml]
-  def [] id, *args, &blk
-    plugin = validate_id(id)
-    begin
-      plugin = plugin_hash.[] plugin, *args, &blk
-    end while plugin.is_a? Symbol
-    plugin
-  end
-
-  # Alias for +[]+.
-  alias load []
-
-  def require_helper plugin_id, helper_name
-    path = path_to File.join(plugin_id, helper_name)
-    require path
-  end
-
-  class << self
-
-    # Adds the module/class to the PLUGIN_HOSTS list.
-    def extended mod
-      PLUGIN_HOSTS << mod
-    end
-
-    # Warns you that you should not #include this module.
-    def included mod
-      warn "#{name} should not be included. Use extend."
-    end
-
-    # Find the PluginHost for host_id.
-    def host_by_id host_id
-      unless PLUGIN_HOSTS_BY_ID.default_proc
-        ph = Hash.new do |h, a_host_id|
-          for host in PLUGIN_HOSTS
-            h[host.host_id] = host
-          end
-          h.fetch a_host_id, nil
-        end
-        PLUGIN_HOSTS_BY_ID.replace ph
-      end
-      PLUGIN_HOSTS_BY_ID[host_id]
-    end
-
-  end
-
-  # The path where the plugins can be found.
-  def plugin_path *args
-    unless args.empty?
-      @plugin_path = File.expand_path File.join(*args)
-      load_map
-    end
-    @plugin_path
-  end
-
-  # The host's ID.
-  #
-  # If PLUGIN_HOST_ID is not set, it is simply the class name.
-  def host_id
-    if self.const_defined? :PLUGIN_HOST_ID
-      self::PLUGIN_HOST_ID
-    else
-      name
-    end
-  end
-
-  # Map a plugin_id to another.
-  #
-  # Usage: Put this in a file plugin_path/_map.rb.
-  #
-  #  class MyColorHost < PluginHost
-  #    map :navy => :dark_blue,
-  #      :maroon => :brown,
-  #      :luna => :moon
-  #  end
-  def map hash
-    for from, to in hash
-      from = validate_id from
-      to = validate_id to
-      plugin_hash[from] = to unless plugin_hash.has_key? from
-    end
-  end
-
-  # Define the default plugin to use when no plugin is found
-  # for a given id.
-  #
-  # See also map.
-  #
-  #  class MyColorHost < PluginHost
-  #    map :navy => :dark_blue
-  #    default :gray
-  #  end
-  def default id = nil
-    if id
-      id = validate_id id
-      plugin_hash[nil] = id
-    else
-      plugin_hash[nil]
-    end
-  end
-
-  # Every plugin must register itself for one or more
-  # +ids+ by calling register_for, which calls this method.
-  #
-  # See Plugin#register_for.
-  def register plugin, *ids
-    for id in ids
-      unless id.is_a? Symbol
-        raise ArgumentError,
-          "id must be a Symbol, but it was a #{id.class}"
-      end
-      plugin_hash[validate_id(id)] = plugin
-    end
-  end
-
-  # A Hash of plugion_id => Plugin pairs.
-  def plugin_hash
-    @plugin_hash ||= create_plugin_hash
-  end
-
-  # Returns an array of all .rb files in the plugin path.
-  #
-  # The extension .rb is not included.
-  def list
-    Dir[path_to('*')].select do |file|
-      File.basename(file)[/^(?!_)\w+\.rb$/]
-    end.map do |file|
-      File.basename file, '.rb'
-    end
-  end
-
-  # Makes a map of all loaded plugins.
-  def inspect
-    map = plugin_hash.dup
-    map.each do |id, plugin|
-      map[id] = plugin.to_s[/(?>\w+)$/]
-    end
-    "#{name}[#{host_id}]#{map.inspect}"
-  end
-
-protected
-  # Created a new plugin list and stores it to @plugin_hash.
-  def create_plugin_hash
-    @plugin_hash =
-      Hash.new do |h, plugin_id|
-        id = validate_id(plugin_id)
-        path = path_to id
-        begin
-          require path
-        rescue LoadError => boom
-          if h.has_key? nil  # default plugin
-            h[id] = h[nil]
-          else
-            raise PluginNotFound, 'Could not load plugin %p: %s' % [id, boom]
-          end
-        else
-          # Plugin should have registered by now
-          unless h.has_key? id
-            raise PluginNotFound,
-              "No #{self.name} plugin for #{id.inspect} found in #{path}."
-          end
-        end
-        h[id]
-      end
-  end
-
-  # Loads the map file (see map).
-  #
-  # This is done automatically when plugin_path is called.
-  def load_map
-    mapfile = path_to '_map'
-    if File.exist? mapfile
-      require mapfile
-    elsif $VERBOSE
-      warn 'no _map.rb found for %s' % name
-    end
-  end
-
-  # Returns the Plugin for +id+.
-  # Use it like Hash#fetch.
-  #
-  # Example:
-  #  yaml_plugin = MyPluginHost[:yaml, :default]
-  def fetch id, *args, &blk
-    plugin_hash.fetch validate_id(id), *args, &blk
-  end
-
-  # Returns the expected path to the plugin file for the given id.
-  def path_to plugin_id
-    File.join plugin_path, "#{plugin_id}.rb"
-  end
-
-  # Converts +id+ to a Symbol if it is a String,
-  # or returns +id+ if it already is a Symbol.
-  #
-  # Raises +ArgumentError+ for all other objects, or if the
-  # given String includes non-alphanumeric characters (\W).
-  def validate_id id
-    if id.is_a? Symbol or id.nil?
-      id
-    elsif id.is_a? String
-      if id[/\w+/] == id
-        id.downcase.to_sym
-      else
-        raise ArgumentError, "Invalid id: '#{id}' given."
-      end
-    else
-      raise ArgumentError,
-        "String or Symbol expected, but #{id.class} given."
-    end
-  end
-
-end
-
-
-# = Plugin
-#
-#  Plugins have to include this module.
-#
-#  IMPORTANT: use extend for this module.
-#
-#  Example: see PluginHost.
-module Plugin
-
-  def included mod
-    warn "#{name} should not be included. Use extend."
-  end
-
-  # Register this class for the given langs.
-  # Example:
-  #   class MyPlugin < PluginHost::BaseClass
-  #     register_for :my_id
-  #     ...
-  #   end
-  #
-  # See PluginHost.register.
-  def register_for *ids
-    plugin_host.register self, *ids
-  end
-  
-  # Returns the title of the plugin, or sets it to the
-  # optional argument +title+.
-  def title title = nil
-    if title
-      @title = title.to_s
-    else
-      @title ||= name[/([^:]+)$/, 1]
-    end
-  end
-
-  # The host for this Plugin class.
-  def plugin_host host = nil
-    if host and not host.is_a? PluginHost
-      raise ArgumentError,
-        "PluginHost expected, but #{host.class} given."
-    end
-    self.const_set :PLUGIN_HOST, host if host
-    self::PLUGIN_HOST
-  end
-
-  # Require some helper files.
-  #
-  # Example:
-  #
-  #  class MyPlugin < PluginHost::BaseClass
-  #     register_for :my_id
-  #     helper :my_helper
-  #
-  # The above example loads the file myplugin/my_helper.rb relative to the
-  # file in which MyPlugin was defined.
-  # 
-  # You can also load a helper from a different plugin:
-  # 
-  #  helper 'other_plugin/helper_name'
-  def helper *helpers
-    for helper in helpers
-      if helper.is_a?(String) && helper[/\//]
-        self::PLUGIN_HOST.require_helper $`, $'
-      else
-        self::PLUGIN_HOST.require_helper plugin_id, helper.to_s
-      end
-    end
-  end
-
-  # Returns the pulgin id used by the engine.
-  def plugin_id
-    name[/\w+$/].downcase
-  end
-
-end
-
-# Convenience method for plugin loading.
-# The syntax used is:
-#
-#  CodeRay.require_plugin '<Host ID>/<Plugin ID>'
-#
-# Returns the loaded plugin.
-def self.require_plugin path
-  host_id, plugin_id = path.split '/', 2
-  host = PluginHost.host_by_id(host_id)
-  raise PluginHost::HostNotFound,
-    "No host for #{host_id.inspect} found." unless host
-  host.load plugin_id
-end
-
-end
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/.svn/text-base/word_list.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,138 +0,0 @@
-module CodeRay
-
-# = WordList
-# 
-# <b>A Hash subclass designed for mapping word lists to token types.</b>
-# 
-# Copyright (c) 2006 by murphy (Kornelius Kalnbach) <murphy rubychan de>
-#
-# License:: LGPL / ask the author
-# Version:: 1.1 (2006-Oct-19)
-#
-# A WordList is a Hash with some additional features.
-# It is intended to be used for keyword recognition.
-#
-# WordList is highly optimized to be used in Scanners,
-# typically to decide whether a given ident is a special token.
-#
-# For case insensitive words use CaseIgnoringWordList.
-#
-# Example:
-#
-#  # define word arrays
-#  RESERVED_WORDS = %w[
-#    asm break case continue default do else
-#    ...
-#  ]
-#  
-#  PREDEFINED_TYPES = %w[
-#    int long short char void
-#    ...
-#  ]
-#  
-#  PREDEFINED_CONSTANTS = %w[
-#    EOF NULL ...
-#  ]
-#  
-#  # make a WordList
-#  IDENT_KIND = WordList.new(:ident).
-#    add(RESERVED_WORDS, :reserved).
-#    add(PREDEFINED_TYPES, :pre_type).
-#    add(PREDEFINED_CONSTANTS, :pre_constant)
-#
-#  ...
-#
-#  def scan_tokens tokens, options
-#    ...
-#    
-#    elsif scan(/[A-Za-z_][A-Za-z_0-9]*/)
-#      # use it
-#      kind = IDENT_KIND[match]
-#      ...
-class WordList < Hash
-
-  # Creates a new WordList with +default+ as default value.
-  # 
-  # You can activate +caching+ to store the results for every [] request.
-  # 
-  # With caching, methods like +include?+ or +delete+ may no longer behave
-  # as you expect. Therefore, it is recommended to use the [] method only.
-  def initialize default = false, caching = false, &block
-    if block
-      raise ArgumentError, 'Can\'t combine block with caching.' if caching
-      super(&block)
-    else
-      if caching
-        super() do |h, k|
-          h[k] = h.fetch k, default
-        end
-      else
-        super default
-      end
-    end
-  end
-
-  # Add words to the list and associate them with +kind+.
-  # 
-  # Returns +self+, so you can concat add calls.
-  def add words, kind = true
-    words.each do |word|
-      self[word] = kind
-    end
-    self
-  end
-
-end
-
-
-# A CaseIgnoringWordList is like a WordList, only that
-# keys are compared case-insensitively.
-# 
-# Ignoring the text case is realized by sending the +downcase+ message to
-# all keys.
-# 
-# Caching usually makes a CaseIgnoringWordList faster, but it has to be
-# activated explicitely.
-class CaseIgnoringWordList < WordList
-
-  # Creates a new case-insensitive WordList with +default+ as default value.
-  # 
-  # You can activate caching to store the results for every [] request.
-  # This speeds up subsequent lookups for the same word, but also
-  # uses memory.
-  def initialize default = false, caching = false
-    if caching
-      super(default, false) do |h, k|
-        h[k] = h.fetch k.downcase, default
-      end
-    else
-      super(default, false)
-      extend Uncached
-    end
-  end
-  
-  module Uncached  # :nodoc:
-    def [] key
-      super(key.downcase)
-    end
-  end
-
-  # Add +words+ to the list and associate them with +kind+.
-  def add words, kind = true
-    words.each do |word|
-      self[word.downcase] = kind
-    end
-    self
-  end
-
-end
-
-end
-
-__END__
-# check memory consumption
-END {
-  ObjectSpace.each_object(CodeRay::CaseIgnoringWordList) do |wl|
-    p wl.inject(0) { |memo, key, value| memo + key.size + 24 }
-  end
-}
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/file_type.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,255 +0,0 @@
-#!/usr/bin/env ruby
-module CodeRay
-
-# = FileType
-#
-# A simple filetype recognizer.
-#
-# Copyright (c) 2006 by murphy (Kornelius Kalnbach) <murphy rubychan de>
-#
-# License:: LGPL / ask the author
-# Version:: 0.1 (2005-09-01)
-#
-# == Documentation
-#
-#  # determine the type of the given
-#   lang = FileType[ARGV.first]
-#  
-#   # return :plaintext if the file type is unknown
-#   lang = FileType.fetch ARGV.first, :plaintext
-#  
-#   # try the shebang line, too
-#   lang = FileType.fetch ARGV.first, :plaintext, true
-module FileType
-
-  UnknownFileType = Class.new Exception
-
-  class << self
-
-    # Try to determine the file type of the file.
-    #
-    # +filename+ is a relative or absolute path to a file.
-    #
-    # The file itself is only accessed when +read_shebang+ is set to true.
-    # That means you can get filetypes from files that don't exist.
-    def [] filename, read_shebang = false
-      name = File.basename filename
-      ext = File.extname(name).sub(/^\./, '')  # from last dot, delete the leading dot
-      ext2 = filename.to_s[/\.(.*)/, 1]  # from first dot
-
-      type =
-        TypeFromExt[ext] ||
-        TypeFromExt[ext.downcase] ||
-        (TypeFromExt[ext2] if ext2) ||
-        (TypeFromExt[ext2.downcase] if ext2) ||
-        TypeFromName[name] ||
-        TypeFromName[name.downcase]
-      type ||= shebang(filename) if read_shebang
-
-      type
-    end
-
-    def shebang filename
-      begin
-        File.open filename, 'r' do |f|
-          if first_line = f.gets
-            if type = first_line[TypeFromShebang]
-              type.to_sym
-            end
-          end
-        end
-      rescue IOError
-        nil
-      end
-    end
-
-    # This works like Hash#fetch.
-    #
-    # If the filetype cannot be found, the +default+ value
-    # is returned.
-    def fetch filename, default = nil, read_shebang = false
-      if default and block_given?
-        warn 'block supersedes default value argument'
-      end
-
-      unless type = self[filename, read_shebang]
-        return yield if block_given?
-        return default if default
-        raise UnknownFileType, 'Could not determine type of %p.' % filename
-      end
-      type
-    end
-
-  end
-
-  TypeFromExt = {
-    'c' => :c,
-    'css' => :css,
-    'diff' => :diff,
-    'dpr' => :delphi,
-    'groovy' => :groovy,
-    'gvy' => :groovy,
-    'h' => :c,
-    'htm' => :html,
-    'html' => :html,
-    'html.erb' => :rhtml,
-    'java' => :java,
-    'js' => :java_script,
-    'json' => :json,
-    'mab' => :ruby,
-    'pas' => :delphi,
-    'patch' => :diff,
-    'php' => :php,
-    'php3' => :php,
-    'php4' => :php,
-    'php5' => :php,
-    'py' => :python,
-    'py3' => :python,
-    'pyw' => :python,
-    'rake' => :ruby,
-    'raydebug' => :debug,
-    'rb' => :ruby,
-    'rbw' => :ruby,
-    'rhtml' => :rhtml,
-    'rxml' => :ruby,
-    'sch' => :scheme,
-    'sql' => :sql,
-    'ss' => :scheme,
-    'xhtml' => :xhtml,
-    'xml' => :xml,
-    'yaml' => :yaml,
-    'yml' => :yaml,
-  }
-  for cpp_alias in %w[cc cpp cp cxx c++ C hh hpp h++ cu]
-    TypeFromExt[cpp_alias] = :cpp
-  end
-
-  TypeFromShebang = /\b(?:ruby|perl|python|sh)\b/
-
-  TypeFromName = {
-    'Rakefile' => :ruby,
-    'Rantfile' => :ruby,
-  }
-
-end
-
-end
-
-if $0 == __FILE__
-  $VERBOSE = true
-  eval DATA.read, nil, $0, __LINE__ + 4
-end
-
-__END__
-require 'test/unit'
-
-class FileTypeTests < Test::Unit::TestCase
-  
-  include CodeRay
-  
-  def test_fetch
-    assert_raise FileType::UnknownFileType do
-      FileType.fetch ''
-    end
-
-    assert_throws :not_found do
-      FileType.fetch '.' do
-        throw :not_found
-      end
-    end
-
-    assert_equal :default, FileType.fetch('c', :default)
-
-    stderr, fake_stderr = $stderr, Object.new
-    $err = ''
-    def fake_stderr.write x
-      $err << x
-    end
-    $stderr = fake_stderr
-    FileType.fetch('c', :default) { }
-    assert_equal "block supersedes default value argument\n", $err
-    $stderr = stderr
-  end
-
-  def test_ruby
-    assert_equal :ruby, FileType['test.rb']
-    assert_equal :ruby, FileType['test.java.rb']
-    assert_equal :java, FileType['test.rb.java']
-    assert_equal :ruby, FileType['C:\\Program Files\\x\\y\\c\\test.rbw']
-    assert_equal :ruby, FileType['/usr/bin/something/Rakefile']
-    assert_equal :ruby, FileType['~/myapp/gem/Rantfile']
-    assert_equal :ruby, FileType['./lib/tasks\repository.rake']
-    assert_not_equal :ruby, FileType['test_rb']
-    assert_not_equal :ruby, FileType['Makefile']
-    assert_not_equal :ruby, FileType['set.rb/set']
-    assert_not_equal :ruby, FileType['~/projects/blabla/rb']
-  end
-
-  def test_c
-    assert_equal :c, FileType['test.c']
-    assert_equal :c, FileType['C:\\Program Files\\x\\y\\c\\test.h']
-    assert_not_equal :c, FileType['test_c']
-    assert_not_equal :c, FileType['Makefile']
-    assert_not_equal :c, FileType['set.h/set']
-    assert_not_equal :c, FileType['~/projects/blabla/c']
-  end
-
-  def test_cpp
-    assert_equal :cpp, FileType['test.c++']
-    assert_equal :cpp, FileType['test.cxx']
-    assert_equal :cpp, FileType['test.hh']
-    assert_equal :cpp, FileType['test.hpp']
-    assert_equal :cpp, FileType['test.cu']
-    assert_equal :cpp, FileType['test.C']
-    assert_not_equal :cpp, FileType['test.c']
-    assert_not_equal :cpp, FileType['test.h']
-  end
-
-  def test_html
-    assert_equal :html, FileType['test.htm']
-    assert_equal :xhtml, FileType['test.xhtml']
-    assert_equal :xhtml, FileType['test.html.xhtml']
-    assert_equal :rhtml, FileType['_form.rhtml']
-    assert_equal :rhtml, FileType['_form.html.erb']
-  end
-
-  def test_yaml
-    assert_equal :yaml, FileType['test.yml']
-    assert_equal :yaml, FileType['test.yaml']
-    assert_equal :yaml, FileType['my.html.yaml']
-    assert_not_equal :yaml, FileType['YAML']
-  end
-
-  def test_pathname
-    require 'pathname'
-    pn = Pathname.new 'test.rb'
-    assert_equal :ruby, FileType[pn]
-    dir = Pathname.new '/etc/var/blubb'
-    assert_equal :ruby, FileType[dir + pn]
-    assert_equal :cpp, FileType[dir + 'test.cpp']
-  end
-
-  def test_no_shebang
-    dir = './test'
-    if File.directory? dir
-      Dir.chdir dir do
-        assert_equal :c, FileType['test.c']
-      end
-    end
-  end
-  
-  def test_shebang_empty_file
-    require 'tmpdir'
-    tmpfile = File.join(Dir.tmpdir, 'bla')
-    File.open(tmpfile, 'w') { }  # touch
-    assert_equal nil, FileType[tmpfile]
-  end
-  
-  def test_shebang
-    require 'tmpdir'
-    tmpfile = File.join(Dir.tmpdir, 'bla')
-    File.open(tmpfile, 'w') { |f| f.puts '#!/usr/bin/env ruby' }
-    assert_equal :ruby, FileType[tmpfile, true]
-  end
-
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/gzip_simple.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-# =GZip Simple
-#
-# A simplified interface to the gzip library +zlib+ (from the Ruby Standard Library.)
-#
-# Author: murphy (mail to murphy rubychan de)
-#
-# Version: 0.2 (2005.may.28)
-#
-# ==Documentation
-#
-# See +GZip+ module and the +String+ extensions.
-#
-module GZip
-
-  require 'zlib'
-
-  # The default zipping level. 7 zips good and fast.
-  DEFAULT_GZIP_LEVEL = 7
-
-  # Unzips the given string +s+.
-  #
-  # Example:
-  #   require 'gzip_simple'
-  #   print GZip.gunzip(File.read('adresses.gz'))
-  def GZip.gunzip s
-    Zlib::Inflate.inflate s
-  end
-
-  # Zips the given string +s+.
-  #
-  # Example:
-  #   require 'gzip_simple'
-  #   File.open('adresses.gz', 'w') do |file
-  #     file.write GZip.gzip('Mum: 0123 456 789', 9)
-  #   end
-  #
-  # If you provide a +level+, you can control how strong
-  # the string is compressed:
-  # - 0: no compression, only convert to gzip format
-  # - 1: compress fast
-  # - 7: compress more, but still fast (default)
-  # - 8: compress more, slower
-  # - 9: compress best, very slow
-  def GZip.gzip s, level = DEFAULT_GZIP_LEVEL
-    Zlib::Deflate.new(level).deflate s, Zlib::FINISH
-  end
-end
-
-
-# String extensions to use the GZip module.
-#
-# The methods gzip and gunzip provide an even more simple
-# interface to the ZLib:
-#
-#   # create a big string
-#   x = 'a' * 1000
-#   
-#   # zip it
-#   x_gz = x.gzip
-#   
-#   # test the result
-#   puts 'Zipped %d bytes to %d bytes.' % [x.size, x_gz.size]
-#   #-> Zipped 1000 bytes to 19 bytes.
-#   
-#   # unzipping works
-#   p x_gz.gunzip == x  #-> true
-class String
-  # Returns the string, unzipped.
-  # See GZip.gunzip
-  def gunzip
-    GZip.gunzip self
-  end
-  # Replaces the string with its unzipped value.
-  # See GZip.gunzip
-  def gunzip!
-    replace gunzip
-  end
-
-  # Returns the string, zipped.
-  # +level+ is the gzip compression level, see GZip.gzip.
-  def gzip level = GZip::DEFAULT_GZIP_LEVEL
-    GZip.gzip self, level
-  end
-  # Replaces the string with its zipped value.
-  # See GZip.gzip.
-  def gzip!(*args)
-    replace gzip(*args)
-  end
-end
-
-if $0 == __FILE__
-  eval DATA.read, nil, $0, __LINE__+4
-end
-
-__END__
-#CODE
-
-# Testing / Benchmark
-x = 'a' * 1000
-x_gz = x.gzip
-puts 'Zipped %d bytes to %d bytes.' % [x.size, x_gz.size]  #-> Zipped 1000 bytes to 19 bytes.
-p x_gz.gunzip == x  #-> true
-
-require 'benchmark'
-
-INFO = 'packed to %0.3f%%'  # :nodoc:
-
-x = Array.new(100000) { rand(255).chr + 'aaaaaaaaa' + rand(255).chr }.join
-Benchmark.bm(10) do |bm|
-  for level in 0..9
-    bm.report "zip #{level}" do
-      $x = x.gzip level
-    end
-    puts INFO % [100.0 * $x.size / x.size]
-  end
-  bm.report 'zip' do
-    $x = x.gzip
-  end
-  puts INFO % [100.0 * $x.size / x.size]
-  bm.report 'unzip' do
-    $x.gunzip
-  end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/plugin.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,349 +0,0 @@
-module CodeRay
-  
-# = PluginHost
-#
-# A simple subclass plugin system.
-#
-#  Example:
-#    class Generators < PluginHost
-#      plugin_path 'app/generators'
-#    end
-#    
-#    class Generator
-#      extend Plugin
-#      PLUGIN_HOST = Generators
-#    end
-#    
-#    class FancyGenerator < Generator
-#      register_for :fancy
-#    end
-#
-#    Generators[:fancy]  #-> FancyGenerator
-#    # or
-#    CodeRay.require_plugin 'Generators/fancy'
-module PluginHost
-
-  # Raised if Encoders::[] fails because:
-  # * a file could not be found
-  # * the requested Encoder is not registered
-  PluginNotFound = Class.new Exception
-  HostNotFound = Class.new Exception
-
-  PLUGIN_HOSTS = []
-  PLUGIN_HOSTS_BY_ID = {}  # dummy hash
-
-  # Loads all plugins using list and load.
-  def load_all
-    for plugin in list
-      load plugin
-    end
-  end
-
-  # Returns the Plugin for +id+.
-  #
-  # Example:
-  #  yaml_plugin = MyPluginHost[:yaml]
-  def [] id, *args, &blk
-    plugin = validate_id(id)
-    begin
-      plugin = plugin_hash.[] plugin, *args, &blk
-    end while plugin.is_a? Symbol
-    plugin
-  end
-
-  # Alias for +[]+.
-  alias load []
-
-  def require_helper plugin_id, helper_name
-    path = path_to File.join(plugin_id, helper_name)
-    require path
-  end
-
-  class << self
-
-    # Adds the module/class to the PLUGIN_HOSTS list.
-    def extended mod
-      PLUGIN_HOSTS << mod
-    end
-
-    # Warns you that you should not #include this module.
-    def included mod
-      warn "#{name} should not be included. Use extend."
-    end
-
-    # Find the PluginHost for host_id.
-    def host_by_id host_id
-      unless PLUGIN_HOSTS_BY_ID.default_proc
-        ph = Hash.new do |h, a_host_id|
-          for host in PLUGIN_HOSTS
-            h[host.host_id] = host
-          end
-          h.fetch a_host_id, nil
-        end
-        PLUGIN_HOSTS_BY_ID.replace ph
-      end
-      PLUGIN_HOSTS_BY_ID[host_id]
-    end
-
-  end
-
-  # The path where the plugins can be found.
-  def plugin_path *args
-    unless args.empty?
-      @plugin_path = File.expand_path File.join(*args)
-      load_map
-    end
-    @plugin_path
-  end
-
-  # The host's ID.
-  #
-  # If PLUGIN_HOST_ID is not set, it is simply the class name.
-  def host_id
-    if self.const_defined? :PLUGIN_HOST_ID
-      self::PLUGIN_HOST_ID
-    else
-      name
-    end
-  end
-
-  # Map a plugin_id to another.
-  #
-  # Usage: Put this in a file plugin_path/_map.rb.
-  #
-  #  class MyColorHost < PluginHost
-  #    map :navy => :dark_blue,
-  #      :maroon => :brown,
-  #      :luna => :moon
-  #  end
-  def map hash
-    for from, to in hash
-      from = validate_id from
-      to = validate_id to
-      plugin_hash[from] = to unless plugin_hash.has_key? from
-    end
-  end
-
-  # Define the default plugin to use when no plugin is found
-  # for a given id.
-  #
-  # See also map.
-  #
-  #  class MyColorHost < PluginHost
-  #    map :navy => :dark_blue
-  #    default :gray
-  #  end
-  def default id = nil
-    if id
-      id = validate_id id
-      plugin_hash[nil] = id
-    else
-      plugin_hash[nil]
-    end
-  end
-
-  # Every plugin must register itself for one or more
-  # +ids+ by calling register_for, which calls this method.
-  #
-  # See Plugin#register_for.
-  def register plugin, *ids
-    for id in ids
-      unless id.is_a? Symbol
-        raise ArgumentError,
-          "id must be a Symbol, but it was a #{id.class}"
-      end
-      plugin_hash[validate_id(id)] = plugin
-    end
-  end
-
-  # A Hash of plugion_id => Plugin pairs.
-  def plugin_hash
-    @plugin_hash ||= create_plugin_hash
-  end
-
-  # Returns an array of all .rb files in the plugin path.
-  #
-  # The extension .rb is not included.
-  def list
-    Dir[path_to('*')].select do |file|
-      File.basename(file)[/^(?!_)\w+\.rb$/]
-    end.map do |file|
-      File.basename file, '.rb'
-    end
-  end
-
-  # Makes a map of all loaded plugins.
-  def inspect
-    map = plugin_hash.dup
-    map.each do |id, plugin|
-      map[id] = plugin.to_s[/(?>\w+)$/]
-    end
-    "#{name}[#{host_id}]#{map.inspect}"
-  end
-
-protected
-  # Created a new plugin list and stores it to @plugin_hash.
-  def create_plugin_hash
-    @plugin_hash =
-      Hash.new do |h, plugin_id|
-        id = validate_id(plugin_id)
-        path = path_to id
-        begin
-          require path
-        rescue LoadError => boom
-          if h.has_key? nil  # default plugin
-            h[id] = h[nil]
-          else
-            raise PluginNotFound, 'Could not load plugin %p: %s' % [id, boom]
-          end
-        else
-          # Plugin should have registered by now
-          unless h.has_key? id
-            raise PluginNotFound,
-              "No #{self.name} plugin for #{id.inspect} found in #{path}."
-          end
-        end
-        h[id]
-      end
-  end
-
-  # Loads the map file (see map).
-  #
-  # This is done automatically when plugin_path is called.
-  def load_map
-    mapfile = path_to '_map'
-    if File.exist? mapfile
-      require mapfile
-    elsif $VERBOSE
-      warn 'no _map.rb found for %s' % name
-    end
-  end
-
-  # Returns the Plugin for +id+.
-  # Use it like Hash#fetch.
-  #
-  # Example:
-  #  yaml_plugin = MyPluginHost[:yaml, :default]
-  def fetch id, *args, &blk
-    plugin_hash.fetch validate_id(id), *args, &blk
-  end
-
-  # Returns the expected path to the plugin file for the given id.
-  def path_to plugin_id
-    File.join plugin_path, "#{plugin_id}.rb"
-  end
-
-  # Converts +id+ to a Symbol if it is a String,
-  # or returns +id+ if it already is a Symbol.
-  #
-  # Raises +ArgumentError+ for all other objects, or if the
-  # given String includes non-alphanumeric characters (\W).
-  def validate_id id
-    if id.is_a? Symbol or id.nil?
-      id
-    elsif id.is_a? String
-      if id[/\w+/] == id
-        id.downcase.to_sym
-      else
-        raise ArgumentError, "Invalid id: '#{id}' given."
-      end
-    else
-      raise ArgumentError,
-        "String or Symbol expected, but #{id.class} given."
-    end
-  end
-
-end
-
-
-# = Plugin
-#
-#  Plugins have to include this module.
-#
-#  IMPORTANT: use extend for this module.
-#
-#  Example: see PluginHost.
-module Plugin
-
-  def included mod
-    warn "#{name} should not be included. Use extend."
-  end
-
-  # Register this class for the given langs.
-  # Example:
-  #   class MyPlugin < PluginHost::BaseClass
-  #     register_for :my_id
-  #     ...
-  #   end
-  #
-  # See PluginHost.register.
-  def register_for *ids
-    plugin_host.register self, *ids
-  end
-  
-  # Returns the title of the plugin, or sets it to the
-  # optional argument +title+.
-  def title title = nil
-    if title
-      @title = title.to_s
-    else
-      @title ||= name[/([^:]+)$/, 1]
-    end
-  end
-
-  # The host for this Plugin class.
-  def plugin_host host = nil
-    if host and not host.is_a? PluginHost
-      raise ArgumentError,
-        "PluginHost expected, but #{host.class} given."
-    end
-    self.const_set :PLUGIN_HOST, host if host
-    self::PLUGIN_HOST
-  end
-
-  # Require some helper files.
-  #
-  # Example:
-  #
-  #  class MyPlugin < PluginHost::BaseClass
-  #     register_for :my_id
-  #     helper :my_helper
-  #
-  # The above example loads the file myplugin/my_helper.rb relative to the
-  # file in which MyPlugin was defined.
-  # 
-  # You can also load a helper from a different plugin:
-  # 
-  #  helper 'other_plugin/helper_name'
-  def helper *helpers
-    for helper in helpers
-      if helper.is_a?(String) && helper[/\//]
-        self::PLUGIN_HOST.require_helper $`, $'
-      else
-        self::PLUGIN_HOST.require_helper plugin_id, helper.to_s
-      end
-    end
-  end
-
-  # Returns the pulgin id used by the engine.
-  def plugin_id
-    name[/\w+$/].downcase
-  end
-
-end
-
-# Convenience method for plugin loading.
-# The syntax used is:
-#
-#  CodeRay.require_plugin '<Host ID>/<Plugin ID>'
-#
-# Returns the loaded plugin.
-def self.require_plugin path
-  host_id, plugin_id = path.split '/', 2
-  host = PluginHost.host_by_id(host_id)
-  raise PluginHost::HostNotFound,
-    "No host for #{host_id.inspect} found." unless host
-  host.load plugin_id
-end
-
-end
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/helpers/word_list.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,138 +0,0 @@
-module CodeRay
-
-# = WordList
-# 
-# <b>A Hash subclass designed for mapping word lists to token types.</b>
-# 
-# Copyright (c) 2006 by murphy (Kornelius Kalnbach) <murphy rubychan de>
-#
-# License:: LGPL / ask the author
-# Version:: 1.1 (2006-Oct-19)
-#
-# A WordList is a Hash with some additional features.
-# It is intended to be used for keyword recognition.
-#
-# WordList is highly optimized to be used in Scanners,
-# typically to decide whether a given ident is a special token.
-#
-# For case insensitive words use CaseIgnoringWordList.
-#
-# Example:
-#
-#  # define word arrays
-#  RESERVED_WORDS = %w[
-#    asm break case continue default do else
-#    ...
-#  ]
-#  
-#  PREDEFINED_TYPES = %w[
-#    int long short char void
-#    ...
-#  ]
-#  
-#  PREDEFINED_CONSTANTS = %w[
-#    EOF NULL ...
-#  ]
-#  
-#  # make a WordList
-#  IDENT_KIND = WordList.new(:ident).
-#    add(RESERVED_WORDS, :reserved).
-#    add(PREDEFINED_TYPES, :pre_type).
-#    add(PREDEFINED_CONSTANTS, :pre_constant)
-#
-#  ...
-#
-#  def scan_tokens tokens, options
-#    ...
-#    
-#    elsif scan(/[A-Za-z_][A-Za-z_0-9]*/)
-#      # use it
-#      kind = IDENT_KIND[match]
-#      ...
-class WordList < Hash
-
-  # Creates a new WordList with +default+ as default value.
-  # 
-  # You can activate +caching+ to store the results for every [] request.
-  # 
-  # With caching, methods like +include?+ or +delete+ may no longer behave
-  # as you expect. Therefore, it is recommended to use the [] method only.
-  def initialize default = false, caching = false, &block
-    if block
-      raise ArgumentError, 'Can\'t combine block with caching.' if caching
-      super(&block)
-    else
-      if caching
-        super() do |h, k|
-          h[k] = h.fetch k, default
-        end
-      else
-        super default
-      end
-    end
-  end
-
-  # Add words to the list and associate them with +kind+.
-  # 
-  # Returns +self+, so you can concat add calls.
-  def add words, kind = true
-    words.each do |word|
-      self[word] = kind
-    end
-    self
-  end
-
-end
-
-
-# A CaseIgnoringWordList is like a WordList, only that
-# keys are compared case-insensitively.
-# 
-# Ignoring the text case is realized by sending the +downcase+ message to
-# all keys.
-# 
-# Caching usually makes a CaseIgnoringWordList faster, but it has to be
-# activated explicitely.
-class CaseIgnoringWordList < WordList
-
-  # Creates a new case-insensitive WordList with +default+ as default value.
-  # 
-  # You can activate caching to store the results for every [] request.
-  # This speeds up subsequent lookups for the same word, but also
-  # uses memory.
-  def initialize default = false, caching = false
-    if caching
-      super(default, false) do |h, k|
-        h[k] = h.fetch k.downcase, default
-      end
-    else
-      super(default, false)
-      extend Uncached
-    end
-  end
-  
-  module Uncached  # :nodoc:
-    def [] key
-      super(key.downcase)
-    end
-  end
-
-  # Add +words+ to the list and associate them with +kind+.
-  def add words, kind = true
-    words.each do |word|
-      self[word.downcase] = kind
-    end
-    self
-  end
-
-end
-
-end
-
-__END__
-# check memory consumption
-END {
-  ObjectSpace.each_object(CodeRay::CaseIgnoringWordList) do |wl|
-    p wl.inject(0) { |memo, key, value| memo + key.size + 24 }
-  end
-}
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanner.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,292 +0,0 @@
-module CodeRay
-
-  require 'coderay/helpers/plugin'
-
-  # = Scanners
-  #
-  # This module holds the Scanner class and its subclasses.
-  # For example, the Ruby scanner is named CodeRay::Scanners::Ruby
-  # can be found in coderay/scanners/ruby.
-  #
-  # Scanner also provides methods and constants for the register
-  # mechanism and the [] method that returns the Scanner class
-  # belonging to the given lang.
-  #
-  # See PluginHost.
-  module Scanners
-    extend PluginHost
-    plugin_path File.dirname(__FILE__), 'scanners'
-
-    require 'strscan'
-
-    # = Scanner
-    #
-    # The base class for all Scanners.
-    #
-    # It is a subclass of Ruby's great +StringScanner+, which
-    # makes it easy to access the scanning methods inside.
-    #
-    # It is also +Enumerable+, so you can use it like an Array of
-    # Tokens:
-    #
-    #   require 'coderay'
-    #   
-    #   c_scanner = CodeRay::Scanners[:c].new "if (*p == '{') nest++;"
-    #   
-    #   for text, kind in c_scanner
-    #     puts text if kind == :operator
-    #   end
-    #   
-    #   # prints: (*==)++;
-    #
-    # OK, this is a very simple example :)
-    # You can also use +map+, +any?+, +find+ and even +sort_by+,
-    # if you want.
-    class Scanner < StringScanner
-      
-      extend Plugin
-      plugin_host Scanners
-
-      # Raised if a Scanner fails while scanning
-      ScanError = Class.new(Exception)
-
-      require 'coderay/helpers/word_list'
-
-      # The default options for all scanner classes.
-      #
-      # Define @default_options for subclasses.
-      DEFAULT_OPTIONS = { :stream => false }
-      
-      KINDS_NOT_LOC = [:comment, :doctype]
-
-      class << self
-
-        # Returns if the Scanner can be used in streaming mode.
-        def streamable?
-          is_a? Streamable
-        end
-
-        def normify code
-          code = code.to_s
-          if code.respond_to? :force_encoding
-            debug, $DEBUG = $DEBUG, false
-            begin
-              code.force_encoding 'utf-8'
-              code[/\z/]  # raises an ArgumentError when code contains a non-UTF-8 char
-            rescue ArgumentError
-              code.force_encoding 'binary'
-            ensure
-              $DEBUG = debug
-            end
-          end
-          code.to_unix
-        end
-        
-        def file_extension extension = nil
-          if extension
-            @file_extension = extension.to_s
-          else
-            @file_extension ||= plugin_id.to_s
-          end
-        end
-
-      end
-
-=begin
-## Excluded for speed reasons; protected seems to make methods slow.
-
-  # Save the StringScanner methods from being called.
-  # This would not be useful for highlighting.
-  strscan_public_methods =
-    StringScanner.instance_methods -
-    StringScanner.ancestors[1].instance_methods
-  protected(*strscan_public_methods)
-=end
-
-      # Create a new Scanner.
-      #
-      # * +code+ is the input String and is handled by the superclass
-      #   StringScanner.
-      # * +options+ is a Hash with Symbols as keys.
-      #   It is merged with the default options of the class (you can
-      #   overwrite default options here.)
-      # * +block+ is the callback for streamed highlighting.
-      #
-      # If you set :stream to +true+ in the options, the Scanner uses a
-      # TokenStream with the +block+ as callback to handle the tokens.
-      #
-      # Else, a Tokens object is used.
-      def initialize code='', options = {}, &block
-        raise "I am only the basic Scanner class. I can't scan "\
-          "anything. :( Use my subclasses." if self.class == Scanner
-        
-        @options = self.class::DEFAULT_OPTIONS.merge options
-
-        super Scanner.normify(code)
-
-        @tokens = options[:tokens]
-        if @options[:stream]
-          warn "warning in CodeRay::Scanner.new: :stream is set, "\
-            "but no block was given" unless block_given?
-          raise NotStreamableError, self unless kind_of? Streamable
-          @tokens ||= TokenStream.new(&block)
-        else
-          warn "warning in CodeRay::Scanner.new: Block given, "\
-            "but :stream is #{@options[:stream]}" if block_given?
-          @tokens ||= Tokens.new
-        end
-        @tokens.scanner = self
-
-        setup
-      end
-
-      def reset
-        super
-        reset_instance
-      end
-
-      def string= code
-        code = Scanner.normify(code)
-        super code
-        reset_instance
-      end
-
-      # More mnemonic accessor name for the input string.
-      alias code string
-      alias code= string=
-
-      # Returns the Plugin ID for this scanner.
-      def lang
-        self.class.plugin_id
-      end
-
-      # Scans the code and returns all tokens in a Tokens object.
-      def tokenize new_string=nil, options = {}
-        options = @options.merge(options)
-        self.string = new_string if new_string
-        @cached_tokens =
-          if @options[:stream]  # :stream must have been set already
-            reset unless new_string
-            scan_tokens @tokens, options
-            @tokens
-          else
-            scan_tokens @tokens, options
-          end
-      end
-
-      def tokens
-        @cached_tokens ||= tokenize
-      end
-      
-      # Whether the scanner is in streaming mode.
-      def streaming?
-        !!@options[:stream]
-      end
-
-      # Traverses the tokens.
-      def each &block
-        raise ArgumentError,
-          'Cannot traverse TokenStream.' if @options[:stream]
-        tokens.each(&block)
-      end
-      include Enumerable
-
-      # The current line position of the scanner.
-      #
-      # Beware, this is implemented inefficiently. It should be used
-      # for debugging only.
-      def line
-        string[0..pos].count("\n") + 1
-      end
-      
-      def column pos = self.pos
-        return 0 if pos <= 0
-        string = string()
-        if string.respond_to?(:bytesize) && (defined?(@bin_string) || string.bytesize != string.size)
-          @bin_string ||= string.dup.force_encoding('binary')
-          string = @bin_string
-        end
-        pos - (string.rindex(?\n, pos) || 0)
-      end
-      
-      def marshal_dump
-        @options
-      end
-      
-      def marshal_load options
-        @options = options
-      end
-
-    protected
-
-      # Can be implemented by subclasses to do some initialization
-      # that has to be done once per instance.
-      #
-      # Use reset for initialization that has to be done once per
-      # scan.
-      def setup
-      end
-
-      # This is the central method, and commonly the only one a
-      # subclass implements.
-      #
-      # Subclasses must implement this method; it must return +tokens+
-      # and must only use Tokens#<< for storing scanned tokens!
-      def scan_tokens tokens, options
-        raise NotImplementedError,
-          "#{self.class}#scan_tokens not implemented."
-      end
-
-      def reset_instance
-        @tokens.clear unless @options[:keep_tokens]
-        @cached_tokens = nil
-        @bin_string = nil if defined? @bin_string
-      end
-
-      # Scanner error with additional status information
-      def raise_inspect msg, tokens, state = 'No state given!', ambit = 30
-        raise ScanError, <<-EOE % [
-
-
-***ERROR in %s: %s (after %d tokens)
-
-tokens:
-%s
-
-current line: %d  column: %d  pos: %d
-matched: %p  state: %p
-bol? = %p,  eos? = %p
-
-surrounding code:
-%p  ~~  %p
-
-
-***ERROR***
-
-        EOE
-          File.basename(caller[0]),
-          msg,
-          tokens.size,
-          tokens.last(10).map { |t| t.inspect }.join("\n"),
-          line, column, pos,
-          matched, state, bol?, eos?,
-          string[pos - ambit, ambit],
-          string[pos, ambit],
-        ]
-      end
-
-    end
-
-  end
-end
-
-class String
-  # I love this hack. It seems to silence all dos/unix/mac newline problems.
-  def to_unix
-    if index ?\r
-      gsub(/\r\n?/, "\n")
-    else
-      self
-    end
-  end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,782 +0,0 @@
-10
-
-dir
-4732
-http://redmine.rubyforge.org/svn/trunk/vendor/plugins/coderay-0.9.2/lib/coderay/scanners
-http://redmine.rubyforge.org/svn
-
-
-
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-e93f8b46-1217-0410-a6f0-8f06a7374b81
-
-ruby
-dir
-
-java
-dir
-
-ruby.rb
-file
-
-
-
-
-2010-09-23T14:37:45.675761Z
-4a49513a2bda4483a1bfaeba8e57fb2c
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-13715
-
-python.rb
-file
-
-
-
-
-2010-09-23T14:37:45.675761Z
-939e009d9b197cb6437646be82c02982
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-9190
-
-java.rb
-file
-
-
-
-
-2010-09-23T14:37:45.671759Z
-c812fce5db1da4af753e919407494271
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5046
-
-c.rb
-file
-
-
-
-
-2010-09-23T14:37:45.667815Z
-299db2bdce8368d0bc6d90f5839c87ee
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5408
-
-cpp.rb
-file
-
-
-
-
-2010-09-23T14:37:45.667815Z
-afc4a4b0842e5efdafe98f6c5a10810e
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-6286
-
-groovy.rb
-file
-
-
-
-
-2010-09-23T14:37:45.671759Z
-7fc1acca7ff04fa00160349b3a1b543e
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-8521
-
-rhtml.rb
-file
-
-
-
-
-2010-09-23T14:37:45.675761Z
-456da0b0587037dce29f70bdb4d42253
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1526
-
-debug.rb
-file
-
-
-
-
-2010-09-23T14:37:45.671759Z
-94bdd6c948cb9c3d21ef94a5cec19e05
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-1281
-
-php.rb
-file
-
-
-
-
-2010-09-23T14:37:45.675761Z
-90f9a8053ea7eaef089e5140188c9950
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-23501
-
-css.rb
-file
-
-
-
-
-2010-09-23T14:37:45.671759Z
-dfbdae0781ad8376342b8c0f5733c2ba
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-5548
-
-sql.rb
-file
-
-
-
-
-2010-09-23T14:37:45.679790Z
-dd1580e74abffd4c30a8b941b3903f07
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4727
-
-xml.rb
-file
-
-
-
-
-2010-09-23T14:37:45.679790Z
-798309ac45aa9d4ccc159242f3a6f150
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-211
-
-yaml.rb
-file
-
-
-
-
-2010-09-23T14:37:45.679790Z
-f62eab25adbef42e92cad3f5463f91ac
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4261
-
-html.rb
-file
-
-
-
-
-2010-09-23T14:37:45.671759Z
-9a21ea0438e6eea6962a27aa15f55645
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4247
-
-scheme.rb
-file
-
-
-
-
-2010-09-23T14:37:45.679790Z
-f6c296bbb33704ec2a03725b01e06719
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4939
-
-java_script.rb
-file
-
-
-
-
-2010-09-23T14:37:45.675761Z
-821536789acfa80a62a4fb54ab6f31d4
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-6722
-
-delphi.rb
-file
-
-
-
-
-2010-09-23T14:37:45.671759Z
-182116a4525447d4faed874dfb790277
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-4504
-
-nitro_xhtml.rb
-file
-
-
-
-
-2010-09-23T14:37:45.675761Z
-f7d82e60f68fe6c9d46b63e63f6ec9f6
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2858
-
-plaintext.rb
-file
-
-
-
-
-2010-09-23T14:37:45.675761Z
-ae16e40b3db78a5d8c793165085f5db9
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-316
-
-diff.rb
-file
-
-
-
-
-2010-09-23T14:37:45.671759Z
-fbe0f5af1885b8c58e55c9ba2891ce49
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3024
-
-json.rb
-file
-
-
-
-
-2010-09-23T14:37:45.675761Z
-0284131b18751e532a2c5e2dd8d51426
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-2940
-
-_map.rb
-file
-
-
-
-
-2010-09-23T14:37:45.667815Z
-b3eadcc78242cf25ba0ab3205d6a2b61
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-413
-
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/_map.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/c.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/cpp.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/css.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/debug.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/delphi.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/diff.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/groovy.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/html.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/java.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/java_script.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/json.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/nitro_xhtml.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/php.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/plaintext.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/python.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/rhtml.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/ruby.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/scheme.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/sql.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/xml.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/prop-base/yaml.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/_map.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-module CodeRay
-module Scanners
-
-  map \
-    :h => :c,
-    :cplusplus => :cpp,
-    :'c++' => :cpp,
-    :ecma => :java_script,
-    :ecmascript => :java_script,
-    :ecma_script => :java_script,
-    :irb => :ruby,
-    :javascript => :java_script,
-    :js => :java_script,
-    :nitro => :nitro_xhtml,
-    :pascal => :delphi,
-    :plain => :plaintext,
-    :xhtml => :html,
-    :yml => :yaml
-
-  default :plain
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/c.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,203 +0,0 @@
-module CodeRay
-module Scanners
-
-  class C < Scanner
-
-    include Streamable
-    
-    register_for :c
-    file_extension 'c'
-
-    RESERVED_WORDS = [
-      'asm', 'break', 'case', 'continue', 'default', 'do',
-      'else', 'enum', 'for', 'goto', 'if', 'return',
-      'sizeof', 'struct', 'switch', 'typedef', 'union', 'while',
-      'restrict',  # added in C99
-    ]
-
-    PREDEFINED_TYPES = [
-      'int', 'long', 'short', 'char',
-      'signed', 'unsigned', 'float', 'double',
-      'bool', 'complex',  # added in C99
-    ]
-
-    PREDEFINED_CONSTANTS = [
-      'EOF', 'NULL',
-      'true', 'false',  # added in C99
-    ]
-    DIRECTIVES = [
-      'auto', 'extern', 'register', 'static', 'void',
-      'const', 'volatile',  # added in C89
-      'inline',  # added in C99
-    ]
-
-    IDENT_KIND = WordList.new(:ident).
-      add(RESERVED_WORDS, :reserved).
-      add(PREDEFINED_TYPES, :pre_type).
-      add(DIRECTIVES, :directive).
-      add(PREDEFINED_CONSTANTS, :pre_constant)
-
-    ESCAPE = / [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
-
-    def scan_tokens tokens, options
-
-      state = :initial
-      label_expected = true
-      case_expected = false
-      label_expected_before_preproc_line = nil
-      in_preproc_line = false
-
-      until eos?
-
-        kind = nil
-        match = nil
-        
-        case state
-
-        when :initial
-
-          if match = scan(/ \s+ | \\\n /x)
-            if in_preproc_line && match != "\\\n" && match.index(?\n)
-              in_preproc_line = false
-              label_expected = label_expected_before_preproc_line
-            end
-            tokens << [match, :space]
-            next
-
-          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
-            kind = :comment
-
-          elsif match = scan(/ \# \s* if \s* 0 /x)
-            match << scan_until(/ ^\# (?:elif|else|endif) .*? $ | \z /xm) unless eos?
-            kind = :comment
-
-          elsif match = scan(/ [-+*=<>?:;,!&^|()\[\]{}~%]+ | \/=? | \.(?!\d) /x)
-            label_expected = match =~ /[;\{\}]/
-            if case_expected
-              label_expected = true if match == ':'
-              case_expected = false
-            end
-            kind = :operator
-
-          elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
-            kind = IDENT_KIND[match]
-            if kind == :ident && label_expected && !in_preproc_line && scan(/:(?!:)/)
-              kind = :label
-              match << matched
-            else
-              label_expected = false
-              if kind == :reserved
-                case match
-                when 'case', 'default'
-                  case_expected = true
-                end
-              end
-            end
-
-          elsif scan(/\$/)
-            kind = :ident
-          
-          elsif match = scan(/L?"/)
-            tokens << [:open, :string]
-            if match[0] == ?L
-              tokens << ['L', :modifier]
-              match = '"'
-            end
-            state = :string
-            kind = :delimiter
-
-          elsif scan(/#[ \t]*(\w*)/)
-            kind = :preprocessor
-            in_preproc_line = true
-            label_expected_before_preproc_line = label_expected
-            state = :include_expected if self[1] == 'include'
-
-          elsif scan(/ L?' (?: [^\'\n\\] | \\ #{ESCAPE} )? '? /ox)
-            label_expected = false
-            kind = :char
-
-          elsif scan(/0[xX][0-9A-Fa-f]+/)
-            label_expected = false
-            kind = :hex
-
-          elsif scan(/(?:0[0-7]+)(?![89.eEfF])/)
-            label_expected = false
-            kind = :oct
-
-          elsif scan(/(?:\d+)(?![.eEfF])L?L?/)
-            label_expected = false
-            kind = :integer
-
-          elsif scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
-            label_expected = false
-            kind = :float
-
-          else
-            getch
-            kind = :error
-
-          end
-
-        when :string
-          if scan(/[^\\\n"]+/)
-            kind = :content
-          elsif scan(/"/)
-            tokens << ['"', :delimiter]
-            tokens << [:close, :string]
-            state = :initial
-            label_expected = false
-            next
-          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
-            kind = :char
-          elsif scan(/ \\ | $ /x)
-            tokens << [:close, :string]
-            kind = :error
-            state = :initial
-            label_expected = false
-          else
-            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
-          end
-
-        when :include_expected
-          if scan(/<[^>\n]+>?|"[^"\n\\]*(?:\\.[^"\n\\]*)*"?/)
-            kind = :include
-            state = :initial
-
-          elsif match = scan(/\s+/)
-            kind = :space
-            state = :initial if match.index ?\n
-
-          else
-            state = :initial
-            next
-
-          end
-
-        else
-          raise_inspect 'Unknown state', tokens
-
-        end
-
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-
-        tokens << [match, kind]
-
-      end
-
-      if state == :string
-        tokens << [:close, :string]
-      end
-
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/cpp.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,228 +0,0 @@
-module CodeRay
-module Scanners
-
-  class CPlusPlus < Scanner
-
-    include Streamable
-    
-    register_for :cpp
-    file_extension 'cpp'
-    title 'C++'
-    
-    # http://www.cppreference.com/wiki/keywords/start
-    RESERVED_WORDS = [
-      'and', 'and_eq', 'asm', 'bitand', 'bitor', 'break',
-      'case', 'catch', 'class', 'compl', 'const_cast',
-      'continue', 'default', 'delete', 'do', 'dynamic_cast', 'else',
-      'enum', 'export', 'for', 'goto', 'if', 'namespace', 'new',
-      'not', 'not_eq', 'or', 'or_eq', 'reinterpret_cast', 'return',
-      'sizeof', 'static_cast', 'struct', 'switch', 'template',
-      'throw', 'try', 'typedef', 'typeid', 'typename', 'union',
-      'while', 'xor', 'xor_eq'
-    ]
-
-    PREDEFINED_TYPES = [
-      'bool', 'char', 'double', 'float', 'int', 'long',
-      'short', 'signed', 'unsigned', 'wchar_t', 'string'
-    ]
-    PREDEFINED_CONSTANTS = [
-      'false', 'true',
-      'EOF', 'NULL',
-    ]
-    PREDEFINED_VARIABLES = [
-      'this'
-    ]
-    DIRECTIVES = [
-      'auto', 'const', 'explicit', 'extern', 'friend', 'inline', 'mutable', 'operator',
-      'private', 'protected', 'public', 'register', 'static', 'using', 'virtual', 'void',
-      'volatile'
-    ]
-
-    IDENT_KIND = WordList.new(:ident).
-      add(RESERVED_WORDS, :reserved).
-      add(PREDEFINED_TYPES, :pre_type).
-      add(PREDEFINED_VARIABLES, :local_variable).
-      add(DIRECTIVES, :directive).
-      add(PREDEFINED_CONSTANTS, :pre_constant)
-
-    ESCAPE = / [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
-
-    def scan_tokens tokens, options
-
-      state = :initial
-      label_expected = true
-      case_expected = false
-      label_expected_before_preproc_line = nil
-      in_preproc_line = false
-
-      until eos?
-
-        kind = nil
-        match = nil
-        
-        case state
-
-        when :initial
-
-          if match = scan(/ \s+ | \\\n /x)
-            if in_preproc_line && match != "\\\n" && match.index(?\n)
-              in_preproc_line = false
-              label_expected = label_expected_before_preproc_line
-            end
-            tokens << [match, :space]
-            next
-
-          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
-            kind = :comment
-
-          elsif match = scan(/ \# \s* if \s* 0 /x)
-            match << scan_until(/ ^\# (?:elif|else|endif) .*? $ | \z /xm) unless eos?
-            kind = :comment
-
-          elsif match = scan(/ [-+*=<>?:;,!&^|()\[\]{}~%]+ | \/=? | \.(?!\d) /x)
-            label_expected = match =~ /[;\{\}]/
-            if case_expected
-              label_expected = true if match == ':'
-              case_expected = false
-            end
-            kind = :operator
-
-          elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
-            kind = IDENT_KIND[match]
-            if kind == :ident && label_expected && !in_preproc_line && scan(/:(?!:)/)
-              kind = :label
-              match << matched
-            else
-              label_expected = false
-              if kind == :reserved
-                case match
-                when 'class'
-                  state = :class_name_expected
-                when 'case', 'default'
-                  case_expected = true
-                end
-              end
-            end
-
-          elsif scan(/\$/)
-            kind = :ident
-          
-          elsif match = scan(/L?"/)
-            tokens << [:open, :string]
-            if match[0] == ?L
-              tokens << ['L', :modifier]
-              match = '"'
-            end
-            state = :string
-            kind = :delimiter
-
-          elsif scan(/#[ \t]*(\w*)/)
-            kind = :preprocessor
-            in_preproc_line = true
-            label_expected_before_preproc_line = label_expected
-            state = :include_expected if self[1] == 'include'
-
-          elsif scan(/ L?' (?: [^\'\n\\] | \\ #{ESCAPE} )? '? /ox)
-            label_expected = false
-            kind = :char
-
-          elsif scan(/0[xX][0-9A-Fa-f]+/)
-            label_expected = false
-            kind = :hex
-
-          elsif scan(/(?:0[0-7]+)(?![89.eEfF])/)
-            label_expected = false
-            kind = :oct
-
-          elsif scan(/(?:\d+)(?![.eEfF])L?L?/)
-            label_expected = false
-            kind = :integer
-
-          elsif scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
-            label_expected = false
-            kind = :float
-
-          else
-            getch
-            kind = :error
-
-          end
-
-        when :string
-          if scan(/[^\\"]+/)
-            kind = :content
-          elsif scan(/"/)
-            tokens << ['"', :delimiter]
-            tokens << [:close, :string]
-            state = :initial
-            label_expected = false
-            next
-          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
-            kind = :char
-          elsif scan(/ \\ | $ /x)
-            tokens << [:close, :string]
-            kind = :error
-            state = :initial
-            label_expected = false
-          else
-            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
-          end
-
-        when :include_expected
-          if scan(/<[^>\n]+>?|"[^"\n\\]*(?:\\.[^"\n\\]*)*"?/)
-            kind = :include
-            state = :initial
-
-          elsif match = scan(/\s+/)
-            kind = :space
-            state = :initial if match.index ?\n
-
-          else
-            state = :initial
-            next
-
-          end
-        
-        when :class_name_expected
-          if scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
-            kind = :class
-            state = :initial
-
-          elsif match = scan(/\s+/)
-            kind = :space
-
-          else
-            getch
-            kind = :error
-            state = :initial
-
-          end
-          
-        else
-          raise_inspect 'Unknown state', tokens
-
-        end
-
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-
-        tokens << [match, kind]
-
-      end
-
-      if state == :string
-        tokens << [:close, :string]
-      end
-
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/css.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,210 +0,0 @@
-module CodeRay
-module Scanners
-
-  class CSS < Scanner
-
-    register_for :css
-
-    KINDS_NOT_LOC = [
-      :comment,
-      :class, :pseudo_class, :type,
-      :constant, :directive,
-      :key, :value, :operator, :color, :float,
-      :error, :important,
-    ]
-    
-    module RE
-      NonASCII = /[\x80-\xFF]/
-      Hex = /[0-9a-fA-F]/
-      Unicode = /\\#{Hex}{1,6}(?:\r\n|\s)?/ # differs from standard because it allows uppercase hex too
-      Escape = /#{Unicode}|\\[^\r\n\f0-9a-fA-F]/
-      NMChar = /[-_a-zA-Z0-9]|#{NonASCII}|#{Escape}/
-      NMStart = /[_a-zA-Z]|#{NonASCII}|#{Escape}/
-      NL = /\r\n|\r|\n|\f/
-      String1 = /"(?:[^\n\r\f\\"]|\\#{NL}|#{Escape})*"?/  # FIXME: buggy regexp
-      String2 = /'(?:[^\n\r\f\\']|\\#{NL}|#{Escape})*'?/  # FIXME: buggy regexp
-      String = /#{String1}|#{String2}/
-
-      HexColor = /#(?:#{Hex}{6}|#{Hex}{3})/
-      Color = /#{HexColor}/
-
-      Num = /-?(?:[0-9]+|[0-9]*\.[0-9]+)/
-      Name = /#{NMChar}+/
-      Ident = /-?#{NMStart}#{NMChar}*/
-      AtKeyword = /@#{Ident}/
-      Percentage = /#{Num}%/
-
-      reldimensions = %w[em ex px]
-      absdimensions = %w[in cm mm pt pc]
-      Unit = Regexp.union(*(reldimensions + absdimensions))
-
-      Dimension = /#{Num}#{Unit}/
-
-      Comment = %r! /\* (?: .*? \*/ | .* ) !mx
-      Function = /(?:url|alpha)\((?:[^)\n\r\f]|\\\))*\)?/
-
-      Id = /##{Name}/
-      Class = /\.#{Name}/
-      PseudoClass = /:#{Name}/
-      AttributeSelector = /\[[^\]]*\]?/
-
-    end
-
-    def scan_tokens tokens, options
-      
-      value_expected = nil
-      states = [:initial]
-
-      until eos?
-
-        kind = nil
-        match = nil
-
-        if scan(/\s+/)
-          kind = :space
-
-        elsif case states.last
-          when :initial, :media
-            if scan(/(?>#{RE::Ident})(?!\()|\*/ox)
-              kind = :type
-            elsif scan RE::Class
-              kind = :class
-            elsif scan RE::Id
-              kind = :constant
-            elsif scan RE::PseudoClass
-              kind = :pseudo_class
-            elsif match = scan(RE::AttributeSelector)
-              # TODO: Improve highlighting inside of attribute selectors.
-              tokens << [:open, :string]
-              tokens << [match[0,1], :delimiter]
-              tokens << [match[1..-2], :content] if match.size > 2
-              tokens << [match[-1,1], :delimiter] if match[-1] == ?]
-              tokens << [:close, :string]
-              next
-            elsif match = scan(/@media/)
-              kind = :directive
-              states.push :media_before_name
-            end
-          
-          when :block
-            if scan(/(?>#{RE::Ident})(?!\()/ox)
-              if value_expected
-                kind = :value
-              else
-                kind = :key
-              end
-            end
-
-          when :media_before_name
-            if scan RE::Ident
-              kind = :type
-              states[-1] = :media_after_name
-            end
-          
-          when :media_after_name
-            if scan(/\{/)
-              kind = :operator
-              states[-1] = :media
-            end
-          
-          when :comment
-            if scan(/(?:[^*\s]|\*(?!\/))+/)
-              kind = :comment
-            elsif scan(/\*\//)
-              kind = :comment
-              states.pop
-            elsif scan(/\s+/)
-              kind = :space
-            end
-
-          else
-            raise_inspect 'Unknown state', tokens
-
-          end
-
-        elsif scan(/\/\*/)
-          kind = :comment
-          states.push :comment
-
-        elsif scan(/\{/)
-          value_expected = false
-          kind = :operator
-          states.push :block
-
-        elsif scan(/\}/)
-          value_expected = false
-          if states.last == :block || states.last == :media
-            kind = :operator
-            states.pop
-          else
-            kind = :error
-          end
-
-        elsif match = scan(/#{RE::String}/o)
-          tokens << [:open, :string]
-          tokens << [match[0, 1], :delimiter]
-          tokens << [match[1..-2], :content] if match.size > 2
-          tokens << [match[-1, 1], :delimiter] if match.size >= 2
-          tokens << [:close, :string]
-          next
-
-        elsif match = scan(/#{RE::Function}/o)
-          tokens << [:open, :string]
-          start = match[/^\w+\(/]
-          tokens << [start, :delimiter]
-          if match[-1] == ?)
-            tokens << [match[start.size..-2], :content]
-            tokens << [')', :delimiter]
-          else
-            tokens << [match[start.size..-1], :content]
-          end
-          tokens << [:close, :string]
-          next
-
-        elsif scan(/(?: #{RE::Dimension} | #{RE::Percentage} | #{RE::Num} )/ox)
-          kind = :float
-
-        elsif scan(/#{RE::Color}/o)
-          kind = :color
-
-        elsif scan(/! *important/)
-          kind = :important
-
-        elsif scan(/rgb\([^()\n]*\)?/)
-          kind = :color
-
-        elsif scan(/#{RE::AtKeyword}/o)
-          kind = :directive
-
-        elsif match = scan(/ [+>:;,.=()\/] /x)
-          if match == ':'
-            value_expected = true
-          elsif match == ';'
-            value_expected = false
-          end
-          kind = :operator
-
-        else
-          getch
-          kind = :error
-
-        end
-
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-
-        tokens << [match, kind]
-
-      end
-
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/debug.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-module CodeRay
-module Scanners
-
-  # = Debug Scanner
-  class Debug < Scanner
-
-    include Streamable
-    register_for :debug
-    file_extension 'raydebug'
-    title 'CodeRay Token Dump'
-
-  protected
-    def scan_tokens tokens, options
-
-      opened_tokens = []
-
-      until eos?
-
-        kind = nil
-        match = nil
-
-          if scan(/\s+/)
-            tokens << [matched, :space]
-            next
-            
-          elsif scan(/ (\w+) \( ( [^\)\\]* ( \\. [^\)\\]* )* ) \) /x)
-            kind = self[1].to_sym
-            match = self[2].gsub(/\\(.)/, '\1')
-            
-          elsif scan(/ (\w+) < /x)
-            kind = self[1].to_sym
-            opened_tokens << kind
-            match = :open
-            
-          elsif !opened_tokens.empty? && scan(/ > /x)
-            kind = opened_tokens.pop || :error
-            match = :close
-            
-          else
-            kind = :error
-            getch
-
-          end
-                  
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-
-        tokens << [match, kind]
-        
-      end
-      
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/delphi.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-module CodeRay
-module Scanners
-  
-  class Delphi < Scanner
-
-    register_for :delphi
-    file_extension 'pas'
-    
-    RESERVED_WORDS = [
-      'and', 'array', 'as', 'at', 'asm', 'at', 'begin', 'case', 'class',
-      'const', 'constructor', 'destructor', 'dispinterface', 'div', 'do',
-      'downto', 'else', 'end', 'except', 'exports', 'file', 'finalization',
-      'finally', 'for', 'function', 'goto', 'if', 'implementation', 'in',
-      'inherited', 'initialization', 'inline', 'interface', 'is', 'label',
-      'library', 'mod', 'nil', 'not', 'object', 'of', 'or', 'out', 'packed',
-      'procedure', 'program', 'property', 'raise', 'record', 'repeat',
-      'resourcestring', 'set', 'shl', 'shr', 'string', 'then', 'threadvar',
-      'to', 'try', 'type', 'unit', 'until', 'uses', 'var', 'while', 'with',
-      'xor', 'on'
-    ]
-
-    DIRECTIVES = [
-      'absolute', 'abstract', 'assembler', 'at', 'automated', 'cdecl',
-      'contains', 'deprecated', 'dispid', 'dynamic', 'export',
-      'external', 'far', 'forward', 'implements', 'local', 
-      'near', 'nodefault', 'on', 'overload', 'override',
-      'package', 'pascal', 'platform', 'private', 'protected', 'public',
-      'published', 'read', 'readonly', 'register', 'reintroduce',
-      'requires', 'resident', 'safecall', 'stdcall', 'stored', 'varargs',
-      'virtual', 'write', 'writeonly'
-    ]
-
-    IDENT_KIND = CaseIgnoringWordList.new(:ident).
-      add(RESERVED_WORDS, :reserved).
-      add(DIRECTIVES, :directive)
-    
-    NAME_FOLLOWS = CaseIgnoringWordList.new(false).
-      add(%w(procedure function .))
-
-  private
-    def scan_tokens tokens, options
-
-      state = :initial
-      last_token = ''
-
-      until eos?
-
-        kind = nil
-        match = nil
-
-        if state == :initial
-          
-          if scan(/ \s+ /x)
-            tokens << [matched, :space]
-            next
-            
-          elsif scan(%r! \{ \$ [^}]* \}? | \(\* \$ (?: .*? \*\) | .* ) !mx)
-            tokens << [matched, :preprocessor]
-            next
-            
-          elsif scan(%r! // [^\n]* | \{ [^}]* \}? | \(\* (?: .*? \*\) | .* ) !mx)
-            tokens << [matched, :comment]
-            next
-            
-          elsif match = scan(/ <[>=]? | >=? | :=? | [-+=*\/;,@\^|\(\)\[\]] | \.\. /x)
-            kind = :operator
-          
-          elsif match = scan(/\./)
-            kind = :operator
-            if last_token == 'end'
-              tokens << [match, kind]
-              next
-            end
-            
-          elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
-            kind = NAME_FOLLOWS[last_token] ? :ident : IDENT_KIND[match]
-            
-          elsif match = scan(/ ' ( [^\n']|'' ) (?:'|$) /x)
-            tokens << [:open, :char]
-            tokens << ["'", :delimiter]
-            tokens << [self[1], :content]
-            tokens << ["'", :delimiter]
-            tokens << [:close, :char]
-            next
-            
-          elsif match = scan(/ ' /x)
-            tokens << [:open, :string]
-            state = :string
-            kind = :delimiter
-            
-          elsif scan(/ \# (?: \d+ | \$[0-9A-Fa-f]+ ) /x)
-            kind = :char
-            
-          elsif scan(/ \$ [0-9A-Fa-f]+ /x)
-            kind = :hex
-            
-          elsif scan(/ (?: \d+ ) (?![eE]|\.[^.]) /x)
-            kind = :integer
-            
-          elsif scan(/ \d+ (?: \.\d+ (?: [eE][+-]? \d+ )? | [eE][+-]? \d+ ) /x)
-            kind = :float
-
-          else
-            kind = :error
-            getch
-
-          end
-          
-        elsif state == :string
-          if scan(/[^\n']+/)
-            kind = :content
-          elsif scan(/''/)
-            kind = :char
-          elsif scan(/'/)
-            tokens << ["'", :delimiter]
-            tokens << [:close, :string]
-            state = :initial
-            next
-          elsif scan(/\n/)
-            tokens << [:close, :string]
-            kind = :error
-            state = :initial
-          else
-            raise "else case \' reached; %p not handled." % peek(1), tokens
-          end
-          
-        else
-          raise 'else-case reached', tokens
-          
-        end
-        
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens, state
-        end
-        raise_inspect 'Empty token', tokens unless match
-
-        last_token = match
-        tokens << [match, kind]
-        
-      end
-      
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/diff.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,0 @@
-module CodeRay
-module Scanners
-  
-  class Diff < Scanner
-    
-    register_for :diff
-    title 'diff output'
-    
-    def scan_tokens tokens, options
-      
-      line_kind = nil
-      state = :initial
-      
-      until eos?
-        kind = match = nil
-        
-        if match = scan(/\n/)
-          if line_kind
-            tokens << [:end_line, line_kind]
-            line_kind = nil
-          end
-          tokens << [match, :space]
-          next
-        end
-        
-        case state
-        
-        when :initial
-          if match = scan(/--- |\+\+\+ |=+|_+/)
-            tokens << [:begin_line, line_kind = :head]
-            tokens << [match, :head]
-            next unless match = scan(/.+/)
-            kind = :plain
-          elsif match = scan(/Index: |Property changes on: /)
-            tokens << [:begin_line, line_kind = :head]
-            tokens << [match, :head]
-            next unless match = scan(/.+/)
-            kind = :plain
-          elsif match = scan(/Added: /)
-            tokens << [:begin_line, line_kind = :head]
-            tokens << [match, :head]
-            next unless match = scan(/.+/)
-            kind = :plain
-            state = :added
-          elsif match = scan(/\\ /)
-            tokens << [:begin_line, line_kind = :change]
-            tokens << [match, :change]
-            next unless match = scan(/.+/)
-            kind = :plain
-          elsif scan(/(@@)((?>[^@\n]*))(@@)/)
-            tokens << [:begin_line, line_kind = :change]
-            tokens << [self[1], :change]
-            tokens << [self[2], :plain]
-            tokens << [self[3], :change]
-            next unless match = scan(/.+/)
-            kind = :plain
-          elsif match = scan(/\+/)
-            tokens << [:begin_line, line_kind = :insert]
-            tokens << [match, :insert]
-            next unless match = scan(/.+/)
-            kind = :plain
-          elsif match = scan(/-/)
-            tokens << [:begin_line, line_kind = :delete]
-            tokens << [match, :delete]
-            next unless match = scan(/.+/)
-            kind = :plain
-          elsif scan(/ .*/)
-            kind = :comment
-          elsif scan(/.+/)
-            tokens << [:begin_line, line_kind = :head]
-            kind = :plain
-          else
-            raise_inspect 'else case rached'
-          end
-        
-        when :added
-          if match = scan(/   \+/)
-            tokens << [:begin_line, line_kind = :insert]
-            tokens << [match, :insert]
-            next unless match = scan(/.+/)
-            kind = :plain
-          else
-            state = :initial
-            next
-          end
-        end
-        
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-        
-        tokens << [match, kind]
-      end
-      
-      tokens << [:end_line, line_kind] if line_kind
-      tokens
-    end
-    
-  end
-  
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/groovy.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,264 +0,0 @@
-module CodeRay
-module Scanners
-
-  load :java
-
-  class Groovy < Java
-
-    include Streamable
-    register_for :groovy
-    
-    # TODO: Check this!
-    GROOVY_KEYWORDS = %w[
-      as assert def in
-    ]
-    KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[
-      case instanceof new return throw typeof while as assert in
-    ]
-    GROOVY_MAGIC_VARIABLES = %w[ it ]
-    
-    IDENT_KIND = Java::IDENT_KIND.dup.
-      add(GROOVY_KEYWORDS, :keyword).
-      add(GROOVY_MAGIC_VARIABLES, :local_variable)
-    
-    ESCAPE = / [bfnrtv$\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} /x  # no 4-byte unicode chars? U[a-fA-F0-9]{8}
-    REGEXP_ESCAPE =  / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} | \d | [bBdDsSwW\/] /x
-    
-    # TODO: interpretation inside ', ", /
-    STRING_CONTENT_PATTERN = {
-      "'" => /(?>\\[^\\'\n]+|[^\\'\n]+)+/,
-      '"' => /[^\\$"\n]+/,
-      "'''" => /(?>[^\\']+|'(?!''))+/,
-      '"""' => /(?>[^\\$"]+|"(?!""))+/,
-      '/' => /[^\\$\/\n]+/,
-    }
-    
-    def scan_tokens tokens, options
-
-      state = :initial
-      inline_block_stack = []
-      inline_block_paren_depth = nil
-      string_delimiter = nil
-      import_clause = class_name_follows = last_token = after_def = false
-      value_expected = true
-
-      until eos?
-
-        kind = nil
-        match = nil
-        
-        case state
-
-        when :initial
-
-          if match = scan(/ \s+ | \\\n /x)
-            tokens << [match, :space]
-            if match.index ?\n
-              import_clause = after_def = false
-              value_expected = true unless value_expected
-            end
-            next
-          
-          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
-            value_expected = true
-            after_def = false
-            kind = :comment
-          
-          elsif bol? && scan(/ \#!.* /x)
-            kind = :doctype
-          
-          elsif import_clause && scan(/ (?!as) #{IDENT} (?: \. #{IDENT} )* (?: \.\* )? /ox)
-            after_def = value_expected = false
-            kind = :include
-          
-          elsif match = scan(/ #{IDENT} | \[\] /ox)
-            kind = IDENT_KIND[match]
-            value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match]
-            if last_token == '.'
-              kind = :ident
-            elsif class_name_follows
-              kind = :class
-              class_name_follows = false
-            elsif after_def && check(/\s*[({]/)
-              kind = :method
-              after_def = false
-            elsif kind == :ident && last_token != '?' && check(/:/)
-              kind = :key
-            else
-              class_name_follows = true if match == 'class' || (import_clause && match == 'as')
-              import_clause = match == 'import'
-              after_def = true if match == 'def'
-            end
-          
-          elsif scan(/;/)
-            import_clause = after_def = false
-            value_expected = true
-            kind = :operator
-          
-          elsif scan(/\{/)
-            class_name_follows = after_def = false
-            value_expected = true
-            kind = :operator
-            if !inline_block_stack.empty?
-              inline_block_paren_depth += 1
-            end
-          
-          # TODO: ~'...', ~"..." and ~/.../ style regexps
-          elsif match = scan(/ \.\.<? | \*?\.(?!\d)@? | \.& | \?:? | [,?:(\[] | -[->] | \+\+ |
-              && | \|\| | \*\*=? | ==?~ | <=?>? | [-+*%^~&|>=!]=? | <<<?=? | >>>?=? /x)
-            value_expected = true
-            value_expected = :regexp if match == '~'
-            after_def = false
-            kind = :operator
-          
-          elsif match = scan(/ [)\]}] /x)
-            value_expected = after_def = false
-            if !inline_block_stack.empty? && match == '}'
-              inline_block_paren_depth -= 1
-              if inline_block_paren_depth == 0  # closing brace of inline block reached
-                tokens << [match, :inline_delimiter]
-                tokens << [:close, :inline]
-                state, string_delimiter, inline_block_paren_depth = inline_block_stack.pop
-                next
-              end
-            end
-            kind = :operator
-          
-          elsif check(/[\d.]/)
-            after_def = value_expected = false
-            if scan(/0[xX][0-9A-Fa-f]+/)
-              kind = :hex
-            elsif scan(/(?>0[0-7]+)(?![89.eEfF])/)
-              kind = :oct
-            elsif scan(/\d+[fFdD]|\d*\.\d+(?:[eE][+-]?\d+)?[fFdD]?|\d+[eE][+-]?\d+[fFdD]?/)
-              kind = :float
-            elsif scan(/\d+[lLgG]?/)
-              kind = :integer
-            end
-
-          elsif match = scan(/'''|"""/)
-            after_def = value_expected = false
-            state = :multiline_string
-            tokens << [:open, :string]
-            string_delimiter = match
-            kind = :delimiter
-          
-          # TODO: record.'name'
-          elsif match = scan(/["']/)
-            after_def = value_expected = false
-            state = match == '/' ? :regexp : :string
-            tokens << [:open, state]
-            string_delimiter = match
-            kind = :delimiter
-
-          elsif value_expected && (match = scan(/\//))
-            after_def = value_expected = false
-            tokens << [:open, :regexp]
-            state = :regexp
-            string_delimiter = '/'
-            kind = :delimiter
-
-          elsif scan(/ @ #{IDENT} /ox)
-            after_def = value_expected = false
-            kind = :annotation
-
-          elsif scan(/\//)
-            after_def = false
-            value_expected = true
-            kind = :operator
-          
-          else
-            getch
-            kind = :error
-
-          end
-
-        when :string, :regexp, :multiline_string
-          if scan(STRING_CONTENT_PATTERN[string_delimiter])
-            kind = :content
-            
-          elsif match = scan(state == :multiline_string ? /'''|"""/ : /["'\/]/)
-            tokens << [match, :delimiter]
-            if state == :regexp
-              # TODO: regexp modifiers? s, m, x, i?
-              modifiers = scan(/[ix]+/)
-              tokens << [modifiers, :modifier] if modifiers && !modifiers.empty?
-            end
-            state = :string if state == :multiline_string
-            tokens << [:close, state]
-            string_delimiter = nil
-            after_def = value_expected = false
-            state = :initial
-            next
-          
-          elsif (state == :string || state == :multiline_string) &&
-              (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))
-            if string_delimiter[0] == ?' && !(match == "\\\\" || match == "\\'")
-              kind = :content
-            else
-              kind = :char
-            end
-          elsif state == :regexp && scan(/ \\ (?: #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
-            kind = :char
-          
-          elsif match = scan(/ \$ #{IDENT} /mox)
-            tokens << [:open, :inline]
-            tokens << ['$', :inline_delimiter]
-            match = match[1..-1]
-            tokens << [match, IDENT_KIND[match]]
-            tokens << [:close, :inline]
-            next
-          elsif match = scan(/ \$ \{ /x)
-            tokens << [:open, :inline]
-            tokens << ['${', :inline_delimiter]
-            inline_block_stack << [state, string_delimiter, inline_block_paren_depth]
-            inline_block_paren_depth = 1
-            state = :initial
-            next
-          
-          elsif scan(/ \$ /mx)
-            kind = :content
-          
-          elsif scan(/ \\. /mx)
-            kind = :content
-          
-          elsif scan(/ \\ | \n /x)
-            tokens << [:close, state]
-            kind = :error
-            after_def = value_expected = false
-            state = :initial
-          
-          else
-            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
-          end
-
-        else
-          raise_inspect 'Unknown state', tokens
-
-        end
-
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-        
-        last_token = match unless [:space, :comment, :doctype].include? kind
-        
-        tokens << [match, kind]
-
-      end
-
-      if [:multiline_string, :string, :regexp].include? state
-        tokens << [:close, state]
-      end
-
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/html.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,182 +0,0 @@
-module CodeRay
-module Scanners
-
-  # HTML Scanner
-  class HTML < Scanner
-
-    include Streamable
-    register_for :html
-    
-    KINDS_NOT_LOC = [
-      :comment, :doctype, :preprocessor,
-      :tag, :attribute_name, :operator,
-      :attribute_value, :delimiter, :content,
-      :plain, :entity, :error
-    ]
-
-    ATTR_NAME = /[\w.:-]+/
-    ATTR_VALUE_UNQUOTED = ATTR_NAME
-    TAG_END = /\/?>/
-    HEX = /[0-9a-fA-F]/
-    ENTITY = /
-      &
-      (?:
-        \w+
-      |
-        \#
-        (?:
-          \d+
-        |
-          x#{HEX}+
-        )
-      )
-      ;
-    /ox
-
-    PLAIN_STRING_CONTENT = {
-      "'" => /[^&'>\n]+/,
-      '"' => /[^&">\n]+/,
-    }
-
-    def reset
-      super
-      @state = :initial
-    end
-
-  private
-    def setup
-      @state = :initial
-      @plain_string_content = nil
-    end
-
-    def scan_tokens tokens, options
-
-      state = @state
-      plain_string_content = @plain_string_content
-
-      until eos?
-
-        kind = nil
-        match = nil
-
-        if scan(/\s+/m)
-          kind = :space
-
-        else
-
-          case state
-
-          when :initial
-            if scan(/<!--.*?-->/m)
-              kind = :comment
-            elsif scan(/<!DOCTYPE.*?>/m)
-              kind = :doctype
-            elsif scan(/<\?xml.*?\?>/m)
-              kind = :preprocessor
-            elsif scan(/<\?.*?\?>|<%.*?%>/m)
-              kind = :comment
-            elsif scan(/<\/[-\w.:]*>/m)
-              kind = :tag
-            elsif match = scan(/<[-\w.:]+>?/m)
-              kind = :tag
-              state = :attribute unless match[-1] == ?>
-            elsif scan(/[^<>&]+/)
-              kind = :plain
-            elsif scan(/#{ENTITY}/ox)
-              kind = :entity
-            elsif scan(/[<>&]/)
-              kind = :error
-            else
-              raise_inspect '[BUG] else-case reached with state %p' % [state], tokens
-            end
-
-          when :attribute
-            if scan(/#{TAG_END}/)
-              kind = :tag
-              state = :initial
-            elsif scan(/#{ATTR_NAME}/o)
-              kind = :attribute_name
-              state = :attribute_equal
-            else
-              kind = :error
-              getch
-            end
-
-          when :attribute_equal
-            if scan(/=/)
-              kind = :operator
-              state = :attribute_value
-            elsif scan(/#{ATTR_NAME}/o)
-              kind = :attribute_name
-            elsif scan(/#{TAG_END}/o)
-              kind = :tag
-              state = :initial
-            elsif scan(/./)
-              kind = :error
-              state = :attribute
-            end
-
-          when :attribute_value
-            if scan(/#{ATTR_VALUE_UNQUOTED}/o)
-              kind = :attribute_value
-              state = :attribute
-            elsif match = scan(/["']/)
-              tokens << [:open, :string]
-              state = :attribute_value_string
-              plain_string_content = PLAIN_STRING_CONTENT[match]
-              kind = :delimiter
-            elsif scan(/#{TAG_END}/o)
-              kind = :tag
-              state = :initial
-            else
-              kind = :error
-              getch
-            end
-
-          when :attribute_value_string
-            if scan(plain_string_content)
-              kind = :content
-            elsif scan(/['"]/)
-              tokens << [matched, :delimiter]
-              tokens << [:close, :string]
-              state = :attribute
-              next
-            elsif scan(/#{ENTITY}/ox)
-              kind = :entity
-            elsif scan(/&/)
-              kind = :content
-            elsif scan(/[\n>]/)
-              tokens << [:close, :string]
-              kind = :error
-              state = :initial
-            end
-
-          else
-            raise_inspect 'Unknown state: %p' % [state], tokens
-
-          end
-
-        end
-
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens, state
-        end
-        raise_inspect 'Empty token', tokens unless match
-
-        tokens << [match, kind]
-      end
-
-      if options[:keep_state]
-        @state = state
-        @plain_string_content = plain_string_content
-      end
-
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/java.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,176 +0,0 @@
-module CodeRay
-module Scanners
-
-  class Java < Scanner
-
-    include Streamable
-    register_for :java
-    helper :builtin_types
-    
-    # http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
-    KEYWORDS = %w[
-      assert break case catch continue default do else
-      finally for if instanceof import new package
-      return switch throw try typeof while
-      debugger export
-    ]
-    RESERVED = %w[ const goto ]
-    CONSTANTS = %w[ false null true ]
-    MAGIC_VARIABLES = %w[ this super ]
-    TYPES = %w[
-      boolean byte char class double enum float int interface long
-      short void
-    ] << '[]'  # because int[] should be highlighted as a type
-    DIRECTIVES = %w[
-      abstract extends final implements native private protected public
-      static strictfp synchronized throws transient volatile
-    ]
-    
-    IDENT_KIND = WordList.new(:ident).
-      add(KEYWORDS, :keyword).
-      add(RESERVED, :reserved).
-      add(CONSTANTS, :pre_constant).
-      add(MAGIC_VARIABLES, :local_variable).
-      add(TYPES, :type).
-      add(BuiltinTypes::List, :pre_type).
-      add(BuiltinTypes::List.select { |builtin| builtin[/(Error|Exception)$/] }, :exception).
-      add(DIRECTIVES, :directive)
-
-    ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
-    STRING_CONTENT_PATTERN = {
-      "'" => /[^\\']+/,
-      '"' => /[^\\"]+/,
-      '/' => /[^\\\/]+/,
-    }
-    IDENT = /[a-zA-Z_][A-Za-z_0-9]*/
-    
-    def scan_tokens tokens, options
-
-      state = :initial
-      string_delimiter = nil
-      import_clause = class_name_follows = last_token_dot = false
-
-      until eos?
-
-        kind = nil
-        match = nil
-        
-        case state
-
-        when :initial
-
-          if match = scan(/ \s+ | \\\n /x)
-            tokens << [match, :space]
-            next
-          
-          elsif match = scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
-            tokens << [match, :comment]
-            next
-          
-          elsif import_clause && scan(/ #{IDENT} (?: \. #{IDENT} )* /ox)
-            kind = :include
-          
-          elsif match = scan(/ #{IDENT} | \[\] /ox)
-            kind = IDENT_KIND[match]
-            if last_token_dot
-              kind = :ident
-            elsif class_name_follows
-              kind = :class
-              class_name_follows = false
-            else
-              import_clause = true if match == 'import'
-              class_name_follows = true if match == 'class' || match == 'interface'
-            end
-          
-          elsif scan(/ \.(?!\d) | [,?:()\[\]}] | -- | \+\+ | && | \|\| | \*\*=? | [-+*\/%^~&|<>=!]=? | <<<?=? | >>>?=? /x)
-            kind = :operator
-          
-          elsif scan(/;/)
-            import_clause = false
-            kind = :operator
-          
-          elsif scan(/\{/)
-            class_name_follows = false
-            kind = :operator
-          
-          elsif check(/[\d.]/)
-            if scan(/0[xX][0-9A-Fa-f]+/)
-              kind = :hex
-            elsif scan(/(?>0[0-7]+)(?![89.eEfF])/)
-              kind = :oct
-            elsif scan(/\d+[fFdD]|\d*\.\d+(?:[eE][+-]?\d+)?[fFdD]?|\d+[eE][+-]?\d+[fFdD]?/)
-              kind = :float
-            elsif scan(/\d+[lL]?/)
-              kind = :integer
-            end
-
-          elsif match = scan(/["']/)
-            tokens << [:open, :string]
-            state = :string
-            string_delimiter = match
-            kind = :delimiter
-
-          elsif scan(/ @ #{IDENT} /ox)
-            kind = :annotation
-
-          else
-            getch
-            kind = :error
-
-          end
-
-        when :string
-          if scan(STRING_CONTENT_PATTERN[string_delimiter])
-            kind = :content
-          elsif match = scan(/["'\/]/)
-            tokens << [match, :delimiter]
-            tokens << [:close, state]
-            string_delimiter = nil
-            state = :initial
-            next
-          elsif state == :string && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))
-            if string_delimiter == "'" && !(match == "\\\\" || match == "\\'")
-              kind = :content
-            else
-              kind = :char
-            end
-          elsif scan(/\\./m)
-            kind = :content
-          elsif scan(/ \\ | $ /x)
-            tokens << [:close, :delimiter]
-            kind = :error
-            state = :initial
-          else
-            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
-          end
-
-        else
-          raise_inspect 'Unknown state', tokens
-
-        end
-
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-        
-        last_token_dot = match == '.'
-        
-        tokens << [match, kind]
-
-      end
-
-      if state == :string
-        tokens << [:close, state]
-      end
-
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/java_script.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,224 +0,0 @@
-module CodeRay
-module Scanners
-
-  class JavaScript < Scanner
-
-    include Streamable
-
-    register_for :java_script
-    file_extension 'js'
-
-    # The actual JavaScript keywords.
-    KEYWORDS = %w[
-      break case catch continue default delete do else
-      finally for function if in instanceof new
-      return switch throw try typeof var void while with
-    ]
-    PREDEFINED_CONSTANTS = %w[
-      false null true undefined
-    ]
-    
-    MAGIC_VARIABLES = %w[ this arguments ]  # arguments was introduced in JavaScript 1.4
-    
-    KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[
-      case delete in instanceof new return throw typeof with
-    ]
-    
-    # Reserved for future use.
-    RESERVED_WORDS = %w[
-      abstract boolean byte char class debugger double enum export extends
-      final float goto implements import int interface long native package
-      private protected public short static super synchronized throws transient
-      volatile
-    ]
-    
-    IDENT_KIND = WordList.new(:ident).
-      add(RESERVED_WORDS, :reserved).
-      add(PREDEFINED_CONSTANTS, :pre_constant).
-      add(MAGIC_VARIABLES, :local_variable).
-      add(KEYWORDS, :keyword)
-
-    ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
-    REGEXP_ESCAPE =  / [bBdDsSwW] /x
-    STRING_CONTENT_PATTERN = {
-      "'" => /[^\\']+/,
-      '"' => /[^\\"]+/,
-      '/' => /[^\\\/]+/,
-    }
-    KEY_CHECK_PATTERN = {
-      "'" => / [^\\']* (?: \\.? [^\\']* )* '? \s* : /x,
-      '"' => / [^\\"]* (?: \\.? [^\\"]* )* "? \s* : /x,
-    }
-
-    def scan_tokens tokens, options
-
-      state = :initial
-      string_delimiter = nil
-      value_expected = true
-      key_expected = false
-      function_expected = false
-
-      until eos?
-
-        kind = nil
-        match = nil
-        
-        case state
-
-        when :initial
-
-          if match = scan(/ \s+ | \\\n /x)
-            value_expected = true if !value_expected && match.index(?\n)
-            tokens << [match, :space]
-            next
-
-          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
-            value_expected = true
-            kind = :comment
-
-          elsif check(/\.?\d/)
-            key_expected = value_expected = false
-            if scan(/0[xX][0-9A-Fa-f]+/)
-              kind = :hex
-            elsif scan(/(?>0[0-7]+)(?![89.eEfF])/)
-              kind = :oct
-            elsif scan(/\d+[fF]|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
-              kind = :float
-            elsif scan(/\d+/)
-              kind = :integer
-            end
-          
-          elsif value_expected && match = scan(/<([[:alpha:]]\w*) (?: [^\/>]*\/> | .*?<\/\1>)/xim)
-            # FIXME: scan over nested tags
-            xml_scanner.tokenize match
-            value_expected = false
-            next
-            
-          elsif match = scan(/ [-+*=<>?:;,!&^|(\[{~%]+ | \.(?!\d) /x)
-            value_expected = true
-            last_operator = match[-1]
-            key_expected = (last_operator == ?{) || (last_operator == ?,)
-            function_expected = false
-            kind = :operator
-
-          elsif scan(/ [)\]}]+ /x)
-            function_expected = key_expected = value_expected = false
-            kind = :operator
-
-          elsif match = scan(/ [$a-zA-Z_][A-Za-z_0-9$]* /x)
-            kind = IDENT_KIND[match]
-            value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match]
-            # TODO: labels
-            if kind == :ident
-              if match.index(?$)  # $ allowed inside an identifier
-                kind = :predefined
-              elsif function_expected
-                kind = :function
-              elsif check(/\s*[=:]\s*function\b/)
-                kind = :function
-              elsif key_expected && check(/\s*:/)
-                kind = :key
-              end
-            end
-            function_expected = (kind == :keyword) && (match == 'function')
-            key_expected = false
-          
-          elsif match = scan(/["']/)
-            if key_expected && check(KEY_CHECK_PATTERN[match])
-              state = :key
-            else
-              state = :string
-            end
-            tokens << [:open, state]
-            string_delimiter = match
-            kind = :delimiter
-
-          elsif value_expected && (match = scan(/\/(?=\S)/))
-            tokens << [:open, :regexp]
-            state = :regexp
-            string_delimiter = '/'
-            kind = :delimiter
-
-          elsif scan(/ \/ /x)
-            value_expected = true
-            key_expected = false
-            kind = :operator
-
-          else
-            getch
-            kind = :error
-
-          end
-
-        when :string, :regexp, :key
-          if scan(STRING_CONTENT_PATTERN[string_delimiter])
-            kind = :content
-          elsif match = scan(/["'\/]/)
-            tokens << [match, :delimiter]
-            if state == :regexp
-              modifiers = scan(/[gim]+/)
-              tokens << [modifiers, :modifier] if modifiers && !modifiers.empty?
-            end
-            tokens << [:close, state]
-            string_delimiter = nil
-            key_expected = value_expected = false
-            state = :initial
-            next
-          elsif state != :regexp && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))
-            if string_delimiter == "'" && !(match == "\\\\" || match == "\\'")
-              kind = :content
-            else
-              kind = :char
-            end
-          elsif state == :regexp && scan(/ \\ (?: #{ESCAPE} | #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
-            kind = :char
-          elsif scan(/\\./m)
-            kind = :content
-          elsif scan(/ \\ | $ /x)
-            tokens << [:close, state]
-            kind = :error
-            key_expected = value_expected = false
-            state = :initial
-          else
-            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
-          end
-
-        else
-          raise_inspect 'Unknown state', tokens
-
-        end
-
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-        
-        tokens << [match, kind]
-
-      end
-
-      if [:string, :regexp].include? state
-        tokens << [:close, state]
-      end
-
-      tokens
-    end
-
-  protected
-
-    def reset_instance
-      super
-      @xml_scanner.reset if defined? @xml_scanner
-    end
-
-    def xml_scanner
-      @xml_scanner ||= CodeRay.scanner :xml, :tokens => @tokens, :keep_tokens => true, :keep_state => true
-    end
-
-  end
-  
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/json.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-module CodeRay
-module Scanners
-  
-  class JSON < Scanner
-    
-    include Streamable
-    
-    register_for :json
-    file_extension 'json'
-    
-    KINDS_NOT_LOC = [
-      :float, :char, :content, :delimiter,
-      :error, :integer, :operator, :value,
-    ]
-    
-    CONSTANTS = %w( true false null )
-    IDENT_KIND = WordList.new(:key).add(CONSTANTS, :value)
-    
-    ESCAPE = / [bfnrt\\"\/] /x
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} /x
-    
-    def scan_tokens tokens, options
-      
-      state = :initial
-      stack = []
-      string_delimiter = nil
-      key_expected = false
-      
-      until eos?
-        
-        kind = nil
-        match = nil
-        
-        case state
-        
-        when :initial
-          if match = scan(/ \s+ | \\\n /x)
-            tokens << [match, :space]
-            next
-          elsif match = scan(/ [:,\[{\]}] /x)
-            kind = :operator
-            case match
-            when '{' then stack << :object; key_expected = true
-            when '[' then stack << :array
-            when ':' then key_expected = false
-            when ',' then key_expected = true if stack.last == :object
-            when '}', ']' then stack.pop  # no error recovery, but works for valid JSON
-            end
-          elsif match = scan(/ true | false | null /x)
-            kind = IDENT_KIND[match]
-          elsif match = scan(/-?(?:0|[1-9]\d*)/)
-            kind = :integer
-            if scan(/\.\d+(?:[eE][-+]?\d+)?|[eE][-+]?\d+/)
-              match << matched
-              kind = :float
-            end
-          elsif match = scan(/"/)
-            state = key_expected ? :key : :string
-            tokens << [:open, state]
-            kind = :delimiter
-          else
-            getch
-            kind = :error
-          end
-          
-        when :string, :key
-          if scan(/[^\\"]+/)
-            kind = :content
-          elsif scan(/"/)
-            tokens << ['"', :delimiter]
-            tokens << [:close, state]
-            state = :initial
-            next
-          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
-            kind = :char
-          elsif scan(/\\./m)
-            kind = :content
-          elsif scan(/ \\ | $ /x)
-            tokens << [:close, :delimiter]
-            kind = :error
-            state = :initial
-          else
-            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
-          end
-          
-        else
-          raise_inspect 'Unknown state', tokens
-          
-        end
-        
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-        
-        tokens << [match, kind]
-        
-      end
-      
-      if [:string, :key].include? state
-        tokens << [:close, state]
-      end
-      
-      tokens
-    end
-    
-  end
-  
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/nitro_xhtml.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-module CodeRay
-module Scanners
-
-  load :html
-  load :ruby
-
-  # Nitro XHTML Scanner
-  class NitroXHTML < Scanner
-
-    include Streamable
-    register_for :nitro_xhtml
-    file_extension :xhtml
-    title 'Nitro XHTML'
-
-    KINDS_NOT_LOC = HTML::KINDS_NOT_LOC
-    
-    NITRO_RUBY_BLOCK = /
-      <\?r
-      (?>
-        [^\?]*
-        (?> \?(?!>) [^\?]* )*
-      )
-      (?: \?> )?
-    |
-      <ruby>
-      (?>
-        [^<]*
-        (?> <(?!\/ruby>) [^<]* )*
-      )
-      (?: <\/ruby> )?
-    |
-      <%
-      (?>
-        [^%]*
-        (?> %(?!>) [^%]* )*
-      )
-      (?: %> )?
-    /mx
-
-    NITRO_VALUE_BLOCK = /
-      \#
-      (?:
-        \{
-        [^{}]*
-        (?>
-          \{ [^}]* \}
-          (?> [^{}]* )
-        )*
-        \}?
-      | \| [^|]* \|?
-      | \( [^)]* \)?
-      | \[ [^\]]* \]?
-      | \\ [^\\]* \\?
-      )
-    /x
-
-    NITRO_ENTITY = /
-      % (?: \#\d+ | \w+ ) ;
-    /
-
-    START_OF_RUBY = /
-      (?=[<\#%])
-      < (?: \?r | % | ruby> )
-    | \# [{(|]
-    | % (?: \#\d+ | \w+ ) ;
-    /x
-
-    CLOSING_PAREN = Hash.new do |h, p|
-      h[p] = p
-    end.update( {
-      '(' => ')',
-      '[' => ']',
-      '{' => '}',
-    } )
-
-  private
-
-    def setup
-      @ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true
-      @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true
-    end
-
-    def reset_instance
-      super
-      @html_scanner.reset
-    end
-
-    def scan_tokens tokens, options
-
-      until eos?
-
-        if (match = scan_until(/(?=#{START_OF_RUBY})/o) || scan_until(/\z/)) and not match.empty?
-          @html_scanner.tokenize match
-
-        elsif match = scan(/#{NITRO_VALUE_BLOCK}/o)
-          start_tag = match[0,2]
-          delimiter = CLOSING_PAREN[start_tag[1,1]]
-          end_tag = match[-1,1] == delimiter ? delimiter : ''
-          tokens << [:open, :inline]
-          tokens << [start_tag, :inline_delimiter]
-          code = match[start_tag.size .. -1 - end_tag.size]
-          @ruby_scanner.tokenize code
-          tokens << [end_tag, :inline_delimiter] unless end_tag.empty?
-          tokens << [:close, :inline]
-
-        elsif match = scan(/#{NITRO_RUBY_BLOCK}/o)
-          start_tag = '<?r'
-          end_tag = match[-2,2] == '?>' ? '?>' : ''
-          tokens << [:open, :inline]
-          tokens << [start_tag, :inline_delimiter]
-          code = match[start_tag.size .. -(end_tag.size)-1]
-          @ruby_scanner.tokenize code
-          tokens << [end_tag, :inline_delimiter] unless end_tag.empty?
-          tokens << [:close, :inline]
-
-        elsif entity = scan(/#{NITRO_ENTITY}/o)
-          tokens << [entity, :entity]
-        
-        elsif scan(/%/)
-          tokens << [matched, :error]
-
-        else
-          raise_inspect 'else-case reached!', tokens
-          
-        end
-
-      end
-
-      tokens
-
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/php.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,527 +0,0 @@
-module CodeRay
-module Scanners
-  
-  load :html
-  
-  # Original by Stefan Walk.
-  class PHP < Scanner
-    
-    register_for :php
-    file_extension 'php'
-    
-    KINDS_NOT_LOC = HTML::KINDS_NOT_LOC
-    
-    def setup
-      @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true
-    end
-    
-    def reset_instance
-      super
-      @html_scanner.reset
-    end
-    
-    module Words
-      
-      # according to http://www.php.net/manual/en/reserved.keywords.php
-      KEYWORDS = %w[
-        abstract and array as break case catch class clone const continue declare default do else elseif
-        enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global
-        goto if implements interface instanceof namespace new or private protected public static switch
-        throw try use var while xor
-        cfunction old_function
-      ]
-      
-      TYPES = %w[ int integer float double bool boolean string array object resource ]
-      
-      LANGUAGE_CONSTRUCTS = %w[
-        die echo empty exit eval include include_once isset list
-        require require_once return print unset
-      ]
-      
-      CLASSES = %w[ Directory stdClass __PHP_Incomplete_Class exception php_user_filter Closure ]
-      
-      # according to http://php.net/quickref.php on 2009-04-21;
-      # all functions with _ excluded (module functions) and selected additional functions
-      BUILTIN_FUNCTIONS = %w[
-        abs acos acosh addcslashes addslashes aggregate array arsort ascii2ebcdic asin asinh asort assert atan atan2
-        atanh basename bcadd bccomp bcdiv bcmod bcmul bcpow bcpowmod bcscale bcsqrt bcsub bin2hex bindec
-        bindtextdomain bzclose bzcompress bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite
-        calculhmac ceil chdir checkdate checkdnsrr chgrp chmod chop chown chr chroot clearstatcache closedir closelog
-        compact constant copy cos cosh count crc32 crypt current date dcgettext dcngettext deaggregate decbin dechex
-        decoct define defined deg2rad delete dgettext die dirname diskfreespace dl dngettext doubleval each
-        ebcdic2ascii echo empty end ereg eregi escapeshellarg escapeshellcmd eval exec exit exp explode expm1 extract
-        fclose feof fflush fgetc fgetcsv fgets fgetss file fileatime filectime filegroup fileinode filemtime fileowner
-        fileperms filepro filesize filetype floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv
-        fputs fread frenchtojd fscanf fseek fsockopen fstat ftell ftok ftruncate fwrite getallheaders getcwd getdate
-        getenv gethostbyaddr gethostbyname gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid
-        getmyuid getopt getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext
-        gettimeofday gettype glob gmdate gmmktime gmstrftime gregoriantojd gzclose gzcompress gzdecode gzdeflate
-        gzencode gzeof gzfile gzgetc gzgets gzgetss gzinflate gzopen gzpassthru gzputs gzread gzrewind gzseek gztell
-        gzuncompress gzwrite hash header hebrev hebrevc hexdec htmlentities htmlspecialchars hypot iconv idate
-        implode include intval ip2long iptcembed iptcparse isset
-        jddayofweek jdmonthname jdtofrench jdtogregorian jdtojewish jdtojulian jdtounix jewishtojd join jpeg2wbmp
-        juliantojd key krsort ksort lcfirst lchgrp lchown levenshtein link linkinfo list localeconv localtime log
-        log10 log1p long2ip lstat ltrim mail main max md5 metaphone mhash microtime min mkdir mktime msql natcasesort
-        natsort next ngettext nl2br nthmac octdec opendir openlog
-        ord overload pack passthru pathinfo pclose pfsockopen phpcredits phpinfo phpversion pi png2wbmp popen pos pow
-        prev print printf putenv quotemeta rad2deg rand range rawurldecode rawurlencode readdir readfile readgzfile
-        readline readlink realpath recode rename require reset rewind rewinddir rmdir round rsort rtrim scandir
-        serialize setcookie setlocale setrawcookie settype sha1 shuffle signeurlpaiement sin sinh sizeof sleep snmpget
-        snmpgetnext snmprealwalk snmpset snmpwalk snmpwalkoid sort soundex split spliti sprintf sqrt srand sscanf stat
-        strcasecmp strchr strcmp strcoll strcspn strftime stripcslashes stripos stripslashes stristr strlen
-        strnatcasecmp strnatcmp strncasecmp strncmp strpbrk strpos strptime strrchr strrev strripos strrpos strspn
-        strstr strtok strtolower strtotime strtoupper strtr strval substr symlink syslog system tan tanh tempnam
-        textdomain time tmpfile touch trim uasort ucfirst ucwords uksort umask uniqid unixtojd unlink unpack
-        unserialize unset urldecode urlencode usleep usort vfprintf virtual vprintf vsprintf wordwrap
-        array_change_key_case array_chunk array_combine array_count_values array_diff array_diff_assoc
-        array_diff_key array_diff_uassoc array_diff_ukey array_fill array_fill_keys array_filter array_flip
-        array_intersect array_intersect_assoc array_intersect_key array_intersect_uassoc array_intersect_ukey
-        array_key_exists array_keys array_map array_merge array_merge_recursive array_multisort array_pad
-        array_pop array_product array_push array_rand array_reduce array_reverse array_search array_shift
-        array_slice array_splice array_sum array_udiff array_udiff_assoc array_udiff_uassoc array_uintersect
-        array_uintersect_assoc array_uintersect_uassoc array_unique array_unshift array_values array_walk
-        array_walk_recursive
-        assert_options base_convert base64_decode base64_encode
-        chunk_split class_exists class_implements class_parents
-        count_chars debug_backtrace debug_print_backtrace debug_zval_dump
-        error_get_last error_log error_reporting extension_loaded
-        file_exists file_get_contents file_put_contents load_file
-        func_get_arg func_get_args func_num_args function_exists
-        get_browser get_called_class get_cfg_var get_class get_class_methods get_class_vars
-        get_current_user get_declared_classes get_declared_interfaces get_defined_constants
-        get_defined_functions get_defined_vars get_extension_funcs get_headers get_html_translation_table
-        get_include_path get_included_files get_loaded_extensions get_magic_quotes_gpc get_magic_quotes_runtime
-        get_meta_tags get_object_vars get_parent_class get_required_filesget_resource_type
-        gc_collect_cycles gc_disable gc_enable gc_enabled
-        halt_compiler headers_list headers_sent highlight_file highlight_string
-        html_entity_decode htmlspecialchars_decode
-        in_array include_once inclued_get_data
-        is_a is_array is_binary is_bool is_buffer is_callable is_dir is_double is_executable is_file is_finite
-        is_float is_infinite is_int is_integer is_link is_long is_nan is_null is_numeric is_object is_readable
-        is_real is_resource is_scalar is_soap_fault is_string is_subclass_of is_unicode is_uploaded_file
-        is_writable is_writeable
-        locale_get_default locale_set_default
-        number_format override_function parse_str parse_url
-        php_check_syntax php_ini_loaded_file php_ini_scanned_files php_logo_guid php_sapi_name
-        php_strip_whitespace php_uname
-        preg_filter preg_grep preg_last_error preg_match preg_match_all preg_quote preg_replace
-        preg_replace_callback preg_split print_r
-        require_once register_shutdown_function register_tick_function
-        set_error_handler set_exception_handler set_file_buffer set_include_path
-        set_magic_quotes_runtime set_time_limit shell_exec
-        str_getcsv str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count
-        strip_tags substr_compare substr_count substr_replace
-        time_nanosleep time_sleep_until
-        token_get_all token_name trigger_error
-        unregister_tick_function use_soap_error_handler user_error
-        utf8_decode utf8_encode var_dump var_export
-        version_compare
-        zend_logo_guid zend_thread_id zend_version
-        create_function call_user_func_array
-        posix_access posix_ctermid posix_get_last_error posix_getcwd posix_getegid
-        posix_geteuid posix_getgid posix_getgrgid posix_getgrnam posix_getgroups
-        posix_getlogin posix_getpgid posix_getpgrp posix_getpid posix_getppid
-        posix_getpwnam posix_getpwuid posix_getrlimit posix_getsid posix_getuid
-        posix_initgroups posix_isatty posix_kill posix_mkfifo posix_mknod
-        posix_setegid posix_seteuid posix_setgid posix_setpgid posix_setsid
-        posix_setuid posix_strerror posix_times posix_ttyname posix_uname
-        pcntl_alarm pcntl_exec pcntl_fork pcntl_getpriority pcntl_setpriority
-        pcntl_signal pcntl_signal_dispatch pcntl_sigprocmask pcntl_sigtimedwait
-        pcntl_sigwaitinfo pcntl_wait pcntl_waitpid pcntl_wexitstatus pcntl_wifexited
-        pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig
-      ]
-      # TODO: more built-in PHP functions?
-      
-      EXCEPTIONS = %w[
-        E_ERROR E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING
-        E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_DEPRECATED E_USER_DEPRECATED E_ALL E_STRICT
-      ]
-      
-      CONSTANTS = %w[
-        null true false self parent
-        __LINE__ __DIR__ __FILE__ __LINE__
-        __CLASS__ __NAMESPACE__ __METHOD__ __FUNCTION__
-        PHP_VERSION PHP_MAJOR_VERSION PHP_MINOR_VERSION PHP_RELEASE_VERSION PHP_VERSION_ID PHP_EXTRA_VERSION PHP_ZTS
-        PHP_DEBUG PHP_MAXPATHLEN PHP_OS PHP_SAPI PHP_EOL PHP_INT_MAX PHP_INT_SIZE DEFAULT_INCLUDE_PATH
-        PEAR_INSTALL_DIR PEAR_EXTENSION_DIR PHP_EXTENSION_DIR PHP_PREFIX PHP_BINDIR PHP_LIBDIR PHP_DATADIR
-        PHP_SYSCONFDIR PHP_LOCALSTATEDIR PHP_CONFIG_FILE_PATH PHP_CONFIG_FILE_SCAN_DIR PHP_SHLIB_SUFFIX
-        PHP_OUTPUT_HANDLER_START PHP_OUTPUT_HANDLER_CONT PHP_OUTPUT_HANDLER_END
-        __COMPILER_HALT_OFFSET__
-        EXTR_OVERWRITE EXTR_SKIP EXTR_PREFIX_SAME EXTR_PREFIX_ALL EXTR_PREFIX_INVALID EXTR_PREFIX_IF_EXISTS
-        EXTR_IF_EXISTS SORT_ASC SORT_DESC SORT_REGULAR SORT_NUMERIC SORT_STRING CASE_LOWER CASE_UPPER COUNT_NORMAL
-        COUNT_RECURSIVE ASSERT_ACTIVE ASSERT_CALLBACK ASSERT_BAIL ASSERT_WARNING ASSERT_QUIET_EVAL CONNECTION_ABORTED
-        CONNECTION_NORMAL CONNECTION_TIMEOUT INI_USER INI_PERDIR INI_SYSTEM INI_ALL M_E M_LOG2E M_LOG10E M_LN2 M_LN10
-        M_PI M_PI_2 M_PI_4 M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2 CRYPT_SALT_LENGTH CRYPT_STD_DES CRYPT_EXT_DES
-        CRYPT_MD5 CRYPT_BLOWFISH DIRECTORY_SEPARATOR SEEK_SET SEEK_CUR SEEK_END LOCK_SH LOCK_EX LOCK_UN LOCK_NB
-        HTML_SPECIALCHARS HTML_ENTITIES ENT_COMPAT ENT_QUOTES ENT_NOQUOTES INFO_GENERAL INFO_CREDITS
-        INFO_CONFIGURATION INFO_MODULES INFO_ENVIRONMENT INFO_VARIABLES INFO_LICENSE INFO_ALL CREDITS_GROUP
-        CREDITS_GENERAL CREDITS_SAPI CREDITS_MODULES CREDITS_DOCS CREDITS_FULLPAGE CREDITS_QA CREDITS_ALL STR_PAD_LEFT
-        STR_PAD_RIGHT STR_PAD_BOTH PATHINFO_DIRNAME PATHINFO_BASENAME PATHINFO_EXTENSION PATH_SEPARATOR CHAR_MAX
-        LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_ALL LC_MESSAGES ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5
-        ABDAY_6 ABDAY_7 DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7 ABMON_1 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6
-        ABMON_7 ABMON_8 ABMON_9 ABMON_10 ABMON_11 ABMON_12 MON_1 MON_2 MON_3 MON_4 MON_5 MON_6 MON_7 MON_8 MON_9
-        MON_10 MON_11 MON_12 AM_STR PM_STR D_T_FMT D_FMT T_FMT T_FMT_AMPM ERA ERA_YEAR ERA_D_T_FMT ERA_D_FMT ERA_T_FMT
-        ALT_DIGITS INT_CURR_SYMBOL CURRENCY_SYMBOL CRNCYSTR MON_DECIMAL_POINT MON_THOUSANDS_SEP MON_GROUPING
-        POSITIVE_SIGN NEGATIVE_SIGN INT_FRAC_DIGITS FRAC_DIGITS P_CS_PRECEDES P_SEP_BY_SPACE N_CS_PRECEDES
-        N_SEP_BY_SPACE P_SIGN_POSN N_SIGN_POSN DECIMAL_POINT RADIXCHAR THOUSANDS_SEP THOUSEP GROUPING YESEXPR NOEXPR
-        YESSTR NOSTR CODESET LOG_EMERG LOG_ALERT LOG_CRIT LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_DEBUG LOG_KERN
-        LOG_USER LOG_MAIL LOG_DAEMON LOG_AUTH LOG_SYSLOG LOG_LPR LOG_NEWS LOG_UUCP LOG_CRON LOG_AUTHPRIV LOG_LOCAL0
-        LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_PID LOG_CONS LOG_ODELAY
-        LOG_NDELAY LOG_NOWAIT LOG_PERROR
-      ]
-      
-      PREDEFINED = %w[
-        $GLOBALS $_SERVER $_GET $_POST $_FILES $_REQUEST $_SESSION $_ENV
-        $_COOKIE $php_errormsg $HTTP_RAW_POST_DATA $http_response_header
-        $argc $argv
-      ]
-      
-      IDENT_KIND = CaseIgnoringWordList.new(:ident).
-        add(KEYWORDS, :reserved).
-        add(TYPES, :pre_type).
-        add(LANGUAGE_CONSTRUCTS, :reserved).
-        add(BUILTIN_FUNCTIONS, :predefined).
-        add(CLASSES, :pre_constant).
-        add(EXCEPTIONS, :exception).
-        add(CONSTANTS, :pre_constant)
-      
-      VARIABLE_KIND = WordList.new(:local_variable).
-        add(PREDEFINED, :predefined)
-    end
-    
-    module RE
-      
-      PHP_START = /
-        <script\s+[^>]*?language\s*=\s*"php"[^>]*?> |
-        <script\s+[^>]*?language\s*=\s*'php'[^>]*?> |
-        <\?php\d? |
-        <\?(?!xml)
-      /xi
-      
-      PHP_END = %r!
-        </script> |
-        \?>
-      !xi
-      
-      HTML_INDICATOR = /<!DOCTYPE html|<(?:html|body|div|p)[> ]/i
-      
-      IDENTIFIER = /[a-z_\x7f-\xFF][a-z0-9_\x7f-\xFF]*/i
-      VARIABLE = /\$#{IDENTIFIER}/
-      
-      OPERATOR = /
-        \.(?!\d)=? |      # dot that is not decimal point, string concatenation
-        && | \|\| |       # logic
-        :: | -> | => |    # scope, member, dictionary
-        \\(?!\n) |        # namespace
-        \+\+ | -- |       # increment, decrement
-        [,;?:()\[\]{}] |  # simple delimiters
-        [-+*\/%&|^]=? |   # ordinary math, binary logic, assignment shortcuts
-        [~$] |            # whatever
-        =& |              # reference assignment
-        [=!]=?=? | <> |   # comparison and assignment
-        <<=? | >>=? | [<>]=?  # comparison and shift
-      /x
-      
-    end
-    
-    def scan_tokens tokens, options
-      
-      if check(RE::PHP_START) ||  # starts with <?
-       (match?(/\s*<\S/) && exist?(RE::PHP_START)) || # starts with tag and contains <?
-       exist?(RE::HTML_INDICATOR) ||
-       check(/.{1,100}#{RE::PHP_START}/om)  # PHP start after max 100 chars
-        # is HTML with embedded PHP, so start with HTML
-        states = [:initial]
-      else
-        # is just PHP, so start with PHP surrounded by HTML
-        states = [:initial, :php]
-      end
-      
-      label_expected = true
-      case_expected = false
-      
-      heredoc_delimiter = nil
-      delimiter = nil
-      modifier = nil
-      
-      until eos?
-        
-        match = nil
-        kind = nil
-        
-        case states.last
-        
-        when :initial  # HTML
-          if scan RE::PHP_START
-            kind = :inline_delimiter
-            label_expected = true
-            states << :php
-          else
-            match = scan_until(/(?=#{RE::PHP_START})/o) || scan_until(/\z/)
-            @html_scanner.tokenize match unless match.empty?
-            next
-          end
-        
-        when :php
-          if match = scan(/\s+/)
-            tokens << [match, :space]
-            next
-          
-          elsif scan(%r! (?m: \/\* (?: .*? \*\/ | .* ) ) | (?://|\#) .*? (?=#{RE::PHP_END}|$) !xo)
-            kind = :comment
-          
-          elsif match = scan(RE::IDENTIFIER)
-            kind = Words::IDENT_KIND[match]
-            if kind == :ident && label_expected && check(/:(?!:)/)
-              kind = :label
-              label_expected = true
-            else
-              label_expected = false
-              if kind == :ident && match =~ /^[A-Z]/
-                kind = :constant
-              elsif kind == :reserved
-                case match
-                when 'class'
-                  states << :class_expected
-                when 'function'
-                  states << :function_expected
-                when 'case', 'default'
-                  case_expected = true
-                end
-              elsif match == 'b' && check(/['"]/)  # binary string literal
-                modifier = match
-                next
-              end
-            end
-          
-          elsif scan(/(?:\d+\.\d*|\d*\.\d+)(?:e[-+]?\d+)?|\d+e[-+]?\d+/i)
-            label_expected = false
-            kind = :float
-          
-          elsif scan(/0x[0-9a-fA-F]+/)
-            label_expected = false
-            kind = :hex
-          
-          elsif scan(/\d+/)
-            label_expected = false
-            kind = :integer
-          
-          elsif scan(/'/)
-            tokens << [:open, :string]
-            if modifier
-              tokens << [modifier, :modifier]
-              modifier = nil
-            end
-            kind = :delimiter
-            states.push :sqstring
-          
-          elsif match = scan(/["`]/)
-            tokens << [:open, :string]
-            if modifier
-              tokens << [modifier, :modifier]
-              modifier = nil
-            end
-            delimiter = match
-            kind = :delimiter
-            states.push :dqstring
-          
-          elsif match = scan(RE::VARIABLE)
-            label_expected = false
-            kind = Words::VARIABLE_KIND[match]
-          
-          elsif scan(/\{/)
-            kind = :operator
-            label_expected = true
-            states.push :php
-          
-          elsif scan(/\}/)
-            if states.size == 1
-              kind = :error
-            else
-              states.pop
-              if states.last.is_a?(::Array)
-                delimiter = states.last[1]
-                states[-1] = states.last[0]
-                tokens << [matched, :delimiter]
-                tokens << [:close, :inline]
-                next
-              else
-                kind = :operator
-                label_expected = true
-              end
-            end
-          
-          elsif scan(/@/)
-            label_expected = false
-            kind = :exception
-          
-          elsif scan RE::PHP_END
-            kind = :inline_delimiter
-            states = [:initial]
-          
-          elsif match = scan(/<<<(?:(#{RE::IDENTIFIER})|"(#{RE::IDENTIFIER})"|'(#{RE::IDENTIFIER})')/o)
-            tokens << [:open, :string]
-            warn 'heredoc in heredoc?' if heredoc_delimiter
-            heredoc_delimiter = Regexp.escape(self[1] || self[2] || self[3])
-            kind = :delimiter
-            states.push self[3] ? :sqstring : :dqstring
-            heredoc_delimiter = /#{heredoc_delimiter}(?=;?$)/
-          
-          elsif match = scan(/#{RE::OPERATOR}/o)
-            label_expected = match == ';'
-            if case_expected
-              label_expected = true if match == ':'
-              case_expected = false
-            end
-            kind = :operator
-          
-          else
-            getch
-            kind = :error
-          
-          end
-        
-        when :sqstring
-          if scan(heredoc_delimiter ? /[^\\\n]+/ : /[^'\\]+/)
-            kind = :content
-          elsif !heredoc_delimiter && scan(/'/)
-            tokens << [matched, :delimiter]
-            tokens << [:close, :string]
-            delimiter = nil
-            label_expected = false
-            states.pop
-            next
-          elsif heredoc_delimiter && match = scan(/\n/)
-            kind = :content
-            if scan heredoc_delimiter
-              tokens << ["\n", :content]
-              tokens << [matched, :delimiter]
-              tokens << [:close, :string]
-              heredoc_delimiter = nil
-              label_expected = false
-              states.pop
-              next
-            end
-          elsif scan(heredoc_delimiter ? /\\\\/ : /\\[\\'\n]/)
-            kind = :char
-          elsif scan(/\\./m)
-            kind = :content
-          elsif scan(/\\/)
-            kind = :error
-          end
-        
-        when :dqstring
-          if scan(heredoc_delimiter ? /[^${\\\n]+/ : (delimiter == '"' ? /[^"${\\]+/ : /[^`${\\]+/))
-            kind = :content
-          elsif !heredoc_delimiter && scan(delimiter == '"' ? /"/ : /`/)
-            tokens << [matched, :delimiter]
-            tokens << [:close, :string]
-            delimiter = nil
-            label_expected = false
-            states.pop
-            next
-          elsif heredoc_delimiter && match = scan(/\n/)
-            kind = :content
-            if scan heredoc_delimiter
-              tokens << ["\n", :content]
-              tokens << [matched, :delimiter]
-              tokens << [:close, :string]
-              heredoc_delimiter = nil
-              label_expected = false
-              states.pop
-              next
-            end
-          elsif scan(/\\(?:x[0-9A-Fa-f]{1,2}|[0-7]{1,3})/)
-            kind = :char
-          elsif scan(heredoc_delimiter ? /\\[nrtvf\\$]/ : (delimiter == '"' ? /\\[nrtvf\\$"]/ : /\\[nrtvf\\$`]/))
-            kind = :char
-          elsif scan(/\\./m)
-            kind = :content
-          elsif scan(/\\/)
-            kind = :error
-          elsif match = scan(/#{RE::VARIABLE}/o)
-            kind = :local_variable
-            if check(/\[#{RE::IDENTIFIER}\]/o)
-              tokens << [:open, :inline]
-              tokens << [match, :local_variable]
-              tokens << [scan(/\[/), :operator]
-              tokens << [scan(/#{RE::IDENTIFIER}/o), :ident]
-              tokens << [scan(/\]/), :operator]
-              tokens << [:close, :inline]
-              next
-            elsif check(/\[/)
-              match << scan(/\[['"]?#{RE::IDENTIFIER}?['"]?\]?/o)
-              kind = :error
-            elsif check(/->#{RE::IDENTIFIER}/o)
-              tokens << [:open, :inline]
-              tokens << [match, :local_variable]
-              tokens << [scan(/->/), :operator]
-              tokens << [scan(/#{RE::IDENTIFIER}/o), :ident]
-              tokens << [:close, :inline]
-              next
-            elsif check(/->/)
-              match << scan(/->/)
-              kind = :error
-            end
-          elsif match = scan(/\{/)
-            if check(/\$/)
-              kind = :delimiter
-              states[-1] = [states.last, delimiter]
-              delimiter = nil
-              states.push :php
-              tokens << [:open, :inline]
-            else
-              kind = :string
-            end
-          elsif scan(/\$\{#{RE::IDENTIFIER}\}/o)
-            kind = :local_variable
-          elsif scan(/\$/)
-            kind = :content
-          end
-        
-        when :class_expected
-          if scan(/\s+/)
-            kind = :space
-          elsif match = scan(/#{RE::IDENTIFIER}/o)
-            kind = :class
-            states.pop
-          else
-            states.pop
-            next
-          end
-        
-        when :function_expected
-          if scan(/\s+/)
-            kind = :space
-          elsif scan(/&/)
-            kind = :operator
-          elsif match = scan(/#{RE::IDENTIFIER}/o)
-            kind = :function
-            states.pop
-          else
-            states.pop
-            next
-          end
-        
-        else
-          raise_inspect 'Unknown state!', tokens, states
-        end
-        
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens, states
-        end
-        raise_inspect 'Empty token', tokens, states unless match
-        
-        tokens << [match, kind]
-        
-      end
-      
-      tokens
-    end
-    
-  end
-  
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/plaintext.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-module CodeRay
-module Scanners
-
-  class Plaintext < Scanner
-
-    register_for :plaintext, :plain
-    title 'Plain text'
-    
-    include Streamable
-    
-    KINDS_NOT_LOC = [:plain]
-    
-    def scan_tokens tokens, options
-      text = (scan_until(/\z/) || '')
-      tokens << [text, :plain]
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/python.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,285 +0,0 @@
-module CodeRay
-module Scanners
-  
-  # Bases on pygments' PythonLexer, see
-  # http://dev.pocoo.org/projects/pygments/browser/pygments/lexers/agile.py.
-  class Python < Scanner
-    
-    include Streamable
-    
-    register_for :python
-    file_extension 'py'
-    
-    KEYWORDS = [
-      'and', 'as', 'assert', 'break', 'class', 'continue', 'def',
-      'del', 'elif', 'else', 'except', 'finally', 'for',
-      'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not',
-      'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield',
-      'nonlocal',  # new in Python 3
-    ]
-    
-    OLD_KEYWORDS = [
-      'exec', 'print',  # gone in Python 3
-    ]
-    
-    PREDEFINED_METHODS_AND_TYPES = %w[
-      __import__ abs all any apply basestring bin bool buffer
-      bytearray bytes callable chr classmethod cmp coerce compile
-      complex delattr dict dir divmod enumerate eval execfile exit
-      file filter float frozenset getattr globals hasattr hash hex id
-      input int intern isinstance issubclass iter len list locals
-      long map max min next object oct open ord pow property range
-      raw_input reduce reload repr reversed round set setattr slice
-      sorted staticmethod str sum super tuple type unichr unicode
-      vars xrange zip
-    ]
-    
-    PREDEFINED_EXCEPTIONS = %w[
-      ArithmeticError AssertionError AttributeError
-      BaseException DeprecationWarning EOFError EnvironmentError
-      Exception FloatingPointError FutureWarning GeneratorExit IOError
-      ImportError ImportWarning IndentationError IndexError KeyError
-      KeyboardInterrupt LookupError MemoryError NameError
-      NotImplemented NotImplementedError OSError OverflowError
-      OverflowWarning PendingDeprecationWarning ReferenceError
-      RuntimeError RuntimeWarning StandardError StopIteration
-      SyntaxError SyntaxWarning SystemError SystemExit TabError
-      TypeError UnboundLocalError UnicodeDecodeError
-      UnicodeEncodeError UnicodeError UnicodeTranslateError
-      UnicodeWarning UserWarning ValueError Warning ZeroDivisionError
-    ]
-    
-    PREDEFINED_VARIABLES_AND_CONSTANTS = [
-      'False', 'True', 'None', # "keywords" since Python 3
-      'self', 'Ellipsis', 'NotImplemented',
-    ]
-    
-    IDENT_KIND = WordList.new(:ident).
-      add(KEYWORDS, :keyword).
-      add(OLD_KEYWORDS, :old_keyword).
-      add(PREDEFINED_METHODS_AND_TYPES, :predefined).
-      add(PREDEFINED_VARIABLES_AND_CONSTANTS, :pre_constant).
-      add(PREDEFINED_EXCEPTIONS, :exception)
-    
-    NAME = / [^\W\d] \w* /x
-    ESCAPE = / [abfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} | N\{[-\w ]+\} /x
-    
-    OPERATOR = /
-      \.\.\. |          # ellipsis
-      \.(?!\d) |        # dot but not decimal point
-      [,;:()\[\]{}] |   # simple delimiters
-      \/\/=? | \*\*=? | # special math
-      [-+*\/%&|^]=? |   # ordinary math and binary logic
-      [~`] |            # binary complement and inspection
-      <<=? | >>=? | [<>=]=? | !=  # comparison and assignment
-    /x
-    
-    STRING_DELIMITER_REGEXP = Hash.new do |h, delimiter|
-      h[delimiter] = Regexp.union delimiter
-    end
-    
-    STRING_CONTENT_REGEXP = Hash.new do |h, delimiter|
-      h[delimiter] = / [^\\\n]+? (?= \\ | $ | #{Regexp.escape(delimiter)} ) /x
-    end
-    
-    DEF_NEW_STATE = WordList.new(:initial).
-      add(%w(def), :def_expected).
-      add(%w(import from), :include_expected).
-      add(%w(class), :class_expected)
-    
-    DESCRIPTOR = /
-      #{NAME}
-      (?: \. #{NAME} )*
-      | \*
-    /x
-    
-    def scan_tokens tokens, options
-      
-      state = :initial
-      string_delimiter = nil
-      string_raw = false
-      import_clause = class_name_follows = last_token_dot = false
-      unicode = string.respond_to?(:encoding) && string.encoding.name == 'UTF-8'
-      from_import_state = []
-      
-      until eos?
-        
-        kind = nil
-        match = nil
-        
-        if state == :string
-          if scan(STRING_DELIMITER_REGEXP[string_delimiter])
-            tokens << [matched, :delimiter]
-            tokens << [:close, :string]
-            state = :initial
-            next
-          elsif string_delimiter.size == 3 && scan(/\n/)
-            kind = :content
-          elsif scan(STRING_CONTENT_REGEXP[string_delimiter])
-            kind = :content
-          elsif !string_raw && scan(/ \\ #{ESCAPE} /ox)
-            kind = :char
-          elsif scan(/ \\ #{UNICODE_ESCAPE} /ox)
-            kind = :char
-          elsif scan(/ \\ . /x)
-            kind = :content
-          elsif scan(/ \\ | $ /x)
-            tokens << [:close, :string]
-            kind = :error
-            state = :initial
-          else
-            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens, state
-          end
-        
-        elsif match = scan(/ [ \t]+ | \\\n /x)
-          tokens << [match, :space]
-          next
-        
-        elsif match = scan(/\n/)
-          tokens << [match, :space]
-          state = :initial if state == :include_expected
-          next
-        
-        elsif match = scan(/ \# [^\n]* /mx)
-          tokens << [match, :comment]
-          next
-        
-        elsif state == :initial
-          
-          if scan(/#{OPERATOR}/o)
-            kind = :operator
-          
-          elsif match = scan(/(u?r?|b)?("""|"|'''|')/i)
-            tokens << [:open, :string]
-            string_delimiter = self[2]
-            string_raw = false
-            modifiers = self[1]
-            unless modifiers.empty?
-              string_raw = !!modifiers.index(?r)
-              tokens << [modifiers, :modifier]
-              match = string_delimiter
-            end
-            state = :string
-            kind = :delimiter
-          
-          # TODO: backticks
-          
-          elsif match = scan(unicode ? /#{NAME}/uo : /#{NAME}/o)
-            kind = IDENT_KIND[match]
-            # TODO: keyword arguments
-            kind = :ident if last_token_dot
-            if kind == :old_keyword
-              kind = check(/\(/) ? :ident : :keyword
-            elsif kind == :predefined && check(/ *=/)
-              kind = :ident
-            elsif kind == :keyword
-              state = DEF_NEW_STATE[match]
-              from_import_state << match.to_sym if state == :include_expected
-            end
-          
-          elsif scan(/@[a-zA-Z0-9_.]+[lL]?/)
-            kind = :decorator
-          
-          elsif scan(/0[xX][0-9A-Fa-f]+[lL]?/)
-            kind = :hex
-          
-          elsif scan(/0[bB][01]+[lL]?/)
-            kind = :bin
-          
-          elsif match = scan(/(?:\d*\.\d+|\d+\.\d*)(?:[eE][+-]?\d+)?|\d+[eE][+-]?\d+/)
-            kind = :float
-            if scan(/[jJ]/)
-              match << matched
-              kind = :imaginary
-            end
-          
-          elsif scan(/0[oO][0-7]+|0[0-7]+(?![89.eE])[lL]?/)
-            kind = :oct
-          
-          elsif match = scan(/\d+([lL])?/)
-            kind = :integer
-            if self[1] == nil && scan(/[jJ]/)
-              match << matched
-              kind = :imaginary
-            end
-          
-          else
-            getch
-            kind = :error
-          
-          end
-            
-        elsif state == :def_expected
-          state = :initial
-          if match = scan(unicode ? /#{NAME}/uo : /#{NAME}/o)
-            kind = :method
-          else
-            next
-          end
-        
-        elsif state == :class_expected
-          state = :initial
-          if match = scan(unicode ? /#{NAME}/uo : /#{NAME}/o)
-            kind = :class
-          else
-            next
-          end
-          
-        elsif state == :include_expected
-          if match = scan(unicode ? /#{DESCRIPTOR}/uo : /#{DESCRIPTOR}/o)
-            kind = :include
-            if match == 'as'
-              kind = :keyword
-              from_import_state << :as
-            elsif from_import_state.first == :from && match == 'import'
-              kind = :keyword
-              from_import_state << :import
-            elsif from_import_state.last == :as
-              # kind = match[0,1][unicode ? /[[:upper:]]/u : /[[:upper:]]/] ? :class : :method
-              kind = :ident
-              from_import_state.pop
-            elsif IDENT_KIND[match] == :keyword
-              unscan
-              match = nil
-              state = :initial
-              next
-            end
-          elsif match = scan(/,/)
-            from_import_state.pop if from_import_state.last == :as
-            kind = :operator
-          else
-            from_import_state = []
-            state = :initial
-            next
-          end
-          
-        else
-          raise_inspect 'Unknown state', tokens, state
-          
-        end
-        
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens, state
-        end
-        raise_inspect 'Empty token', tokens, state unless match
-        
-        last_token_dot = match == '.'
-        
-        tokens << [match, kind]
-        
-      end
-      
-      if state == :string
-        tokens << [:close, :string]
-      end
-      
-      tokens
-    end
-    
-  end
-  
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/rhtml.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-module CodeRay
-module Scanners
-
-  load :html
-  load :ruby
-
-  # RHTML Scanner
-  class RHTML < Scanner
-
-    include Streamable
-    register_for :rhtml
-    title 'HTML ERB Template'
-    
-    KINDS_NOT_LOC = HTML::KINDS_NOT_LOC
-
-    ERB_RUBY_BLOCK = /
-      <%(?!%)[=-]?
-      (?>
-        [^\-%]*    # normal*
-        (?>        # special
-          (?: %(?!>) | -(?!%>) )
-          [^\-%]*  # normal*
-        )*
-      )
-      (?: -?%> )?
-    /x
-
-    START_OF_ERB = /
-      <%(?!%)
-    /x
-
-  private
-
-    def setup
-      @ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true
-      @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true
-    end
-
-    def reset_instance
-      super
-      @html_scanner.reset
-    end
-
-    def scan_tokens tokens, options
-
-      until eos?
-
-        if (match = scan_until(/(?=#{START_OF_ERB})/o) || scan_until(/\z/)) and not match.empty?
-          @html_scanner.tokenize match
-
-        elsif match = scan(/#{ERB_RUBY_BLOCK}/o)
-          start_tag = match[/\A<%[-=]?/]
-          end_tag = match[/-?%?>?\z/]
-          tokens << [:open, :inline]
-          tokens << [start_tag, :inline_delimiter]
-          code = match[start_tag.size .. -1 - end_tag.size]
-          @ruby_scanner.tokenize code
-          tokens << [end_tag, :inline_delimiter] unless end_tag.empty?
-          tokens << [:close, :inline]
-
-        else
-          raise_inspect 'else-case reached!', tokens
-        end
-
-      end
-
-      tokens
-
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/ruby.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,413 +0,0 @@
-module CodeRay
-module Scanners
-
-  # This scanner is really complex, since Ruby _is_ a complex language!
-  #
-  # It tries to highlight 100% of all common code,
-  # and 90% of strange codes.
-  #
-  # It is optimized for HTML highlighting, and is not very useful for
-  # parsing or pretty printing.
-  #
-  # For now, I think it's better than the scanners in VIM or Syntax, or
-  # any highlighter I was able to find, except Caleb's RubyLexer.
-  #
-  # I hope it's also better than the rdoc/irb lexer.
-  class Ruby < Scanner
-
-    include Streamable
-
-    register_for :ruby
-    file_extension 'rb'
-
-    helper :patterns
-    
-    if not defined? EncodingError
-      EncodingError = Class.new Exception
-    end
-
-  private
-    def scan_tokens tokens, options
-      last_token_dot = false
-      value_expected = true
-      heredocs = nil
-      last_state = nil
-      state = :initial
-      depth = nil
-      inline_block_stack = []
-      unicode = string.respond_to?(:encoding) && string.encoding.name == 'UTF-8'
-      
-      patterns = Patterns  # avoid constant lookup
-      
-      until eos?
-        match = nil
-        kind = nil
-
-        if state.instance_of? patterns::StringState
-# {{{
-          match = scan_until(state.pattern) || scan_until(/\z/)
-          tokens << [match, :content] unless match.empty?
-          break if eos?
-
-          if state.heredoc and self[1]  # end of heredoc
-            match = getch.to_s
-            match << scan_until(/$/) unless eos?
-            tokens << [match, :delimiter]
-            tokens << [:close, state.type]
-            state = state.next_state
-            next
-          end
-
-          case match = getch
-
-          when state.delim
-            if state.paren
-              state.paren_depth -= 1
-              if state.paren_depth > 0
-                tokens << [match, :nesting_delimiter]
-                next
-              end
-            end
-            tokens << [match, :delimiter]
-            if state.type == :regexp and not eos?
-              modifiers = scan(/#{patterns::REGEXP_MODIFIERS}/ox)
-              tokens << [modifiers, :modifier] unless modifiers.empty?
-            end
-            tokens << [:close, state.type]
-            value_expected = false
-            state = state.next_state
-
-          when '\\'
-            if state.interpreted
-              if esc = scan(/ #{patterns::ESCAPE} /ox)
-                tokens << [match + esc, :char]
-              else
-                tokens << [match, :error]
-              end
-            else
-              case m = getch
-              when state.delim, '\\'
-                tokens << [match + m, :char]
-              when nil
-                tokens << [match, :error]
-              else
-                tokens << [match + m, :content]
-              end
-            end
-
-          when '#'
-            case peek(1)
-            when '{'
-              inline_block_stack << [state, depth, heredocs]
-              value_expected = true
-              state = :initial
-              depth = 1
-              tokens << [:open, :inline]
-              tokens << [match + getch, :inline_delimiter]
-            when '$', '@'
-              tokens << [match, :escape]
-              last_state = state  # scan one token as normal code, then return here
-              state = :initial
-            else
-              raise_inspect 'else-case # reached; #%p not handled' % peek(1), tokens
-            end
-
-          when state.paren
-            state.paren_depth += 1
-            tokens << [match, :nesting_delimiter]
-
-          when /#{patterns::REGEXP_SYMBOLS}/ox
-            tokens << [match, :function]
-
-          else
-            raise_inspect 'else-case " reached; %p not handled, state = %p' % [match, state], tokens
-
-          end
-          next
-# }}}
-        else
-# {{{
-          if match = scan(/[ \t\f]+/)
-            kind = :space
-            match << scan(/\s*/) unless eos? || heredocs
-            value_expected = true if match.index(?\n)
-            tokens << [match, kind]
-            next
-            
-          elsif match = scan(/\\?\n/)
-            kind = :space
-            if match == "\n"
-              value_expected = true
-              state = :initial if state == :undef_comma_expected
-            end
-            if heredocs
-              unscan  # heredoc scanning needs \n at start
-              state = heredocs.shift
-              tokens << [:open, state.type]
-              heredocs = nil if heredocs.empty?
-              next
-            else
-              match << scan(/\s*/) unless eos?
-            end
-            tokens << [match, kind]
-            next
-          
-          elsif bol? && match = scan(/\#!.*/)
-            tokens << [match, :doctype]
-            next
-            
-          elsif match = scan(/\#.*/) or
-            ( bol? and match = scan(/#{patterns::RUBYDOC_OR_DATA}/o) )
-              kind = :comment
-              tokens << [match, kind]
-              next
-
-          elsif state == :initial
-
-            # IDENTS #
-            if match = scan(unicode ? /#{patterns::METHOD_NAME}/uo :
-                                      /#{patterns::METHOD_NAME}/o)
-              if last_token_dot
-                kind = if match[/^[A-Z]/] and not match?(/\(/) then :constant else :ident end
-              else
-                kind = patterns::IDENT_KIND[match]
-                if kind == :ident and match[/^[A-Z]/] and not match[/[!?]$/] and not match?(/\(/)
-                  kind = :constant
-                elsif kind == :reserved
-                  state = patterns::DEF_NEW_STATE[match]
-                  value_expected = :set if patterns::KEYWORDS_EXPECTING_VALUE[match]
-                end
-              end
-              value_expected = :set if check(/#{patterns::VALUE_FOLLOWS}/o)
-            
-            elsif last_token_dot and match = scan(/#{patterns::METHOD_NAME_OPERATOR}|\(/o)
-              kind = :ident
-              value_expected = :set if check(/#{patterns::VALUE_FOLLOWS}/o)
-
-            # OPERATORS #
-            elsif not last_token_dot and match = scan(/ \.\.\.? | (?:\.|::)() | [,\(\)\[\]\{\}] | ==?=? /x)
-              if match !~ / [.\)\]\}] /x or match =~ /\.\.\.?/
-                value_expected = :set
-              end
-              last_token_dot = :set if self[1]
-              kind = :operator
-              unless inline_block_stack.empty?
-                case match
-                when '{'
-                  depth += 1
-                when '}'
-                  depth -= 1
-                  if depth == 0  # closing brace of inline block reached
-                    state, depth, heredocs = inline_block_stack.pop
-                    heredocs = nil if heredocs && heredocs.empty?
-                    tokens << [match, :inline_delimiter]
-                    kind = :inline
-                    match = :close
-                  end
-                end
-              end
-
-            elsif match = scan(/ ['"] /mx)
-              tokens << [:open, :string]
-              kind = :delimiter
-              state = patterns::StringState.new :string, match == '"', match  # important for streaming
-
-            elsif match = scan(/#{patterns::INSTANCE_VARIABLE}/o)
-              kind = :instance_variable
-
-            elsif value_expected and match = scan(/\//)
-              tokens << [:open, :regexp]
-              kind = :delimiter
-              interpreted = true
-              state = patterns::StringState.new :regexp, interpreted, match
-
-            # elsif match = scan(/[-+]?#{patterns::NUMERIC}/o)
-            elsif match = value_expected ? scan(/[-+]?#{patterns::NUMERIC}/o) : scan(/#{patterns::NUMERIC}/o)
-              kind = self[1] ? :float : :integer
-
-            elsif match = scan(/#{patterns::SYMBOL}/o)
-              case delim = match[1]
-              when ?', ?"
-                tokens << [:open, :symbol]
-                tokens << [':', :symbol]
-                match = delim.chr
-                kind = :delimiter
-                state = patterns::StringState.new :symbol, delim == ?", match
-              else
-                kind = :symbol
-              end
-
-            elsif match = scan(/ [-+!~^]=? | [*|&]{1,2}=? | >>? /x)
-              value_expected = :set
-              kind = :operator
-
-            elsif value_expected and match = scan(/#{patterns::HEREDOC_OPEN}/o)
-              indented = self[1] == '-'
-              quote = self[3]
-              delim = self[quote ? 4 : 2]
-              kind = patterns::QUOTE_TO_TYPE[quote]
-              tokens << [:open, kind]
-              tokens << [match, :delimiter]
-              match = :close
-              heredoc = patterns::StringState.new kind, quote != '\'', delim, (indented ? :indented : :linestart )
-              heredocs ||= []  # create heredocs if empty
-              heredocs << heredoc
-
-            elsif value_expected and match = scan(/#{patterns::FANCY_START_CORRECT}/o)
-              kind, interpreted = *patterns::FancyStringType.fetch(self[1]) do
-                raise_inspect 'Unknown fancy string: %%%p' % k, tokens
-              end
-              tokens << [:open, kind]
-              state = patterns::StringState.new kind, interpreted, self[2]
-              kind = :delimiter
-
-            elsif value_expected and match = scan(/#{patterns::CHARACTER}/o)
-              kind = :integer
-
-            elsif match = scan(/ [\/%]=? | <(?:<|=>?)? | [?:;] /x)
-              value_expected = :set
-              kind = :operator
-
-            elsif match = scan(/`/)
-              if last_token_dot
-                kind = :operator
-              else
-                tokens << [:open, :shell]
-                kind = :delimiter
-                state = patterns::StringState.new :shell, true, match
-              end
-
-            elsif match = scan(/#{patterns::GLOBAL_VARIABLE}/o)
-              kind = :global_variable
-
-            elsif match = scan(/#{patterns::CLASS_VARIABLE}/o)
-              kind = :class_variable
-
-            else
-              if !unicode
-                # check for unicode
-                debug, $DEBUG = $DEBUG, false
-                begin
-                  if check(/./mu).size > 1
-                    # seems like we should try again with unicode
-                    unicode = true
-                  end
-                rescue
-                  # bad unicode char; use getch
-                ensure
-                  $DEBUG = debug
-                end
-                next if unicode
-              end
-              kind = :error
-              match = getch
-
-            end
-
-          elsif state == :def_expected
-            state = :initial
-            if scan(/self\./)
-              tokens << ['self', :pre_constant]
-              tokens << ['.', :operator]
-            end
-            if match = scan(unicode ? /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/uo :
-                                      /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/o)
-              kind = :method
-            else
-              next
-            end
-
-          elsif state == :module_expected
-            if match = scan(/<</)
-              kind = :operator
-            else
-              state = :initial
-              if match = scan(/ (?:#{patterns::IDENT}::)* #{patterns::IDENT} /ox)
-                kind = :class
-              else
-                next
-              end
-            end
-
-          elsif state == :undef_expected
-            state = :undef_comma_expected
-            if match = scan(/#{patterns::METHOD_NAME_EX}/o)
-              kind = :method
-            elsif match = scan(/#{patterns::SYMBOL}/o)
-              case delim = match[1]
-              when ?', ?"
-                tokens << [:open, :symbol]
-                tokens << [':', :symbol]
-                match = delim.chr
-                kind = :delimiter
-                state = patterns::StringState.new :symbol, delim == ?", match
-                state.next_state = :undef_comma_expected
-              else
-                kind = :symbol
-              end
-            else
-              state = :initial
-              next
-            end
-
-          elsif state == :alias_expected
-            match = scan(unicode ? /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/uo :
-                                   /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/o)
-            
-            if match
-              tokens << [self[1], (self[1][0] == ?: ? :symbol : :method)]
-              tokens << [self[2], :space]
-              tokens << [self[3], (self[3][0] == ?: ? :symbol : :method)]
-            end
-            state = :initial
-            next
-
-          elsif state == :undef_comma_expected
-            if match = scan(/,/)
-              kind = :operator
-              state = :undef_expected
-            else
-              state = :initial
-              next
-            end
-
-          end
-# }}}
-          
-          unless kind == :error
-            value_expected = value_expected == :set
-            last_token_dot = last_token_dot == :set
-          end
-          
-          if $CODERAY_DEBUG and not kind
-            raise_inspect 'Error token %p in line %d' %
-              [[match, kind], line], tokens, state
-          end
-          raise_inspect 'Empty token', tokens unless match
-
-          tokens << [match, kind]
-
-          if last_state
-            state = last_state
-            last_state = nil
-          end
-        end
-      end
-
-      inline_block_stack << [state] if state.is_a? patterns::StringState
-      until inline_block_stack.empty?
-        this_block = inline_block_stack.pop
-        tokens << [:close, :inline] if this_block.size > 1
-        state = this_block.first
-        tokens << [:close, state.type]
-      end
-
-      tokens
-    end
-
-  end
-
-end
-end
-
-# vim:fdm=marker
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/scheme.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-module CodeRay
-  module Scanners
-
-    # Scheme scanner for CodeRay (by closure).
-    # Thanks to murphy for putting CodeRay into public.
-    class Scheme < Scanner
-      
-      # TODO: function defs
-      # TODO: built-in functions
-      
-      register_for :scheme
-      file_extension 'scm'
-
-      CORE_FORMS = %w[
-        lambda let let* letrec syntax-case define-syntax let-syntax
-        letrec-syntax begin define quote if or and cond case do delay
-        quasiquote set! cons force call-with-current-continuation call/cc
-      ]
-
-      IDENT_KIND = CaseIgnoringWordList.new(:ident).
-        add(CORE_FORMS, :reserved)
-      
-      #IDENTIFIER_INITIAL = /[a-z!@\$%&\*\/\:<=>\?~_\^]/i
-      #IDENTIFIER_SUBSEQUENT = /#{IDENTIFIER_INITIAL}|\d|\.|\+|-/
-      #IDENTIFIER = /#{IDENTIFIER_INITIAL}#{IDENTIFIER_SUBSEQUENT}*|\+|-|\.{3}/
-      IDENTIFIER = /[a-zA-Z!@$%&*\/:<=>?~_^][\w!@$%&*\/:<=>?~^.+\-]*|[+-]|\.\.\./
-      DIGIT = /\d/
-      DIGIT10 = DIGIT
-      DIGIT16 = /[0-9a-f]/i
-      DIGIT8 = /[0-7]/
-      DIGIT2 = /[01]/
-      RADIX16 = /\#x/i
-      RADIX8 = /\#o/i
-      RADIX2 = /\#b/i
-      RADIX10 = /\#d/i
-      EXACTNESS = /#i|#e/i
-      SIGN = /[\+-]?/
-      EXP_MARK = /[esfdl]/i
-      EXP = /#{EXP_MARK}#{SIGN}#{DIGIT}+/
-      SUFFIX = /#{EXP}?/
-      PREFIX10 = /#{RADIX10}?#{EXACTNESS}?|#{EXACTNESS}?#{RADIX10}?/
-      PREFIX16 = /#{RADIX16}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX16}/
-      PREFIX8 = /#{RADIX8}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX8}/
-      PREFIX2 = /#{RADIX2}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX2}/
-      UINT10 = /#{DIGIT10}+#*/
-      UINT16 = /#{DIGIT16}+#*/
-      UINT8 = /#{DIGIT8}+#*/
-      UINT2 = /#{DIGIT2}+#*/
-      DECIMAL = /#{DIGIT10}+#+\.#*#{SUFFIX}|#{DIGIT10}+\.#{DIGIT10}*#*#{SUFFIX}|\.#{DIGIT10}+#*#{SUFFIX}|#{UINT10}#{EXP}/
-      UREAL10 = /#{UINT10}\/#{UINT10}|#{DECIMAL}|#{UINT10}/
-      UREAL16 = /#{UINT16}\/#{UINT16}|#{UINT16}/
-      UREAL8 = /#{UINT8}\/#{UINT8}|#{UINT8}/
-      UREAL2 = /#{UINT2}\/#{UINT2}|#{UINT2}/
-      REAL10 = /#{SIGN}#{UREAL10}/
-      REAL16 = /#{SIGN}#{UREAL16}/
-      REAL8 = /#{SIGN}#{UREAL8}/
-      REAL2 = /#{SIGN}#{UREAL2}/
-      IMAG10 = /i|#{UREAL10}i/
-      IMAG16 = /i|#{UREAL16}i/
-      IMAG8 = /i|#{UREAL8}i/
-      IMAG2 = /i|#{UREAL2}i/
-      COMPLEX10 = /#{REAL10}@#{REAL10}|#{REAL10}\+#{IMAG10}|#{REAL10}-#{IMAG10}|\+#{IMAG10}|-#{IMAG10}|#{REAL10}/
-      COMPLEX16 = /#{REAL16}@#{REAL16}|#{REAL16}\+#{IMAG16}|#{REAL16}-#{IMAG16}|\+#{IMAG16}|-#{IMAG16}|#{REAL16}/
-      COMPLEX8 = /#{REAL8}@#{REAL8}|#{REAL8}\+#{IMAG8}|#{REAL8}-#{IMAG8}|\+#{IMAG8}|-#{IMAG8}|#{REAL8}/
-      COMPLEX2 = /#{REAL2}@#{REAL2}|#{REAL2}\+#{IMAG2}|#{REAL2}-#{IMAG2}|\+#{IMAG2}|-#{IMAG2}|#{REAL2}/
-      NUM10 = /#{PREFIX10}?#{COMPLEX10}/
-      NUM16 = /#{PREFIX16}#{COMPLEX16}/
-      NUM8 = /#{PREFIX8}#{COMPLEX8}/
-      NUM2 = /#{PREFIX2}#{COMPLEX2}/
-      NUM = /#{NUM10}|#{NUM16}|#{NUM8}|#{NUM2}/
-    
-    private
-      def scan_tokens tokens,options
-        
-        state = :initial
-        ident_kind = IDENT_KIND
-        
-        until eos?
-          kind = match = nil
-          
-          case state
-          when :initial
-            if scan(/ \s+ | \\\n /x)
-              kind = :space
-            elsif scan(/['\(\[\)\]]|#\(/)
-              kind = :operator_fat
-            elsif scan(/;.*/)
-              kind = :comment
-            elsif scan(/#\\(?:newline|space|.?)/)
-              kind = :char
-            elsif scan(/#[ft]/)
-              kind = :pre_constant
-            elsif scan(/#{IDENTIFIER}/o)
-              kind = ident_kind[matched]
-            elsif scan(/\./)
-              kind = :operator
-            elsif scan(/"/)
-              tokens << [:open, :string]
-              state = :string
-              tokens << ['"', :delimiter]
-              next
-            elsif scan(/#{NUM}/o) and not matched.empty?
-              kind = :integer
-            elsif getch
-              kind = :error
-            end
-            
-          when :string
-            if scan(/[^"\\]+/) or scan(/\\.?/)
-              kind = :content
-            elsif scan(/"/)
-              tokens << ['"', :delimiter]
-              tokens << [:close, :string]
-              state = :initial
-              next
-            else
-              raise_inspect "else case \" reached; %p not handled." % peek(1),
-                tokens, state
-            end
-            
-          else
-            raise "else case reached"
-          end
-          
-          match ||= matched
-          if $CODERAY_DEBUG and not kind
-            raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-          end
-          raise_inspect 'Empty token', tokens, state unless match
-          
-          tokens << [match, kind]
-          
-        end  # until eos
-        
-        if state == :string
-          tokens << [:close, :string]
-        end
-        
-        tokens
-        
-      end #scan_tokens
-    end #class
-  end #module scanners
-end #module coderay
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/sql.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,162 +0,0 @@
-module CodeRay module Scanners
-  
-  # by Josh Goebel
-  class SQL < Scanner
-
-    register_for :sql
-    
-    RESERVED_WORDS = %w(
-      create database table index trigger drop primary key set select
-      insert update delete replace into
-      on from values before and or if exists case when
-      then else as group order by avg where
-      join inner outer union engine not
-      like end using collate show columns begin
-    )
-    
-    PREDEFINED_TYPES = %w(
-      char varchar enum binary text tinytext mediumtext
-      longtext blob tinyblob mediumblob longblob timestamp
-      date time datetime year double decimal float int
-      integer tinyint mediumint bigint smallint unsigned bit
-      bool boolean hex bin oct
-    )
-    
-    PREDEFINED_FUNCTIONS = %w( sum cast abs pi count min max avg )
-    
-    DIRECTIVES = %w( auto_increment unique default charset )
-
-    PREDEFINED_CONSTANTS = %w( null true false )
-    
-    IDENT_KIND = CaseIgnoringWordList.new(:ident).
-      add(RESERVED_WORDS, :reserved).
-      add(PREDEFINED_TYPES, :pre_type).
-      add(PREDEFINED_CONSTANTS, :pre_constant).
-      add(PREDEFINED_FUNCTIONS, :predefined).
-      add(DIRECTIVES, :directive)
-    
-    ESCAPE = / [rbfntv\n\\\/'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} | . /mx
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
-    
-    STRING_PREFIXES = /[xnb]|_\w+/i
-    
-    def scan_tokens tokens, options
-      
-      state = :initial
-      string_type = nil
-      string_content = ''
-      
-      until eos?
-        
-        kind = nil
-        match = nil
-        
-        if state == :initial
-          
-          if scan(/ \s+ | \\\n /x)
-            kind = :space
-          
-          elsif scan(/^(?:--\s?|#).*/)
-            kind = :comment
-            
-          elsif scan(%r! /\* (?: .*? \*/ | .* ) !mx)
-            kind = :comment
-            
-          elsif scan(/ [-+*\/=<>;,!&^|()\[\]{}~%] | \.(?!\d) /x)
-            kind = :operator
-            
-          elsif scan(/(#{STRING_PREFIXES})?([`"'])/o)
-            prefix = self[1]
-            string_type = self[2]
-            tokens << [:open, :string]
-            tokens << [prefix, :modifier] if prefix
-            match = string_type
-            state = :string
-            kind = :delimiter
-            
-          elsif match = scan(/ @? [A-Za-z_][A-Za-z_0-9]* /x)
-            kind = match[0] == ?@ ? :variable : IDENT_KIND[match.downcase]
-            
-          elsif scan(/0[xX][0-9A-Fa-f]+/)
-            kind = :hex
-            
-          elsif scan(/0[0-7]+(?![89.eEfF])/)
-            kind = :oct
-            
-          elsif scan(/(?>\d+)(?![.eEfF])/)
-            kind = :integer
-            
-          elsif scan(/\d[fF]|\d*\.\d+(?:[eE][+-]?\d+)?|\d+[eE][+-]?\d+/)
-            kind = :float
-            
-          else
-            getch
-            kind = :error
-            
-          end
-          
-        elsif state == :string
-          if match = scan(/[^\\"'`]+/)
-            string_content << match
-            next
-          elsif match = scan(/["'`]/)
-            if string_type == match
-              if peek(1) == string_type  # doubling means escape
-                string_content << string_type << getch
-                next
-              end
-              unless string_content.empty?
-                tokens << [string_content, :content]
-                string_content = ''
-              end
-              tokens << [matched, :delimiter]
-              tokens << [:close, :string]
-              state = :initial
-              string_type = nil
-              next
-            else
-              string_content << match
-            end
-            next
-          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
-            unless string_content.empty?
-              tokens << [string_content, :content]
-              string_content = ''
-            end
-            kind = :char
-          elsif match = scan(/ \\ . /mox)
-            string_content << match
-            next
-          elsif scan(/ \\ | $ /x)
-            unless string_content.empty?
-              tokens << [string_content, :content]
-              string_content = ''
-            end
-            kind = :error
-            state = :initial
-          else
-            raise "else case \" reached; %p not handled." % peek(1), tokens
-          end
-          
-        else
-          raise 'else-case reached', tokens
-          
-        end
-        
-        match ||= matched
-        unless kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens, state
-        end
-        raise_inspect 'Empty token', tokens unless match
-        
-        tokens << [match, kind]
-        
-      end
-      tokens
-      
-    end
-    
-  end
-  
-end end
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/xml.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-module CodeRay
-module Scanners
-
-  load :html
-
-  # XML Scanner
-  #
-  # Currently this is the same scanner as Scanners::HTML.
-  class XML < HTML
-
-    register_for :xml
-    file_extension 'xml'
-    
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/.svn/text-base/yaml.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,140 +0,0 @@
-module CodeRay
-module Scanners
-  
-  # YAML Scanner
-  #
-  # Based on the YAML scanner from Syntax by Jamis Buck.
-  class YAML < Scanner
-    
-    register_for :yaml
-    file_extension 'yml'
-    
-    KINDS_NOT_LOC = :all
-    
-    def scan_tokens tokens, options
-      
-      value_expected = nil
-      state = :initial
-      key_indent = indent = 0
-      
-      until eos?
-        
-        kind = nil
-        match = nil
-        key_indent = nil if bol?
-        
-        if match = scan(/ +[\t ]*/)
-          kind = :space
-          
-        elsif match = scan(/\n+/)
-          kind = :space
-          state = :initial if match.index(?\n)
-          
-        elsif match = scan(/#.*/)
-          kind = :comment
-          
-        elsif bol? and case
-          when match = scan(/---|\.\.\./)
-            tokens << [:open, :head]
-            tokens << [match, :head]
-            tokens << [:close, :head]
-            next
-          when match = scan(/%.*/)
-            tokens << [match, :doctype]
-            next
-          end
-        
-        elsif state == :value and case
-          when !check(/(?:"[^"]*")(?=: |:$)/) && scan(/"/)
-            tokens << [:open, :string]
-            tokens << [matched, :delimiter]
-            tokens << [matched, :content] if scan(/ [^"\\]* (?: \\. [^"\\]* )* /mx)
-            tokens << [matched, :delimiter] if scan(/"/)
-            tokens << [:close, :string]
-            next
-          when match = scan(/[|>][-+]?/)
-            tokens << [:open, :string]
-            tokens << [match, :delimiter]
-            string_indent = key_indent || column(pos - match.size - 1)
-            tokens << [matched, :content] if scan(/(?:\n+ {#{string_indent + 1}}.*)+/)
-            tokens << [:close, :string]
-            next
-          when match = scan(/(?![!"*&]).+?(?=$|\s+#)/)
-            tokens << [match, :string]
-            string_indent = key_indent || column(pos - match.size - 1)
-            tokens << [matched, :string] if scan(/(?:\n+ {#{string_indent + 1}}.*)+/)
-            next
-          end
-          
-        elsif case
-          when match = scan(/[-:](?= |$)/)
-            state = :value if state == :colon && (match == ':' || match == '-')
-            state = :value if state == :initial && match == '-'
-            kind = :operator
-          when match = scan(/[,{}\[\]]/)
-            kind = :operator
-          when state == :initial && match = scan(/[\w.() ]*\S(?=: |:$)/)
-            kind = :key
-            key_indent = column(pos - match.size - 1)
-            # tokens << [key_indent.inspect, :debug]
-            state = :colon
-          when match = scan(/(?:"[^"\n]*"|'[^'\n]*')(?=: |:$)/)
-            tokens << [:open, :key]
-            tokens << [match[0,1], :delimiter]
-            tokens << [match[1..-2], :content]
-            tokens << [match[-1,1], :delimiter]
-            tokens << [:close, :key]
-            key_indent = column(pos - match.size - 1)
-            # tokens << [key_indent.inspect, :debug]
-            state = :colon
-            next
-          when scan(/(![\w\/]+)(:([\w:]+))?/)
-            tokens << [self[1], :type]
-            if self[2]
-              tokens << [':', :operator]
-              tokens << [self[3], :class]
-            end
-            next
-          when scan(/&\S+/)
-            kind = :variable
-          when scan(/\*\w+/)
-            kind = :global_variable
-          when scan(/<</)
-            kind = :class_variable
-          when scan(/\d\d:\d\d:\d\d/)
-            kind = :oct
-          when scan(/\d\d\d\d-\d\d-\d\d\s\d\d:\d\d:\d\d(\.\d+)? [-+]\d\d:\d\d/)
-            kind = :oct
-          when scan(/:\w+/)
-            kind = :symbol
-          when scan(/[^:\s]+(:(?! |$)[^:\s]*)* .*/)
-            kind = :error
-          when scan(/[^:\s]+(:(?! |$)[^:\s]*)*/)
-            kind = :error
-          end
-          
-        else
-          getch
-          kind = :error
-          
-        end
-        
-        match ||= matched
-        
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens, state
-        end
-        raise_inspect 'Empty token', tokens, state unless match
-        
-        tokens << [match, kind]
-        
-      end
-      
-      tokens
-    end
-    
-  end
-  
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/_map.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-module CodeRay
-module Scanners
-
-  map \
-    :h => :c,
-    :cplusplus => :cpp,
-    :'c++' => :cpp,
-    :ecma => :java_script,
-    :ecmascript => :java_script,
-    :ecma_script => :java_script,
-    :irb => :ruby,
-    :javascript => :java_script,
-    :js => :java_script,
-    :nitro => :nitro_xhtml,
-    :pascal => :delphi,
-    :plain => :plaintext,
-    :xhtml => :html,
-    :yml => :yaml
-
-  default :plain
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/c.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,203 +0,0 @@
-module CodeRay
-module Scanners
-
-  class C < Scanner
-
-    include Streamable
-    
-    register_for :c
-    file_extension 'c'
-
-    RESERVED_WORDS = [
-      'asm', 'break', 'case', 'continue', 'default', 'do',
-      'else', 'enum', 'for', 'goto', 'if', 'return',
-      'sizeof', 'struct', 'switch', 'typedef', 'union', 'while',
-      'restrict',  # added in C99
-    ]
-
-    PREDEFINED_TYPES = [
-      'int', 'long', 'short', 'char',
-      'signed', 'unsigned', 'float', 'double',
-      'bool', 'complex',  # added in C99
-    ]
-
-    PREDEFINED_CONSTANTS = [
-      'EOF', 'NULL',
-      'true', 'false',  # added in C99
-    ]
-    DIRECTIVES = [
-      'auto', 'extern', 'register', 'static', 'void',
-      'const', 'volatile',  # added in C89
-      'inline',  # added in C99
-    ]
-
-    IDENT_KIND = WordList.new(:ident).
-      add(RESERVED_WORDS, :reserved).
-      add(PREDEFINED_TYPES, :pre_type).
-      add(DIRECTIVES, :directive).
-      add(PREDEFINED_CONSTANTS, :pre_constant)
-
-    ESCAPE = / [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
-
-    def scan_tokens tokens, options
-
-      state = :initial
-      label_expected = true
-      case_expected = false
-      label_expected_before_preproc_line = nil
-      in_preproc_line = false
-
-      until eos?
-
-        kind = nil
-        match = nil
-        
-        case state
-
-        when :initial
-
-          if match = scan(/ \s+ | \\\n /x)
-            if in_preproc_line && match != "\\\n" && match.index(?\n)
-              in_preproc_line = false
-              label_expected = label_expected_before_preproc_line
-            end
-            tokens << [match, :space]
-            next
-
-          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
-            kind = :comment
-
-          elsif match = scan(/ \# \s* if \s* 0 /x)
-            match << scan_until(/ ^\# (?:elif|else|endif) .*? $ | \z /xm) unless eos?
-            kind = :comment
-
-          elsif match = scan(/ [-+*=<>?:;,!&^|()\[\]{}~%]+ | \/=? | \.(?!\d) /x)
-            label_expected = match =~ /[;\{\}]/
-            if case_expected
-              label_expected = true if match == ':'
-              case_expected = false
-            end
-            kind = :operator
-
-          elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
-            kind = IDENT_KIND[match]
-            if kind == :ident && label_expected && !in_preproc_line && scan(/:(?!:)/)
-              kind = :label
-              match << matched
-            else
-              label_expected = false
-              if kind == :reserved
-                case match
-                when 'case', 'default'
-                  case_expected = true
-                end
-              end
-            end
-
-          elsif scan(/\$/)
-            kind = :ident
-          
-          elsif match = scan(/L?"/)
-            tokens << [:open, :string]
-            if match[0] == ?L
-              tokens << ['L', :modifier]
-              match = '"'
-            end
-            state = :string
-            kind = :delimiter
-
-          elsif scan(/#[ \t]*(\w*)/)
-            kind = :preprocessor
-            in_preproc_line = true
-            label_expected_before_preproc_line = label_expected
-            state = :include_expected if self[1] == 'include'
-
-          elsif scan(/ L?' (?: [^\'\n\\] | \\ #{ESCAPE} )? '? /ox)
-            label_expected = false
-            kind = :char
-
-          elsif scan(/0[xX][0-9A-Fa-f]+/)
-            label_expected = false
-            kind = :hex
-
-          elsif scan(/(?:0[0-7]+)(?![89.eEfF])/)
-            label_expected = false
-            kind = :oct
-
-          elsif scan(/(?:\d+)(?![.eEfF])L?L?/)
-            label_expected = false
-            kind = :integer
-
-          elsif scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
-            label_expected = false
-            kind = :float
-
-          else
-            getch
-            kind = :error
-
-          end
-
-        when :string
-          if scan(/[^\\\n"]+/)
-            kind = :content
-          elsif scan(/"/)
-            tokens << ['"', :delimiter]
-            tokens << [:close, :string]
-            state = :initial
-            label_expected = false
-            next
-          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
-            kind = :char
-          elsif scan(/ \\ | $ /x)
-            tokens << [:close, :string]
-            kind = :error
-            state = :initial
-            label_expected = false
-          else
-            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
-          end
-
-        when :include_expected
-          if scan(/<[^>\n]+>?|"[^"\n\\]*(?:\\.[^"\n\\]*)*"?/)
-            kind = :include
-            state = :initial
-
-          elsif match = scan(/\s+/)
-            kind = :space
-            state = :initial if match.index ?\n
-
-          else
-            state = :initial
-            next
-
-          end
-
-        else
-          raise_inspect 'Unknown state', tokens
-
-        end
-
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-
-        tokens << [match, kind]
-
-      end
-
-      if state == :string
-        tokens << [:close, :string]
-      end
-
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/cpp.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,228 +0,0 @@
-module CodeRay
-module Scanners
-
-  class CPlusPlus < Scanner
-
-    include Streamable
-    
-    register_for :cpp
-    file_extension 'cpp'
-    title 'C++'
-    
-    # http://www.cppreference.com/wiki/keywords/start
-    RESERVED_WORDS = [
-      'and', 'and_eq', 'asm', 'bitand', 'bitor', 'break',
-      'case', 'catch', 'class', 'compl', 'const_cast',
-      'continue', 'default', 'delete', 'do', 'dynamic_cast', 'else',
-      'enum', 'export', 'for', 'goto', 'if', 'namespace', 'new',
-      'not', 'not_eq', 'or', 'or_eq', 'reinterpret_cast', 'return',
-      'sizeof', 'static_cast', 'struct', 'switch', 'template',
-      'throw', 'try', 'typedef', 'typeid', 'typename', 'union',
-      'while', 'xor', 'xor_eq'
-    ]
-
-    PREDEFINED_TYPES = [
-      'bool', 'char', 'double', 'float', 'int', 'long',
-      'short', 'signed', 'unsigned', 'wchar_t', 'string'
-    ]
-    PREDEFINED_CONSTANTS = [
-      'false', 'true',
-      'EOF', 'NULL',
-    ]
-    PREDEFINED_VARIABLES = [
-      'this'
-    ]
-    DIRECTIVES = [
-      'auto', 'const', 'explicit', 'extern', 'friend', 'inline', 'mutable', 'operator',
-      'private', 'protected', 'public', 'register', 'static', 'using', 'virtual', 'void',
-      'volatile'
-    ]
-
-    IDENT_KIND = WordList.new(:ident).
-      add(RESERVED_WORDS, :reserved).
-      add(PREDEFINED_TYPES, :pre_type).
-      add(PREDEFINED_VARIABLES, :local_variable).
-      add(DIRECTIVES, :directive).
-      add(PREDEFINED_CONSTANTS, :pre_constant)
-
-    ESCAPE = / [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
-
-    def scan_tokens tokens, options
-
-      state = :initial
-      label_expected = true
-      case_expected = false
-      label_expected_before_preproc_line = nil
-      in_preproc_line = false
-
-      until eos?
-
-        kind = nil
-        match = nil
-        
-        case state
-
-        when :initial
-
-          if match = scan(/ \s+ | \\\n /x)
-            if in_preproc_line && match != "\\\n" && match.index(?\n)
-              in_preproc_line = false
-              label_expected = label_expected_before_preproc_line
-            end
-            tokens << [match, :space]
-            next
-
-          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
-            kind = :comment
-
-          elsif match = scan(/ \# \s* if \s* 0 /x)
-            match << scan_until(/ ^\# (?:elif|else|endif) .*? $ | \z /xm) unless eos?
-            kind = :comment
-
-          elsif match = scan(/ [-+*=<>?:;,!&^|()\[\]{}~%]+ | \/=? | \.(?!\d) /x)
-            label_expected = match =~ /[;\{\}]/
-            if case_expected
-              label_expected = true if match == ':'
-              case_expected = false
-            end
-            kind = :operator
-
-          elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
-            kind = IDENT_KIND[match]
-            if kind == :ident && label_expected && !in_preproc_line && scan(/:(?!:)/)
-              kind = :label
-              match << matched
-            else
-              label_expected = false
-              if kind == :reserved
-                case match
-                when 'class'
-                  state = :class_name_expected
-                when 'case', 'default'
-                  case_expected = true
-                end
-              end
-            end
-
-          elsif scan(/\$/)
-            kind = :ident
-          
-          elsif match = scan(/L?"/)
-            tokens << [:open, :string]
-            if match[0] == ?L
-              tokens << ['L', :modifier]
-              match = '"'
-            end
-            state = :string
-            kind = :delimiter
-
-          elsif scan(/#[ \t]*(\w*)/)
-            kind = :preprocessor
-            in_preproc_line = true
-            label_expected_before_preproc_line = label_expected
-            state = :include_expected if self[1] == 'include'
-
-          elsif scan(/ L?' (?: [^\'\n\\] | \\ #{ESCAPE} )? '? /ox)
-            label_expected = false
-            kind = :char
-
-          elsif scan(/0[xX][0-9A-Fa-f]+/)
-            label_expected = false
-            kind = :hex
-
-          elsif scan(/(?:0[0-7]+)(?![89.eEfF])/)
-            label_expected = false
-            kind = :oct
-
-          elsif scan(/(?:\d+)(?![.eEfF])L?L?/)
-            label_expected = false
-            kind = :integer
-
-          elsif scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
-            label_expected = false
-            kind = :float
-
-          else
-            getch
-            kind = :error
-
-          end
-
-        when :string
-          if scan(/[^\\"]+/)
-            kind = :content
-          elsif scan(/"/)
-            tokens << ['"', :delimiter]
-            tokens << [:close, :string]
-            state = :initial
-            label_expected = false
-            next
-          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
-            kind = :char
-          elsif scan(/ \\ | $ /x)
-            tokens << [:close, :string]
-            kind = :error
-            state = :initial
-            label_expected = false
-          else
-            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
-          end
-
-        when :include_expected
-          if scan(/<[^>\n]+>?|"[^"\n\\]*(?:\\.[^"\n\\]*)*"?/)
-            kind = :include
-            state = :initial
-
-          elsif match = scan(/\s+/)
-            kind = :space
-            state = :initial if match.index ?\n
-
-          else
-            state = :initial
-            next
-
-          end
-        
-        when :class_name_expected
-          if scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
-            kind = :class
-            state = :initial
-
-          elsif match = scan(/\s+/)
-            kind = :space
-
-          else
-            getch
-            kind = :error
-            state = :initial
-
-          end
-          
-        else
-          raise_inspect 'Unknown state', tokens
-
-        end
-
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-
-        tokens << [match, kind]
-
-      end
-
-      if state == :string
-        tokens << [:close, :string]
-      end
-
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/css.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,210 +0,0 @@
-module CodeRay
-module Scanners
-
-  class CSS < Scanner
-
-    register_for :css
-
-    KINDS_NOT_LOC = [
-      :comment,
-      :class, :pseudo_class, :type,
-      :constant, :directive,
-      :key, :value, :operator, :color, :float,
-      :error, :important,
-    ]
-    
-    module RE
-      NonASCII = /[\x80-\xFF]/
-      Hex = /[0-9a-fA-F]/
-      Unicode = /\\#{Hex}{1,6}(?:\r\n|\s)?/ # differs from standard because it allows uppercase hex too
-      Escape = /#{Unicode}|\\[^\r\n\f0-9a-fA-F]/
-      NMChar = /[-_a-zA-Z0-9]|#{NonASCII}|#{Escape}/
-      NMStart = /[_a-zA-Z]|#{NonASCII}|#{Escape}/
-      NL = /\r\n|\r|\n|\f/
-      String1 = /"(?:[^\n\r\f\\"]|\\#{NL}|#{Escape})*"?/  # FIXME: buggy regexp
-      String2 = /'(?:[^\n\r\f\\']|\\#{NL}|#{Escape})*'?/  # FIXME: buggy regexp
-      String = /#{String1}|#{String2}/
-
-      HexColor = /#(?:#{Hex}{6}|#{Hex}{3})/
-      Color = /#{HexColor}/
-
-      Num = /-?(?:[0-9]+|[0-9]*\.[0-9]+)/
-      Name = /#{NMChar}+/
-      Ident = /-?#{NMStart}#{NMChar}*/
-      AtKeyword = /@#{Ident}/
-      Percentage = /#{Num}%/
-
-      reldimensions = %w[em ex px]
-      absdimensions = %w[in cm mm pt pc]
-      Unit = Regexp.union(*(reldimensions + absdimensions))
-
-      Dimension = /#{Num}#{Unit}/
-
-      Comment = %r! /\* (?: .*? \*/ | .* ) !mx
-      Function = /(?:url|alpha)\((?:[^)\n\r\f]|\\\))*\)?/
-
-      Id = /##{Name}/
-      Class = /\.#{Name}/
-      PseudoClass = /:#{Name}/
-      AttributeSelector = /\[[^\]]*\]?/
-
-    end
-
-    def scan_tokens tokens, options
-      
-      value_expected = nil
-      states = [:initial]
-
-      until eos?
-
-        kind = nil
-        match = nil
-
-        if scan(/\s+/)
-          kind = :space
-
-        elsif case states.last
-          when :initial, :media
-            if scan(/(?>#{RE::Ident})(?!\()|\*/ox)
-              kind = :type
-            elsif scan RE::Class
-              kind = :class
-            elsif scan RE::Id
-              kind = :constant
-            elsif scan RE::PseudoClass
-              kind = :pseudo_class
-            elsif match = scan(RE::AttributeSelector)
-              # TODO: Improve highlighting inside of attribute selectors.
-              tokens << [:open, :string]
-              tokens << [match[0,1], :delimiter]
-              tokens << [match[1..-2], :content] if match.size > 2
-              tokens << [match[-1,1], :delimiter] if match[-1] == ?]
-              tokens << [:close, :string]
-              next
-            elsif match = scan(/@media/)
-              kind = :directive
-              states.push :media_before_name
-            end
-          
-          when :block
-            if scan(/(?>#{RE::Ident})(?!\()/ox)
-              if value_expected
-                kind = :value
-              else
-                kind = :key
-              end
-            end
-
-          when :media_before_name
-            if scan RE::Ident
-              kind = :type
-              states[-1] = :media_after_name
-            end
-          
-          when :media_after_name
-            if scan(/\{/)
-              kind = :operator
-              states[-1] = :media
-            end
-          
-          when :comment
-            if scan(/(?:[^*\s]|\*(?!\/))+/)
-              kind = :comment
-            elsif scan(/\*\//)
-              kind = :comment
-              states.pop
-            elsif scan(/\s+/)
-              kind = :space
-            end
-
-          else
-            raise_inspect 'Unknown state', tokens
-
-          end
-
-        elsif scan(/\/\*/)
-          kind = :comment
-          states.push :comment
-
-        elsif scan(/\{/)
-          value_expected = false
-          kind = :operator
-          states.push :block
-
-        elsif scan(/\}/)
-          value_expected = false
-          if states.last == :block || states.last == :media
-            kind = :operator
-            states.pop
-          else
-            kind = :error
-          end
-
-        elsif match = scan(/#{RE::String}/o)
-          tokens << [:open, :string]
-          tokens << [match[0, 1], :delimiter]
-          tokens << [match[1..-2], :content] if match.size > 2
-          tokens << [match[-1, 1], :delimiter] if match.size >= 2
-          tokens << [:close, :string]
-          next
-
-        elsif match = scan(/#{RE::Function}/o)
-          tokens << [:open, :string]
-          start = match[/^\w+\(/]
-          tokens << [start, :delimiter]
-          if match[-1] == ?)
-            tokens << [match[start.size..-2], :content]
-            tokens << [')', :delimiter]
-          else
-            tokens << [match[start.size..-1], :content]
-          end
-          tokens << [:close, :string]
-          next
-
-        elsif scan(/(?: #{RE::Dimension} | #{RE::Percentage} | #{RE::Num} )/ox)
-          kind = :float
-
-        elsif scan(/#{RE::Color}/o)
-          kind = :color
-
-        elsif scan(/! *important/)
-          kind = :important
-
-        elsif scan(/rgb\([^()\n]*\)?/)
-          kind = :color
-
-        elsif scan(/#{RE::AtKeyword}/o)
-          kind = :directive
-
-        elsif match = scan(/ [+>:;,.=()\/] /x)
-          if match == ':'
-            value_expected = true
-          elsif match == ';'
-            value_expected = false
-          end
-          kind = :operator
-
-        else
-          getch
-          kind = :error
-
-        end
-
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-
-        tokens << [match, kind]
-
-      end
-
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/debug.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-module CodeRay
-module Scanners
-
-  # = Debug Scanner
-  class Debug < Scanner
-
-    include Streamable
-    register_for :debug
-    file_extension 'raydebug'
-    title 'CodeRay Token Dump'
-
-  protected
-    def scan_tokens tokens, options
-
-      opened_tokens = []
-
-      until eos?
-
-        kind = nil
-        match = nil
-
-          if scan(/\s+/)
-            tokens << [matched, :space]
-            next
-            
-          elsif scan(/ (\w+) \( ( [^\)\\]* ( \\. [^\)\\]* )* ) \) /x)
-            kind = self[1].to_sym
-            match = self[2].gsub(/\\(.)/, '\1')
-            
-          elsif scan(/ (\w+) < /x)
-            kind = self[1].to_sym
-            opened_tokens << kind
-            match = :open
-            
-          elsif !opened_tokens.empty? && scan(/ > /x)
-            kind = opened_tokens.pop || :error
-            match = :close
-            
-          else
-            kind = :error
-            getch
-
-          end
-                  
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-
-        tokens << [match, kind]
-        
-      end
-      
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/delphi.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-module CodeRay
-module Scanners
-  
-  class Delphi < Scanner
-
-    register_for :delphi
-    file_extension 'pas'
-    
-    RESERVED_WORDS = [
-      'and', 'array', 'as', 'at', 'asm', 'at', 'begin', 'case', 'class',
-      'const', 'constructor', 'destructor', 'dispinterface', 'div', 'do',
-      'downto', 'else', 'end', 'except', 'exports', 'file', 'finalization',
-      'finally', 'for', 'function', 'goto', 'if', 'implementation', 'in',
-      'inherited', 'initialization', 'inline', 'interface', 'is', 'label',
-      'library', 'mod', 'nil', 'not', 'object', 'of', 'or', 'out', 'packed',
-      'procedure', 'program', 'property', 'raise', 'record', 'repeat',
-      'resourcestring', 'set', 'shl', 'shr', 'string', 'then', 'threadvar',
-      'to', 'try', 'type', 'unit', 'until', 'uses', 'var', 'while', 'with',
-      'xor', 'on'
-    ]
-
-    DIRECTIVES = [
-      'absolute', 'abstract', 'assembler', 'at', 'automated', 'cdecl',
-      'contains', 'deprecated', 'dispid', 'dynamic', 'export',
-      'external', 'far', 'forward', 'implements', 'local', 
-      'near', 'nodefault', 'on', 'overload', 'override',
-      'package', 'pascal', 'platform', 'private', 'protected', 'public',
-      'published', 'read', 'readonly', 'register', 'reintroduce',
-      'requires', 'resident', 'safecall', 'stdcall', 'stored', 'varargs',
-      'virtual', 'write', 'writeonly'
-    ]
-
-    IDENT_KIND = CaseIgnoringWordList.new(:ident).
-      add(RESERVED_WORDS, :reserved).
-      add(DIRECTIVES, :directive)
-    
-    NAME_FOLLOWS = CaseIgnoringWordList.new(false).
-      add(%w(procedure function .))
-
-  private
-    def scan_tokens tokens, options
-
-      state = :initial
-      last_token = ''
-
-      until eos?
-
-        kind = nil
-        match = nil
-
-        if state == :initial
-          
-          if scan(/ \s+ /x)
-            tokens << [matched, :space]
-            next
-            
-          elsif scan(%r! \{ \$ [^}]* \}? | \(\* \$ (?: .*? \*\) | .* ) !mx)
-            tokens << [matched, :preprocessor]
-            next
-            
-          elsif scan(%r! // [^\n]* | \{ [^}]* \}? | \(\* (?: .*? \*\) | .* ) !mx)
-            tokens << [matched, :comment]
-            next
-            
-          elsif match = scan(/ <[>=]? | >=? | :=? | [-+=*\/;,@\^|\(\)\[\]] | \.\. /x)
-            kind = :operator
-          
-          elsif match = scan(/\./)
-            kind = :operator
-            if last_token == 'end'
-              tokens << [match, kind]
-              next
-            end
-            
-          elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x)
-            kind = NAME_FOLLOWS[last_token] ? :ident : IDENT_KIND[match]
-            
-          elsif match = scan(/ ' ( [^\n']|'' ) (?:'|$) /x)
-            tokens << [:open, :char]
-            tokens << ["'", :delimiter]
-            tokens << [self[1], :content]
-            tokens << ["'", :delimiter]
-            tokens << [:close, :char]
-            next
-            
-          elsif match = scan(/ ' /x)
-            tokens << [:open, :string]
-            state = :string
-            kind = :delimiter
-            
-          elsif scan(/ \# (?: \d+ | \$[0-9A-Fa-f]+ ) /x)
-            kind = :char
-            
-          elsif scan(/ \$ [0-9A-Fa-f]+ /x)
-            kind = :hex
-            
-          elsif scan(/ (?: \d+ ) (?![eE]|\.[^.]) /x)
-            kind = :integer
-            
-          elsif scan(/ \d+ (?: \.\d+ (?: [eE][+-]? \d+ )? | [eE][+-]? \d+ ) /x)
-            kind = :float
-
-          else
-            kind = :error
-            getch
-
-          end
-          
-        elsif state == :string
-          if scan(/[^\n']+/)
-            kind = :content
-          elsif scan(/''/)
-            kind = :char
-          elsif scan(/'/)
-            tokens << ["'", :delimiter]
-            tokens << [:close, :string]
-            state = :initial
-            next
-          elsif scan(/\n/)
-            tokens << [:close, :string]
-            kind = :error
-            state = :initial
-          else
-            raise "else case \' reached; %p not handled." % peek(1), tokens
-          end
-          
-        else
-          raise 'else-case reached', tokens
-          
-        end
-        
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens, state
-        end
-        raise_inspect 'Empty token', tokens unless match
-
-        last_token = match
-        tokens << [match, kind]
-        
-      end
-      
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/diff.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,0 @@
-module CodeRay
-module Scanners
-  
-  class Diff < Scanner
-    
-    register_for :diff
-    title 'diff output'
-    
-    def scan_tokens tokens, options
-      
-      line_kind = nil
-      state = :initial
-      
-      until eos?
-        kind = match = nil
-        
-        if match = scan(/\n/)
-          if line_kind
-            tokens << [:end_line, line_kind]
-            line_kind = nil
-          end
-          tokens << [match, :space]
-          next
-        end
-        
-        case state
-        
-        when :initial
-          if match = scan(/--- |\+\+\+ |=+|_+/)
-            tokens << [:begin_line, line_kind = :head]
-            tokens << [match, :head]
-            next unless match = scan(/.+/)
-            kind = :plain
-          elsif match = scan(/Index: |Property changes on: /)
-            tokens << [:begin_line, line_kind = :head]
-            tokens << [match, :head]
-            next unless match = scan(/.+/)
-            kind = :plain
-          elsif match = scan(/Added: /)
-            tokens << [:begin_line, line_kind = :head]
-            tokens << [match, :head]
-            next unless match = scan(/.+/)
-            kind = :plain
-            state = :added
-          elsif match = scan(/\\ /)
-            tokens << [:begin_line, line_kind = :change]
-            tokens << [match, :change]
-            next unless match = scan(/.+/)
-            kind = :plain
-          elsif scan(/(@@)((?>[^@\n]*))(@@)/)
-            tokens << [:begin_line, line_kind = :change]
-            tokens << [self[1], :change]
-            tokens << [self[2], :plain]
-            tokens << [self[3], :change]
-            next unless match = scan(/.+/)
-            kind = :plain
-          elsif match = scan(/\+/)
-            tokens << [:begin_line, line_kind = :insert]
-            tokens << [match, :insert]
-            next unless match = scan(/.+/)
-            kind = :plain
-          elsif match = scan(/-/)
-            tokens << [:begin_line, line_kind = :delete]
-            tokens << [match, :delete]
-            next unless match = scan(/.+/)
-            kind = :plain
-          elsif scan(/ .*/)
-            kind = :comment
-          elsif scan(/.+/)
-            tokens << [:begin_line, line_kind = :head]
-            kind = :plain
-          else
-            raise_inspect 'else case rached'
-          end
-        
-        when :added
-          if match = scan(/   \+/)
-            tokens << [:begin_line, line_kind = :insert]
-            tokens << [match, :insert]
-            next unless match = scan(/.+/)
-            kind = :plain
-          else
-            state = :initial
-            next
-          end
-        end
-        
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-        
-        tokens << [match, kind]
-      end
-      
-      tokens << [:end_line, line_kind] if line_kind
-      tokens
-    end
-    
-  end
-  
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/groovy.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,264 +0,0 @@
-module CodeRay
-module Scanners
-
-  load :java
-
-  class Groovy < Java
-
-    include Streamable
-    register_for :groovy
-    
-    # TODO: Check this!
-    GROOVY_KEYWORDS = %w[
-      as assert def in
-    ]
-    KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[
-      case instanceof new return throw typeof while as assert in
-    ]
-    GROOVY_MAGIC_VARIABLES = %w[ it ]
-    
-    IDENT_KIND = Java::IDENT_KIND.dup.
-      add(GROOVY_KEYWORDS, :keyword).
-      add(GROOVY_MAGIC_VARIABLES, :local_variable)
-    
-    ESCAPE = / [bfnrtv$\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} /x  # no 4-byte unicode chars? U[a-fA-F0-9]{8}
-    REGEXP_ESCAPE =  / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} | \d | [bBdDsSwW\/] /x
-    
-    # TODO: interpretation inside ', ", /
-    STRING_CONTENT_PATTERN = {
-      "'" => /(?>\\[^\\'\n]+|[^\\'\n]+)+/,
-      '"' => /[^\\$"\n]+/,
-      "'''" => /(?>[^\\']+|'(?!''))+/,
-      '"""' => /(?>[^\\$"]+|"(?!""))+/,
-      '/' => /[^\\$\/\n]+/,
-    }
-    
-    def scan_tokens tokens, options
-
-      state = :initial
-      inline_block_stack = []
-      inline_block_paren_depth = nil
-      string_delimiter = nil
-      import_clause = class_name_follows = last_token = after_def = false
-      value_expected = true
-
-      until eos?
-
-        kind = nil
-        match = nil
-        
-        case state
-
-        when :initial
-
-          if match = scan(/ \s+ | \\\n /x)
-            tokens << [match, :space]
-            if match.index ?\n
-              import_clause = after_def = false
-              value_expected = true unless value_expected
-            end
-            next
-          
-          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
-            value_expected = true
-            after_def = false
-            kind = :comment
-          
-          elsif bol? && scan(/ \#!.* /x)
-            kind = :doctype
-          
-          elsif import_clause && scan(/ (?!as) #{IDENT} (?: \. #{IDENT} )* (?: \.\* )? /ox)
-            after_def = value_expected = false
-            kind = :include
-          
-          elsif match = scan(/ #{IDENT} | \[\] /ox)
-            kind = IDENT_KIND[match]
-            value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match]
-            if last_token == '.'
-              kind = :ident
-            elsif class_name_follows
-              kind = :class
-              class_name_follows = false
-            elsif after_def && check(/\s*[({]/)
-              kind = :method
-              after_def = false
-            elsif kind == :ident && last_token != '?' && check(/:/)
-              kind = :key
-            else
-              class_name_follows = true if match == 'class' || (import_clause && match == 'as')
-              import_clause = match == 'import'
-              after_def = true if match == 'def'
-            end
-          
-          elsif scan(/;/)
-            import_clause = after_def = false
-            value_expected = true
-            kind = :operator
-          
-          elsif scan(/\{/)
-            class_name_follows = after_def = false
-            value_expected = true
-            kind = :operator
-            if !inline_block_stack.empty?
-              inline_block_paren_depth += 1
-            end
-          
-          # TODO: ~'...', ~"..." and ~/.../ style regexps
-          elsif match = scan(/ \.\.<? | \*?\.(?!\d)@? | \.& | \?:? | [,?:(\[] | -[->] | \+\+ |
-              && | \|\| | \*\*=? | ==?~ | <=?>? | [-+*%^~&|>=!]=? | <<<?=? | >>>?=? /x)
-            value_expected = true
-            value_expected = :regexp if match == '~'
-            after_def = false
-            kind = :operator
-          
-          elsif match = scan(/ [)\]}] /x)
-            value_expected = after_def = false
-            if !inline_block_stack.empty? && match == '}'
-              inline_block_paren_depth -= 1
-              if inline_block_paren_depth == 0  # closing brace of inline block reached
-                tokens << [match, :inline_delimiter]
-                tokens << [:close, :inline]
-                state, string_delimiter, inline_block_paren_depth = inline_block_stack.pop
-                next
-              end
-            end
-            kind = :operator
-          
-          elsif check(/[\d.]/)
-            after_def = value_expected = false
-            if scan(/0[xX][0-9A-Fa-f]+/)
-              kind = :hex
-            elsif scan(/(?>0[0-7]+)(?![89.eEfF])/)
-              kind = :oct
-            elsif scan(/\d+[fFdD]|\d*\.\d+(?:[eE][+-]?\d+)?[fFdD]?|\d+[eE][+-]?\d+[fFdD]?/)
-              kind = :float
-            elsif scan(/\d+[lLgG]?/)
-              kind = :integer
-            end
-
-          elsif match = scan(/'''|"""/)
-            after_def = value_expected = false
-            state = :multiline_string
-            tokens << [:open, :string]
-            string_delimiter = match
-            kind = :delimiter
-          
-          # TODO: record.'name'
-          elsif match = scan(/["']/)
-            after_def = value_expected = false
-            state = match == '/' ? :regexp : :string
-            tokens << [:open, state]
-            string_delimiter = match
-            kind = :delimiter
-
-          elsif value_expected && (match = scan(/\//))
-            after_def = value_expected = false
-            tokens << [:open, :regexp]
-            state = :regexp
-            string_delimiter = '/'
-            kind = :delimiter
-
-          elsif scan(/ @ #{IDENT} /ox)
-            after_def = value_expected = false
-            kind = :annotation
-
-          elsif scan(/\//)
-            after_def = false
-            value_expected = true
-            kind = :operator
-          
-          else
-            getch
-            kind = :error
-
-          end
-
-        when :string, :regexp, :multiline_string
-          if scan(STRING_CONTENT_PATTERN[string_delimiter])
-            kind = :content
-            
-          elsif match = scan(state == :multiline_string ? /'''|"""/ : /["'\/]/)
-            tokens << [match, :delimiter]
-            if state == :regexp
-              # TODO: regexp modifiers? s, m, x, i?
-              modifiers = scan(/[ix]+/)
-              tokens << [modifiers, :modifier] if modifiers && !modifiers.empty?
-            end
-            state = :string if state == :multiline_string
-            tokens << [:close, state]
-            string_delimiter = nil
-            after_def = value_expected = false
-            state = :initial
-            next
-          
-          elsif (state == :string || state == :multiline_string) &&
-              (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))
-            if string_delimiter[0] == ?' && !(match == "\\\\" || match == "\\'")
-              kind = :content
-            else
-              kind = :char
-            end
-          elsif state == :regexp && scan(/ \\ (?: #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
-            kind = :char
-          
-          elsif match = scan(/ \$ #{IDENT} /mox)
-            tokens << [:open, :inline]
-            tokens << ['$', :inline_delimiter]
-            match = match[1..-1]
-            tokens << [match, IDENT_KIND[match]]
-            tokens << [:close, :inline]
-            next
-          elsif match = scan(/ \$ \{ /x)
-            tokens << [:open, :inline]
-            tokens << ['${', :inline_delimiter]
-            inline_block_stack << [state, string_delimiter, inline_block_paren_depth]
-            inline_block_paren_depth = 1
-            state = :initial
-            next
-          
-          elsif scan(/ \$ /mx)
-            kind = :content
-          
-          elsif scan(/ \\. /mx)
-            kind = :content
-          
-          elsif scan(/ \\ | \n /x)
-            tokens << [:close, state]
-            kind = :error
-            after_def = value_expected = false
-            state = :initial
-          
-          else
-            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
-          end
-
-        else
-          raise_inspect 'Unknown state', tokens
-
-        end
-
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-        
-        last_token = match unless [:space, :comment, :doctype].include? kind
-        
-        tokens << [match, kind]
-
-      end
-
-      if [:multiline_string, :string, :regexp].include? state
-        tokens << [:close, state]
-      end
-
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/html.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,182 +0,0 @@
-module CodeRay
-module Scanners
-
-  # HTML Scanner
-  class HTML < Scanner
-
-    include Streamable
-    register_for :html
-    
-    KINDS_NOT_LOC = [
-      :comment, :doctype, :preprocessor,
-      :tag, :attribute_name, :operator,
-      :attribute_value, :delimiter, :content,
-      :plain, :entity, :error
-    ]
-
-    ATTR_NAME = /[\w.:-]+/
-    ATTR_VALUE_UNQUOTED = ATTR_NAME
-    TAG_END = /\/?>/
-    HEX = /[0-9a-fA-F]/
-    ENTITY = /
-      &
-      (?:
-        \w+
-      |
-        \#
-        (?:
-          \d+
-        |
-          x#{HEX}+
-        )
-      )
-      ;
-    /ox
-
-    PLAIN_STRING_CONTENT = {
-      "'" => /[^&'>\n]+/,
-      '"' => /[^&">\n]+/,
-    }
-
-    def reset
-      super
-      @state = :initial
-    end
-
-  private
-    def setup
-      @state = :initial
-      @plain_string_content = nil
-    end
-
-    def scan_tokens tokens, options
-
-      state = @state
-      plain_string_content = @plain_string_content
-
-      until eos?
-
-        kind = nil
-        match = nil
-
-        if scan(/\s+/m)
-          kind = :space
-
-        else
-
-          case state
-
-          when :initial
-            if scan(/<!--.*?-->/m)
-              kind = :comment
-            elsif scan(/<!DOCTYPE.*?>/m)
-              kind = :doctype
-            elsif scan(/<\?xml.*?\?>/m)
-              kind = :preprocessor
-            elsif scan(/<\?.*?\?>|<%.*?%>/m)
-              kind = :comment
-            elsif scan(/<\/[-\w.:]*>/m)
-              kind = :tag
-            elsif match = scan(/<[-\w.:]+>?/m)
-              kind = :tag
-              state = :attribute unless match[-1] == ?>
-            elsif scan(/[^<>&]+/)
-              kind = :plain
-            elsif scan(/#{ENTITY}/ox)
-              kind = :entity
-            elsif scan(/[<>&]/)
-              kind = :error
-            else
-              raise_inspect '[BUG] else-case reached with state %p' % [state], tokens
-            end
-
-          when :attribute
-            if scan(/#{TAG_END}/)
-              kind = :tag
-              state = :initial
-            elsif scan(/#{ATTR_NAME}/o)
-              kind = :attribute_name
-              state = :attribute_equal
-            else
-              kind = :error
-              getch
-            end
-
-          when :attribute_equal
-            if scan(/=/)
-              kind = :operator
-              state = :attribute_value
-            elsif scan(/#{ATTR_NAME}/o)
-              kind = :attribute_name
-            elsif scan(/#{TAG_END}/o)
-              kind = :tag
-              state = :initial
-            elsif scan(/./)
-              kind = :error
-              state = :attribute
-            end
-
-          when :attribute_value
-            if scan(/#{ATTR_VALUE_UNQUOTED}/o)
-              kind = :attribute_value
-              state = :attribute
-            elsif match = scan(/["']/)
-              tokens << [:open, :string]
-              state = :attribute_value_string
-              plain_string_content = PLAIN_STRING_CONTENT[match]
-              kind = :delimiter
-            elsif scan(/#{TAG_END}/o)
-              kind = :tag
-              state = :initial
-            else
-              kind = :error
-              getch
-            end
-
-          when :attribute_value_string
-            if scan(plain_string_content)
-              kind = :content
-            elsif scan(/['"]/)
-              tokens << [matched, :delimiter]
-              tokens << [:close, :string]
-              state = :attribute
-              next
-            elsif scan(/#{ENTITY}/ox)
-              kind = :entity
-            elsif scan(/&/)
-              kind = :content
-            elsif scan(/[\n>]/)
-              tokens << [:close, :string]
-              kind = :error
-              state = :initial
-            end
-
-          else
-            raise_inspect 'Unknown state: %p' % [state], tokens
-
-          end
-
-        end
-
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens, state
-        end
-        raise_inspect 'Empty token', tokens unless match
-
-        tokens << [match, kind]
-      end
-
-      if options[:keep_state]
-        @state = state
-        @plain_string_content = plain_string_content
-      end
-
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,176 +0,0 @@
-module CodeRay
-module Scanners
-
-  class Java < Scanner
-
-    include Streamable
-    register_for :java
-    helper :builtin_types
-    
-    # http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
-    KEYWORDS = %w[
-      assert break case catch continue default do else
-      finally for if instanceof import new package
-      return switch throw try typeof while
-      debugger export
-    ]
-    RESERVED = %w[ const goto ]
-    CONSTANTS = %w[ false null true ]
-    MAGIC_VARIABLES = %w[ this super ]
-    TYPES = %w[
-      boolean byte char class double enum float int interface long
-      short void
-    ] << '[]'  # because int[] should be highlighted as a type
-    DIRECTIVES = %w[
-      abstract extends final implements native private protected public
-      static strictfp synchronized throws transient volatile
-    ]
-    
-    IDENT_KIND = WordList.new(:ident).
-      add(KEYWORDS, :keyword).
-      add(RESERVED, :reserved).
-      add(CONSTANTS, :pre_constant).
-      add(MAGIC_VARIABLES, :local_variable).
-      add(TYPES, :type).
-      add(BuiltinTypes::List, :pre_type).
-      add(BuiltinTypes::List.select { |builtin| builtin[/(Error|Exception)$/] }, :exception).
-      add(DIRECTIVES, :directive)
-
-    ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
-    STRING_CONTENT_PATTERN = {
-      "'" => /[^\\']+/,
-      '"' => /[^\\"]+/,
-      '/' => /[^\\\/]+/,
-    }
-    IDENT = /[a-zA-Z_][A-Za-z_0-9]*/
-    
-    def scan_tokens tokens, options
-
-      state = :initial
-      string_delimiter = nil
-      import_clause = class_name_follows = last_token_dot = false
-
-      until eos?
-
-        kind = nil
-        match = nil
-        
-        case state
-
-        when :initial
-
-          if match = scan(/ \s+ | \\\n /x)
-            tokens << [match, :space]
-            next
-          
-          elsif match = scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
-            tokens << [match, :comment]
-            next
-          
-          elsif import_clause && scan(/ #{IDENT} (?: \. #{IDENT} )* /ox)
-            kind = :include
-          
-          elsif match = scan(/ #{IDENT} | \[\] /ox)
-            kind = IDENT_KIND[match]
-            if last_token_dot
-              kind = :ident
-            elsif class_name_follows
-              kind = :class
-              class_name_follows = false
-            else
-              import_clause = true if match == 'import'
-              class_name_follows = true if match == 'class' || match == 'interface'
-            end
-          
-          elsif scan(/ \.(?!\d) | [,?:()\[\]}] | -- | \+\+ | && | \|\| | \*\*=? | [-+*\/%^~&|<>=!]=? | <<<?=? | >>>?=? /x)
-            kind = :operator
-          
-          elsif scan(/;/)
-            import_clause = false
-            kind = :operator
-          
-          elsif scan(/\{/)
-            class_name_follows = false
-            kind = :operator
-          
-          elsif check(/[\d.]/)
-            if scan(/0[xX][0-9A-Fa-f]+/)
-              kind = :hex
-            elsif scan(/(?>0[0-7]+)(?![89.eEfF])/)
-              kind = :oct
-            elsif scan(/\d+[fFdD]|\d*\.\d+(?:[eE][+-]?\d+)?[fFdD]?|\d+[eE][+-]?\d+[fFdD]?/)
-              kind = :float
-            elsif scan(/\d+[lL]?/)
-              kind = :integer
-            end
-
-          elsif match = scan(/["']/)
-            tokens << [:open, :string]
-            state = :string
-            string_delimiter = match
-            kind = :delimiter
-
-          elsif scan(/ @ #{IDENT} /ox)
-            kind = :annotation
-
-          else
-            getch
-            kind = :error
-
-          end
-
-        when :string
-          if scan(STRING_CONTENT_PATTERN[string_delimiter])
-            kind = :content
-          elsif match = scan(/["'\/]/)
-            tokens << [match, :delimiter]
-            tokens << [:close, state]
-            string_delimiter = nil
-            state = :initial
-            next
-          elsif state == :string && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))
-            if string_delimiter == "'" && !(match == "\\\\" || match == "\\'")
-              kind = :content
-            else
-              kind = :char
-            end
-          elsif scan(/\\./m)
-            kind = :content
-          elsif scan(/ \\ | $ /x)
-            tokens << [:close, :delimiter]
-            kind = :error
-            state = :initial
-          else
-            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
-          end
-
-        else
-          raise_inspect 'Unknown state', tokens
-
-        end
-
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-        
-        last_token_dot = match == '.'
-        
-        tokens << [match, kind]
-
-      end
-
-      if state == :string
-        tokens << [:close, state]
-      end
-
-      tokens
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-10
-
-dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java
-http://redmine.rubyforge.org/svn
-
-
-
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-e93f8b46-1217-0410-a6f0-8f06a7374b81
-
-builtin_types.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-2522414597cbbef27fad175c20c8a556
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-41768
-
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/prop-base/builtin_types.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/.svn/text-base/builtin_types.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,419 +0,0 @@
-module CodeRay
-module Scanners
-  
-  module Java::BuiltinTypes  # :nodoc:
-    
-    List = %w[
-      AbstractAction AbstractBorder AbstractButton AbstractCellEditor AbstractCollection
-      AbstractColorChooserPanel AbstractDocument AbstractExecutorService AbstractInterruptibleChannel
-      AbstractLayoutCache AbstractList AbstractListModel AbstractMap AbstractMethodError AbstractPreferences
-      AbstractQueue AbstractQueuedSynchronizer AbstractSelectableChannel AbstractSelectionKey AbstractSelector
-      AbstractSequentialList AbstractSet AbstractSpinnerModel AbstractTableModel AbstractUndoableEdit
-      AbstractWriter AccessControlContext AccessControlException AccessController AccessException Accessible
-      AccessibleAction AccessibleAttributeSequence AccessibleBundle AccessibleComponent AccessibleContext
-      AccessibleEditableText AccessibleExtendedComponent AccessibleExtendedTable AccessibleExtendedText
-      AccessibleHyperlink AccessibleHypertext AccessibleIcon AccessibleKeyBinding AccessibleObject
-      AccessibleRelation AccessibleRelationSet AccessibleResourceBundle AccessibleRole AccessibleSelection
-      AccessibleState AccessibleStateSet AccessibleStreamable AccessibleTable AccessibleTableModelChange
-      AccessibleText AccessibleTextSequence AccessibleValue AccountException AccountExpiredException
-      AccountLockedException AccountNotFoundException Acl AclEntry AclNotFoundException Action ActionEvent
-      ActionListener ActionMap ActionMapUIResource Activatable ActivateFailedException ActivationDesc
-      ActivationException ActivationGroup ActivationGroupDesc ActivationGroupID ActivationGroup_Stub
-      ActivationID ActivationInstantiator ActivationMonitor ActivationSystem Activator ActiveEvent
-      ActivityCompletedException ActivityRequiredException Adjustable AdjustmentEvent AdjustmentListener
-      Adler32 AffineTransform AffineTransformOp AlgorithmParameterGenerator AlgorithmParameterGeneratorSpi
-      AlgorithmParameters AlgorithmParameterSpec AlgorithmParametersSpi AllPermission AlphaComposite
-      AlreadyBoundException AlreadyConnectedException AncestorEvent AncestorListener AnnotatedElement
-      Annotation AnnotationFormatError AnnotationTypeMismatchException AppConfigurationEntry Appendable Applet
-      AppletContext AppletInitializer AppletStub Arc2D Area AreaAveragingScaleFilter ArithmeticException Array
-      ArrayBlockingQueue ArrayIndexOutOfBoundsException ArrayList Arrays ArrayStoreException ArrayType
-      AssertionError AsyncBoxView AsynchronousCloseException AtomicBoolean AtomicInteger AtomicIntegerArray
-      AtomicIntegerFieldUpdater AtomicLong AtomicLongArray AtomicLongFieldUpdater AtomicMarkableReference
-      AtomicReference AtomicReferenceArray AtomicReferenceFieldUpdater AtomicStampedReference Attribute
-      AttributeChangeNotification AttributeChangeNotificationFilter AttributedCharacterIterator
-      AttributedString AttributeException AttributeInUseException AttributeList AttributeModificationException
-      AttributeNotFoundException Attributes AttributeSet AttributeSetUtilities AttributeValueExp AudioClip
-      AudioFileFormat AudioFileReader AudioFileWriter AudioFormat AudioInputStream AudioPermission AudioSystem
-      AuthenticationException AuthenticationNotSupportedException Authenticator AuthorizeCallback
-      AuthPermission AuthProvider Autoscroll AWTError AWTEvent AWTEventListener AWTEventListenerProxy
-      AWTEventMulticaster AWTException AWTKeyStroke AWTPermission BackingStoreException
-      BadAttributeValueExpException BadBinaryOpValueExpException BadLocationException BadPaddingException
-      BadStringOperationException BandCombineOp BandedSampleModel BaseRowSet BasicArrowButton BasicAttribute
-      BasicAttributes BasicBorders BasicButtonListener BasicButtonUI BasicCheckBoxMenuItemUI BasicCheckBoxUI
-      BasicColorChooserUI BasicComboBoxEditor BasicComboBoxRenderer BasicComboBoxUI BasicComboPopup
-      BasicControl BasicDesktopIconUI BasicDesktopPaneUI BasicDirectoryModel BasicEditorPaneUI
-      BasicFileChooserUI BasicFormattedTextFieldUI BasicGraphicsUtils BasicHTML BasicIconFactory
-      BasicInternalFrameTitlePane BasicInternalFrameUI BasicLabelUI BasicListUI BasicLookAndFeel
-      BasicMenuBarUI BasicMenuItemUI BasicMenuUI BasicOptionPaneUI BasicPanelUI BasicPasswordFieldUI
-      BasicPermission BasicPopupMenuSeparatorUI BasicPopupMenuUI BasicProgressBarUI BasicRadioButtonMenuItemUI
-      BasicRadioButtonUI BasicRootPaneUI BasicScrollBarUI BasicScrollPaneUI BasicSeparatorUI BasicSliderUI
-      BasicSpinnerUI BasicSplitPaneDivider BasicSplitPaneUI BasicStroke BasicTabbedPaneUI BasicTableHeaderUI
-      BasicTableUI BasicTextAreaUI BasicTextFieldUI BasicTextPaneUI BasicTextUI BasicToggleButtonUI
-      BasicToolBarSeparatorUI BasicToolBarUI BasicToolTipUI BasicTreeUI BasicViewportUI BatchUpdateException
-      BeanContext BeanContextChild BeanContextChildComponentProxy BeanContextChildSupport
-      BeanContextContainerProxy BeanContextEvent BeanContextMembershipEvent BeanContextMembershipListener
-      BeanContextProxy BeanContextServiceAvailableEvent BeanContextServiceProvider
-      BeanContextServiceProviderBeanInfo BeanContextServiceRevokedEvent BeanContextServiceRevokedListener
-      BeanContextServices BeanContextServicesListener BeanContextServicesSupport BeanContextSupport
-      BeanDescriptor BeanInfo Beans BevelBorder Bidi BigDecimal BigInteger BinaryRefAddr BindException Binding
-      BitSet Blob BlockingQueue BlockView BMPImageWriteParam Book Boolean BooleanControl Border BorderFactory
-      BorderLayout BorderUIResource BoundedRangeModel Box BoxLayout BoxView BreakIterator
-      BrokenBarrierException Buffer BufferCapabilities BufferedImage BufferedImageFilter BufferedImageOp
-      BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter BufferOverflowException
-      BufferStrategy BufferUnderflowException Button ButtonGroup ButtonModel ButtonUI Byte
-      ByteArrayInputStream ByteArrayOutputStream ByteBuffer ByteChannel ByteLookupTable ByteOrder CachedRowSet
-      CacheRequest CacheResponse Calendar Callable CallableStatement Callback CallbackHandler
-      CancelablePrintJob CancellationException CancelledKeyException CannotProceedException
-      CannotRedoException CannotUndoException Canvas CardLayout Caret CaretEvent CaretListener CellEditor
-      CellEditorListener CellRendererPane Certificate CertificateEncodingException CertificateException
-      CertificateExpiredException CertificateFactory CertificateFactorySpi CertificateNotYetValidException
-      CertificateParsingException CertPath CertPathBuilder CertPathBuilderException CertPathBuilderResult
-      CertPathBuilderSpi CertPathParameters CertPathTrustManagerParameters CertPathValidator
-      CertPathValidatorException CertPathValidatorResult CertPathValidatorSpi CertSelector CertStore
-      CertStoreException CertStoreParameters CertStoreSpi ChangedCharSetException ChangeEvent ChangeListener
-      Channel Channels Character CharacterCodingException CharacterIterator CharArrayReader CharArrayWriter
-      CharBuffer CharConversionException CharSequence Charset CharsetDecoder CharsetEncoder CharsetProvider
-      Checkbox CheckboxGroup CheckboxMenuItem CheckedInputStream CheckedOutputStream Checksum Choice
-      ChoiceCallback ChoiceFormat Chromaticity Cipher CipherInputStream CipherOutputStream CipherSpi Class
-      ClassCastException ClassCircularityError ClassDefinition ClassDesc ClassFileTransformer ClassFormatError
-      ClassLoader ClassLoaderRepository ClassLoadingMXBean ClassNotFoundException Clip Clipboard
-      ClipboardOwner Clob Cloneable CloneNotSupportedException Closeable ClosedByInterruptException
-      ClosedChannelException ClosedSelectorException CMMException CoderMalfunctionError CoderResult CodeSigner
-      CodeSource CodingErrorAction CollationElementIterator CollationKey Collator Collection
-      CollectionCertStoreParameters Collections Color ColorChooserComponentFactory ColorChooserUI
-      ColorConvertOp ColorModel ColorSelectionModel ColorSpace ColorSupported ColorType ColorUIResource
-      ComboBoxEditor ComboBoxModel ComboBoxUI ComboPopup CommunicationException Comparable Comparator
-      CompilationMXBean Compiler CompletionService Component ComponentAdapter ComponentColorModel
-      ComponentEvent ComponentInputMap ComponentInputMapUIResource ComponentListener ComponentOrientation
-      ComponentSampleModel ComponentUI ComponentView Composite CompositeContext CompositeData
-      CompositeDataSupport CompositeName CompositeType CompositeView CompoundBorder CompoundControl
-      CompoundEdit CompoundName Compression ConcurrentHashMap ConcurrentLinkedQueue ConcurrentMap
-      ConcurrentModificationException Condition Configuration ConfigurationException ConfirmationCallback
-      ConnectException ConnectIOException Connection ConnectionEvent ConnectionEventListener
-      ConnectionPendingException ConnectionPoolDataSource ConsoleHandler Constructor Container
-      ContainerAdapter ContainerEvent ContainerListener ContainerOrderFocusTraversalPolicy ContentHandler
-      ContentHandlerFactory ContentModel Context ContextNotEmptyException ContextualRenderedImageFactory
-      Control ControlFactory ControllerEventListener ConvolveOp CookieHandler Copies CopiesSupported
-      CopyOnWriteArrayList CopyOnWriteArraySet CountDownLatch CounterMonitor CounterMonitorMBean CRC32
-      CredentialException CredentialExpiredException CredentialNotFoundException CRL CRLException CRLSelector
-      CropImageFilter CSS CubicCurve2D Currency Cursor Customizer CyclicBarrier DatabaseMetaData DataBuffer
-      DataBufferByte DataBufferDouble DataBufferFloat DataBufferInt DataBufferShort DataBufferUShort
-      DataFlavor DataFormatException DatagramChannel DatagramPacket DatagramSocket DatagramSocketImpl
-      DatagramSocketImplFactory DataInput DataInputStream DataLine DataOutput DataOutputStream DataSource
-      DataTruncation DatatypeConfigurationException DatatypeConstants DatatypeFactory Date DateFormat
-      DateFormatSymbols DateFormatter DateTimeAtCompleted DateTimeAtCreation DateTimeAtProcessing
-      DateTimeSyntax DebugGraphics DecimalFormat DecimalFormatSymbols DefaultBoundedRangeModel
-      DefaultButtonModel DefaultCaret DefaultCellEditor DefaultColorSelectionModel DefaultComboBoxModel
-      DefaultDesktopManager DefaultEditorKit DefaultFocusManager DefaultFocusTraversalPolicy DefaultFormatter
-      DefaultFormatterFactory DefaultHighlighter DefaultKeyboardFocusManager DefaultListCellRenderer
-      DefaultListModel DefaultListSelectionModel DefaultLoaderRepository DefaultMenuLayout DefaultMetalTheme
-      DefaultMutableTreeNode DefaultPersistenceDelegate DefaultSingleSelectionModel DefaultStyledDocument
-      DefaultTableCellRenderer DefaultTableColumnModel DefaultTableModel DefaultTextUI DefaultTreeCellEditor
-      DefaultTreeCellRenderer DefaultTreeModel DefaultTreeSelectionModel Deflater DeflaterOutputStream Delayed
-      DelayQueue DelegationPermission Deprecated Descriptor DescriptorAccess DescriptorSupport DESedeKeySpec
-      DesignMode DESKeySpec DesktopIconUI DesktopManager DesktopPaneUI Destination Destroyable
-      DestroyFailedException DGC DHGenParameterSpec DHKey DHParameterSpec DHPrivateKey DHPrivateKeySpec
-      DHPublicKey DHPublicKeySpec Dialog Dictionary DigestException DigestInputStream DigestOutputStream
-      Dimension Dimension2D DimensionUIResource DirContext DirectColorModel DirectoryManager DirObjectFactory
-      DirStateFactory DisplayMode DnDConstants Doc DocAttribute DocAttributeSet DocFlavor DocPrintJob Document
-      DocumentBuilder DocumentBuilderFactory Documented DocumentEvent DocumentFilter DocumentListener
-      DocumentName DocumentParser DomainCombiner DOMLocator DOMResult DOMSource Double DoubleBuffer
-      DragGestureEvent DragGestureListener DragGestureRecognizer DragSource DragSourceAdapter
-      DragSourceContext DragSourceDragEvent DragSourceDropEvent DragSourceEvent DragSourceListener
-      DragSourceMotionListener Driver DriverManager DriverPropertyInfo DropTarget DropTargetAdapter
-      DropTargetContext DropTargetDragEvent DropTargetDropEvent DropTargetEvent DropTargetListener DSAKey
-      DSAKeyPairGenerator DSAParameterSpec DSAParams DSAPrivateKey DSAPrivateKeySpec DSAPublicKey
-      DSAPublicKeySpec DTD DTDConstants DuplicateFormatFlagsException Duration DynamicMBean ECField ECFieldF2m
-      ECFieldFp ECGenParameterSpec ECKey ECParameterSpec ECPoint ECPrivateKey ECPrivateKeySpec ECPublicKey
-      ECPublicKeySpec EditorKit Element ElementIterator ElementType Ellipse2D EllipticCurve EmptyBorder
-      EmptyStackException EncodedKeySpec Encoder EncryptedPrivateKeyInfo Entity Enum
-      EnumConstantNotPresentException EnumControl Enumeration EnumMap EnumSet EnumSyntax EOFException Error
-      ErrorListener ErrorManager EtchedBorder Event EventContext EventDirContext EventHandler EventListener
-      EventListenerList EventListenerProxy EventObject EventQueue EventSetDescriptor Exception
-      ExceptionInInitializerError ExceptionListener Exchanger ExecutionException Executor
-      ExecutorCompletionService Executors ExecutorService ExemptionMechanism ExemptionMechanismException
-      ExemptionMechanismSpi ExpandVetoException ExportException Expression ExtendedRequest ExtendedResponse
-      Externalizable FactoryConfigurationError FailedLoginException FeatureDescriptor Fidelity Field
-      FieldPosition FieldView File FileCacheImageInputStream FileCacheImageOutputStream FileChannel
-      FileChooserUI FileDescriptor FileDialog FileFilter FileHandler FileImageInputStream
-      FileImageOutputStream FileInputStream FileLock FileLockInterruptionException FilenameFilter FileNameMap
-      FileNotFoundException FileOutputStream FilePermission FileReader FileSystemView FileView FileWriter
-      Filter FilteredImageSource FilteredRowSet FilterInputStream FilterOutputStream FilterReader FilterWriter
-      Finishings FixedHeightLayoutCache FlatteningPathIterator FlavorEvent FlavorException FlavorListener
-      FlavorMap FlavorTable Float FloatBuffer FloatControl FlowLayout FlowView Flushable FocusAdapter
-      FocusEvent FocusListener FocusManager FocusTraversalPolicy Font FontFormatException FontMetrics
-      FontRenderContext FontUIResource Format FormatConversionProvider FormatFlagsConversionMismatchException
-      Formattable FormattableFlags Formatter FormatterClosedException FormSubmitEvent FormView Frame Future
-      FutureTask GapContent GarbageCollectorMXBean GatheringByteChannel GaugeMonitor GaugeMonitorMBean
-      GeneralPath GeneralSecurityException GenericArrayType GenericDeclaration GenericSignatureFormatError
-      GlyphJustificationInfo GlyphMetrics GlyphVector GlyphView GradientPaint GraphicAttribute Graphics
-      Graphics2D GraphicsConfigTemplate GraphicsConfiguration GraphicsDevice GraphicsEnvironment GrayFilter
-      GregorianCalendar GridBagConstraints GridBagLayout GridLayout Group Guard GuardedObject GZIPInputStream
-      GZIPOutputStream Handler HandshakeCompletedEvent HandshakeCompletedListener HasControls HashAttributeSet
-      HashDocAttributeSet HashMap HashPrintJobAttributeSet HashPrintRequestAttributeSet
-      HashPrintServiceAttributeSet HashSet Hashtable HeadlessException HierarchyBoundsAdapter
-      HierarchyBoundsListener HierarchyEvent HierarchyListener Highlighter HostnameVerifier HTML HTMLDocument
-      HTMLEditorKit HTMLFrameHyperlinkEvent HTMLWriter HttpRetryException HttpsURLConnection HttpURLConnection
-      HyperlinkEvent HyperlinkListener ICC_ColorSpace ICC_Profile ICC_ProfileGray ICC_ProfileRGB Icon
-      IconUIResource IconView Identity IdentityHashMap IdentityScope IIOByteBuffer IIOException IIOImage
-      IIOInvalidTreeException IIOMetadata IIOMetadataController IIOMetadataFormat IIOMetadataFormatImpl
-      IIOMetadataNode IIOParam IIOParamController IIOReadProgressListener IIOReadUpdateListener
-      IIOReadWarningListener IIORegistry IIOServiceProvider IIOWriteProgressListener IIOWriteWarningListener
-      IllegalAccessError IllegalAccessException IllegalArgumentException IllegalBlockingModeException
-      IllegalBlockSizeException IllegalCharsetNameException IllegalClassFormatException
-      IllegalComponentStateException IllegalFormatCodePointException IllegalFormatConversionException
-      IllegalFormatException IllegalFormatFlagsException IllegalFormatPrecisionException
-      IllegalFormatWidthException IllegalMonitorStateException IllegalPathStateException
-      IllegalSelectorException IllegalStateException IllegalThreadStateException Image ImageCapabilities
-      ImageConsumer ImageFilter ImageGraphicAttribute ImageIcon ImageInputStream ImageInputStreamImpl
-      ImageInputStreamSpi ImageIO ImageObserver ImageOutputStream ImageOutputStreamImpl ImageOutputStreamSpi
-      ImageProducer ImageReader ImageReaderSpi ImageReaderWriterSpi ImageReadParam ImageTranscoder
-      ImageTranscoderSpi ImageTypeSpecifier ImageView ImageWriteParam ImageWriter ImageWriterSpi
-      ImagingOpException IncompatibleClassChangeError IncompleteAnnotationException IndexColorModel
-      IndexedPropertyChangeEvent IndexedPropertyDescriptor IndexOutOfBoundsException Inet4Address Inet6Address
-      InetAddress InetSocketAddress Inflater InflaterInputStream InheritableThreadLocal Inherited
-      InitialContext InitialContextFactory InitialContextFactoryBuilder InitialDirContext InitialLdapContext
-      InlineView InputContext InputEvent InputMap InputMapUIResource InputMethod InputMethodContext
-      InputMethodDescriptor InputMethodEvent InputMethodHighlight InputMethodListener InputMethodRequests
-      InputMismatchException InputStream InputStreamReader InputSubset InputVerifier Insets InsetsUIResource
-      InstanceAlreadyExistsException InstanceNotFoundException InstantiationError InstantiationException
-      Instrument Instrumentation InsufficientResourcesException IntBuffer Integer IntegerSyntax InternalError
-      InternalFrameAdapter InternalFrameEvent InternalFrameFocusTraversalPolicy InternalFrameListener
-      InternalFrameUI InternationalFormatter InterruptedException InterruptedIOException
-      InterruptedNamingException InterruptibleChannel IntrospectionException Introspector
-      InvalidActivityException InvalidAlgorithmParameterException InvalidApplicationException
-      InvalidAttributeIdentifierException InvalidAttributesException InvalidAttributeValueException
-      InvalidClassException InvalidDnDOperationException InvalidKeyException InvalidKeySpecException
-      InvalidMarkException InvalidMidiDataException InvalidNameException InvalidObjectException
-      InvalidOpenTypeException InvalidParameterException InvalidParameterSpecException
-      InvalidPreferencesFormatException InvalidPropertiesFormatException InvalidRelationIdException
-      InvalidRelationServiceException InvalidRelationTypeException InvalidRoleInfoException
-      InvalidRoleValueException InvalidSearchControlsException InvalidSearchFilterException
-      InvalidTargetObjectTypeException InvalidTransactionException InvocationEvent InvocationHandler
-      InvocationTargetException IOException ItemEvent ItemListener ItemSelectable Iterable Iterator
-      IvParameterSpec JApplet JarEntry JarException JarFile JarInputStream JarOutputStream JarURLConnection
-      JButton JCheckBox JCheckBoxMenuItem JColorChooser JComboBox JComponent JdbcRowSet JDesktopPane JDialog
-      JEditorPane JFileChooser JFormattedTextField JFrame JInternalFrame JLabel JLayeredPane JList JMenu
-      JMenuBar JMenuItem JMException JMRuntimeException JMXAuthenticator JMXConnectionNotification
-      JMXConnector JMXConnectorFactory JMXConnectorProvider JMXConnectorServer JMXConnectorServerFactory
-      JMXConnectorServerMBean JMXConnectorServerProvider JMXPrincipal JMXProviderException
-      JMXServerErrorException JMXServiceURL JobAttributes JobHoldUntil JobImpressions JobImpressionsCompleted
-      JobImpressionsSupported JobKOctets JobKOctetsProcessed JobKOctetsSupported JobMediaSheets
-      JobMediaSheetsCompleted JobMediaSheetsSupported JobMessageFromOperator JobName JobOriginatingUserName
-      JobPriority JobPrioritySupported JobSheets JobState JobStateReason JobStateReasons Joinable JoinRowSet
-      JOptionPane JPanel JPasswordField JPEGHuffmanTable JPEGImageReadParam JPEGImageWriteParam JPEGQTable
-      JPopupMenu JProgressBar JRadioButton JRadioButtonMenuItem JRootPane JScrollBar JScrollPane JSeparator
-      JSlider JSpinner JSplitPane JTabbedPane JTable JTableHeader JTextArea JTextComponent JTextField
-      JTextPane JToggleButton JToolBar JToolTip JTree JViewport JWindow KerberosKey KerberosPrincipal
-      KerberosTicket Kernel Key KeyAdapter KeyAgreement KeyAgreementSpi KeyAlreadyExistsException
-      KeyboardFocusManager KeyEvent KeyEventDispatcher KeyEventPostProcessor KeyException KeyFactory
-      KeyFactorySpi KeyGenerator KeyGeneratorSpi KeyListener KeyManagementException KeyManager
-      KeyManagerFactory KeyManagerFactorySpi Keymap KeyPair KeyPairGenerator KeyPairGeneratorSpi KeyRep
-      KeySpec KeyStore KeyStoreBuilderParameters KeyStoreException KeyStoreSpi KeyStroke Label LabelUI
-      LabelView LanguageCallback LastOwnerException LayeredHighlighter LayoutFocusTraversalPolicy
-      LayoutManager LayoutManager2 LayoutQueue LDAPCertStoreParameters LdapContext LdapName
-      LdapReferralException Lease Level LimitExceededException Line Line2D LineBorder LineBreakMeasurer
-      LineEvent LineListener LineMetrics LineNumberInputStream LineNumberReader LineUnavailableException
-      LinkageError LinkedBlockingQueue LinkedHashMap LinkedHashSet LinkedList LinkException LinkLoopException
-      LinkRef List ListCellRenderer ListDataEvent ListDataListener ListenerNotFoundException ListIterator
-      ListModel ListResourceBundle ListSelectionEvent ListSelectionListener ListSelectionModel ListUI ListView
-      LoaderHandler Locale LocateRegistry Lock LockSupport Logger LoggingMXBean LoggingPermission LoginContext
-      LoginException LoginModule LogManager LogRecord LogStream Long LongBuffer LookAndFeel LookupOp
-      LookupTable Mac MacSpi MalformedInputException MalformedLinkException MalformedObjectNameException
-      MalformedParameterizedTypeException MalformedURLException ManagementFactory ManagementPermission
-      ManageReferralControl ManagerFactoryParameters Manifest Map MappedByteBuffer MarshalException
-      MarshalledObject MaskFormatter Matcher MatchResult Math MathContext MatteBorder MBeanAttributeInfo
-      MBeanConstructorInfo MBeanException MBeanFeatureInfo MBeanInfo MBeanNotificationInfo MBeanOperationInfo
-      MBeanParameterInfo MBeanPermission MBeanRegistration MBeanRegistrationException MBeanServer
-      MBeanServerBuilder MBeanServerConnection MBeanServerDelegate MBeanServerDelegateMBean MBeanServerFactory
-      MBeanServerForwarder MBeanServerInvocationHandler MBeanServerNotification MBeanServerNotificationFilter
-      MBeanServerPermission MBeanTrustPermission Media MediaName MediaPrintableArea MediaSize MediaSizeName
-      MediaTracker MediaTray Member MemoryCacheImageInputStream MemoryCacheImageOutputStream MemoryHandler
-      MemoryImageSource MemoryManagerMXBean MemoryMXBean MemoryNotificationInfo MemoryPoolMXBean MemoryType
-      MemoryUsage Menu MenuBar MenuBarUI MenuComponent MenuContainer MenuDragMouseEvent MenuDragMouseListener
-      MenuElement MenuEvent MenuItem MenuItemUI MenuKeyEvent MenuKeyListener MenuListener MenuSelectionManager
-      MenuShortcut MessageDigest MessageDigestSpi MessageFormat MetaEventListener MetalBorders MetalButtonUI
-      MetalCheckBoxIcon MetalCheckBoxUI MetalComboBoxButton MetalComboBoxEditor MetalComboBoxIcon
-      MetalComboBoxUI MetalDesktopIconUI MetalFileChooserUI MetalIconFactory MetalInternalFrameTitlePane
-      MetalInternalFrameUI MetalLabelUI MetalLookAndFeel MetalMenuBarUI MetalPopupMenuSeparatorUI
-      MetalProgressBarUI MetalRadioButtonUI MetalRootPaneUI MetalScrollBarUI MetalScrollButton
-      MetalScrollPaneUI MetalSeparatorUI MetalSliderUI MetalSplitPaneUI MetalTabbedPaneUI MetalTextFieldUI
-      MetalTheme MetalToggleButtonUI MetalToolBarUI MetalToolTipUI MetalTreeUI MetaMessage Method
-      MethodDescriptor MGF1ParameterSpec MidiChannel MidiDevice MidiDeviceProvider MidiEvent MidiFileFormat
-      MidiFileReader MidiFileWriter MidiMessage MidiSystem MidiUnavailableException MimeTypeParseException
-      MinimalHTMLWriter MissingFormatArgumentException MissingFormatWidthException MissingResourceException
-      Mixer MixerProvider MLet MLetMBean ModelMBean ModelMBeanAttributeInfo ModelMBeanConstructorInfo
-      ModelMBeanInfo ModelMBeanInfoSupport ModelMBeanNotificationBroadcaster ModelMBeanNotificationInfo
-      ModelMBeanOperationInfo ModificationItem Modifier Monitor MonitorMBean MonitorNotification
-      MonitorSettingException MouseAdapter MouseDragGestureRecognizer MouseEvent MouseInfo MouseInputAdapter
-      MouseInputListener MouseListener MouseMotionAdapter MouseMotionListener MouseWheelEvent
-      MouseWheelListener MultiButtonUI MulticastSocket MultiColorChooserUI MultiComboBoxUI MultiDesktopIconUI
-      MultiDesktopPaneUI MultiDoc MultiDocPrintJob MultiDocPrintService MultiFileChooserUI
-      MultiInternalFrameUI MultiLabelUI MultiListUI MultiLookAndFeel MultiMenuBarUI MultiMenuItemUI
-      MultiOptionPaneUI MultiPanelUI MultiPixelPackedSampleModel MultipleDocumentHandling MultipleMaster
-      MultiPopupMenuUI MultiProgressBarUI MultiRootPaneUI MultiScrollBarUI MultiScrollPaneUI MultiSeparatorUI
-      MultiSliderUI MultiSpinnerUI MultiSplitPaneUI MultiTabbedPaneUI MultiTableHeaderUI MultiTableUI
-      MultiTextUI MultiToolBarUI MultiToolTipUI MultiTreeUI MultiViewportUI MutableAttributeSet
-      MutableComboBoxModel MutableTreeNode Name NameAlreadyBoundException NameCallback NameClassPair
-      NameNotFoundException NameParser NamespaceChangeListener NamespaceContext Naming NamingEnumeration
-      NamingEvent NamingException NamingExceptionEvent NamingListener NamingManager NamingSecurityException
-      NavigationFilter NegativeArraySizeException NetPermission NetworkInterface NoClassDefFoundError
-      NoConnectionPendingException NodeChangeEvent NodeChangeListener NoInitialContextException
-      NoninvertibleTransformException NonReadableChannelException NonWritableChannelException
-      NoPermissionException NoRouteToHostException NoSuchAlgorithmException NoSuchAttributeException
-      NoSuchElementException NoSuchFieldError NoSuchFieldException NoSuchMethodError NoSuchMethodException
-      NoSuchObjectException NoSuchPaddingException NoSuchProviderException NotActiveException
-      NotBoundException NotCompliantMBeanException NotContextException Notification NotificationBroadcaster
-      NotificationBroadcasterSupport NotificationEmitter NotificationFilter NotificationFilterSupport
-      NotificationListener NotificationResult NotOwnerException NotSerializableException NotYetBoundException
-      NotYetConnectedException NullCipher NullPointerException Number NumberFormat NumberFormatException
-      NumberFormatter NumberOfDocuments NumberOfInterveningJobs NumberUp NumberUpSupported NumericShaper
-      OAEPParameterSpec Object ObjectChangeListener ObjectFactory ObjectFactoryBuilder ObjectInput
-      ObjectInputStream ObjectInputValidation ObjectInstance ObjectName ObjectOutput ObjectOutputStream
-      ObjectStreamClass ObjectStreamConstants ObjectStreamException ObjectStreamField ObjectView ObjID
-      Observable Observer OceanTheme OpenDataException OpenMBeanAttributeInfo OpenMBeanAttributeInfoSupport
-      OpenMBeanConstructorInfo OpenMBeanConstructorInfoSupport OpenMBeanInfo OpenMBeanInfoSupport
-      OpenMBeanOperationInfo OpenMBeanOperationInfoSupport OpenMBeanParameterInfo
-      OpenMBeanParameterInfoSupport OpenType OperatingSystemMXBean Operation OperationNotSupportedException
-      OperationsException Option OptionalDataException OptionPaneUI OrientationRequested OutOfMemoryError
-      OutputDeviceAssigned OutputKeys OutputStream OutputStreamWriter OverlappingFileLockException
-      OverlayLayout Override Owner Pack200 Package PackedColorModel Pageable PageAttributes
-      PagedResultsControl PagedResultsResponseControl PageFormat PageRanges PagesPerMinute PagesPerMinuteColor
-      Paint PaintContext PaintEvent Panel PanelUI Paper ParagraphView ParameterBlock ParameterDescriptor
-      ParameterizedType ParameterMetaData ParseException ParsePosition Parser ParserConfigurationException
-      ParserDelegator PartialResultException PasswordAuthentication PasswordCallback PasswordView Patch
-      PathIterator Pattern PatternSyntaxException PBEKey PBEKeySpec PBEParameterSpec PDLOverrideSupported
-      Permission PermissionCollection Permissions PersistenceDelegate PersistentMBean PhantomReference Pipe
-      PipedInputStream PipedOutputStream PipedReader PipedWriter PixelGrabber PixelInterleavedSampleModel
-      PKCS8EncodedKeySpec PKIXBuilderParameters PKIXCertPathBuilderResult PKIXCertPathChecker
-      PKIXCertPathValidatorResult PKIXParameters PlainDocument PlainView Point Point2D PointerInfo Policy
-      PolicyNode PolicyQualifierInfo Polygon PooledConnection Popup PopupFactory PopupMenu PopupMenuEvent
-      PopupMenuListener PopupMenuUI Port PortableRemoteObject PortableRemoteObjectDelegate
-      PortUnreachableException Position Predicate PreferenceChangeEvent PreferenceChangeListener Preferences
-      PreferencesFactory PreparedStatement PresentationDirection Principal Printable PrinterAbortException
-      PrinterException PrinterGraphics PrinterInfo PrinterIOException PrinterIsAcceptingJobs PrinterJob
-      PrinterLocation PrinterMakeAndModel PrinterMessageFromOperator PrinterMoreInfo
-      PrinterMoreInfoManufacturer PrinterName PrinterResolution PrinterState PrinterStateReason
-      PrinterStateReasons PrinterURI PrintEvent PrintException PrintGraphics PrintJob PrintJobAdapter
-      PrintJobAttribute PrintJobAttributeEvent PrintJobAttributeListener PrintJobAttributeSet PrintJobEvent
-      PrintJobListener PrintQuality PrintRequestAttribute PrintRequestAttributeSet PrintService
-      PrintServiceAttribute PrintServiceAttributeEvent PrintServiceAttributeListener PrintServiceAttributeSet
-      PrintServiceLookup PrintStream PrintWriter PriorityBlockingQueue PriorityQueue PrivateClassLoader
-      PrivateCredentialPermission PrivateKey PrivateMLet PrivilegedAction PrivilegedActionException
-      PrivilegedExceptionAction Process ProcessBuilder ProfileDataException ProgressBarUI ProgressMonitor
-      ProgressMonitorInputStream Properties PropertyChangeEvent PropertyChangeListener
-      PropertyChangeListenerProxy PropertyChangeSupport PropertyDescriptor PropertyEditor
-      PropertyEditorManager PropertyEditorSupport PropertyPermission PropertyResourceBundle
-      PropertyVetoException ProtectionDomain ProtocolException Provider ProviderException Proxy ProxySelector
-      PSource PSSParameterSpec PublicKey PushbackInputStream PushbackReader QName QuadCurve2D Query QueryEval
-      QueryExp Queue QueuedJobCount Random RandomAccess RandomAccessFile Raster RasterFormatException RasterOp
-      RC2ParameterSpec RC5ParameterSpec Rdn Readable ReadableByteChannel Reader ReadOnlyBufferException
-      ReadWriteLock RealmCallback RealmChoiceCallback Receiver Rectangle Rectangle2D RectangularShape
-      ReentrantLock ReentrantReadWriteLock Ref RefAddr Reference Referenceable ReferenceQueue
-      ReferenceUriSchemesSupported ReferralException ReflectionException ReflectPermission Refreshable
-      RefreshFailedException Region RegisterableService Registry RegistryHandler RejectedExecutionException
-      RejectedExecutionHandler Relation RelationException RelationNotFoundException RelationNotification
-      RelationService RelationServiceMBean RelationServiceNotRegisteredException RelationSupport
-      RelationSupportMBean RelationType RelationTypeNotFoundException RelationTypeSupport Remote RemoteCall
-      RemoteException RemoteObject RemoteObjectInvocationHandler RemoteRef RemoteServer RemoteStub
-      RenderableImage RenderableImageOp RenderableImageProducer RenderContext RenderedImage
-      RenderedImageFactory Renderer RenderingHints RepaintManager ReplicateScaleFilter RequestingUserName
-      RequiredModelMBean RescaleOp ResolutionSyntax Resolver ResolveResult ResourceBundle ResponseCache Result
-      ResultSet ResultSetMetaData Retention RetentionPolicy ReverbType RGBImageFilter RMIClassLoader
-      RMIClassLoaderSpi RMIClientSocketFactory RMIConnection RMIConnectionImpl RMIConnectionImpl_Stub
-      RMIConnector RMIConnectorServer RMIFailureHandler RMIIIOPServerImpl RMIJRMPServerImpl
-      RMISecurityException RMISecurityManager RMIServer RMIServerImpl RMIServerImpl_Stub
-      RMIServerSocketFactory RMISocketFactory Robot Role RoleInfo RoleInfoNotFoundException RoleList
-      RoleNotFoundException RoleResult RoleStatus RoleUnresolved RoleUnresolvedList RootPaneContainer
-      RootPaneUI RoundingMode RoundRectangle2D RowMapper RowSet RowSetEvent RowSetInternal RowSetListener
-      RowSetMetaData RowSetMetaDataImpl RowSetReader RowSetWarning RowSetWriter RSAKey RSAKeyGenParameterSpec
-      RSAMultiPrimePrivateCrtKey RSAMultiPrimePrivateCrtKeySpec RSAOtherPrimeInfo RSAPrivateCrtKey
-      RSAPrivateCrtKeySpec RSAPrivateKey RSAPrivateKeySpec RSAPublicKey RSAPublicKeySpec RTFEditorKit
-      RuleBasedCollator Runnable Runtime RuntimeErrorException RuntimeException RuntimeMBeanException
-      RuntimeMXBean RuntimeOperationsException RuntimePermission SampleModel Sasl SaslClient SaslClientFactory
-      SaslException SaslServer SaslServerFactory Savepoint SAXParser SAXParserFactory SAXResult SAXSource
-      SAXTransformerFactory Scanner ScatteringByteChannel ScheduledExecutorService ScheduledFuture
-      ScheduledThreadPoolExecutor Schema SchemaFactory SchemaFactoryLoader SchemaViolationException Scrollable
-      Scrollbar ScrollBarUI ScrollPane ScrollPaneAdjustable ScrollPaneConstants ScrollPaneLayout ScrollPaneUI
-      SealedObject SearchControls SearchResult SecretKey SecretKeyFactory SecretKeyFactorySpi SecretKeySpec
-      SecureCacheResponse SecureClassLoader SecureRandom SecureRandomSpi Security SecurityException
-      SecurityManager SecurityPermission Segment SelectableChannel SelectionKey Selector SelectorProvider
-      Semaphore SeparatorUI Sequence SequenceInputStream Sequencer SerialArray SerialBlob SerialClob
-      SerialDatalink SerialException Serializable SerializablePermission SerialJavaObject SerialRef
-      SerialStruct ServerCloneException ServerError ServerException ServerNotActiveException ServerRef
-      ServerRuntimeException ServerSocket ServerSocketChannel ServerSocketFactory ServiceNotFoundException
-      ServicePermission ServiceRegistry ServiceUI ServiceUIFactory ServiceUnavailableException Set
-      SetOfIntegerSyntax Severity Shape ShapeGraphicAttribute SheetCollate Short ShortBuffer
-      ShortBufferException ShortLookupTable ShortMessage Sides Signature SignatureException SignatureSpi
-      SignedObject Signer SimpleAttributeSet SimpleBeanInfo SimpleDateFormat SimpleDoc SimpleFormatter
-      SimpleTimeZone SimpleType SinglePixelPackedSampleModel SingleSelectionModel Size2DSyntax
-      SizeLimitExceededException SizeRequirements SizeSequence Skeleton SkeletonMismatchException
-      SkeletonNotFoundException SliderUI Socket SocketAddress SocketChannel SocketException SocketFactory
-      SocketHandler SocketImpl SocketImplFactory SocketOptions SocketPermission SocketSecurityException
-      SocketTimeoutException SoftBevelBorder SoftReference SortControl SortedMap SortedSet
-      SortingFocusTraversalPolicy SortKey SortResponseControl Soundbank SoundbankReader SoundbankResource
-      Source SourceDataLine SourceLocator SpinnerDateModel SpinnerListModel SpinnerModel SpinnerNumberModel
-      SpinnerUI SplitPaneUI Spring SpringLayout SQLData SQLException SQLInput SQLInputImpl SQLOutput
-      SQLOutputImpl SQLPermission SQLWarning SSLContext SSLContextSpi SSLEngine SSLEngineResult SSLException
-      SSLHandshakeException SSLKeyException SSLPeerUnverifiedException SSLPermission SSLProtocolException
-      SslRMIClientSocketFactory SslRMIServerSocketFactory SSLServerSocket SSLServerSocketFactory SSLSession
-      SSLSessionBindingEvent SSLSessionBindingListener SSLSessionContext SSLSocket SSLSocketFactory Stack
-      StackOverflowError StackTraceElement StandardMBean StartTlsRequest StartTlsResponse StateEdit
-      StateEditable StateFactory Statement StreamCorruptedException StreamHandler StreamPrintService
-      StreamPrintServiceFactory StreamResult StreamSource StreamTokenizer StrictMath String StringBuffer
-      StringBufferInputStream StringBuilder StringCharacterIterator StringContent
-      StringIndexOutOfBoundsException StringMonitor StringMonitorMBean StringReader StringRefAddr
-      StringSelection StringTokenizer StringValueExp StringWriter Stroke Struct Stub StubDelegate
-      StubNotFoundException Style StyleConstants StyleContext StyledDocument StyledEditorKit StyleSheet
-      Subject SubjectDelegationPermission SubjectDomainCombiner SupportedValuesAttribute SuppressWarnings
-      SwingConstants SwingPropertyChangeSupport SwingUtilities SyncFactory SyncFactoryException
-      SyncFailedException SynchronousQueue SyncProvider SyncProviderException SyncResolver SynthConstants
-      SynthContext Synthesizer SynthGraphicsUtils SynthLookAndFeel SynthPainter SynthStyle SynthStyleFactory
-      SysexMessage System SystemColor SystemFlavorMap TabableView TabbedPaneUI TabExpander TableCellEditor
-      TableCellRenderer TableColumn TableColumnModel TableColumnModelEvent TableColumnModelListener
-      TableHeaderUI TableModel TableModelEvent TableModelListener TableUI TableView TabSet TabStop TabularData
-      TabularDataSupport TabularType TagElement Target TargetDataLine TargetedNotification Templates
-      TemplatesHandler TextAction TextArea TextAttribute TextComponent TextEvent TextField TextHitInfo
-      TextInputCallback TextLayout TextListener TextMeasurer TextOutputCallback TextSyntax TextUI TexturePaint
-      Thread ThreadDeath ThreadFactory ThreadGroup ThreadInfo ThreadLocal ThreadMXBean ThreadPoolExecutor
-      Throwable Tie TileObserver Time TimeLimitExceededException TimeoutException Timer
-      TimerAlarmClockNotification TimerMBean TimerNotification TimerTask Timestamp TimeUnit TimeZone
-      TitledBorder ToolBarUI Toolkit ToolTipManager ToolTipUI TooManyListenersException Track
-      TransactionalWriter TransactionRequiredException TransactionRolledbackException Transferable
-      TransferHandler TransformAttribute Transformer TransformerConfigurationException TransformerException
-      TransformerFactory TransformerFactoryConfigurationError TransformerHandler Transmitter Transparency
-      TreeCellEditor TreeCellRenderer TreeExpansionEvent TreeExpansionListener TreeMap TreeModel
-      TreeModelEvent TreeModelListener TreeNode TreePath TreeSelectionEvent TreeSelectionListener
-      TreeSelectionModel TreeSet TreeUI TreeWillExpandListener TrustAnchor TrustManager TrustManagerFactory
-      TrustManagerFactorySpi Type TypeInfoProvider TypeNotPresentException Types TypeVariable UID UIDefaults
-      UIManager UIResource UndeclaredThrowableException UndoableEdit UndoableEditEvent UndoableEditListener
-      UndoableEditSupport UndoManager UnexpectedException UnicastRemoteObject UnknownError
-      UnknownFormatConversionException UnknownFormatFlagsException UnknownGroupException UnknownHostException
-      UnknownObjectException UnknownServiceException UnmappableCharacterException UnmarshalException
-      UnmodifiableClassException UnmodifiableSetException UnrecoverableEntryException
-      UnrecoverableKeyException Unreferenced UnresolvedAddressException UnresolvedPermission
-      UnsatisfiedLinkError UnsolicitedNotification UnsolicitedNotificationEvent
-      UnsolicitedNotificationListener UnsupportedAddressTypeException UnsupportedAudioFileException
-      UnsupportedCallbackException UnsupportedCharsetException UnsupportedClassVersionError
-      UnsupportedEncodingException UnsupportedFlavorException UnsupportedLookAndFeelException
-      UnsupportedOperationException URI URIException URIResolver URISyntax URISyntaxException URL
-      URLClassLoader URLConnection URLDecoder URLEncoder URLStreamHandler URLStreamHandlerFactory
-      UTFDataFormatException Util UtilDelegate Utilities UUID Validator ValidatorHandler ValueExp ValueHandler
-      ValueHandlerMultiFormat VariableHeightLayoutCache Vector VerifyError VetoableChangeListener
-      VetoableChangeListenerProxy VetoableChangeSupport View ViewFactory ViewportLayout ViewportUI
-      VirtualMachineError Visibility VMID VoiceStatus Void VolatileImage WeakHashMap WeakReference WebRowSet
-      WildcardType Window WindowAdapter WindowConstants WindowEvent WindowFocusListener WindowListener
-      WindowStateListener WrappedPlainView WritableByteChannel WritableRaster WritableRenderedImage
-      WriteAbortedException Writer X500Principal X500PrivateCredential X509Certificate X509CertSelector
-      X509CRL X509CRLEntry X509CRLSelector X509EncodedKeySpec X509ExtendedKeyManager X509Extension
-      X509KeyManager X509TrustManager XAConnection XADataSource XAException XAResource Xid XMLConstants
-      XMLDecoder XMLEncoder XMLFormatter XMLGregorianCalendar XMLParseException XmlReader XmlWriter XPath
-      XPathConstants XPathException XPathExpression XPathExpressionException XPathFactory
-      XPathFactoryConfigurationException XPathFunction XPathFunctionException XPathFunctionResolver
-      XPathVariableResolver ZipEntry ZipException ZipFile ZipInputStream ZipOutputStream ZoneView
-    ]
-    
-  end
-  
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java/builtin_types.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,419 +0,0 @@
-module CodeRay
-module Scanners
-  
-  module Java::BuiltinTypes  # :nodoc:
-    
-    List = %w[
-      AbstractAction AbstractBorder AbstractButton AbstractCellEditor AbstractCollection
-      AbstractColorChooserPanel AbstractDocument AbstractExecutorService AbstractInterruptibleChannel
-      AbstractLayoutCache AbstractList AbstractListModel AbstractMap AbstractMethodError AbstractPreferences
-      AbstractQueue AbstractQueuedSynchronizer AbstractSelectableChannel AbstractSelectionKey AbstractSelector
-      AbstractSequentialList AbstractSet AbstractSpinnerModel AbstractTableModel AbstractUndoableEdit
-      AbstractWriter AccessControlContext AccessControlException AccessController AccessException Accessible
-      AccessibleAction AccessibleAttributeSequence AccessibleBundle AccessibleComponent AccessibleContext
-      AccessibleEditableText AccessibleExtendedComponent AccessibleExtendedTable AccessibleExtendedText
-      AccessibleHyperlink AccessibleHypertext AccessibleIcon AccessibleKeyBinding AccessibleObject
-      AccessibleRelation AccessibleRelationSet AccessibleResourceBundle AccessibleRole AccessibleSelection
-      AccessibleState AccessibleStateSet AccessibleStreamable AccessibleTable AccessibleTableModelChange
-      AccessibleText AccessibleTextSequence AccessibleValue AccountException AccountExpiredException
-      AccountLockedException AccountNotFoundException Acl AclEntry AclNotFoundException Action ActionEvent
-      ActionListener ActionMap ActionMapUIResource Activatable ActivateFailedException ActivationDesc
-      ActivationException ActivationGroup ActivationGroupDesc ActivationGroupID ActivationGroup_Stub
-      ActivationID ActivationInstantiator ActivationMonitor ActivationSystem Activator ActiveEvent
-      ActivityCompletedException ActivityRequiredException Adjustable AdjustmentEvent AdjustmentListener
-      Adler32 AffineTransform AffineTransformOp AlgorithmParameterGenerator AlgorithmParameterGeneratorSpi
-      AlgorithmParameters AlgorithmParameterSpec AlgorithmParametersSpi AllPermission AlphaComposite
-      AlreadyBoundException AlreadyConnectedException AncestorEvent AncestorListener AnnotatedElement
-      Annotation AnnotationFormatError AnnotationTypeMismatchException AppConfigurationEntry Appendable Applet
-      AppletContext AppletInitializer AppletStub Arc2D Area AreaAveragingScaleFilter ArithmeticException Array
-      ArrayBlockingQueue ArrayIndexOutOfBoundsException ArrayList Arrays ArrayStoreException ArrayType
-      AssertionError AsyncBoxView AsynchronousCloseException AtomicBoolean AtomicInteger AtomicIntegerArray
-      AtomicIntegerFieldUpdater AtomicLong AtomicLongArray AtomicLongFieldUpdater AtomicMarkableReference
-      AtomicReference AtomicReferenceArray AtomicReferenceFieldUpdater AtomicStampedReference Attribute
-      AttributeChangeNotification AttributeChangeNotificationFilter AttributedCharacterIterator
-      AttributedString AttributeException AttributeInUseException AttributeList AttributeModificationException
-      AttributeNotFoundException Attributes AttributeSet AttributeSetUtilities AttributeValueExp AudioClip
-      AudioFileFormat AudioFileReader AudioFileWriter AudioFormat AudioInputStream AudioPermission AudioSystem
-      AuthenticationException AuthenticationNotSupportedException Authenticator AuthorizeCallback
-      AuthPermission AuthProvider Autoscroll AWTError AWTEvent AWTEventListener AWTEventListenerProxy
-      AWTEventMulticaster AWTException AWTKeyStroke AWTPermission BackingStoreException
-      BadAttributeValueExpException BadBinaryOpValueExpException BadLocationException BadPaddingException
-      BadStringOperationException BandCombineOp BandedSampleModel BaseRowSet BasicArrowButton BasicAttribute
-      BasicAttributes BasicBorders BasicButtonListener BasicButtonUI BasicCheckBoxMenuItemUI BasicCheckBoxUI
-      BasicColorChooserUI BasicComboBoxEditor BasicComboBoxRenderer BasicComboBoxUI BasicComboPopup
-      BasicControl BasicDesktopIconUI BasicDesktopPaneUI BasicDirectoryModel BasicEditorPaneUI
-      BasicFileChooserUI BasicFormattedTextFieldUI BasicGraphicsUtils BasicHTML BasicIconFactory
-      BasicInternalFrameTitlePane BasicInternalFrameUI BasicLabelUI BasicListUI BasicLookAndFeel
-      BasicMenuBarUI BasicMenuItemUI BasicMenuUI BasicOptionPaneUI BasicPanelUI BasicPasswordFieldUI
-      BasicPermission BasicPopupMenuSeparatorUI BasicPopupMenuUI BasicProgressBarUI BasicRadioButtonMenuItemUI
-      BasicRadioButtonUI BasicRootPaneUI BasicScrollBarUI BasicScrollPaneUI BasicSeparatorUI BasicSliderUI
-      BasicSpinnerUI BasicSplitPaneDivider BasicSplitPaneUI BasicStroke BasicTabbedPaneUI BasicTableHeaderUI
-      BasicTableUI BasicTextAreaUI BasicTextFieldUI BasicTextPaneUI BasicTextUI BasicToggleButtonUI
-      BasicToolBarSeparatorUI BasicToolBarUI BasicToolTipUI BasicTreeUI BasicViewportUI BatchUpdateException
-      BeanContext BeanContextChild BeanContextChildComponentProxy BeanContextChildSupport
-      BeanContextContainerProxy BeanContextEvent BeanContextMembershipEvent BeanContextMembershipListener
-      BeanContextProxy BeanContextServiceAvailableEvent BeanContextServiceProvider
-      BeanContextServiceProviderBeanInfo BeanContextServiceRevokedEvent BeanContextServiceRevokedListener
-      BeanContextServices BeanContextServicesListener BeanContextServicesSupport BeanContextSupport
-      BeanDescriptor BeanInfo Beans BevelBorder Bidi BigDecimal BigInteger BinaryRefAddr BindException Binding
-      BitSet Blob BlockingQueue BlockView BMPImageWriteParam Book Boolean BooleanControl Border BorderFactory
-      BorderLayout BorderUIResource BoundedRangeModel Box BoxLayout BoxView BreakIterator
-      BrokenBarrierException Buffer BufferCapabilities BufferedImage BufferedImageFilter BufferedImageOp
-      BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter BufferOverflowException
-      BufferStrategy BufferUnderflowException Button ButtonGroup ButtonModel ButtonUI Byte
-      ByteArrayInputStream ByteArrayOutputStream ByteBuffer ByteChannel ByteLookupTable ByteOrder CachedRowSet
-      CacheRequest CacheResponse Calendar Callable CallableStatement Callback CallbackHandler
-      CancelablePrintJob CancellationException CancelledKeyException CannotProceedException
-      CannotRedoException CannotUndoException Canvas CardLayout Caret CaretEvent CaretListener CellEditor
-      CellEditorListener CellRendererPane Certificate CertificateEncodingException CertificateException
-      CertificateExpiredException CertificateFactory CertificateFactorySpi CertificateNotYetValidException
-      CertificateParsingException CertPath CertPathBuilder CertPathBuilderException CertPathBuilderResult
-      CertPathBuilderSpi CertPathParameters CertPathTrustManagerParameters CertPathValidator
-      CertPathValidatorException CertPathValidatorResult CertPathValidatorSpi CertSelector CertStore
-      CertStoreException CertStoreParameters CertStoreSpi ChangedCharSetException ChangeEvent ChangeListener
-      Channel Channels Character CharacterCodingException CharacterIterator CharArrayReader CharArrayWriter
-      CharBuffer CharConversionException CharSequence Charset CharsetDecoder CharsetEncoder CharsetProvider
-      Checkbox CheckboxGroup CheckboxMenuItem CheckedInputStream CheckedOutputStream Checksum Choice
-      ChoiceCallback ChoiceFormat Chromaticity Cipher CipherInputStream CipherOutputStream CipherSpi Class
-      ClassCastException ClassCircularityError ClassDefinition ClassDesc ClassFileTransformer ClassFormatError
-      ClassLoader ClassLoaderRepository ClassLoadingMXBean ClassNotFoundException Clip Clipboard
-      ClipboardOwner Clob Cloneable CloneNotSupportedException Closeable ClosedByInterruptException
-      ClosedChannelException ClosedSelectorException CMMException CoderMalfunctionError CoderResult CodeSigner
-      CodeSource CodingErrorAction CollationElementIterator CollationKey Collator Collection
-      CollectionCertStoreParameters Collections Color ColorChooserComponentFactory ColorChooserUI
-      ColorConvertOp ColorModel ColorSelectionModel ColorSpace ColorSupported ColorType ColorUIResource
-      ComboBoxEditor ComboBoxModel ComboBoxUI ComboPopup CommunicationException Comparable Comparator
-      CompilationMXBean Compiler CompletionService Component ComponentAdapter ComponentColorModel
-      ComponentEvent ComponentInputMap ComponentInputMapUIResource ComponentListener ComponentOrientation
-      ComponentSampleModel ComponentUI ComponentView Composite CompositeContext CompositeData
-      CompositeDataSupport CompositeName CompositeType CompositeView CompoundBorder CompoundControl
-      CompoundEdit CompoundName Compression ConcurrentHashMap ConcurrentLinkedQueue ConcurrentMap
-      ConcurrentModificationException Condition Configuration ConfigurationException ConfirmationCallback
-      ConnectException ConnectIOException Connection ConnectionEvent ConnectionEventListener
-      ConnectionPendingException ConnectionPoolDataSource ConsoleHandler Constructor Container
-      ContainerAdapter ContainerEvent ContainerListener ContainerOrderFocusTraversalPolicy ContentHandler
-      ContentHandlerFactory ContentModel Context ContextNotEmptyException ContextualRenderedImageFactory
-      Control ControlFactory ControllerEventListener ConvolveOp CookieHandler Copies CopiesSupported
-      CopyOnWriteArrayList CopyOnWriteArraySet CountDownLatch CounterMonitor CounterMonitorMBean CRC32
-      CredentialException CredentialExpiredException CredentialNotFoundException CRL CRLException CRLSelector
-      CropImageFilter CSS CubicCurve2D Currency Cursor Customizer CyclicBarrier DatabaseMetaData DataBuffer
-      DataBufferByte DataBufferDouble DataBufferFloat DataBufferInt DataBufferShort DataBufferUShort
-      DataFlavor DataFormatException DatagramChannel DatagramPacket DatagramSocket DatagramSocketImpl
-      DatagramSocketImplFactory DataInput DataInputStream DataLine DataOutput DataOutputStream DataSource
-      DataTruncation DatatypeConfigurationException DatatypeConstants DatatypeFactory Date DateFormat
-      DateFormatSymbols DateFormatter DateTimeAtCompleted DateTimeAtCreation DateTimeAtProcessing
-      DateTimeSyntax DebugGraphics DecimalFormat DecimalFormatSymbols DefaultBoundedRangeModel
-      DefaultButtonModel DefaultCaret DefaultCellEditor DefaultColorSelectionModel DefaultComboBoxModel
-      DefaultDesktopManager DefaultEditorKit DefaultFocusManager DefaultFocusTraversalPolicy DefaultFormatter
-      DefaultFormatterFactory DefaultHighlighter DefaultKeyboardFocusManager DefaultListCellRenderer
-      DefaultListModel DefaultListSelectionModel DefaultLoaderRepository DefaultMenuLayout DefaultMetalTheme
-      DefaultMutableTreeNode DefaultPersistenceDelegate DefaultSingleSelectionModel DefaultStyledDocument
-      DefaultTableCellRenderer DefaultTableColumnModel DefaultTableModel DefaultTextUI DefaultTreeCellEditor
-      DefaultTreeCellRenderer DefaultTreeModel DefaultTreeSelectionModel Deflater DeflaterOutputStream Delayed
-      DelayQueue DelegationPermission Deprecated Descriptor DescriptorAccess DescriptorSupport DESedeKeySpec
-      DesignMode DESKeySpec DesktopIconUI DesktopManager DesktopPaneUI Destination Destroyable
-      DestroyFailedException DGC DHGenParameterSpec DHKey DHParameterSpec DHPrivateKey DHPrivateKeySpec
-      DHPublicKey DHPublicKeySpec Dialog Dictionary DigestException DigestInputStream DigestOutputStream
-      Dimension Dimension2D DimensionUIResource DirContext DirectColorModel DirectoryManager DirObjectFactory
-      DirStateFactory DisplayMode DnDConstants Doc DocAttribute DocAttributeSet DocFlavor DocPrintJob Document
-      DocumentBuilder DocumentBuilderFactory Documented DocumentEvent DocumentFilter DocumentListener
-      DocumentName DocumentParser DomainCombiner DOMLocator DOMResult DOMSource Double DoubleBuffer
-      DragGestureEvent DragGestureListener DragGestureRecognizer DragSource DragSourceAdapter
-      DragSourceContext DragSourceDragEvent DragSourceDropEvent DragSourceEvent DragSourceListener
-      DragSourceMotionListener Driver DriverManager DriverPropertyInfo DropTarget DropTargetAdapter
-      DropTargetContext DropTargetDragEvent DropTargetDropEvent DropTargetEvent DropTargetListener DSAKey
-      DSAKeyPairGenerator DSAParameterSpec DSAParams DSAPrivateKey DSAPrivateKeySpec DSAPublicKey
-      DSAPublicKeySpec DTD DTDConstants DuplicateFormatFlagsException Duration DynamicMBean ECField ECFieldF2m
-      ECFieldFp ECGenParameterSpec ECKey ECParameterSpec ECPoint ECPrivateKey ECPrivateKeySpec ECPublicKey
-      ECPublicKeySpec EditorKit Element ElementIterator ElementType Ellipse2D EllipticCurve EmptyBorder
-      EmptyStackException EncodedKeySpec Encoder EncryptedPrivateKeyInfo Entity Enum
-      EnumConstantNotPresentException EnumControl Enumeration EnumMap EnumSet EnumSyntax EOFException Error
-      ErrorListener ErrorManager EtchedBorder Event EventContext EventDirContext EventHandler EventListener
-      EventListenerList EventListenerProxy EventObject EventQueue EventSetDescriptor Exception
-      ExceptionInInitializerError ExceptionListener Exchanger ExecutionException Executor
-      ExecutorCompletionService Executors ExecutorService ExemptionMechanism ExemptionMechanismException
-      ExemptionMechanismSpi ExpandVetoException ExportException Expression ExtendedRequest ExtendedResponse
-      Externalizable FactoryConfigurationError FailedLoginException FeatureDescriptor Fidelity Field
-      FieldPosition FieldView File FileCacheImageInputStream FileCacheImageOutputStream FileChannel
-      FileChooserUI FileDescriptor FileDialog FileFilter FileHandler FileImageInputStream
-      FileImageOutputStream FileInputStream FileLock FileLockInterruptionException FilenameFilter FileNameMap
-      FileNotFoundException FileOutputStream FilePermission FileReader FileSystemView FileView FileWriter
-      Filter FilteredImageSource FilteredRowSet FilterInputStream FilterOutputStream FilterReader FilterWriter
-      Finishings FixedHeightLayoutCache FlatteningPathIterator FlavorEvent FlavorException FlavorListener
-      FlavorMap FlavorTable Float FloatBuffer FloatControl FlowLayout FlowView Flushable FocusAdapter
-      FocusEvent FocusListener FocusManager FocusTraversalPolicy Font FontFormatException FontMetrics
-      FontRenderContext FontUIResource Format FormatConversionProvider FormatFlagsConversionMismatchException
-      Formattable FormattableFlags Formatter FormatterClosedException FormSubmitEvent FormView Frame Future
-      FutureTask GapContent GarbageCollectorMXBean GatheringByteChannel GaugeMonitor GaugeMonitorMBean
-      GeneralPath GeneralSecurityException GenericArrayType GenericDeclaration GenericSignatureFormatError
-      GlyphJustificationInfo GlyphMetrics GlyphVector GlyphView GradientPaint GraphicAttribute Graphics
-      Graphics2D GraphicsConfigTemplate GraphicsConfiguration GraphicsDevice GraphicsEnvironment GrayFilter
-      GregorianCalendar GridBagConstraints GridBagLayout GridLayout Group Guard GuardedObject GZIPInputStream
-      GZIPOutputStream Handler HandshakeCompletedEvent HandshakeCompletedListener HasControls HashAttributeSet
-      HashDocAttributeSet HashMap HashPrintJobAttributeSet HashPrintRequestAttributeSet
-      HashPrintServiceAttributeSet HashSet Hashtable HeadlessException HierarchyBoundsAdapter
-      HierarchyBoundsListener HierarchyEvent HierarchyListener Highlighter HostnameVerifier HTML HTMLDocument
-      HTMLEditorKit HTMLFrameHyperlinkEvent HTMLWriter HttpRetryException HttpsURLConnection HttpURLConnection
-      HyperlinkEvent HyperlinkListener ICC_ColorSpace ICC_Profile ICC_ProfileGray ICC_ProfileRGB Icon
-      IconUIResource IconView Identity IdentityHashMap IdentityScope IIOByteBuffer IIOException IIOImage
-      IIOInvalidTreeException IIOMetadata IIOMetadataController IIOMetadataFormat IIOMetadataFormatImpl
-      IIOMetadataNode IIOParam IIOParamController IIOReadProgressListener IIOReadUpdateListener
-      IIOReadWarningListener IIORegistry IIOServiceProvider IIOWriteProgressListener IIOWriteWarningListener
-      IllegalAccessError IllegalAccessException IllegalArgumentException IllegalBlockingModeException
-      IllegalBlockSizeException IllegalCharsetNameException IllegalClassFormatException
-      IllegalComponentStateException IllegalFormatCodePointException IllegalFormatConversionException
-      IllegalFormatException IllegalFormatFlagsException IllegalFormatPrecisionException
-      IllegalFormatWidthException IllegalMonitorStateException IllegalPathStateException
-      IllegalSelectorException IllegalStateException IllegalThreadStateException Image ImageCapabilities
-      ImageConsumer ImageFilter ImageGraphicAttribute ImageIcon ImageInputStream ImageInputStreamImpl
-      ImageInputStreamSpi ImageIO ImageObserver ImageOutputStream ImageOutputStreamImpl ImageOutputStreamSpi
-      ImageProducer ImageReader ImageReaderSpi ImageReaderWriterSpi ImageReadParam ImageTranscoder
-      ImageTranscoderSpi ImageTypeSpecifier ImageView ImageWriteParam ImageWriter ImageWriterSpi
-      ImagingOpException IncompatibleClassChangeError IncompleteAnnotationException IndexColorModel
-      IndexedPropertyChangeEvent IndexedPropertyDescriptor IndexOutOfBoundsException Inet4Address Inet6Address
-      InetAddress InetSocketAddress Inflater InflaterInputStream InheritableThreadLocal Inherited
-      InitialContext InitialContextFactory InitialContextFactoryBuilder InitialDirContext InitialLdapContext
-      InlineView InputContext InputEvent InputMap InputMapUIResource InputMethod InputMethodContext
-      InputMethodDescriptor InputMethodEvent InputMethodHighlight InputMethodListener InputMethodRequests
-      InputMismatchException InputStream InputStreamReader InputSubset InputVerifier Insets InsetsUIResource
-      InstanceAlreadyExistsException InstanceNotFoundException InstantiationError InstantiationException
-      Instrument Instrumentation InsufficientResourcesException IntBuffer Integer IntegerSyntax InternalError
-      InternalFrameAdapter InternalFrameEvent InternalFrameFocusTraversalPolicy InternalFrameListener
-      InternalFrameUI InternationalFormatter InterruptedException InterruptedIOException
-      InterruptedNamingException InterruptibleChannel IntrospectionException Introspector
-      InvalidActivityException InvalidAlgorithmParameterException InvalidApplicationException
-      InvalidAttributeIdentifierException InvalidAttributesException InvalidAttributeValueException
-      InvalidClassException InvalidDnDOperationException InvalidKeyException InvalidKeySpecException
-      InvalidMarkException InvalidMidiDataException InvalidNameException InvalidObjectException
-      InvalidOpenTypeException InvalidParameterException InvalidParameterSpecException
-      InvalidPreferencesFormatException InvalidPropertiesFormatException InvalidRelationIdException
-      InvalidRelationServiceException InvalidRelationTypeException InvalidRoleInfoException
-      InvalidRoleValueException InvalidSearchControlsException InvalidSearchFilterException
-      InvalidTargetObjectTypeException InvalidTransactionException InvocationEvent InvocationHandler
-      InvocationTargetException IOException ItemEvent ItemListener ItemSelectable Iterable Iterator
-      IvParameterSpec JApplet JarEntry JarException JarFile JarInputStream JarOutputStream JarURLConnection
-      JButton JCheckBox JCheckBoxMenuItem JColorChooser JComboBox JComponent JdbcRowSet JDesktopPane JDialog
-      JEditorPane JFileChooser JFormattedTextField JFrame JInternalFrame JLabel JLayeredPane JList JMenu
-      JMenuBar JMenuItem JMException JMRuntimeException JMXAuthenticator JMXConnectionNotification
-      JMXConnector JMXConnectorFactory JMXConnectorProvider JMXConnectorServer JMXConnectorServerFactory
-      JMXConnectorServerMBean JMXConnectorServerProvider JMXPrincipal JMXProviderException
-      JMXServerErrorException JMXServiceURL JobAttributes JobHoldUntil JobImpressions JobImpressionsCompleted
-      JobImpressionsSupported JobKOctets JobKOctetsProcessed JobKOctetsSupported JobMediaSheets
-      JobMediaSheetsCompleted JobMediaSheetsSupported JobMessageFromOperator JobName JobOriginatingUserName
-      JobPriority JobPrioritySupported JobSheets JobState JobStateReason JobStateReasons Joinable JoinRowSet
-      JOptionPane JPanel JPasswordField JPEGHuffmanTable JPEGImageReadParam JPEGImageWriteParam JPEGQTable
-      JPopupMenu JProgressBar JRadioButton JRadioButtonMenuItem JRootPane JScrollBar JScrollPane JSeparator
-      JSlider JSpinner JSplitPane JTabbedPane JTable JTableHeader JTextArea JTextComponent JTextField
-      JTextPane JToggleButton JToolBar JToolTip JTree JViewport JWindow KerberosKey KerberosPrincipal
-      KerberosTicket Kernel Key KeyAdapter KeyAgreement KeyAgreementSpi KeyAlreadyExistsException
-      KeyboardFocusManager KeyEvent KeyEventDispatcher KeyEventPostProcessor KeyException KeyFactory
-      KeyFactorySpi KeyGenerator KeyGeneratorSpi KeyListener KeyManagementException KeyManager
-      KeyManagerFactory KeyManagerFactorySpi Keymap KeyPair KeyPairGenerator KeyPairGeneratorSpi KeyRep
-      KeySpec KeyStore KeyStoreBuilderParameters KeyStoreException KeyStoreSpi KeyStroke Label LabelUI
-      LabelView LanguageCallback LastOwnerException LayeredHighlighter LayoutFocusTraversalPolicy
-      LayoutManager LayoutManager2 LayoutQueue LDAPCertStoreParameters LdapContext LdapName
-      LdapReferralException Lease Level LimitExceededException Line Line2D LineBorder LineBreakMeasurer
-      LineEvent LineListener LineMetrics LineNumberInputStream LineNumberReader LineUnavailableException
-      LinkageError LinkedBlockingQueue LinkedHashMap LinkedHashSet LinkedList LinkException LinkLoopException
-      LinkRef List ListCellRenderer ListDataEvent ListDataListener ListenerNotFoundException ListIterator
-      ListModel ListResourceBundle ListSelectionEvent ListSelectionListener ListSelectionModel ListUI ListView
-      LoaderHandler Locale LocateRegistry Lock LockSupport Logger LoggingMXBean LoggingPermission LoginContext
-      LoginException LoginModule LogManager LogRecord LogStream Long LongBuffer LookAndFeel LookupOp
-      LookupTable Mac MacSpi MalformedInputException MalformedLinkException MalformedObjectNameException
-      MalformedParameterizedTypeException MalformedURLException ManagementFactory ManagementPermission
-      ManageReferralControl ManagerFactoryParameters Manifest Map MappedByteBuffer MarshalException
-      MarshalledObject MaskFormatter Matcher MatchResult Math MathContext MatteBorder MBeanAttributeInfo
-      MBeanConstructorInfo MBeanException MBeanFeatureInfo MBeanInfo MBeanNotificationInfo MBeanOperationInfo
-      MBeanParameterInfo MBeanPermission MBeanRegistration MBeanRegistrationException MBeanServer
-      MBeanServerBuilder MBeanServerConnection MBeanServerDelegate MBeanServerDelegateMBean MBeanServerFactory
-      MBeanServerForwarder MBeanServerInvocationHandler MBeanServerNotification MBeanServerNotificationFilter
-      MBeanServerPermission MBeanTrustPermission Media MediaName MediaPrintableArea MediaSize MediaSizeName
-      MediaTracker MediaTray Member MemoryCacheImageInputStream MemoryCacheImageOutputStream MemoryHandler
-      MemoryImageSource MemoryManagerMXBean MemoryMXBean MemoryNotificationInfo MemoryPoolMXBean MemoryType
-      MemoryUsage Menu MenuBar MenuBarUI MenuComponent MenuContainer MenuDragMouseEvent MenuDragMouseListener
-      MenuElement MenuEvent MenuItem MenuItemUI MenuKeyEvent MenuKeyListener MenuListener MenuSelectionManager
-      MenuShortcut MessageDigest MessageDigestSpi MessageFormat MetaEventListener MetalBorders MetalButtonUI
-      MetalCheckBoxIcon MetalCheckBoxUI MetalComboBoxButton MetalComboBoxEditor MetalComboBoxIcon
-      MetalComboBoxUI MetalDesktopIconUI MetalFileChooserUI MetalIconFactory MetalInternalFrameTitlePane
-      MetalInternalFrameUI MetalLabelUI MetalLookAndFeel MetalMenuBarUI MetalPopupMenuSeparatorUI
-      MetalProgressBarUI MetalRadioButtonUI MetalRootPaneUI MetalScrollBarUI MetalScrollButton
-      MetalScrollPaneUI MetalSeparatorUI MetalSliderUI MetalSplitPaneUI MetalTabbedPaneUI MetalTextFieldUI
-      MetalTheme MetalToggleButtonUI MetalToolBarUI MetalToolTipUI MetalTreeUI MetaMessage Method
-      MethodDescriptor MGF1ParameterSpec MidiChannel MidiDevice MidiDeviceProvider MidiEvent MidiFileFormat
-      MidiFileReader MidiFileWriter MidiMessage MidiSystem MidiUnavailableException MimeTypeParseException
-      MinimalHTMLWriter MissingFormatArgumentException MissingFormatWidthException MissingResourceException
-      Mixer MixerProvider MLet MLetMBean ModelMBean ModelMBeanAttributeInfo ModelMBeanConstructorInfo
-      ModelMBeanInfo ModelMBeanInfoSupport ModelMBeanNotificationBroadcaster ModelMBeanNotificationInfo
-      ModelMBeanOperationInfo ModificationItem Modifier Monitor MonitorMBean MonitorNotification
-      MonitorSettingException MouseAdapter MouseDragGestureRecognizer MouseEvent MouseInfo MouseInputAdapter
-      MouseInputListener MouseListener MouseMotionAdapter MouseMotionListener MouseWheelEvent
-      MouseWheelListener MultiButtonUI MulticastSocket MultiColorChooserUI MultiComboBoxUI MultiDesktopIconUI
-      MultiDesktopPaneUI MultiDoc MultiDocPrintJob MultiDocPrintService MultiFileChooserUI
-      MultiInternalFrameUI MultiLabelUI MultiListUI MultiLookAndFeel MultiMenuBarUI MultiMenuItemUI
-      MultiOptionPaneUI MultiPanelUI MultiPixelPackedSampleModel MultipleDocumentHandling MultipleMaster
-      MultiPopupMenuUI MultiProgressBarUI MultiRootPaneUI MultiScrollBarUI MultiScrollPaneUI MultiSeparatorUI
-      MultiSliderUI MultiSpinnerUI MultiSplitPaneUI MultiTabbedPaneUI MultiTableHeaderUI MultiTableUI
-      MultiTextUI MultiToolBarUI MultiToolTipUI MultiTreeUI MultiViewportUI MutableAttributeSet
-      MutableComboBoxModel MutableTreeNode Name NameAlreadyBoundException NameCallback NameClassPair
-      NameNotFoundException NameParser NamespaceChangeListener NamespaceContext Naming NamingEnumeration
-      NamingEvent NamingException NamingExceptionEvent NamingListener NamingManager NamingSecurityException
-      NavigationFilter NegativeArraySizeException NetPermission NetworkInterface NoClassDefFoundError
-      NoConnectionPendingException NodeChangeEvent NodeChangeListener NoInitialContextException
-      NoninvertibleTransformException NonReadableChannelException NonWritableChannelException
-      NoPermissionException NoRouteToHostException NoSuchAlgorithmException NoSuchAttributeException
-      NoSuchElementException NoSuchFieldError NoSuchFieldException NoSuchMethodError NoSuchMethodException
-      NoSuchObjectException NoSuchPaddingException NoSuchProviderException NotActiveException
-      NotBoundException NotCompliantMBeanException NotContextException Notification NotificationBroadcaster
-      NotificationBroadcasterSupport NotificationEmitter NotificationFilter NotificationFilterSupport
-      NotificationListener NotificationResult NotOwnerException NotSerializableException NotYetBoundException
-      NotYetConnectedException NullCipher NullPointerException Number NumberFormat NumberFormatException
-      NumberFormatter NumberOfDocuments NumberOfInterveningJobs NumberUp NumberUpSupported NumericShaper
-      OAEPParameterSpec Object ObjectChangeListener ObjectFactory ObjectFactoryBuilder ObjectInput
-      ObjectInputStream ObjectInputValidation ObjectInstance ObjectName ObjectOutput ObjectOutputStream
-      ObjectStreamClass ObjectStreamConstants ObjectStreamException ObjectStreamField ObjectView ObjID
-      Observable Observer OceanTheme OpenDataException OpenMBeanAttributeInfo OpenMBeanAttributeInfoSupport
-      OpenMBeanConstructorInfo OpenMBeanConstructorInfoSupport OpenMBeanInfo OpenMBeanInfoSupport
-      OpenMBeanOperationInfo OpenMBeanOperationInfoSupport OpenMBeanParameterInfo
-      OpenMBeanParameterInfoSupport OpenType OperatingSystemMXBean Operation OperationNotSupportedException
-      OperationsException Option OptionalDataException OptionPaneUI OrientationRequested OutOfMemoryError
-      OutputDeviceAssigned OutputKeys OutputStream OutputStreamWriter OverlappingFileLockException
-      OverlayLayout Override Owner Pack200 Package PackedColorModel Pageable PageAttributes
-      PagedResultsControl PagedResultsResponseControl PageFormat PageRanges PagesPerMinute PagesPerMinuteColor
-      Paint PaintContext PaintEvent Panel PanelUI Paper ParagraphView ParameterBlock ParameterDescriptor
-      ParameterizedType ParameterMetaData ParseException ParsePosition Parser ParserConfigurationException
-      ParserDelegator PartialResultException PasswordAuthentication PasswordCallback PasswordView Patch
-      PathIterator Pattern PatternSyntaxException PBEKey PBEKeySpec PBEParameterSpec PDLOverrideSupported
-      Permission PermissionCollection Permissions PersistenceDelegate PersistentMBean PhantomReference Pipe
-      PipedInputStream PipedOutputStream PipedReader PipedWriter PixelGrabber PixelInterleavedSampleModel
-      PKCS8EncodedKeySpec PKIXBuilderParameters PKIXCertPathBuilderResult PKIXCertPathChecker
-      PKIXCertPathValidatorResult PKIXParameters PlainDocument PlainView Point Point2D PointerInfo Policy
-      PolicyNode PolicyQualifierInfo Polygon PooledConnection Popup PopupFactory PopupMenu PopupMenuEvent
-      PopupMenuListener PopupMenuUI Port PortableRemoteObject PortableRemoteObjectDelegate
-      PortUnreachableException Position Predicate PreferenceChangeEvent PreferenceChangeListener Preferences
-      PreferencesFactory PreparedStatement PresentationDirection Principal Printable PrinterAbortException
-      PrinterException PrinterGraphics PrinterInfo PrinterIOException PrinterIsAcceptingJobs PrinterJob
-      PrinterLocation PrinterMakeAndModel PrinterMessageFromOperator PrinterMoreInfo
-      PrinterMoreInfoManufacturer PrinterName PrinterResolution PrinterState PrinterStateReason
-      PrinterStateReasons PrinterURI PrintEvent PrintException PrintGraphics PrintJob PrintJobAdapter
-      PrintJobAttribute PrintJobAttributeEvent PrintJobAttributeListener PrintJobAttributeSet PrintJobEvent
-      PrintJobListener PrintQuality PrintRequestAttribute PrintRequestAttributeSet PrintService
-      PrintServiceAttribute PrintServiceAttributeEvent PrintServiceAttributeListener PrintServiceAttributeSet
-      PrintServiceLookup PrintStream PrintWriter PriorityBlockingQueue PriorityQueue PrivateClassLoader
-      PrivateCredentialPermission PrivateKey PrivateMLet PrivilegedAction PrivilegedActionException
-      PrivilegedExceptionAction Process ProcessBuilder ProfileDataException ProgressBarUI ProgressMonitor
-      ProgressMonitorInputStream Properties PropertyChangeEvent PropertyChangeListener
-      PropertyChangeListenerProxy PropertyChangeSupport PropertyDescriptor PropertyEditor
-      PropertyEditorManager PropertyEditorSupport PropertyPermission PropertyResourceBundle
-      PropertyVetoException ProtectionDomain ProtocolException Provider ProviderException Proxy ProxySelector
-      PSource PSSParameterSpec PublicKey PushbackInputStream PushbackReader QName QuadCurve2D Query QueryEval
-      QueryExp Queue QueuedJobCount Random RandomAccess RandomAccessFile Raster RasterFormatException RasterOp
-      RC2ParameterSpec RC5ParameterSpec Rdn Readable ReadableByteChannel Reader ReadOnlyBufferException
-      ReadWriteLock RealmCallback RealmChoiceCallback Receiver Rectangle Rectangle2D RectangularShape
-      ReentrantLock ReentrantReadWriteLock Ref RefAddr Reference Referenceable ReferenceQueue
-      ReferenceUriSchemesSupported ReferralException ReflectionException ReflectPermission Refreshable
-      RefreshFailedException Region RegisterableService Registry RegistryHandler RejectedExecutionException
-      RejectedExecutionHandler Relation RelationException RelationNotFoundException RelationNotification
-      RelationService RelationServiceMBean RelationServiceNotRegisteredException RelationSupport
-      RelationSupportMBean RelationType RelationTypeNotFoundException RelationTypeSupport Remote RemoteCall
-      RemoteException RemoteObject RemoteObjectInvocationHandler RemoteRef RemoteServer RemoteStub
-      RenderableImage RenderableImageOp RenderableImageProducer RenderContext RenderedImage
-      RenderedImageFactory Renderer RenderingHints RepaintManager ReplicateScaleFilter RequestingUserName
-      RequiredModelMBean RescaleOp ResolutionSyntax Resolver ResolveResult ResourceBundle ResponseCache Result
-      ResultSet ResultSetMetaData Retention RetentionPolicy ReverbType RGBImageFilter RMIClassLoader
-      RMIClassLoaderSpi RMIClientSocketFactory RMIConnection RMIConnectionImpl RMIConnectionImpl_Stub
-      RMIConnector RMIConnectorServer RMIFailureHandler RMIIIOPServerImpl RMIJRMPServerImpl
-      RMISecurityException RMISecurityManager RMIServer RMIServerImpl RMIServerImpl_Stub
-      RMIServerSocketFactory RMISocketFactory Robot Role RoleInfo RoleInfoNotFoundException RoleList
-      RoleNotFoundException RoleResult RoleStatus RoleUnresolved RoleUnresolvedList RootPaneContainer
-      RootPaneUI RoundingMode RoundRectangle2D RowMapper RowSet RowSetEvent RowSetInternal RowSetListener
-      RowSetMetaData RowSetMetaDataImpl RowSetReader RowSetWarning RowSetWriter RSAKey RSAKeyGenParameterSpec
-      RSAMultiPrimePrivateCrtKey RSAMultiPrimePrivateCrtKeySpec RSAOtherPrimeInfo RSAPrivateCrtKey
-      RSAPrivateCrtKeySpec RSAPrivateKey RSAPrivateKeySpec RSAPublicKey RSAPublicKeySpec RTFEditorKit
-      RuleBasedCollator Runnable Runtime RuntimeErrorException RuntimeException RuntimeMBeanException
-      RuntimeMXBean RuntimeOperationsException RuntimePermission SampleModel Sasl SaslClient SaslClientFactory
-      SaslException SaslServer SaslServerFactory Savepoint SAXParser SAXParserFactory SAXResult SAXSource
-      SAXTransformerFactory Scanner ScatteringByteChannel ScheduledExecutorService ScheduledFuture
-      ScheduledThreadPoolExecutor Schema SchemaFactory SchemaFactoryLoader SchemaViolationException Scrollable
-      Scrollbar ScrollBarUI ScrollPane ScrollPaneAdjustable ScrollPaneConstants ScrollPaneLayout ScrollPaneUI
-      SealedObject SearchControls SearchResult SecretKey SecretKeyFactory SecretKeyFactorySpi SecretKeySpec
-      SecureCacheResponse SecureClassLoader SecureRandom SecureRandomSpi Security SecurityException
-      SecurityManager SecurityPermission Segment SelectableChannel SelectionKey Selector SelectorProvider
-      Semaphore SeparatorUI Sequence SequenceInputStream Sequencer SerialArray SerialBlob SerialClob
-      SerialDatalink SerialException Serializable SerializablePermission SerialJavaObject SerialRef
-      SerialStruct ServerCloneException ServerError ServerException ServerNotActiveException ServerRef
-      ServerRuntimeException ServerSocket ServerSocketChannel ServerSocketFactory ServiceNotFoundException
-      ServicePermission ServiceRegistry ServiceUI ServiceUIFactory ServiceUnavailableException Set
-      SetOfIntegerSyntax Severity Shape ShapeGraphicAttribute SheetCollate Short ShortBuffer
-      ShortBufferException ShortLookupTable ShortMessage Sides Signature SignatureException SignatureSpi
-      SignedObject Signer SimpleAttributeSet SimpleBeanInfo SimpleDateFormat SimpleDoc SimpleFormatter
-      SimpleTimeZone SimpleType SinglePixelPackedSampleModel SingleSelectionModel Size2DSyntax
-      SizeLimitExceededException SizeRequirements SizeSequence Skeleton SkeletonMismatchException
-      SkeletonNotFoundException SliderUI Socket SocketAddress SocketChannel SocketException SocketFactory
-      SocketHandler SocketImpl SocketImplFactory SocketOptions SocketPermission SocketSecurityException
-      SocketTimeoutException SoftBevelBorder SoftReference SortControl SortedMap SortedSet
-      SortingFocusTraversalPolicy SortKey SortResponseControl Soundbank SoundbankReader SoundbankResource
-      Source SourceDataLine SourceLocator SpinnerDateModel SpinnerListModel SpinnerModel SpinnerNumberModel
-      SpinnerUI SplitPaneUI Spring SpringLayout SQLData SQLException SQLInput SQLInputImpl SQLOutput
-      SQLOutputImpl SQLPermission SQLWarning SSLContext SSLContextSpi SSLEngine SSLEngineResult SSLException
-      SSLHandshakeException SSLKeyException SSLPeerUnverifiedException SSLPermission SSLProtocolException
-      SslRMIClientSocketFactory SslRMIServerSocketFactory SSLServerSocket SSLServerSocketFactory SSLSession
-      SSLSessionBindingEvent SSLSessionBindingListener SSLSessionContext SSLSocket SSLSocketFactory Stack
-      StackOverflowError StackTraceElement StandardMBean StartTlsRequest StartTlsResponse StateEdit
-      StateEditable StateFactory Statement StreamCorruptedException StreamHandler StreamPrintService
-      StreamPrintServiceFactory StreamResult StreamSource StreamTokenizer StrictMath String StringBuffer
-      StringBufferInputStream StringBuilder StringCharacterIterator StringContent
-      StringIndexOutOfBoundsException StringMonitor StringMonitorMBean StringReader StringRefAddr
-      StringSelection StringTokenizer StringValueExp StringWriter Stroke Struct Stub StubDelegate
-      StubNotFoundException Style StyleConstants StyleContext StyledDocument StyledEditorKit StyleSheet
-      Subject SubjectDelegationPermission SubjectDomainCombiner SupportedValuesAttribute SuppressWarnings
-      SwingConstants SwingPropertyChangeSupport SwingUtilities SyncFactory SyncFactoryException
-      SyncFailedException SynchronousQueue SyncProvider SyncProviderException SyncResolver SynthConstants
-      SynthContext Synthesizer SynthGraphicsUtils SynthLookAndFeel SynthPainter SynthStyle SynthStyleFactory
-      SysexMessage System SystemColor SystemFlavorMap TabableView TabbedPaneUI TabExpander TableCellEditor
-      TableCellRenderer TableColumn TableColumnModel TableColumnModelEvent TableColumnModelListener
-      TableHeaderUI TableModel TableModelEvent TableModelListener TableUI TableView TabSet TabStop TabularData
-      TabularDataSupport TabularType TagElement Target TargetDataLine TargetedNotification Templates
-      TemplatesHandler TextAction TextArea TextAttribute TextComponent TextEvent TextField TextHitInfo
-      TextInputCallback TextLayout TextListener TextMeasurer TextOutputCallback TextSyntax TextUI TexturePaint
-      Thread ThreadDeath ThreadFactory ThreadGroup ThreadInfo ThreadLocal ThreadMXBean ThreadPoolExecutor
-      Throwable Tie TileObserver Time TimeLimitExceededException TimeoutException Timer
-      TimerAlarmClockNotification TimerMBean TimerNotification TimerTask Timestamp TimeUnit TimeZone
-      TitledBorder ToolBarUI Toolkit ToolTipManager ToolTipUI TooManyListenersException Track
-      TransactionalWriter TransactionRequiredException TransactionRolledbackException Transferable
-      TransferHandler TransformAttribute Transformer TransformerConfigurationException TransformerException
-      TransformerFactory TransformerFactoryConfigurationError TransformerHandler Transmitter Transparency
-      TreeCellEditor TreeCellRenderer TreeExpansionEvent TreeExpansionListener TreeMap TreeModel
-      TreeModelEvent TreeModelListener TreeNode TreePath TreeSelectionEvent TreeSelectionListener
-      TreeSelectionModel TreeSet TreeUI TreeWillExpandListener TrustAnchor TrustManager TrustManagerFactory
-      TrustManagerFactorySpi Type TypeInfoProvider TypeNotPresentException Types TypeVariable UID UIDefaults
-      UIManager UIResource UndeclaredThrowableException UndoableEdit UndoableEditEvent UndoableEditListener
-      UndoableEditSupport UndoManager UnexpectedException UnicastRemoteObject UnknownError
-      UnknownFormatConversionException UnknownFormatFlagsException UnknownGroupException UnknownHostException
-      UnknownObjectException UnknownServiceException UnmappableCharacterException UnmarshalException
-      UnmodifiableClassException UnmodifiableSetException UnrecoverableEntryException
-      UnrecoverableKeyException Unreferenced UnresolvedAddressException UnresolvedPermission
-      UnsatisfiedLinkError UnsolicitedNotification UnsolicitedNotificationEvent
-      UnsolicitedNotificationListener UnsupportedAddressTypeException UnsupportedAudioFileException
-      UnsupportedCallbackException UnsupportedCharsetException UnsupportedClassVersionError
-      UnsupportedEncodingException UnsupportedFlavorException UnsupportedLookAndFeelException
-      UnsupportedOperationException URI URIException URIResolver URISyntax URISyntaxException URL
-      URLClassLoader URLConnection URLDecoder URLEncoder URLStreamHandler URLStreamHandlerFactory
-      UTFDataFormatException Util UtilDelegate Utilities UUID Validator ValidatorHandler ValueExp ValueHandler
-      ValueHandlerMultiFormat VariableHeightLayoutCache Vector VerifyError VetoableChangeListener
-      VetoableChangeListenerProxy VetoableChangeSupport View ViewFactory ViewportLayout ViewportUI
-      VirtualMachineError Visibility VMID VoiceStatus Void VolatileImage WeakHashMap WeakReference WebRowSet
-      WildcardType Window WindowAdapter WindowConstants WindowEvent WindowFocusListener WindowListener
-      WindowStateListener WrappedPlainView WritableByteChannel WritableRaster WritableRenderedImage
-      WriteAbortedException Writer X500Principal X500PrivateCredential X509Certificate X509CertSelector
-      X509CRL X509CRLEntry X509CRLSelector X509EncodedKeySpec X509ExtendedKeyManager X509Extension
-      X509KeyManager X509TrustManager XAConnection XADataSource XAException XAResource Xid XMLConstants
-      XMLDecoder XMLEncoder XMLFormatter XMLGregorianCalendar XMLParseException XmlReader XmlWriter XPath
-      XPathConstants XPathException XPathExpression XPathExpressionException XPathFactory
-      XPathFactoryConfigurationException XPathFunction XPathFunctionException XPathFunctionResolver
-      XPathVariableResolver ZipEntry ZipException ZipFile ZipInputStream ZipOutputStream ZoneView
-    ]
-    
-  end
-  
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/java_script.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,224 +0,0 @@
-module CodeRay
-module Scanners
-
-  class JavaScript < Scanner
-
-    include Streamable
-
-    register_for :java_script
-    file_extension 'js'
-
-    # The actual JavaScript keywords.
-    KEYWORDS = %w[
-      break case catch continue default delete do else
-      finally for function if in instanceof new
-      return switch throw try typeof var void while with
-    ]
-    PREDEFINED_CONSTANTS = %w[
-      false null true undefined
-    ]
-    
-    MAGIC_VARIABLES = %w[ this arguments ]  # arguments was introduced in JavaScript 1.4
-    
-    KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[
-      case delete in instanceof new return throw typeof with
-    ]
-    
-    # Reserved for future use.
-    RESERVED_WORDS = %w[
-      abstract boolean byte char class debugger double enum export extends
-      final float goto implements import int interface long native package
-      private protected public short static super synchronized throws transient
-      volatile
-    ]
-    
-    IDENT_KIND = WordList.new(:ident).
-      add(RESERVED_WORDS, :reserved).
-      add(PREDEFINED_CONSTANTS, :pre_constant).
-      add(MAGIC_VARIABLES, :local_variable).
-      add(KEYWORDS, :keyword)
-
-    ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
-    REGEXP_ESCAPE =  / [bBdDsSwW] /x
-    STRING_CONTENT_PATTERN = {
-      "'" => /[^\\']+/,
-      '"' => /[^\\"]+/,
-      '/' => /[^\\\/]+/,
-    }
-    KEY_CHECK_PATTERN = {
-      "'" => / [^\\']* (?: \\.? [^\\']* )* '? \s* : /x,
-      '"' => / [^\\"]* (?: \\.? [^\\"]* )* "? \s* : /x,
-    }
-
-    def scan_tokens tokens, options
-
-      state = :initial
-      string_delimiter = nil
-      value_expected = true
-      key_expected = false
-      function_expected = false
-
-      until eos?
-
-        kind = nil
-        match = nil
-        
-        case state
-
-        when :initial
-
-          if match = scan(/ \s+ | \\\n /x)
-            value_expected = true if !value_expected && match.index(?\n)
-            tokens << [match, :space]
-            next
-
-          elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
-            value_expected = true
-            kind = :comment
-
-          elsif check(/\.?\d/)
-            key_expected = value_expected = false
-            if scan(/0[xX][0-9A-Fa-f]+/)
-              kind = :hex
-            elsif scan(/(?>0[0-7]+)(?![89.eEfF])/)
-              kind = :oct
-            elsif scan(/\d+[fF]|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
-              kind = :float
-            elsif scan(/\d+/)
-              kind = :integer
-            end
-          
-          elsif value_expected && match = scan(/<([[:alpha:]]\w*) (?: [^\/>]*\/> | .*?<\/\1>)/xim)
-            # FIXME: scan over nested tags
-            xml_scanner.tokenize match
-            value_expected = false
-            next
-            
-          elsif match = scan(/ [-+*=<>?:;,!&^|(\[{~%]+ | \.(?!\d) /x)
-            value_expected = true
-            last_operator = match[-1]
-            key_expected = (last_operator == ?{) || (last_operator == ?,)
-            function_expected = false
-            kind = :operator
-
-          elsif scan(/ [)\]}]+ /x)
-            function_expected = key_expected = value_expected = false
-            kind = :operator
-
-          elsif match = scan(/ [$a-zA-Z_][A-Za-z_0-9$]* /x)
-            kind = IDENT_KIND[match]
-            value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match]
-            # TODO: labels
-            if kind == :ident
-              if match.index(?$)  # $ allowed inside an identifier
-                kind = :predefined
-              elsif function_expected
-                kind = :function
-              elsif check(/\s*[=:]\s*function\b/)
-                kind = :function
-              elsif key_expected && check(/\s*:/)
-                kind = :key
-              end
-            end
-            function_expected = (kind == :keyword) && (match == 'function')
-            key_expected = false
-          
-          elsif match = scan(/["']/)
-            if key_expected && check(KEY_CHECK_PATTERN[match])
-              state = :key
-            else
-              state = :string
-            end
-            tokens << [:open, state]
-            string_delimiter = match
-            kind = :delimiter
-
-          elsif value_expected && (match = scan(/\/(?=\S)/))
-            tokens << [:open, :regexp]
-            state = :regexp
-            string_delimiter = '/'
-            kind = :delimiter
-
-          elsif scan(/ \/ /x)
-            value_expected = true
-            key_expected = false
-            kind = :operator
-
-          else
-            getch
-            kind = :error
-
-          end
-
-        when :string, :regexp, :key
-          if scan(STRING_CONTENT_PATTERN[string_delimiter])
-            kind = :content
-          elsif match = scan(/["'\/]/)
-            tokens << [match, :delimiter]
-            if state == :regexp
-              modifiers = scan(/[gim]+/)
-              tokens << [modifiers, :modifier] if modifiers && !modifiers.empty?
-            end
-            tokens << [:close, state]
-            string_delimiter = nil
-            key_expected = value_expected = false
-            state = :initial
-            next
-          elsif state != :regexp && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))
-            if string_delimiter == "'" && !(match == "\\\\" || match == "\\'")
-              kind = :content
-            else
-              kind = :char
-            end
-          elsif state == :regexp && scan(/ \\ (?: #{ESCAPE} | #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
-            kind = :char
-          elsif scan(/\\./m)
-            kind = :content
-          elsif scan(/ \\ | $ /x)
-            tokens << [:close, state]
-            kind = :error
-            key_expected = value_expected = false
-            state = :initial
-          else
-            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
-          end
-
-        else
-          raise_inspect 'Unknown state', tokens
-
-        end
-
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-        
-        tokens << [match, kind]
-
-      end
-
-      if [:string, :regexp].include? state
-        tokens << [:close, state]
-      end
-
-      tokens
-    end
-
-  protected
-
-    def reset_instance
-      super
-      @xml_scanner.reset if defined? @xml_scanner
-    end
-
-    def xml_scanner
-      @xml_scanner ||= CodeRay.scanner :xml, :tokens => @tokens, :keep_tokens => true, :keep_state => true
-    end
-
-  end
-  
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/json.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-module CodeRay
-module Scanners
-  
-  class JSON < Scanner
-    
-    include Streamable
-    
-    register_for :json
-    file_extension 'json'
-    
-    KINDS_NOT_LOC = [
-      :float, :char, :content, :delimiter,
-      :error, :integer, :operator, :value,
-    ]
-    
-    CONSTANTS = %w( true false null )
-    IDENT_KIND = WordList.new(:key).add(CONSTANTS, :value)
-    
-    ESCAPE = / [bfnrt\\"\/] /x
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} /x
-    
-    def scan_tokens tokens, options
-      
-      state = :initial
-      stack = []
-      string_delimiter = nil
-      key_expected = false
-      
-      until eos?
-        
-        kind = nil
-        match = nil
-        
-        case state
-        
-        when :initial
-          if match = scan(/ \s+ | \\\n /x)
-            tokens << [match, :space]
-            next
-          elsif match = scan(/ [:,\[{\]}] /x)
-            kind = :operator
-            case match
-            when '{' then stack << :object; key_expected = true
-            when '[' then stack << :array
-            when ':' then key_expected = false
-            when ',' then key_expected = true if stack.last == :object
-            when '}', ']' then stack.pop  # no error recovery, but works for valid JSON
-            end
-          elsif match = scan(/ true | false | null /x)
-            kind = IDENT_KIND[match]
-          elsif match = scan(/-?(?:0|[1-9]\d*)/)
-            kind = :integer
-            if scan(/\.\d+(?:[eE][-+]?\d+)?|[eE][-+]?\d+/)
-              match << matched
-              kind = :float
-            end
-          elsif match = scan(/"/)
-            state = key_expected ? :key : :string
-            tokens << [:open, state]
-            kind = :delimiter
-          else
-            getch
-            kind = :error
-          end
-          
-        when :string, :key
-          if scan(/[^\\"]+/)
-            kind = :content
-          elsif scan(/"/)
-            tokens << ['"', :delimiter]
-            tokens << [:close, state]
-            state = :initial
-            next
-          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
-            kind = :char
-          elsif scan(/\\./m)
-            kind = :content
-          elsif scan(/ \\ | $ /x)
-            tokens << [:close, :delimiter]
-            kind = :error
-            state = :initial
-          else
-            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
-          end
-          
-        else
-          raise_inspect 'Unknown state', tokens
-          
-        end
-        
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-        end
-        raise_inspect 'Empty token', tokens unless match
-        
-        tokens << [match, kind]
-        
-      end
-      
-      if [:string, :key].include? state
-        tokens << [:close, state]
-      end
-      
-      tokens
-    end
-    
-  end
-  
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/nitro_xhtml.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-module CodeRay
-module Scanners
-
-  load :html
-  load :ruby
-
-  # Nitro XHTML Scanner
-  class NitroXHTML < Scanner
-
-    include Streamable
-    register_for :nitro_xhtml
-    file_extension :xhtml
-    title 'Nitro XHTML'
-
-    KINDS_NOT_LOC = HTML::KINDS_NOT_LOC
-    
-    NITRO_RUBY_BLOCK = /
-      <\?r
-      (?>
-        [^\?]*
-        (?> \?(?!>) [^\?]* )*
-      )
-      (?: \?> )?
-    |
-      <ruby>
-      (?>
-        [^<]*
-        (?> <(?!\/ruby>) [^<]* )*
-      )
-      (?: <\/ruby> )?
-    |
-      <%
-      (?>
-        [^%]*
-        (?> %(?!>) [^%]* )*
-      )
-      (?: %> )?
-    /mx
-
-    NITRO_VALUE_BLOCK = /
-      \#
-      (?:
-        \{
-        [^{}]*
-        (?>
-          \{ [^}]* \}
-          (?> [^{}]* )
-        )*
-        \}?
-      | \| [^|]* \|?
-      | \( [^)]* \)?
-      | \[ [^\]]* \]?
-      | \\ [^\\]* \\?
-      )
-    /x
-
-    NITRO_ENTITY = /
-      % (?: \#\d+ | \w+ ) ;
-    /
-
-    START_OF_RUBY = /
-      (?=[<\#%])
-      < (?: \?r | % | ruby> )
-    | \# [{(|]
-    | % (?: \#\d+ | \w+ ) ;
-    /x
-
-    CLOSING_PAREN = Hash.new do |h, p|
-      h[p] = p
-    end.update( {
-      '(' => ')',
-      '[' => ']',
-      '{' => '}',
-    } )
-
-  private
-
-    def setup
-      @ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true
-      @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true
-    end
-
-    def reset_instance
-      super
-      @html_scanner.reset
-    end
-
-    def scan_tokens tokens, options
-
-      until eos?
-
-        if (match = scan_until(/(?=#{START_OF_RUBY})/o) || scan_until(/\z/)) and not match.empty?
-          @html_scanner.tokenize match
-
-        elsif match = scan(/#{NITRO_VALUE_BLOCK}/o)
-          start_tag = match[0,2]
-          delimiter = CLOSING_PAREN[start_tag[1,1]]
-          end_tag = match[-1,1] == delimiter ? delimiter : ''
-          tokens << [:open, :inline]
-          tokens << [start_tag, :inline_delimiter]
-          code = match[start_tag.size .. -1 - end_tag.size]
-          @ruby_scanner.tokenize code
-          tokens << [end_tag, :inline_delimiter] unless end_tag.empty?
-          tokens << [:close, :inline]
-
-        elsif match = scan(/#{NITRO_RUBY_BLOCK}/o)
-          start_tag = '<?r'
-          end_tag = match[-2,2] == '?>' ? '?>' : ''
-          tokens << [:open, :inline]
-          tokens << [start_tag, :inline_delimiter]
-          code = match[start_tag.size .. -(end_tag.size)-1]
-          @ruby_scanner.tokenize code
-          tokens << [end_tag, :inline_delimiter] unless end_tag.empty?
-          tokens << [:close, :inline]
-
-        elsif entity = scan(/#{NITRO_ENTITY}/o)
-          tokens << [entity, :entity]
-        
-        elsif scan(/%/)
-          tokens << [matched, :error]
-
-        else
-          raise_inspect 'else-case reached!', tokens
-          
-        end
-
-      end
-
-      tokens
-
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/php.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,527 +0,0 @@
-module CodeRay
-module Scanners
-  
-  load :html
-  
-  # Original by Stefan Walk.
-  class PHP < Scanner
-    
-    register_for :php
-    file_extension 'php'
-    
-    KINDS_NOT_LOC = HTML::KINDS_NOT_LOC
-    
-    def setup
-      @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true
-    end
-    
-    def reset_instance
-      super
-      @html_scanner.reset
-    end
-    
-    module Words
-      
-      # according to http://www.php.net/manual/en/reserved.keywords.php
-      KEYWORDS = %w[
-        abstract and array as break case catch class clone const continue declare default do else elseif
-        enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global
-        goto if implements interface instanceof namespace new or private protected public static switch
-        throw try use var while xor
-        cfunction old_function
-      ]
-      
-      TYPES = %w[ int integer float double bool boolean string array object resource ]
-      
-      LANGUAGE_CONSTRUCTS = %w[
-        die echo empty exit eval include include_once isset list
-        require require_once return print unset
-      ]
-      
-      CLASSES = %w[ Directory stdClass __PHP_Incomplete_Class exception php_user_filter Closure ]
-      
-      # according to http://php.net/quickref.php on 2009-04-21;
-      # all functions with _ excluded (module functions) and selected additional functions
-      BUILTIN_FUNCTIONS = %w[
-        abs acos acosh addcslashes addslashes aggregate array arsort ascii2ebcdic asin asinh asort assert atan atan2
-        atanh basename bcadd bccomp bcdiv bcmod bcmul bcpow bcpowmod bcscale bcsqrt bcsub bin2hex bindec
-        bindtextdomain bzclose bzcompress bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite
-        calculhmac ceil chdir checkdate checkdnsrr chgrp chmod chop chown chr chroot clearstatcache closedir closelog
-        compact constant copy cos cosh count crc32 crypt current date dcgettext dcngettext deaggregate decbin dechex
-        decoct define defined deg2rad delete dgettext die dirname diskfreespace dl dngettext doubleval each
-        ebcdic2ascii echo empty end ereg eregi escapeshellarg escapeshellcmd eval exec exit exp explode expm1 extract
-        fclose feof fflush fgetc fgetcsv fgets fgetss file fileatime filectime filegroup fileinode filemtime fileowner
-        fileperms filepro filesize filetype floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv
-        fputs fread frenchtojd fscanf fseek fsockopen fstat ftell ftok ftruncate fwrite getallheaders getcwd getdate
-        getenv gethostbyaddr gethostbyname gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid
-        getmyuid getopt getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext
-        gettimeofday gettype glob gmdate gmmktime gmstrftime gregoriantojd gzclose gzcompress gzdecode gzdeflate
-        gzencode gzeof gzfile gzgetc gzgets gzgetss gzinflate gzopen gzpassthru gzputs gzread gzrewind gzseek gztell
-        gzuncompress gzwrite hash header hebrev hebrevc hexdec htmlentities htmlspecialchars hypot iconv idate
-        implode include intval ip2long iptcembed iptcparse isset
-        jddayofweek jdmonthname jdtofrench jdtogregorian jdtojewish jdtojulian jdtounix jewishtojd join jpeg2wbmp
-        juliantojd key krsort ksort lcfirst lchgrp lchown levenshtein link linkinfo list localeconv localtime log
-        log10 log1p long2ip lstat ltrim mail main max md5 metaphone mhash microtime min mkdir mktime msql natcasesort
-        natsort next ngettext nl2br nthmac octdec opendir openlog
-        ord overload pack passthru pathinfo pclose pfsockopen phpcredits phpinfo phpversion pi png2wbmp popen pos pow
-        prev print printf putenv quotemeta rad2deg rand range rawurldecode rawurlencode readdir readfile readgzfile
-        readline readlink realpath recode rename require reset rewind rewinddir rmdir round rsort rtrim scandir
-        serialize setcookie setlocale setrawcookie settype sha1 shuffle signeurlpaiement sin sinh sizeof sleep snmpget
-        snmpgetnext snmprealwalk snmpset snmpwalk snmpwalkoid sort soundex split spliti sprintf sqrt srand sscanf stat
-        strcasecmp strchr strcmp strcoll strcspn strftime stripcslashes stripos stripslashes stristr strlen
-        strnatcasecmp strnatcmp strncasecmp strncmp strpbrk strpos strptime strrchr strrev strripos strrpos strspn
-        strstr strtok strtolower strtotime strtoupper strtr strval substr symlink syslog system tan tanh tempnam
-        textdomain time tmpfile touch trim uasort ucfirst ucwords uksort umask uniqid unixtojd unlink unpack
-        unserialize unset urldecode urlencode usleep usort vfprintf virtual vprintf vsprintf wordwrap
-        array_change_key_case array_chunk array_combine array_count_values array_diff array_diff_assoc
-        array_diff_key array_diff_uassoc array_diff_ukey array_fill array_fill_keys array_filter array_flip
-        array_intersect array_intersect_assoc array_intersect_key array_intersect_uassoc array_intersect_ukey
-        array_key_exists array_keys array_map array_merge array_merge_recursive array_multisort array_pad
-        array_pop array_product array_push array_rand array_reduce array_reverse array_search array_shift
-        array_slice array_splice array_sum array_udiff array_udiff_assoc array_udiff_uassoc array_uintersect
-        array_uintersect_assoc array_uintersect_uassoc array_unique array_unshift array_values array_walk
-        array_walk_recursive
-        assert_options base_convert base64_decode base64_encode
-        chunk_split class_exists class_implements class_parents
-        count_chars debug_backtrace debug_print_backtrace debug_zval_dump
-        error_get_last error_log error_reporting extension_loaded
-        file_exists file_get_contents file_put_contents load_file
-        func_get_arg func_get_args func_num_args function_exists
-        get_browser get_called_class get_cfg_var get_class get_class_methods get_class_vars
-        get_current_user get_declared_classes get_declared_interfaces get_defined_constants
-        get_defined_functions get_defined_vars get_extension_funcs get_headers get_html_translation_table
-        get_include_path get_included_files get_loaded_extensions get_magic_quotes_gpc get_magic_quotes_runtime
-        get_meta_tags get_object_vars get_parent_class get_required_filesget_resource_type
-        gc_collect_cycles gc_disable gc_enable gc_enabled
-        halt_compiler headers_list headers_sent highlight_file highlight_string
-        html_entity_decode htmlspecialchars_decode
-        in_array include_once inclued_get_data
-        is_a is_array is_binary is_bool is_buffer is_callable is_dir is_double is_executable is_file is_finite
-        is_float is_infinite is_int is_integer is_link is_long is_nan is_null is_numeric is_object is_readable
-        is_real is_resource is_scalar is_soap_fault is_string is_subclass_of is_unicode is_uploaded_file
-        is_writable is_writeable
-        locale_get_default locale_set_default
-        number_format override_function parse_str parse_url
-        php_check_syntax php_ini_loaded_file php_ini_scanned_files php_logo_guid php_sapi_name
-        php_strip_whitespace php_uname
-        preg_filter preg_grep preg_last_error preg_match preg_match_all preg_quote preg_replace
-        preg_replace_callback preg_split print_r
-        require_once register_shutdown_function register_tick_function
-        set_error_handler set_exception_handler set_file_buffer set_include_path
-        set_magic_quotes_runtime set_time_limit shell_exec
-        str_getcsv str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count
-        strip_tags substr_compare substr_count substr_replace
-        time_nanosleep time_sleep_until
-        token_get_all token_name trigger_error
-        unregister_tick_function use_soap_error_handler user_error
-        utf8_decode utf8_encode var_dump var_export
-        version_compare
-        zend_logo_guid zend_thread_id zend_version
-        create_function call_user_func_array
-        posix_access posix_ctermid posix_get_last_error posix_getcwd posix_getegid
-        posix_geteuid posix_getgid posix_getgrgid posix_getgrnam posix_getgroups
-        posix_getlogin posix_getpgid posix_getpgrp posix_getpid posix_getppid
-        posix_getpwnam posix_getpwuid posix_getrlimit posix_getsid posix_getuid
-        posix_initgroups posix_isatty posix_kill posix_mkfifo posix_mknod
-        posix_setegid posix_seteuid posix_setgid posix_setpgid posix_setsid
-        posix_setuid posix_strerror posix_times posix_ttyname posix_uname
-        pcntl_alarm pcntl_exec pcntl_fork pcntl_getpriority pcntl_setpriority
-        pcntl_signal pcntl_signal_dispatch pcntl_sigprocmask pcntl_sigtimedwait
-        pcntl_sigwaitinfo pcntl_wait pcntl_waitpid pcntl_wexitstatus pcntl_wifexited
-        pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig
-      ]
-      # TODO: more built-in PHP functions?
-      
-      EXCEPTIONS = %w[
-        E_ERROR E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING
-        E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_DEPRECATED E_USER_DEPRECATED E_ALL E_STRICT
-      ]
-      
-      CONSTANTS = %w[
-        null true false self parent
-        __LINE__ __DIR__ __FILE__ __LINE__
-        __CLASS__ __NAMESPACE__ __METHOD__ __FUNCTION__
-        PHP_VERSION PHP_MAJOR_VERSION PHP_MINOR_VERSION PHP_RELEASE_VERSION PHP_VERSION_ID PHP_EXTRA_VERSION PHP_ZTS
-        PHP_DEBUG PHP_MAXPATHLEN PHP_OS PHP_SAPI PHP_EOL PHP_INT_MAX PHP_INT_SIZE DEFAULT_INCLUDE_PATH
-        PEAR_INSTALL_DIR PEAR_EXTENSION_DIR PHP_EXTENSION_DIR PHP_PREFIX PHP_BINDIR PHP_LIBDIR PHP_DATADIR
-        PHP_SYSCONFDIR PHP_LOCALSTATEDIR PHP_CONFIG_FILE_PATH PHP_CONFIG_FILE_SCAN_DIR PHP_SHLIB_SUFFIX
-        PHP_OUTPUT_HANDLER_START PHP_OUTPUT_HANDLER_CONT PHP_OUTPUT_HANDLER_END
-        __COMPILER_HALT_OFFSET__
-        EXTR_OVERWRITE EXTR_SKIP EXTR_PREFIX_SAME EXTR_PREFIX_ALL EXTR_PREFIX_INVALID EXTR_PREFIX_IF_EXISTS
-        EXTR_IF_EXISTS SORT_ASC SORT_DESC SORT_REGULAR SORT_NUMERIC SORT_STRING CASE_LOWER CASE_UPPER COUNT_NORMAL
-        COUNT_RECURSIVE ASSERT_ACTIVE ASSERT_CALLBACK ASSERT_BAIL ASSERT_WARNING ASSERT_QUIET_EVAL CONNECTION_ABORTED
-        CONNECTION_NORMAL CONNECTION_TIMEOUT INI_USER INI_PERDIR INI_SYSTEM INI_ALL M_E M_LOG2E M_LOG10E M_LN2 M_LN10
-        M_PI M_PI_2 M_PI_4 M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2 CRYPT_SALT_LENGTH CRYPT_STD_DES CRYPT_EXT_DES
-        CRYPT_MD5 CRYPT_BLOWFISH DIRECTORY_SEPARATOR SEEK_SET SEEK_CUR SEEK_END LOCK_SH LOCK_EX LOCK_UN LOCK_NB
-        HTML_SPECIALCHARS HTML_ENTITIES ENT_COMPAT ENT_QUOTES ENT_NOQUOTES INFO_GENERAL INFO_CREDITS
-        INFO_CONFIGURATION INFO_MODULES INFO_ENVIRONMENT INFO_VARIABLES INFO_LICENSE INFO_ALL CREDITS_GROUP
-        CREDITS_GENERAL CREDITS_SAPI CREDITS_MODULES CREDITS_DOCS CREDITS_FULLPAGE CREDITS_QA CREDITS_ALL STR_PAD_LEFT
-        STR_PAD_RIGHT STR_PAD_BOTH PATHINFO_DIRNAME PATHINFO_BASENAME PATHINFO_EXTENSION PATH_SEPARATOR CHAR_MAX
-        LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_ALL LC_MESSAGES ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5
-        ABDAY_6 ABDAY_7 DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7 ABMON_1 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6
-        ABMON_7 ABMON_8 ABMON_9 ABMON_10 ABMON_11 ABMON_12 MON_1 MON_2 MON_3 MON_4 MON_5 MON_6 MON_7 MON_8 MON_9
-        MON_10 MON_11 MON_12 AM_STR PM_STR D_T_FMT D_FMT T_FMT T_FMT_AMPM ERA ERA_YEAR ERA_D_T_FMT ERA_D_FMT ERA_T_FMT
-        ALT_DIGITS INT_CURR_SYMBOL CURRENCY_SYMBOL CRNCYSTR MON_DECIMAL_POINT MON_THOUSANDS_SEP MON_GROUPING
-        POSITIVE_SIGN NEGATIVE_SIGN INT_FRAC_DIGITS FRAC_DIGITS P_CS_PRECEDES P_SEP_BY_SPACE N_CS_PRECEDES
-        N_SEP_BY_SPACE P_SIGN_POSN N_SIGN_POSN DECIMAL_POINT RADIXCHAR THOUSANDS_SEP THOUSEP GROUPING YESEXPR NOEXPR
-        YESSTR NOSTR CODESET LOG_EMERG LOG_ALERT LOG_CRIT LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_DEBUG LOG_KERN
-        LOG_USER LOG_MAIL LOG_DAEMON LOG_AUTH LOG_SYSLOG LOG_LPR LOG_NEWS LOG_UUCP LOG_CRON LOG_AUTHPRIV LOG_LOCAL0
-        LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_PID LOG_CONS LOG_ODELAY
-        LOG_NDELAY LOG_NOWAIT LOG_PERROR
-      ]
-      
-      PREDEFINED = %w[
-        $GLOBALS $_SERVER $_GET $_POST $_FILES $_REQUEST $_SESSION $_ENV
-        $_COOKIE $php_errormsg $HTTP_RAW_POST_DATA $http_response_header
-        $argc $argv
-      ]
-      
-      IDENT_KIND = CaseIgnoringWordList.new(:ident).
-        add(KEYWORDS, :reserved).
-        add(TYPES, :pre_type).
-        add(LANGUAGE_CONSTRUCTS, :reserved).
-        add(BUILTIN_FUNCTIONS, :predefined).
-        add(CLASSES, :pre_constant).
-        add(EXCEPTIONS, :exception).
-        add(CONSTANTS, :pre_constant)
-      
-      VARIABLE_KIND = WordList.new(:local_variable).
-        add(PREDEFINED, :predefined)
-    end
-    
-    module RE
-      
-      PHP_START = /
-        <script\s+[^>]*?language\s*=\s*"php"[^>]*?> |
-        <script\s+[^>]*?language\s*=\s*'php'[^>]*?> |
-        <\?php\d? |
-        <\?(?!xml)
-      /xi
-      
-      PHP_END = %r!
-        </script> |
-        \?>
-      !xi
-      
-      HTML_INDICATOR = /<!DOCTYPE html|<(?:html|body|div|p)[> ]/i
-      
-      IDENTIFIER = /[a-z_\x7f-\xFF][a-z0-9_\x7f-\xFF]*/i
-      VARIABLE = /\$#{IDENTIFIER}/
-      
-      OPERATOR = /
-        \.(?!\d)=? |      # dot that is not decimal point, string concatenation
-        && | \|\| |       # logic
-        :: | -> | => |    # scope, member, dictionary
-        \\(?!\n) |        # namespace
-        \+\+ | -- |       # increment, decrement
-        [,;?:()\[\]{}] |  # simple delimiters
-        [-+*\/%&|^]=? |   # ordinary math, binary logic, assignment shortcuts
-        [~$] |            # whatever
-        =& |              # reference assignment
-        [=!]=?=? | <> |   # comparison and assignment
-        <<=? | >>=? | [<>]=?  # comparison and shift
-      /x
-      
-    end
-    
-    def scan_tokens tokens, options
-      
-      if check(RE::PHP_START) ||  # starts with <?
-       (match?(/\s*<\S/) && exist?(RE::PHP_START)) || # starts with tag and contains <?
-       exist?(RE::HTML_INDICATOR) ||
-       check(/.{1,100}#{RE::PHP_START}/om)  # PHP start after max 100 chars
-        # is HTML with embedded PHP, so start with HTML
-        states = [:initial]
-      else
-        # is just PHP, so start with PHP surrounded by HTML
-        states = [:initial, :php]
-      end
-      
-      label_expected = true
-      case_expected = false
-      
-      heredoc_delimiter = nil
-      delimiter = nil
-      modifier = nil
-      
-      until eos?
-        
-        match = nil
-        kind = nil
-        
-        case states.last
-        
-        when :initial  # HTML
-          if scan RE::PHP_START
-            kind = :inline_delimiter
-            label_expected = true
-            states << :php
-          else
-            match = scan_until(/(?=#{RE::PHP_START})/o) || scan_until(/\z/)
-            @html_scanner.tokenize match unless match.empty?
-            next
-          end
-        
-        when :php
-          if match = scan(/\s+/)
-            tokens << [match, :space]
-            next
-          
-          elsif scan(%r! (?m: \/\* (?: .*? \*\/ | .* ) ) | (?://|\#) .*? (?=#{RE::PHP_END}|$) !xo)
-            kind = :comment
-          
-          elsif match = scan(RE::IDENTIFIER)
-            kind = Words::IDENT_KIND[match]
-            if kind == :ident && label_expected && check(/:(?!:)/)
-              kind = :label
-              label_expected = true
-            else
-              label_expected = false
-              if kind == :ident && match =~ /^[A-Z]/
-                kind = :constant
-              elsif kind == :reserved
-                case match
-                when 'class'
-                  states << :class_expected
-                when 'function'
-                  states << :function_expected
-                when 'case', 'default'
-                  case_expected = true
-                end
-              elsif match == 'b' && check(/['"]/)  # binary string literal
-                modifier = match
-                next
-              end
-            end
-          
-          elsif scan(/(?:\d+\.\d*|\d*\.\d+)(?:e[-+]?\d+)?|\d+e[-+]?\d+/i)
-            label_expected = false
-            kind = :float
-          
-          elsif scan(/0x[0-9a-fA-F]+/)
-            label_expected = false
-            kind = :hex
-          
-          elsif scan(/\d+/)
-            label_expected = false
-            kind = :integer
-          
-          elsif scan(/'/)
-            tokens << [:open, :string]
-            if modifier
-              tokens << [modifier, :modifier]
-              modifier = nil
-            end
-            kind = :delimiter
-            states.push :sqstring
-          
-          elsif match = scan(/["`]/)
-            tokens << [:open, :string]
-            if modifier
-              tokens << [modifier, :modifier]
-              modifier = nil
-            end
-            delimiter = match
-            kind = :delimiter
-            states.push :dqstring
-          
-          elsif match = scan(RE::VARIABLE)
-            label_expected = false
-            kind = Words::VARIABLE_KIND[match]
-          
-          elsif scan(/\{/)
-            kind = :operator
-            label_expected = true
-            states.push :php
-          
-          elsif scan(/\}/)
-            if states.size == 1
-              kind = :error
-            else
-              states.pop
-              if states.last.is_a?(::Array)
-                delimiter = states.last[1]
-                states[-1] = states.last[0]
-                tokens << [matched, :delimiter]
-                tokens << [:close, :inline]
-                next
-              else
-                kind = :operator
-                label_expected = true
-              end
-            end
-          
-          elsif scan(/@/)
-            label_expected = false
-            kind = :exception
-          
-          elsif scan RE::PHP_END
-            kind = :inline_delimiter
-            states = [:initial]
-          
-          elsif match = scan(/<<<(?:(#{RE::IDENTIFIER})|"(#{RE::IDENTIFIER})"|'(#{RE::IDENTIFIER})')/o)
-            tokens << [:open, :string]
-            warn 'heredoc in heredoc?' if heredoc_delimiter
-            heredoc_delimiter = Regexp.escape(self[1] || self[2] || self[3])
-            kind = :delimiter
-            states.push self[3] ? :sqstring : :dqstring
-            heredoc_delimiter = /#{heredoc_delimiter}(?=;?$)/
-          
-          elsif match = scan(/#{RE::OPERATOR}/o)
-            label_expected = match == ';'
-            if case_expected
-              label_expected = true if match == ':'
-              case_expected = false
-            end
-            kind = :operator
-          
-          else
-            getch
-            kind = :error
-          
-          end
-        
-        when :sqstring
-          if scan(heredoc_delimiter ? /[^\\\n]+/ : /[^'\\]+/)
-            kind = :content
-          elsif !heredoc_delimiter && scan(/'/)
-            tokens << [matched, :delimiter]
-            tokens << [:close, :string]
-            delimiter = nil
-            label_expected = false
-            states.pop
-            next
-          elsif heredoc_delimiter && match = scan(/\n/)
-            kind = :content
-            if scan heredoc_delimiter
-              tokens << ["\n", :content]
-              tokens << [matched, :delimiter]
-              tokens << [:close, :string]
-              heredoc_delimiter = nil
-              label_expected = false
-              states.pop
-              next
-            end
-          elsif scan(heredoc_delimiter ? /\\\\/ : /\\[\\'\n]/)
-            kind = :char
-          elsif scan(/\\./m)
-            kind = :content
-          elsif scan(/\\/)
-            kind = :error
-          end
-        
-        when :dqstring
-          if scan(heredoc_delimiter ? /[^${\\\n]+/ : (delimiter == '"' ? /[^"${\\]+/ : /[^`${\\]+/))
-            kind = :content
-          elsif !heredoc_delimiter && scan(delimiter == '"' ? /"/ : /`/)
-            tokens << [matched, :delimiter]
-            tokens << [:close, :string]
-            delimiter = nil
-            label_expected = false
-            states.pop
-            next
-          elsif heredoc_delimiter && match = scan(/\n/)
-            kind = :content
-            if scan heredoc_delimiter
-              tokens << ["\n", :content]
-              tokens << [matched, :delimiter]
-              tokens << [:close, :string]
-              heredoc_delimiter = nil
-              label_expected = false
-              states.pop
-              next
-            end
-          elsif scan(/\\(?:x[0-9A-Fa-f]{1,2}|[0-7]{1,3})/)
-            kind = :char
-          elsif scan(heredoc_delimiter ? /\\[nrtvf\\$]/ : (delimiter == '"' ? /\\[nrtvf\\$"]/ : /\\[nrtvf\\$`]/))
-            kind = :char
-          elsif scan(/\\./m)
-            kind = :content
-          elsif scan(/\\/)
-            kind = :error
-          elsif match = scan(/#{RE::VARIABLE}/o)
-            kind = :local_variable
-            if check(/\[#{RE::IDENTIFIER}\]/o)
-              tokens << [:open, :inline]
-              tokens << [match, :local_variable]
-              tokens << [scan(/\[/), :operator]
-              tokens << [scan(/#{RE::IDENTIFIER}/o), :ident]
-              tokens << [scan(/\]/), :operator]
-              tokens << [:close, :inline]
-              next
-            elsif check(/\[/)
-              match << scan(/\[['"]?#{RE::IDENTIFIER}?['"]?\]?/o)
-              kind = :error
-            elsif check(/->#{RE::IDENTIFIER}/o)
-              tokens << [:open, :inline]
-              tokens << [match, :local_variable]
-              tokens << [scan(/->/), :operator]
-              tokens << [scan(/#{RE::IDENTIFIER}/o), :ident]
-              tokens << [:close, :inline]
-              next
-            elsif check(/->/)
-              match << scan(/->/)
-              kind = :error
-            end
-          elsif match = scan(/\{/)
-            if check(/\$/)
-              kind = :delimiter
-              states[-1] = [states.last, delimiter]
-              delimiter = nil
-              states.push :php
-              tokens << [:open, :inline]
-            else
-              kind = :string
-            end
-          elsif scan(/\$\{#{RE::IDENTIFIER}\}/o)
-            kind = :local_variable
-          elsif scan(/\$/)
-            kind = :content
-          end
-        
-        when :class_expected
-          if scan(/\s+/)
-            kind = :space
-          elsif match = scan(/#{RE::IDENTIFIER}/o)
-            kind = :class
-            states.pop
-          else
-            states.pop
-            next
-          end
-        
-        when :function_expected
-          if scan(/\s+/)
-            kind = :space
-          elsif scan(/&/)
-            kind = :operator
-          elsif match = scan(/#{RE::IDENTIFIER}/o)
-            kind = :function
-            states.pop
-          else
-            states.pop
-            next
-          end
-        
-        else
-          raise_inspect 'Unknown state!', tokens, states
-        end
-        
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens, states
-        end
-        raise_inspect 'Empty token', tokens, states unless match
-        
-        tokens << [match, kind]
-        
-      end
-      
-      tokens
-    end
-    
-  end
-  
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/plaintext.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-module CodeRay
-module Scanners
-
-  class Plaintext < Scanner
-
-    register_for :plaintext, :plain
-    title 'Plain text'
-    
-    include Streamable
-    
-    KINDS_NOT_LOC = [:plain]
-    
-    def scan_tokens tokens, options
-      text = (scan_until(/\z/) || '')
-      tokens << [text, :plain]
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/python.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,285 +0,0 @@
-module CodeRay
-module Scanners
-  
-  # Bases on pygments' PythonLexer, see
-  # http://dev.pocoo.org/projects/pygments/browser/pygments/lexers/agile.py.
-  class Python < Scanner
-    
-    include Streamable
-    
-    register_for :python
-    file_extension 'py'
-    
-    KEYWORDS = [
-      'and', 'as', 'assert', 'break', 'class', 'continue', 'def',
-      'del', 'elif', 'else', 'except', 'finally', 'for',
-      'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not',
-      'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield',
-      'nonlocal',  # new in Python 3
-    ]
-    
-    OLD_KEYWORDS = [
-      'exec', 'print',  # gone in Python 3
-    ]
-    
-    PREDEFINED_METHODS_AND_TYPES = %w[
-      __import__ abs all any apply basestring bin bool buffer
-      bytearray bytes callable chr classmethod cmp coerce compile
-      complex delattr dict dir divmod enumerate eval execfile exit
-      file filter float frozenset getattr globals hasattr hash hex id
-      input int intern isinstance issubclass iter len list locals
-      long map max min next object oct open ord pow property range
-      raw_input reduce reload repr reversed round set setattr slice
-      sorted staticmethod str sum super tuple type unichr unicode
-      vars xrange zip
-    ]
-    
-    PREDEFINED_EXCEPTIONS = %w[
-      ArithmeticError AssertionError AttributeError
-      BaseException DeprecationWarning EOFError EnvironmentError
-      Exception FloatingPointError FutureWarning GeneratorExit IOError
-      ImportError ImportWarning IndentationError IndexError KeyError
-      KeyboardInterrupt LookupError MemoryError NameError
-      NotImplemented NotImplementedError OSError OverflowError
-      OverflowWarning PendingDeprecationWarning ReferenceError
-      RuntimeError RuntimeWarning StandardError StopIteration
-      SyntaxError SyntaxWarning SystemError SystemExit TabError
-      TypeError UnboundLocalError UnicodeDecodeError
-      UnicodeEncodeError UnicodeError UnicodeTranslateError
-      UnicodeWarning UserWarning ValueError Warning ZeroDivisionError
-    ]
-    
-    PREDEFINED_VARIABLES_AND_CONSTANTS = [
-      'False', 'True', 'None', # "keywords" since Python 3
-      'self', 'Ellipsis', 'NotImplemented',
-    ]
-    
-    IDENT_KIND = WordList.new(:ident).
-      add(KEYWORDS, :keyword).
-      add(OLD_KEYWORDS, :old_keyword).
-      add(PREDEFINED_METHODS_AND_TYPES, :predefined).
-      add(PREDEFINED_VARIABLES_AND_CONSTANTS, :pre_constant).
-      add(PREDEFINED_EXCEPTIONS, :exception)
-    
-    NAME = / [^\W\d] \w* /x
-    ESCAPE = / [abfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} | N\{[-\w ]+\} /x
-    
-    OPERATOR = /
-      \.\.\. |          # ellipsis
-      \.(?!\d) |        # dot but not decimal point
-      [,;:()\[\]{}] |   # simple delimiters
-      \/\/=? | \*\*=? | # special math
-      [-+*\/%&|^]=? |   # ordinary math and binary logic
-      [~`] |            # binary complement and inspection
-      <<=? | >>=? | [<>=]=? | !=  # comparison and assignment
-    /x
-    
-    STRING_DELIMITER_REGEXP = Hash.new do |h, delimiter|
-      h[delimiter] = Regexp.union delimiter
-    end
-    
-    STRING_CONTENT_REGEXP = Hash.new do |h, delimiter|
-      h[delimiter] = / [^\\\n]+? (?= \\ | $ | #{Regexp.escape(delimiter)} ) /x
-    end
-    
-    DEF_NEW_STATE = WordList.new(:initial).
-      add(%w(def), :def_expected).
-      add(%w(import from), :include_expected).
-      add(%w(class), :class_expected)
-    
-    DESCRIPTOR = /
-      #{NAME}
-      (?: \. #{NAME} )*
-      | \*
-    /x
-    
-    def scan_tokens tokens, options
-      
-      state = :initial
-      string_delimiter = nil
-      string_raw = false
-      import_clause = class_name_follows = last_token_dot = false
-      unicode = string.respond_to?(:encoding) && string.encoding.name == 'UTF-8'
-      from_import_state = []
-      
-      until eos?
-        
-        kind = nil
-        match = nil
-        
-        if state == :string
-          if scan(STRING_DELIMITER_REGEXP[string_delimiter])
-            tokens << [matched, :delimiter]
-            tokens << [:close, :string]
-            state = :initial
-            next
-          elsif string_delimiter.size == 3 && scan(/\n/)
-            kind = :content
-          elsif scan(STRING_CONTENT_REGEXP[string_delimiter])
-            kind = :content
-          elsif !string_raw && scan(/ \\ #{ESCAPE} /ox)
-            kind = :char
-          elsif scan(/ \\ #{UNICODE_ESCAPE} /ox)
-            kind = :char
-          elsif scan(/ \\ . /x)
-            kind = :content
-          elsif scan(/ \\ | $ /x)
-            tokens << [:close, :string]
-            kind = :error
-            state = :initial
-          else
-            raise_inspect "else case \" reached; %p not handled." % peek(1), tokens, state
-          end
-        
-        elsif match = scan(/ [ \t]+ | \\\n /x)
-          tokens << [match, :space]
-          next
-        
-        elsif match = scan(/\n/)
-          tokens << [match, :space]
-          state = :initial if state == :include_expected
-          next
-        
-        elsif match = scan(/ \# [^\n]* /mx)
-          tokens << [match, :comment]
-          next
-        
-        elsif state == :initial
-          
-          if scan(/#{OPERATOR}/o)
-            kind = :operator
-          
-          elsif match = scan(/(u?r?|b)?("""|"|'''|')/i)
-            tokens << [:open, :string]
-            string_delimiter = self[2]
-            string_raw = false
-            modifiers = self[1]
-            unless modifiers.empty?
-              string_raw = !!modifiers.index(?r)
-              tokens << [modifiers, :modifier]
-              match = string_delimiter
-            end
-            state = :string
-            kind = :delimiter
-          
-          # TODO: backticks
-          
-          elsif match = scan(unicode ? /#{NAME}/uo : /#{NAME}/o)
-            kind = IDENT_KIND[match]
-            # TODO: keyword arguments
-            kind = :ident if last_token_dot
-            if kind == :old_keyword
-              kind = check(/\(/) ? :ident : :keyword
-            elsif kind == :predefined && check(/ *=/)
-              kind = :ident
-            elsif kind == :keyword
-              state = DEF_NEW_STATE[match]
-              from_import_state << match.to_sym if state == :include_expected
-            end
-          
-          elsif scan(/@[a-zA-Z0-9_.]+[lL]?/)
-            kind = :decorator
-          
-          elsif scan(/0[xX][0-9A-Fa-f]+[lL]?/)
-            kind = :hex
-          
-          elsif scan(/0[bB][01]+[lL]?/)
-            kind = :bin
-          
-          elsif match = scan(/(?:\d*\.\d+|\d+\.\d*)(?:[eE][+-]?\d+)?|\d+[eE][+-]?\d+/)
-            kind = :float
-            if scan(/[jJ]/)
-              match << matched
-              kind = :imaginary
-            end
-          
-          elsif scan(/0[oO][0-7]+|0[0-7]+(?![89.eE])[lL]?/)
-            kind = :oct
-          
-          elsif match = scan(/\d+([lL])?/)
-            kind = :integer
-            if self[1] == nil && scan(/[jJ]/)
-              match << matched
-              kind = :imaginary
-            end
-          
-          else
-            getch
-            kind = :error
-          
-          end
-            
-        elsif state == :def_expected
-          state = :initial
-          if match = scan(unicode ? /#{NAME}/uo : /#{NAME}/o)
-            kind = :method
-          else
-            next
-          end
-        
-        elsif state == :class_expected
-          state = :initial
-          if match = scan(unicode ? /#{NAME}/uo : /#{NAME}/o)
-            kind = :class
-          else
-            next
-          end
-          
-        elsif state == :include_expected
-          if match = scan(unicode ? /#{DESCRIPTOR}/uo : /#{DESCRIPTOR}/o)
-            kind = :include
-            if match == 'as'
-              kind = :keyword
-              from_import_state << :as
-            elsif from_import_state.first == :from && match == 'import'
-              kind = :keyword
-              from_import_state << :import
-            elsif from_import_state.last == :as
-              # kind = match[0,1][unicode ? /[[:upper:]]/u : /[[:upper:]]/] ? :class : :method
-              kind = :ident
-              from_import_state.pop
-            elsif IDENT_KIND[match] == :keyword
-              unscan
-              match = nil
-              state = :initial
-              next
-            end
-          elsif match = scan(/,/)
-            from_import_state.pop if from_import_state.last == :as
-            kind = :operator
-          else
-            from_import_state = []
-            state = :initial
-            next
-          end
-          
-        else
-          raise_inspect 'Unknown state', tokens, state
-          
-        end
-        
-        match ||= matched
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens, state
-        end
-        raise_inspect 'Empty token', tokens, state unless match
-        
-        last_token_dot = match == '.'
-        
-        tokens << [match, kind]
-        
-      end
-      
-      if state == :string
-        tokens << [:close, :string]
-      end
-      
-      tokens
-    end
-    
-  end
-  
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/rhtml.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-module CodeRay
-module Scanners
-
-  load :html
-  load :ruby
-
-  # RHTML Scanner
-  class RHTML < Scanner
-
-    include Streamable
-    register_for :rhtml
-    title 'HTML ERB Template'
-    
-    KINDS_NOT_LOC = HTML::KINDS_NOT_LOC
-
-    ERB_RUBY_BLOCK = /
-      <%(?!%)[=-]?
-      (?>
-        [^\-%]*    # normal*
-        (?>        # special
-          (?: %(?!>) | -(?!%>) )
-          [^\-%]*  # normal*
-        )*
-      )
-      (?: -?%> )?
-    /x
-
-    START_OF_ERB = /
-      <%(?!%)
-    /x
-
-  private
-
-    def setup
-      @ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true
-      @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true
-    end
-
-    def reset_instance
-      super
-      @html_scanner.reset
-    end
-
-    def scan_tokens tokens, options
-
-      until eos?
-
-        if (match = scan_until(/(?=#{START_OF_ERB})/o) || scan_until(/\z/)) and not match.empty?
-          @html_scanner.tokenize match
-
-        elsif match = scan(/#{ERB_RUBY_BLOCK}/o)
-          start_tag = match[/\A<%[-=]?/]
-          end_tag = match[/-?%?>?\z/]
-          tokens << [:open, :inline]
-          tokens << [start_tag, :inline_delimiter]
-          code = match[start_tag.size .. -1 - end_tag.size]
-          @ruby_scanner.tokenize code
-          tokens << [end_tag, :inline_delimiter] unless end_tag.empty?
-          tokens << [:close, :inline]
-
-        else
-          raise_inspect 'else-case reached!', tokens
-        end
-
-      end
-
-      tokens
-
-    end
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,413 +0,0 @@
-module CodeRay
-module Scanners
-
-  # This scanner is really complex, since Ruby _is_ a complex language!
-  #
-  # It tries to highlight 100% of all common code,
-  # and 90% of strange codes.
-  #
-  # It is optimized for HTML highlighting, and is not very useful for
-  # parsing or pretty printing.
-  #
-  # For now, I think it's better than the scanners in VIM or Syntax, or
-  # any highlighter I was able to find, except Caleb's RubyLexer.
-  #
-  # I hope it's also better than the rdoc/irb lexer.
-  class Ruby < Scanner
-
-    include Streamable
-
-    register_for :ruby
-    file_extension 'rb'
-
-    helper :patterns
-    
-    if not defined? EncodingError
-      EncodingError = Class.new Exception
-    end
-
-  private
-    def scan_tokens tokens, options
-      last_token_dot = false
-      value_expected = true
-      heredocs = nil
-      last_state = nil
-      state = :initial
-      depth = nil
-      inline_block_stack = []
-      unicode = string.respond_to?(:encoding) && string.encoding.name == 'UTF-8'
-      
-      patterns = Patterns  # avoid constant lookup
-      
-      until eos?
-        match = nil
-        kind = nil
-
-        if state.instance_of? patterns::StringState
-# {{{
-          match = scan_until(state.pattern) || scan_until(/\z/)
-          tokens << [match, :content] unless match.empty?
-          break if eos?
-
-          if state.heredoc and self[1]  # end of heredoc
-            match = getch.to_s
-            match << scan_until(/$/) unless eos?
-            tokens << [match, :delimiter]
-            tokens << [:close, state.type]
-            state = state.next_state
-            next
-          end
-
-          case match = getch
-
-          when state.delim
-            if state.paren
-              state.paren_depth -= 1
-              if state.paren_depth > 0
-                tokens << [match, :nesting_delimiter]
-                next
-              end
-            end
-            tokens << [match, :delimiter]
-            if state.type == :regexp and not eos?
-              modifiers = scan(/#{patterns::REGEXP_MODIFIERS}/ox)
-              tokens << [modifiers, :modifier] unless modifiers.empty?
-            end
-            tokens << [:close, state.type]
-            value_expected = false
-            state = state.next_state
-
-          when '\\'
-            if state.interpreted
-              if esc = scan(/ #{patterns::ESCAPE} /ox)
-                tokens << [match + esc, :char]
-              else
-                tokens << [match, :error]
-              end
-            else
-              case m = getch
-              when state.delim, '\\'
-                tokens << [match + m, :char]
-              when nil
-                tokens << [match, :error]
-              else
-                tokens << [match + m, :content]
-              end
-            end
-
-          when '#'
-            case peek(1)
-            when '{'
-              inline_block_stack << [state, depth, heredocs]
-              value_expected = true
-              state = :initial
-              depth = 1
-              tokens << [:open, :inline]
-              tokens << [match + getch, :inline_delimiter]
-            when '$', '@'
-              tokens << [match, :escape]
-              last_state = state  # scan one token as normal code, then return here
-              state = :initial
-            else
-              raise_inspect 'else-case # reached; #%p not handled' % peek(1), tokens
-            end
-
-          when state.paren
-            state.paren_depth += 1
-            tokens << [match, :nesting_delimiter]
-
-          when /#{patterns::REGEXP_SYMBOLS}/ox
-            tokens << [match, :function]
-
-          else
-            raise_inspect 'else-case " reached; %p not handled, state = %p' % [match, state], tokens
-
-          end
-          next
-# }}}
-        else
-# {{{
-          if match = scan(/[ \t\f]+/)
-            kind = :space
-            match << scan(/\s*/) unless eos? || heredocs
-            value_expected = true if match.index(?\n)
-            tokens << [match, kind]
-            next
-            
-          elsif match = scan(/\\?\n/)
-            kind = :space
-            if match == "\n"
-              value_expected = true
-              state = :initial if state == :undef_comma_expected
-            end
-            if heredocs
-              unscan  # heredoc scanning needs \n at start
-              state = heredocs.shift
-              tokens << [:open, state.type]
-              heredocs = nil if heredocs.empty?
-              next
-            else
-              match << scan(/\s*/) unless eos?
-            end
-            tokens << [match, kind]
-            next
-          
-          elsif bol? && match = scan(/\#!.*/)
-            tokens << [match, :doctype]
-            next
-            
-          elsif match = scan(/\#.*/) or
-            ( bol? and match = scan(/#{patterns::RUBYDOC_OR_DATA}/o) )
-              kind = :comment
-              tokens << [match, kind]
-              next
-
-          elsif state == :initial
-
-            # IDENTS #
-            if match = scan(unicode ? /#{patterns::METHOD_NAME}/uo :
-                                      /#{patterns::METHOD_NAME}/o)
-              if last_token_dot
-                kind = if match[/^[A-Z]/] and not match?(/\(/) then :constant else :ident end
-              else
-                kind = patterns::IDENT_KIND[match]
-                if kind == :ident and match[/^[A-Z]/] and not match[/[!?]$/] and not match?(/\(/)
-                  kind = :constant
-                elsif kind == :reserved
-                  state = patterns::DEF_NEW_STATE[match]
-                  value_expected = :set if patterns::KEYWORDS_EXPECTING_VALUE[match]
-                end
-              end
-              value_expected = :set if check(/#{patterns::VALUE_FOLLOWS}/o)
-            
-            elsif last_token_dot and match = scan(/#{patterns::METHOD_NAME_OPERATOR}|\(/o)
-              kind = :ident
-              value_expected = :set if check(/#{patterns::VALUE_FOLLOWS}/o)
-
-            # OPERATORS #
-            elsif not last_token_dot and match = scan(/ \.\.\.? | (?:\.|::)() | [,\(\)\[\]\{\}] | ==?=? /x)
-              if match !~ / [.\)\]\}] /x or match =~ /\.\.\.?/
-                value_expected = :set
-              end
-              last_token_dot = :set if self[1]
-              kind = :operator
-              unless inline_block_stack.empty?
-                case match
-                when '{'
-                  depth += 1
-                when '}'
-                  depth -= 1
-                  if depth == 0  # closing brace of inline block reached
-                    state, depth, heredocs = inline_block_stack.pop
-                    heredocs = nil if heredocs && heredocs.empty?
-                    tokens << [match, :inline_delimiter]
-                    kind = :inline
-                    match = :close
-                  end
-                end
-              end
-
-            elsif match = scan(/ ['"] /mx)
-              tokens << [:open, :string]
-              kind = :delimiter
-              state = patterns::StringState.new :string, match == '"', match  # important for streaming
-
-            elsif match = scan(/#{patterns::INSTANCE_VARIABLE}/o)
-              kind = :instance_variable
-
-            elsif value_expected and match = scan(/\//)
-              tokens << [:open, :regexp]
-              kind = :delimiter
-              interpreted = true
-              state = patterns::StringState.new :regexp, interpreted, match
-
-            # elsif match = scan(/[-+]?#{patterns::NUMERIC}/o)
-            elsif match = value_expected ? scan(/[-+]?#{patterns::NUMERIC}/o) : scan(/#{patterns::NUMERIC}/o)
-              kind = self[1] ? :float : :integer
-
-            elsif match = scan(/#{patterns::SYMBOL}/o)
-              case delim = match[1]
-              when ?', ?"
-                tokens << [:open, :symbol]
-                tokens << [':', :symbol]
-                match = delim.chr
-                kind = :delimiter
-                state = patterns::StringState.new :symbol, delim == ?", match
-              else
-                kind = :symbol
-              end
-
-            elsif match = scan(/ [-+!~^]=? | [*|&]{1,2}=? | >>? /x)
-              value_expected = :set
-              kind = :operator
-
-            elsif value_expected and match = scan(/#{patterns::HEREDOC_OPEN}/o)
-              indented = self[1] == '-'
-              quote = self[3]
-              delim = self[quote ? 4 : 2]
-              kind = patterns::QUOTE_TO_TYPE[quote]
-              tokens << [:open, kind]
-              tokens << [match, :delimiter]
-              match = :close
-              heredoc = patterns::StringState.new kind, quote != '\'', delim, (indented ? :indented : :linestart )
-              heredocs ||= []  # create heredocs if empty
-              heredocs << heredoc
-
-            elsif value_expected and match = scan(/#{patterns::FANCY_START_CORRECT}/o)
-              kind, interpreted = *patterns::FancyStringType.fetch(self[1]) do
-                raise_inspect 'Unknown fancy string: %%%p' % k, tokens
-              end
-              tokens << [:open, kind]
-              state = patterns::StringState.new kind, interpreted, self[2]
-              kind = :delimiter
-
-            elsif value_expected and match = scan(/#{patterns::CHARACTER}/o)
-              kind = :integer
-
-            elsif match = scan(/ [\/%]=? | <(?:<|=>?)? | [?:;] /x)
-              value_expected = :set
-              kind = :operator
-
-            elsif match = scan(/`/)
-              if last_token_dot
-                kind = :operator
-              else
-                tokens << [:open, :shell]
-                kind = :delimiter
-                state = patterns::StringState.new :shell, true, match
-              end
-
-            elsif match = scan(/#{patterns::GLOBAL_VARIABLE}/o)
-              kind = :global_variable
-
-            elsif match = scan(/#{patterns::CLASS_VARIABLE}/o)
-              kind = :class_variable
-
-            else
-              if !unicode
-                # check for unicode
-                debug, $DEBUG = $DEBUG, false
-                begin
-                  if check(/./mu).size > 1
-                    # seems like we should try again with unicode
-                    unicode = true
-                  end
-                rescue
-                  # bad unicode char; use getch
-                ensure
-                  $DEBUG = debug
-                end
-                next if unicode
-              end
-              kind = :error
-              match = getch
-
-            end
-
-          elsif state == :def_expected
-            state = :initial
-            if scan(/self\./)
-              tokens << ['self', :pre_constant]
-              tokens << ['.', :operator]
-            end
-            if match = scan(unicode ? /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/uo :
-                                      /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/o)
-              kind = :method
-            else
-              next
-            end
-
-          elsif state == :module_expected
-            if match = scan(/<</)
-              kind = :operator
-            else
-              state = :initial
-              if match = scan(/ (?:#{patterns::IDENT}::)* #{patterns::IDENT} /ox)
-                kind = :class
-              else
-                next
-              end
-            end
-
-          elsif state == :undef_expected
-            state = :undef_comma_expected
-            if match = scan(/#{patterns::METHOD_NAME_EX}/o)
-              kind = :method
-            elsif match = scan(/#{patterns::SYMBOL}/o)
-              case delim = match[1]
-              when ?', ?"
-                tokens << [:open, :symbol]
-                tokens << [':', :symbol]
-                match = delim.chr
-                kind = :delimiter
-                state = patterns::StringState.new :symbol, delim == ?", match
-                state.next_state = :undef_comma_expected
-              else
-                kind = :symbol
-              end
-            else
-              state = :initial
-              next
-            end
-
-          elsif state == :alias_expected
-            match = scan(unicode ? /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/uo :
-                                   /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/o)
-            
-            if match
-              tokens << [self[1], (self[1][0] == ?: ? :symbol : :method)]
-              tokens << [self[2], :space]
-              tokens << [self[3], (self[3][0] == ?: ? :symbol : :method)]
-            end
-            state = :initial
-            next
-
-          elsif state == :undef_comma_expected
-            if match = scan(/,/)
-              kind = :operator
-              state = :undef_expected
-            else
-              state = :initial
-              next
-            end
-
-          end
-# }}}
-          
-          unless kind == :error
-            value_expected = value_expected == :set
-            last_token_dot = last_token_dot == :set
-          end
-          
-          if $CODERAY_DEBUG and not kind
-            raise_inspect 'Error token %p in line %d' %
-              [[match, kind], line], tokens, state
-          end
-          raise_inspect 'Empty token', tokens unless match
-
-          tokens << [match, kind]
-
-          if last_state
-            state = last_state
-            last_state = nil
-          end
-        end
-      end
-
-      inline_block_stack << [state] if state.is_a? patterns::StringState
-      until inline_block_stack.empty?
-        this_block = inline_block_stack.pop
-        tokens << [:close, :inline] if this_block.size > 1
-        state = this_block.first
-        tokens << [:close, state.type]
-      end
-
-      tokens
-    end
-
-  end
-
-end
-end
-
-# vim:fdm=marker
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-10
-
-dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby
-http://redmine.rubyforge.org/svn
-
-
-
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-e93f8b46-1217-0410-a6f0-8f06a7374b81
-
-patterns.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-ae0aca82c4390ffcc5757c97c71bc8f3
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-6903
-
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/prop-base/patterns.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/.svn/text-base/patterns.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,238 +0,0 @@
-# encoding: utf-8
-module CodeRay
-module Scanners
-
-  module Ruby::Patterns  # :nodoc:
-
-    RESERVED_WORDS = %w[
-      and def end in or unless begin
-      defined? ensure module redo super until
-      BEGIN break do next rescue then
-      when END case else for retry
-      while alias class elsif if not return
-      undef yield
-    ]
-
-    DEF_KEYWORDS = %w[ def ]
-    UNDEF_KEYWORDS = %w[ undef ]
-    ALIAS_KEYWORDS = %w[ alias ]
-    MODULE_KEYWORDS = %w[class module]
-    DEF_NEW_STATE = WordList.new(:initial).
-      add(DEF_KEYWORDS, :def_expected).
-      add(UNDEF_KEYWORDS, :undef_expected).
-      add(ALIAS_KEYWORDS, :alias_expected).
-      add(MODULE_KEYWORDS, :module_expected)
-
-    PREDEFINED_CONSTANTS = %w[
-      nil true false self
-      DATA ARGV ARGF __FILE__ __LINE__
-    ]
-
-    IDENT_KIND = WordList.new(:ident).
-      add(RESERVED_WORDS, :reserved).
-      add(PREDEFINED_CONSTANTS, :pre_constant)
-
-    IDENT = 'ä'[/[[:alpha:]]/] == 'ä' ? /[[:alpha:]_][[:alnum:]_]*/ : /[^\W\d]\w*/
-
-    METHOD_NAME = / #{IDENT} [?!]? /ox
-    METHOD_NAME_OPERATOR = /
-      \*\*?           # multiplication and power
-      | [-+~]@?       # plus, minus, tilde with and without at sign
-      | [\/%&|^`]     # division, modulo or format strings, and, or, xor, system
-      | \[\]=?        # array getter and setter
-      | << | >>       # append or shift left, shift right
-      | <=?>? | >=?   # comparison, rocket operator
-      | ===? | =~     # simple equality, case equality, match
-      | ![~=@]?       # negation with and without at sign, not-equal and not-match
-    /ox
-    METHOD_NAME_EX = / #{IDENT} (?:[?!]|=(?!>))? | #{METHOD_NAME_OPERATOR} /ox
-    INSTANCE_VARIABLE = / @ #{IDENT} /ox
-    CLASS_VARIABLE = / @@ #{IDENT} /ox
-    OBJECT_VARIABLE = / @@? #{IDENT} /ox
-    GLOBAL_VARIABLE = / \$ (?: #{IDENT} | [1-9]\d* | 0\w* | [~&+`'=\/,;_.<>!@$?*":\\] | -[a-zA-Z_0-9] ) /ox
-    PREFIX_VARIABLE = / #{GLOBAL_VARIABLE} | #{OBJECT_VARIABLE} /ox
-    VARIABLE = / @?@? #{IDENT} | #{GLOBAL_VARIABLE} /ox
-
-    QUOTE_TO_TYPE = {
-      '`' => :shell,
-      '/'=> :regexp,
-    }
-    QUOTE_TO_TYPE.default = :string
-
-    REGEXP_MODIFIERS = /[mixounse]*/
-    REGEXP_SYMBOLS = /[|?*+(){}\[\].^$]/
-
-    DECIMAL = /\d+(?:_\d+)*/
-    OCTAL = /0_?[0-7]+(?:_[0-7]+)*/
-    HEXADECIMAL = /0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*/
-    BINARY = /0b[01]+(?:_[01]+)*/
-
-    EXPONENT = / [eE] [+-]? #{DECIMAL} /ox
-    FLOAT_SUFFIX = / #{EXPONENT} | \. #{DECIMAL} #{EXPONENT}? /ox
-    FLOAT_OR_INT = / #{DECIMAL} (?: #{FLOAT_SUFFIX} () )? /ox
-    NUMERIC = / (?: (?=0) (?: #{OCTAL} | #{HEXADECIMAL} | #{BINARY} ) | #{FLOAT_OR_INT} ) /ox
-
-    SYMBOL = /
-      :
-      (?:
-        #{METHOD_NAME_EX}
-      | #{PREFIX_VARIABLE}
-      | ['"]
-      )
-    /ox
-    METHOD_NAME_OR_SYMBOL = / #{METHOD_NAME_EX} | #{SYMBOL} /ox
-
-    SIMPLE_ESCAPE = /
-        [abefnrstv]
-      |  [0-7]{1,3}
-      | x[0-9A-Fa-f]{1,2}
-      | .?
-    /mx
-    
-    CONTROL_META_ESCAPE = /
-      (?: M-|C-|c )
-      (?: \\ (?: M-|C-|c ) )*
-      (?: [^\\] | \\ #{SIMPLE_ESCAPE} )?
-    /mox
-    
-    ESCAPE = /
-      #{CONTROL_META_ESCAPE} | #{SIMPLE_ESCAPE}
-    /mox
-    
-    CHARACTER = /
-      \?
-      (?:
-        [^\s\\]
-      | \\ #{ESCAPE}
-      )
-    /mox
-
-    # NOTE: This is not completely correct, but
-    # nobody needs heredoc delimiters ending with \n.
-    HEREDOC_OPEN = /
-      << (-)?              # $1 = float
-      (?:
-        ( [A-Za-z_0-9]+ )  # $2 = delim
-      |
-        ( ["'`\/] )        # $3 = quote, type
-        ( [^\n]*? ) \3     # $4 = delim
-      )
-    /mx
-
-    RUBYDOC = /
-      =begin (?!\S)
-      .*?
-      (?: \Z | ^=end (?!\S) [^\n]* )
-    /mx
-
-    DATA = /
-      __END__$
-      .*?
-      (?: \Z | (?=^\#CODE) )
-    /mx
-    
-    # Checks for a valid value to follow. This enables
-    # value_expected in method calls without parentheses.
-    VALUE_FOLLOWS = /
-      (?>[ \t\f\v]+)
-      (?:
-        [%\/][^\s=]
-      | <<-?\S
-      | [-+] \d
-      | #{CHARACTER}
-      )
-    /x
-    KEYWORDS_EXPECTING_VALUE = WordList.new.add(%w[
-      and end in or unless begin
-      defined? ensure redo super until
-      break do next rescue then
-      when case else for retry
-      while elsif if not return
-      yield
-    ])
-
-    RUBYDOC_OR_DATA = / #{RUBYDOC} | #{DATA} /xo
-
-    RDOC_DATA_START = / ^=begin (?!\S) | ^__END__$ /x
-
-    FANCY_START_CORRECT = / % ( [qQwWxsr] | (?![a-zA-Z0-9]) ) ([^a-zA-Z0-9]) /mx
-
-    FancyStringType = {
-      'q' => [:string, false],
-      'Q' => [:string, true],
-      'r' => [:regexp, true],
-      's' => [:symbol, false],
-      'x' => [:shell, true]
-    }
-    FancyStringType['w'] = FancyStringType['q']
-    FancyStringType['W'] = FancyStringType[''] = FancyStringType['Q']
-
-    class StringState < Struct.new :type, :interpreted, :delim, :heredoc,
-      :paren, :paren_depth, :pattern, :next_state
-
-      CLOSING_PAREN = Hash[ *%w[
-        ( )
-        [ ]
-        < >
-        { }
-      ] ]
-
-      CLOSING_PAREN.each { |k,v| k.freeze; v.freeze }  # debug, if I try to change it with <<
-      OPENING_PAREN = CLOSING_PAREN.invert
-
-      STRING_PATTERN = Hash.new do |h, k|
-        delim, interpreted = *k
-        delim_pattern = Regexp.escape(delim.dup)  # dup: workaround for old Ruby
-        if closing_paren = CLOSING_PAREN[delim]
-          delim_pattern = delim_pattern[0..-1] if defined? JRUBY_VERSION  # JRuby fix
-          delim_pattern << Regexp.escape(closing_paren)
-        end
-        delim_pattern << '\\\\' unless delim == '\\'
-        
-        special_escapes =
-          case interpreted
-          when :regexp_symbols
-            '| ' + REGEXP_SYMBOLS.source
-          when :words
-            '| \s'
-          end
-        
-        h[k] =
-          if interpreted and not delim == '#'
-            / (?= [#{delim_pattern}] | \# [{$@] #{special_escapes} ) /mx
-          else
-            / (?= [#{delim_pattern}] #{special_escapes} ) /mx
-          end
-      end
-
-      HEREDOC_PATTERN = Hash.new do |h, k|
-        delim, interpreted, indented = *k
-        delim_pattern = Regexp.escape(delim.dup)  # dup: workaround for old Ruby
-        delim_pattern = / \n #{ '(?>[\ \t]*)' if indented } #{ Regexp.new delim_pattern } $ /x
-        h[k] =
-          if interpreted
-            / (?= #{delim_pattern}() | \\ | \# [{$@] ) /mx  # $1 set == end of heredoc
-          else
-            / (?= #{delim_pattern}() | \\ ) /mx
-          end
-      end
-
-      def initialize kind, interpreted, delim, heredoc = false
-        if heredoc
-          pattern = HEREDOC_PATTERN[ [delim, interpreted, heredoc == :indented] ]
-          delim = nil
-        else
-          pattern = STRING_PATTERN[ [delim, interpreted] ]
-          if paren = CLOSING_PAREN[delim]
-            delim, paren = paren, delim
-            paren_depth = 1
-          end
-        end
-        super kind, interpreted, delim, heredoc, paren, paren_depth, pattern, :initial
-      end
-    end unless defined? StringState
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/ruby/patterns.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,238 +0,0 @@
-# encoding: utf-8
-module CodeRay
-module Scanners
-
-  module Ruby::Patterns  # :nodoc:
-
-    RESERVED_WORDS = %w[
-      and def end in or unless begin
-      defined? ensure module redo super until
-      BEGIN break do next rescue then
-      when END case else for retry
-      while alias class elsif if not return
-      undef yield
-    ]
-
-    DEF_KEYWORDS = %w[ def ]
-    UNDEF_KEYWORDS = %w[ undef ]
-    ALIAS_KEYWORDS = %w[ alias ]
-    MODULE_KEYWORDS = %w[class module]
-    DEF_NEW_STATE = WordList.new(:initial).
-      add(DEF_KEYWORDS, :def_expected).
-      add(UNDEF_KEYWORDS, :undef_expected).
-      add(ALIAS_KEYWORDS, :alias_expected).
-      add(MODULE_KEYWORDS, :module_expected)
-
-    PREDEFINED_CONSTANTS = %w[
-      nil true false self
-      DATA ARGV ARGF __FILE__ __LINE__
-    ]
-
-    IDENT_KIND = WordList.new(:ident).
-      add(RESERVED_WORDS, :reserved).
-      add(PREDEFINED_CONSTANTS, :pre_constant)
-
-    IDENT = 'ä'[/[[:alpha:]]/] == 'ä' ? /[[:alpha:]_][[:alnum:]_]*/ : /[^\W\d]\w*/
-
-    METHOD_NAME = / #{IDENT} [?!]? /ox
-    METHOD_NAME_OPERATOR = /
-      \*\*?           # multiplication and power
-      | [-+~]@?       # plus, minus, tilde with and without at sign
-      | [\/%&|^`]     # division, modulo or format strings, and, or, xor, system
-      | \[\]=?        # array getter and setter
-      | << | >>       # append or shift left, shift right
-      | <=?>? | >=?   # comparison, rocket operator
-      | ===? | =~     # simple equality, case equality, match
-      | ![~=@]?       # negation with and without at sign, not-equal and not-match
-    /ox
-    METHOD_NAME_EX = / #{IDENT} (?:[?!]|=(?!>))? | #{METHOD_NAME_OPERATOR} /ox
-    INSTANCE_VARIABLE = / @ #{IDENT} /ox
-    CLASS_VARIABLE = / @@ #{IDENT} /ox
-    OBJECT_VARIABLE = / @@? #{IDENT} /ox
-    GLOBAL_VARIABLE = / \$ (?: #{IDENT} | [1-9]\d* | 0\w* | [~&+`'=\/,;_.<>!@$?*":\\] | -[a-zA-Z_0-9] ) /ox
-    PREFIX_VARIABLE = / #{GLOBAL_VARIABLE} | #{OBJECT_VARIABLE} /ox
-    VARIABLE = / @?@? #{IDENT} | #{GLOBAL_VARIABLE} /ox
-
-    QUOTE_TO_TYPE = {
-      '`' => :shell,
-      '/'=> :regexp,
-    }
-    QUOTE_TO_TYPE.default = :string
-
-    REGEXP_MODIFIERS = /[mixounse]*/
-    REGEXP_SYMBOLS = /[|?*+(){}\[\].^$]/
-
-    DECIMAL = /\d+(?:_\d+)*/
-    OCTAL = /0_?[0-7]+(?:_[0-7]+)*/
-    HEXADECIMAL = /0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*/
-    BINARY = /0b[01]+(?:_[01]+)*/
-
-    EXPONENT = / [eE] [+-]? #{DECIMAL} /ox
-    FLOAT_SUFFIX = / #{EXPONENT} | \. #{DECIMAL} #{EXPONENT}? /ox
-    FLOAT_OR_INT = / #{DECIMAL} (?: #{FLOAT_SUFFIX} () )? /ox
-    NUMERIC = / (?: (?=0) (?: #{OCTAL} | #{HEXADECIMAL} | #{BINARY} ) | #{FLOAT_OR_INT} ) /ox
-
-    SYMBOL = /
-      :
-      (?:
-        #{METHOD_NAME_EX}
-      | #{PREFIX_VARIABLE}
-      | ['"]
-      )
-    /ox
-    METHOD_NAME_OR_SYMBOL = / #{METHOD_NAME_EX} | #{SYMBOL} /ox
-
-    SIMPLE_ESCAPE = /
-        [abefnrstv]
-      |  [0-7]{1,3}
-      | x[0-9A-Fa-f]{1,2}
-      | .?
-    /mx
-    
-    CONTROL_META_ESCAPE = /
-      (?: M-|C-|c )
-      (?: \\ (?: M-|C-|c ) )*
-      (?: [^\\] | \\ #{SIMPLE_ESCAPE} )?
-    /mox
-    
-    ESCAPE = /
-      #{CONTROL_META_ESCAPE} | #{SIMPLE_ESCAPE}
-    /mox
-    
-    CHARACTER = /
-      \?
-      (?:
-        [^\s\\]
-      | \\ #{ESCAPE}
-      )
-    /mox
-
-    # NOTE: This is not completely correct, but
-    # nobody needs heredoc delimiters ending with \n.
-    HEREDOC_OPEN = /
-      << (-)?              # $1 = float
-      (?:
-        ( [A-Za-z_0-9]+ )  # $2 = delim
-      |
-        ( ["'`\/] )        # $3 = quote, type
-        ( [^\n]*? ) \3     # $4 = delim
-      )
-    /mx
-
-    RUBYDOC = /
-      =begin (?!\S)
-      .*?
-      (?: \Z | ^=end (?!\S) [^\n]* )
-    /mx
-
-    DATA = /
-      __END__$
-      .*?
-      (?: \Z | (?=^\#CODE) )
-    /mx
-    
-    # Checks for a valid value to follow. This enables
-    # value_expected in method calls without parentheses.
-    VALUE_FOLLOWS = /
-      (?>[ \t\f\v]+)
-      (?:
-        [%\/][^\s=]
-      | <<-?\S
-      | [-+] \d
-      | #{CHARACTER}
-      )
-    /x
-    KEYWORDS_EXPECTING_VALUE = WordList.new.add(%w[
-      and end in or unless begin
-      defined? ensure redo super until
-      break do next rescue then
-      when case else for retry
-      while elsif if not return
-      yield
-    ])
-
-    RUBYDOC_OR_DATA = / #{RUBYDOC} | #{DATA} /xo
-
-    RDOC_DATA_START = / ^=begin (?!\S) | ^__END__$ /x
-
-    FANCY_START_CORRECT = / % ( [qQwWxsr] | (?![a-zA-Z0-9]) ) ([^a-zA-Z0-9]) /mx
-
-    FancyStringType = {
-      'q' => [:string, false],
-      'Q' => [:string, true],
-      'r' => [:regexp, true],
-      's' => [:symbol, false],
-      'x' => [:shell, true]
-    }
-    FancyStringType['w'] = FancyStringType['q']
-    FancyStringType['W'] = FancyStringType[''] = FancyStringType['Q']
-
-    class StringState < Struct.new :type, :interpreted, :delim, :heredoc,
-      :paren, :paren_depth, :pattern, :next_state
-
-      CLOSING_PAREN = Hash[ *%w[
-        ( )
-        [ ]
-        < >
-        { }
-      ] ]
-
-      CLOSING_PAREN.each { |k,v| k.freeze; v.freeze }  # debug, if I try to change it with <<
-      OPENING_PAREN = CLOSING_PAREN.invert
-
-      STRING_PATTERN = Hash.new do |h, k|
-        delim, interpreted = *k
-        delim_pattern = Regexp.escape(delim.dup)  # dup: workaround for old Ruby
-        if closing_paren = CLOSING_PAREN[delim]
-          delim_pattern = delim_pattern[0..-1] if defined? JRUBY_VERSION  # JRuby fix
-          delim_pattern << Regexp.escape(closing_paren)
-        end
-        delim_pattern << '\\\\' unless delim == '\\'
-        
-        special_escapes =
-          case interpreted
-          when :regexp_symbols
-            '| ' + REGEXP_SYMBOLS.source
-          when :words
-            '| \s'
-          end
-        
-        h[k] =
-          if interpreted and not delim == '#'
-            / (?= [#{delim_pattern}] | \# [{$@] #{special_escapes} ) /mx
-          else
-            / (?= [#{delim_pattern}] #{special_escapes} ) /mx
-          end
-      end
-
-      HEREDOC_PATTERN = Hash.new do |h, k|
-        delim, interpreted, indented = *k
-        delim_pattern = Regexp.escape(delim.dup)  # dup: workaround for old Ruby
-        delim_pattern = / \n #{ '(?>[\ \t]*)' if indented } #{ Regexp.new delim_pattern } $ /x
-        h[k] =
-          if interpreted
-            / (?= #{delim_pattern}() | \\ | \# [{$@] ) /mx  # $1 set == end of heredoc
-          else
-            / (?= #{delim_pattern}() | \\ ) /mx
-          end
-      end
-
-      def initialize kind, interpreted, delim, heredoc = false
-        if heredoc
-          pattern = HEREDOC_PATTERN[ [delim, interpreted, heredoc == :indented] ]
-          delim = nil
-        else
-          pattern = STRING_PATTERN[ [delim, interpreted] ]
-          if paren = CLOSING_PAREN[delim]
-            delim, paren = paren, delim
-            paren_depth = 1
-          end
-        end
-        super kind, interpreted, delim, heredoc, paren, paren_depth, pattern, :initial
-      end
-    end unless defined? StringState
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/scheme.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-module CodeRay
-  module Scanners
-
-    # Scheme scanner for CodeRay (by closure).
-    # Thanks to murphy for putting CodeRay into public.
-    class Scheme < Scanner
-      
-      # TODO: function defs
-      # TODO: built-in functions
-      
-      register_for :scheme
-      file_extension 'scm'
-
-      CORE_FORMS = %w[
-        lambda let let* letrec syntax-case define-syntax let-syntax
-        letrec-syntax begin define quote if or and cond case do delay
-        quasiquote set! cons force call-with-current-continuation call/cc
-      ]
-
-      IDENT_KIND = CaseIgnoringWordList.new(:ident).
-        add(CORE_FORMS, :reserved)
-      
-      #IDENTIFIER_INITIAL = /[a-z!@\$%&\*\/\:<=>\?~_\^]/i
-      #IDENTIFIER_SUBSEQUENT = /#{IDENTIFIER_INITIAL}|\d|\.|\+|-/
-      #IDENTIFIER = /#{IDENTIFIER_INITIAL}#{IDENTIFIER_SUBSEQUENT}*|\+|-|\.{3}/
-      IDENTIFIER = /[a-zA-Z!@$%&*\/:<=>?~_^][\w!@$%&*\/:<=>?~^.+\-]*|[+-]|\.\.\./
-      DIGIT = /\d/
-      DIGIT10 = DIGIT
-      DIGIT16 = /[0-9a-f]/i
-      DIGIT8 = /[0-7]/
-      DIGIT2 = /[01]/
-      RADIX16 = /\#x/i
-      RADIX8 = /\#o/i
-      RADIX2 = /\#b/i
-      RADIX10 = /\#d/i
-      EXACTNESS = /#i|#e/i
-      SIGN = /[\+-]?/
-      EXP_MARK = /[esfdl]/i
-      EXP = /#{EXP_MARK}#{SIGN}#{DIGIT}+/
-      SUFFIX = /#{EXP}?/
-      PREFIX10 = /#{RADIX10}?#{EXACTNESS}?|#{EXACTNESS}?#{RADIX10}?/
-      PREFIX16 = /#{RADIX16}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX16}/
-      PREFIX8 = /#{RADIX8}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX8}/
-      PREFIX2 = /#{RADIX2}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX2}/
-      UINT10 = /#{DIGIT10}+#*/
-      UINT16 = /#{DIGIT16}+#*/
-      UINT8 = /#{DIGIT8}+#*/
-      UINT2 = /#{DIGIT2}+#*/
-      DECIMAL = /#{DIGIT10}+#+\.#*#{SUFFIX}|#{DIGIT10}+\.#{DIGIT10}*#*#{SUFFIX}|\.#{DIGIT10}+#*#{SUFFIX}|#{UINT10}#{EXP}/
-      UREAL10 = /#{UINT10}\/#{UINT10}|#{DECIMAL}|#{UINT10}/
-      UREAL16 = /#{UINT16}\/#{UINT16}|#{UINT16}/
-      UREAL8 = /#{UINT8}\/#{UINT8}|#{UINT8}/
-      UREAL2 = /#{UINT2}\/#{UINT2}|#{UINT2}/
-      REAL10 = /#{SIGN}#{UREAL10}/
-      REAL16 = /#{SIGN}#{UREAL16}/
-      REAL8 = /#{SIGN}#{UREAL8}/
-      REAL2 = /#{SIGN}#{UREAL2}/
-      IMAG10 = /i|#{UREAL10}i/
-      IMAG16 = /i|#{UREAL16}i/
-      IMAG8 = /i|#{UREAL8}i/
-      IMAG2 = /i|#{UREAL2}i/
-      COMPLEX10 = /#{REAL10}@#{REAL10}|#{REAL10}\+#{IMAG10}|#{REAL10}-#{IMAG10}|\+#{IMAG10}|-#{IMAG10}|#{REAL10}/
-      COMPLEX16 = /#{REAL16}@#{REAL16}|#{REAL16}\+#{IMAG16}|#{REAL16}-#{IMAG16}|\+#{IMAG16}|-#{IMAG16}|#{REAL16}/
-      COMPLEX8 = /#{REAL8}@#{REAL8}|#{REAL8}\+#{IMAG8}|#{REAL8}-#{IMAG8}|\+#{IMAG8}|-#{IMAG8}|#{REAL8}/
-      COMPLEX2 = /#{REAL2}@#{REAL2}|#{REAL2}\+#{IMAG2}|#{REAL2}-#{IMAG2}|\+#{IMAG2}|-#{IMAG2}|#{REAL2}/
-      NUM10 = /#{PREFIX10}?#{COMPLEX10}/
-      NUM16 = /#{PREFIX16}#{COMPLEX16}/
-      NUM8 = /#{PREFIX8}#{COMPLEX8}/
-      NUM2 = /#{PREFIX2}#{COMPLEX2}/
-      NUM = /#{NUM10}|#{NUM16}|#{NUM8}|#{NUM2}/
-    
-    private
-      def scan_tokens tokens,options
-        
-        state = :initial
-        ident_kind = IDENT_KIND
-        
-        until eos?
-          kind = match = nil
-          
-          case state
-          when :initial
-            if scan(/ \s+ | \\\n /x)
-              kind = :space
-            elsif scan(/['\(\[\)\]]|#\(/)
-              kind = :operator_fat
-            elsif scan(/;.*/)
-              kind = :comment
-            elsif scan(/#\\(?:newline|space|.?)/)
-              kind = :char
-            elsif scan(/#[ft]/)
-              kind = :pre_constant
-            elsif scan(/#{IDENTIFIER}/o)
-              kind = ident_kind[matched]
-            elsif scan(/\./)
-              kind = :operator
-            elsif scan(/"/)
-              tokens << [:open, :string]
-              state = :string
-              tokens << ['"', :delimiter]
-              next
-            elsif scan(/#{NUM}/o) and not matched.empty?
-              kind = :integer
-            elsif getch
-              kind = :error
-            end
-            
-          when :string
-            if scan(/[^"\\]+/) or scan(/\\.?/)
-              kind = :content
-            elsif scan(/"/)
-              tokens << ['"', :delimiter]
-              tokens << [:close, :string]
-              state = :initial
-              next
-            else
-              raise_inspect "else case \" reached; %p not handled." % peek(1),
-                tokens, state
-            end
-            
-          else
-            raise "else case reached"
-          end
-          
-          match ||= matched
-          if $CODERAY_DEBUG and not kind
-            raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens
-          end
-          raise_inspect 'Empty token', tokens, state unless match
-          
-          tokens << [match, kind]
-          
-        end  # until eos
-        
-        if state == :string
-          tokens << [:close, :string]
-        end
-        
-        tokens
-        
-      end #scan_tokens
-    end #class
-  end #module scanners
-end #module coderay
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/sql.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,162 +0,0 @@
-module CodeRay module Scanners
-  
-  # by Josh Goebel
-  class SQL < Scanner
-
-    register_for :sql
-    
-    RESERVED_WORDS = %w(
-      create database table index trigger drop primary key set select
-      insert update delete replace into
-      on from values before and or if exists case when
-      then else as group order by avg where
-      join inner outer union engine not
-      like end using collate show columns begin
-    )
-    
-    PREDEFINED_TYPES = %w(
-      char varchar enum binary text tinytext mediumtext
-      longtext blob tinyblob mediumblob longblob timestamp
-      date time datetime year double decimal float int
-      integer tinyint mediumint bigint smallint unsigned bit
-      bool boolean hex bin oct
-    )
-    
-    PREDEFINED_FUNCTIONS = %w( sum cast abs pi count min max avg )
-    
-    DIRECTIVES = %w( auto_increment unique default charset )
-
-    PREDEFINED_CONSTANTS = %w( null true false )
-    
-    IDENT_KIND = CaseIgnoringWordList.new(:ident).
-      add(RESERVED_WORDS, :reserved).
-      add(PREDEFINED_TYPES, :pre_type).
-      add(PREDEFINED_CONSTANTS, :pre_constant).
-      add(PREDEFINED_FUNCTIONS, :predefined).
-      add(DIRECTIVES, :directive)
-    
-    ESCAPE = / [rbfntv\n\\\/'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} | . /mx
-    UNICODE_ESCAPE =  / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
-    
-    STRING_PREFIXES = /[xnb]|_\w+/i
-    
-    def scan_tokens tokens, options
-      
-      state = :initial
-      string_type = nil
-      string_content = ''
-      
-      until eos?
-        
-        kind = nil
-        match = nil
-        
-        if state == :initial
-          
-          if scan(/ \s+ | \\\n /x)
-            kind = :space
-          
-          elsif scan(/^(?:--\s?|#).*/)
-            kind = :comment
-            
-          elsif scan(%r! /\* (?: .*? \*/ | .* ) !mx)
-            kind = :comment
-            
-          elsif scan(/ [-+*\/=<>;,!&^|()\[\]{}~%] | \.(?!\d) /x)
-            kind = :operator
-            
-          elsif scan(/(#{STRING_PREFIXES})?([`"'])/o)
-            prefix = self[1]
-            string_type = self[2]
-            tokens << [:open, :string]
-            tokens << [prefix, :modifier] if prefix
-            match = string_type
-            state = :string
-            kind = :delimiter
-            
-          elsif match = scan(/ @? [A-Za-z_][A-Za-z_0-9]* /x)
-            kind = match[0] == ?@ ? :variable : IDENT_KIND[match.downcase]
-            
-          elsif scan(/0[xX][0-9A-Fa-f]+/)
-            kind = :hex
-            
-          elsif scan(/0[0-7]+(?![89.eEfF])/)
-            kind = :oct
-            
-          elsif scan(/(?>\d+)(?![.eEfF])/)
-            kind = :integer
-            
-          elsif scan(/\d[fF]|\d*\.\d+(?:[eE][+-]?\d+)?|\d+[eE][+-]?\d+/)
-            kind = :float
-            
-          else
-            getch
-            kind = :error
-            
-          end
-          
-        elsif state == :string
-          if match = scan(/[^\\"'`]+/)
-            string_content << match
-            next
-          elsif match = scan(/["'`]/)
-            if string_type == match
-              if peek(1) == string_type  # doubling means escape
-                string_content << string_type << getch
-                next
-              end
-              unless string_content.empty?
-                tokens << [string_content, :content]
-                string_content = ''
-              end
-              tokens << [matched, :delimiter]
-              tokens << [:close, :string]
-              state = :initial
-              string_type = nil
-              next
-            else
-              string_content << match
-            end
-            next
-          elsif scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
-            unless string_content.empty?
-              tokens << [string_content, :content]
-              string_content = ''
-            end
-            kind = :char
-          elsif match = scan(/ \\ . /mox)
-            string_content << match
-            next
-          elsif scan(/ \\ | $ /x)
-            unless string_content.empty?
-              tokens << [string_content, :content]
-              string_content = ''
-            end
-            kind = :error
-            state = :initial
-          else
-            raise "else case \" reached; %p not handled." % peek(1), tokens
-          end
-          
-        else
-          raise 'else-case reached', tokens
-          
-        end
-        
-        match ||= matched
-        unless kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens, state
-        end
-        raise_inspect 'Empty token', tokens unless match
-        
-        tokens << [match, kind]
-        
-      end
-      tokens
-      
-    end
-    
-  end
-  
-end end
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/xml.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-module CodeRay
-module Scanners
-
-  load :html
-
-  # XML Scanner
-  #
-  # Currently this is the same scanner as Scanners::HTML.
-  class XML < HTML
-
-    register_for :xml
-    file_extension 'xml'
-    
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/scanners/yaml.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,140 +0,0 @@
-module CodeRay
-module Scanners
-  
-  # YAML Scanner
-  #
-  # Based on the YAML scanner from Syntax by Jamis Buck.
-  class YAML < Scanner
-    
-    register_for :yaml
-    file_extension 'yml'
-    
-    KINDS_NOT_LOC = :all
-    
-    def scan_tokens tokens, options
-      
-      value_expected = nil
-      state = :initial
-      key_indent = indent = 0
-      
-      until eos?
-        
-        kind = nil
-        match = nil
-        key_indent = nil if bol?
-        
-        if match = scan(/ +[\t ]*/)
-          kind = :space
-          
-        elsif match = scan(/\n+/)
-          kind = :space
-          state = :initial if match.index(?\n)
-          
-        elsif match = scan(/#.*/)
-          kind = :comment
-          
-        elsif bol? and case
-          when match = scan(/---|\.\.\./)
-            tokens << [:open, :head]
-            tokens << [match, :head]
-            tokens << [:close, :head]
-            next
-          when match = scan(/%.*/)
-            tokens << [match, :doctype]
-            next
-          end
-        
-        elsif state == :value and case
-          when !check(/(?:"[^"]*")(?=: |:$)/) && scan(/"/)
-            tokens << [:open, :string]
-            tokens << [matched, :delimiter]
-            tokens << [matched, :content] if scan(/ [^"\\]* (?: \\. [^"\\]* )* /mx)
-            tokens << [matched, :delimiter] if scan(/"/)
-            tokens << [:close, :string]
-            next
-          when match = scan(/[|>][-+]?/)
-            tokens << [:open, :string]
-            tokens << [match, :delimiter]
-            string_indent = key_indent || column(pos - match.size - 1)
-            tokens << [matched, :content] if scan(/(?:\n+ {#{string_indent + 1}}.*)+/)
-            tokens << [:close, :string]
-            next
-          when match = scan(/(?![!"*&]).+?(?=$|\s+#)/)
-            tokens << [match, :string]
-            string_indent = key_indent || column(pos - match.size - 1)
-            tokens << [matched, :string] if scan(/(?:\n+ {#{string_indent + 1}}.*)+/)
-            next
-          end
-          
-        elsif case
-          when match = scan(/[-:](?= |$)/)
-            state = :value if state == :colon && (match == ':' || match == '-')
-            state = :value if state == :initial && match == '-'
-            kind = :operator
-          when match = scan(/[,{}\[\]]/)
-            kind = :operator
-          when state == :initial && match = scan(/[\w.() ]*\S(?=: |:$)/)
-            kind = :key
-            key_indent = column(pos - match.size - 1)
-            # tokens << [key_indent.inspect, :debug]
-            state = :colon
-          when match = scan(/(?:"[^"\n]*"|'[^'\n]*')(?=: |:$)/)
-            tokens << [:open, :key]
-            tokens << [match[0,1], :delimiter]
-            tokens << [match[1..-2], :content]
-            tokens << [match[-1,1], :delimiter]
-            tokens << [:close, :key]
-            key_indent = column(pos - match.size - 1)
-            # tokens << [key_indent.inspect, :debug]
-            state = :colon
-            next
-          when scan(/(![\w\/]+)(:([\w:]+))?/)
-            tokens << [self[1], :type]
-            if self[2]
-              tokens << [':', :operator]
-              tokens << [self[3], :class]
-            end
-            next
-          when scan(/&\S+/)
-            kind = :variable
-          when scan(/\*\w+/)
-            kind = :global_variable
-          when scan(/<</)
-            kind = :class_variable
-          when scan(/\d\d:\d\d:\d\d/)
-            kind = :oct
-          when scan(/\d\d\d\d-\d\d-\d\d\s\d\d:\d\d:\d\d(\.\d+)? [-+]\d\d:\d\d/)
-            kind = :oct
-          when scan(/:\w+/)
-            kind = :symbol
-          when scan(/[^:\s]+(:(?! |$)[^:\s]*)* .*/)
-            kind = :error
-          when scan(/[^:\s]+(:(?! |$)[^:\s]*)*/)
-            kind = :error
-          end
-          
-        else
-          getch
-          kind = :error
-          
-        end
-        
-        match ||= matched
-        
-        if $CODERAY_DEBUG and not kind
-          raise_inspect 'Error token %p in line %d' %
-            [[match, kind], line], tokens, state
-        end
-        raise_inspect 'Empty token', tokens, state unless match
-        
-        tokens << [match, kind]
-        
-      end
-      
-      tokens
-    end
-    
-  end
-  
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/style.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-module CodeRay
-
-  # This module holds the Style class and its subclasses.
-  #
-  # See Plugin.
-  module Styles
-    extend PluginHost
-    plugin_path File.dirname(__FILE__), 'styles'
-
-    class Style
-      extend Plugin
-      plugin_host Styles
-
-      DEFAULT_OPTIONS = { }
-
-    end
-
-  end
-
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-10
-
-dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/coderay-0.9.2/lib/coderay/styles
-http://redmine.rubyforge.org/svn
-
-
-
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-e93f8b46-1217-0410-a6f0-8f06a7374b81
-
-cycnus.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-e8d4af106543cf30dcc95fd942044e63
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3759
-
-murphy.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-7c7e3c4f8f845a59359649b3221689a7
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-3259
-
-_map.rb
-file
-
-
-
-
-2010-08-12T15:03:27.000000Z
-9b92a72b99db4496e76665edb7b38c00
-2010-03-16T20:29:12.319937Z
-3592
-jplang
-has-props
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-57
-
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/prop-base/_map.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/prop-base/cycnus.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/prop-base/murphy.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-K 13
-svn:eol-style
-V 6
-native
-END
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/text-base/_map.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-module CodeRay
-module Styles
-
-  default :cycnus
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/text-base/cycnus.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-module CodeRay
-module Styles
-
-  class Cycnus < Style
-
-    register_for :cycnus
-
-    code_background = '#f8f8f8'
-    numbers_background = '#def'
-    border_color = 'silver'
-    normal_color = '#000'
-
-    CSS_MAIN_STYLES = <<-MAIN
-.CodeRay {
-  background-color: #{code_background};
-  border: 1px solid #{border_color};
-  font-family: 'Courier New', 'Terminal', monospace;
-  color: #{normal_color};
-}
-.CodeRay pre { margin: 0px }
-
-div.CodeRay { }
-
-span.CodeRay { white-space: pre; border: 0px; padding: 2px }
-
-table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px }
-table.CodeRay td { padding: 2px 4px; vertical-align: top }
-
-.CodeRay .line_numbers, .CodeRay .no {
-  background-color: #{numbers_background};
-  color: gray;
-  text-align: right;
-}
-.CodeRay .line_numbers tt { font-weight: bold }
-.CodeRay .line_numbers .highlighted { color: red }
-.CodeRay .no { padding: 0px 4px }
-.CodeRay .code { width: 100% }
-
-ol.CodeRay { font-size: 10pt }
-ol.CodeRay li { white-space: pre }
-
-.CodeRay .code pre { overflow: auto }
-    MAIN
-
-    TOKEN_COLORS = <<-'TOKENS'
-.debug { color:white ! important; background:blue ! important; }
-
-.af { color:#00C }
-.an { color:#007 }
-.at { color:#f08 }
-.av { color:#700 }
-.aw { color:#C00 }
-.bi { color:#509; font-weight:bold }
-.c  { color:#888; }
-
-.ch { color:#04D }
-.ch .k { color:#04D }
-.ch .dl { color:#039 }
-
-.cl { color:#B06; font-weight:bold }
-.cm { color:#A08; font-weight:bold }
-.co { color:#036; font-weight:bold }
-.cr { color:#0A0 }
-.cv { color:#369 }
-.de { color:#B0B; }
-.df { color:#099; font-weight:bold }
-.di { color:#088; font-weight:bold }
-.dl { color:black }
-.do { color:#970 }
-.dt { color:#34b }
-.ds { color:#D42; font-weight:bold }
-.e  { color:#666; font-weight:bold }
-.en { color:#800; font-weight:bold }
-.er { color:#F00; background-color:#FAA }
-.ex { color:#C00; font-weight:bold }
-.fl { color:#60E; font-weight:bold }
-.fu { color:#06B; font-weight:bold }
-.gv { color:#d70; font-weight:bold }
-.hx { color:#058; font-weight:bold }
-.i  { color:#00D; font-weight:bold }
-.ic { color:#B44; font-weight:bold }
-
-.il { background: #ddd; color: black }
-.il .il { background: #ccc }
-.il .il .il { background: #bbb }
-.il .idl { background: #ddd; font-weight: bold; color: #666 }
-.idl { background-color: #bbb; font-weight: bold; color: #666; }
-
-.im { color:#f00; }
-.in { color:#B2B; font-weight:bold }
-.iv { color:#33B }
-.la { color:#970; font-weight:bold }
-.lv { color:#963 }
-.oc { color:#40E; font-weight:bold }
-.of { color:#000; font-weight:bold }
-.op { }
-.pc { color:#038; font-weight:bold }
-.pd { color:#369; font-weight:bold }
-.pp { color:#579; }
-.ps { color:#00C; font-weight:bold }
-.pt { color:#074; font-weight:bold }
-.r, .kw  { color:#080; font-weight:bold }
-
-.ke { color: #808; }
-.ke .dl { color: #606; }
-.ke .ch { color: #80f; }
-.vl { color: #088; }
-
-.rx { background-color:#fff0ff }
-.rx .k { color:#808 }
-.rx .dl { color:#404 }
-.rx .mod { color:#C2C }
-.rx .fu  { color:#404; font-weight: bold }
-
-.s { background-color:#fff0f0; color: #D20; }
-.s .s { background-color:#ffe0e0 }
-.s .s  .s { background-color:#ffd0d0 }
-.s .k { }
-.s .ch { color: #b0b; }
-.s .dl { color: #710; }
-
-.sh { background-color:#f0fff0; color:#2B2 }
-.sh .k { }
-.sh .dl { color:#161 }
-
-.sy { color:#A60 }
-.sy .k { color:#A60 }
-.sy .dl { color:#630 }
-
-.ta { color:#070 }
-.tf { color:#070; font-weight:bold }
-.ts { color:#D70; font-weight:bold }
-.ty { color:#339; font-weight:bold }
-.v  { color:#036 }
-.xt { color:#444 }
-
-.ins { background: #afa; }
-.del { background: #faa; }
-.chg { color: #aaf; background: #007; }
-.head { color: #f8f; background: #505 }
-
-.ins .ins { color: #080; font-weight:bold }
-.del .del { color: #800; font-weight:bold }
-.chg .chg { color: #66f; }
-.head .head { color: #f4f; }
-    TOKENS
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/styles/.svn/text-base/murphy.rb.svn-base	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-module CodeRay
-module Styles
-
-  class Murphy < Style
-
-    register_for :murphy
-
-    code_background = '#001129'
-    numbers_background = code_background
-    border_color = 'silver'
-    normal_color = '#C0C0C0'
-
-    CSS_MAIN_STYLES = <<-MAIN
-.CodeRay {
-  background-color: #{code_background};
-  border: 1px solid #{border_color};
-  font-family: 'Courier New', 'Terminal', monospace;
-  color: #{normal_color};
-}
-.CodeRay pre { margin: 0px; }
-
-div.CodeRay { }
-
-span.CodeRay { white-space: pre; border: 0px; padding: 2px; }
-
-table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px; }
-table.CodeRay td { padding: 2px 4px; vertical-align: top; }
-
-.CodeRay .line_numbers, .CodeRay .no {
-  background-color: #{numbers_background};
-  color: gray;
-  text-align: right;
-}
-.CodeRay .line_numbers tt { font-weight: bold; }
-.CodeRay .no { padding: 0px 4px; }
-.CodeRay .code { width: 100%; }
-
-ol.CodeRay { font-size: 10pt; }
-ol.CodeRay li { white-space: pre; }
-
-.CodeRay .code pre { overflow: auto; }
-    MAIN
-
-    TOKEN_COLORS = <<-'TOKENS'
-.af { color:#00C; }
-.an { color:#007; }
-.av { color:#700; }
-.aw { color:#C00; }
-.bi { color:#509; font-weight:bold; }
-.c  { color:#555; background-color: black; }
-
-.ch { color:#88F; }
-.ch .k { color:#04D; }
-.ch .dl { color:#039; }
-
-.cl { color:#e9e; font-weight:bold; }
-.co { color:#5ED; font-weight:bold; }
-.cr { color:#0A0; }
-.cv { color:#ccf; }
-.df { color:#099; font-weight:bold; }
-.di { color:#088; font-weight:bold; }
-.dl { color:black; }
-.do { color:#970; }
-.ds { color:#D42; font-weight:bold; }
-.e  { color:#666; font-weight:bold; }
-.er { color:#F00; background-color:#FAA; }
-.ex { color:#F00; font-weight:bold; }
-.fl { color:#60E; font-weight:bold; }
-.fu { color:#5ed; font-weight:bold; }
-.gv { color:#f84; }
-.hx { color:#058; font-weight:bold; }
-.i  { color:#66f; font-weight:bold; }
-.ic { color:#B44; font-weight:bold; }
-.il { }
-.in { color:#B2B; font-weight:bold; }
-.iv { color:#aaf; }
-.la { color:#970; font-weight:bold; }
-.lv { color:#963; }
-.oc { color:#40E; font-weight:bold; }
-.of { color:#000; font-weight:bold; }
-.op { }
-.pc { color:#08f; font-weight:bold; }
-.pd { color:#369; font-weight:bold; }
-.pp { color:#579; }
-.pt { color:#66f; font-weight:bold; }
-.r  { color:#5de; font-weight:bold; }
-.r, .kw  { color:#5de; font-weight:bold }
-
-.ke { color: #808; }
-
-.rx { background-color:#221133; }
-.rx .k { color:#f8f; }
-.rx .dl { color:#f0f; }
-.rx .mod { color:#f0b; }
-.rx .fu  { color:#404; font-weight: bold; }
-
-.s  { background-color:#331122; }
-.s  .s { background-color:#ffe0e0; }
-.s  .s  .s { background-color:#ffd0d0; }
-.s  .k { color:#F88; }
-.s  .dl { color:#f55; }
-
-.sh { background-color:#f0fff0; }
-.sh .k { color:#2B2; }
-.sh .dl { color:#161; }
-
-.sy { color:#Fc8; }
-.sy .k { color:#Fc8; }
-.sy .dl { color:#F84; }
-
-.ta { color:#070; }
-.tf { color:#070; font-weight:bold; }
-.ts { color:#D70; font-weight:bold; }
-.ty { color:#339; font-weight:bold; }
-.v  { color:#036; }
-.xt { color:#444; }
-
-.ins { background: #afa; }
-.del { background: #faa; }
-.chg { color: #aaf; background: #007; }
-.head { color: #f8f; background: #505 }
-
-.ins .ins { color: #080; font-weight:bold }
-.del .del { color: #800; font-weight:bold }
-.chg .chg { color: #66f; }
-.head .head { color: #f4f; }
-    TOKENS
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/styles/_map.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-module CodeRay
-module Styles
-
-  default :cycnus
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/styles/cycnus.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-module CodeRay
-module Styles
-
-  class Cycnus < Style
-
-    register_for :cycnus
-
-    code_background = '#f8f8f8'
-    numbers_background = '#def'
-    border_color = 'silver'
-    normal_color = '#000'
-
-    CSS_MAIN_STYLES = <<-MAIN
-.CodeRay {
-  background-color: #{code_background};
-  border: 1px solid #{border_color};
-  font-family: 'Courier New', 'Terminal', monospace;
-  color: #{normal_color};
-}
-.CodeRay pre { margin: 0px }
-
-div.CodeRay { }
-
-span.CodeRay { white-space: pre; border: 0px; padding: 2px }
-
-table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px }
-table.CodeRay td { padding: 2px 4px; vertical-align: top }
-
-.CodeRay .line_numbers, .CodeRay .no {
-  background-color: #{numbers_background};
-  color: gray;
-  text-align: right;
-}
-.CodeRay .line_numbers tt { font-weight: bold }
-.CodeRay .line_numbers .highlighted { color: red }
-.CodeRay .no { padding: 0px 4px }
-.CodeRay .code { width: 100% }
-
-ol.CodeRay { font-size: 10pt }
-ol.CodeRay li { white-space: pre }
-
-.CodeRay .code pre { overflow: auto }
-    MAIN
-
-    TOKEN_COLORS = <<-'TOKENS'
-.debug { color:white ! important; background:blue ! important; }
-
-.af { color:#00C }
-.an { color:#007 }
-.at { color:#f08 }
-.av { color:#700 }
-.aw { color:#C00 }
-.bi { color:#509; font-weight:bold }
-.c  { color:#888; }
-
-.ch { color:#04D }
-.ch .k { color:#04D }
-.ch .dl { color:#039 }
-
-.cl { color:#B06; font-weight:bold }
-.cm { color:#A08; font-weight:bold }
-.co { color:#036; font-weight:bold }
-.cr { color:#0A0 }
-.cv { color:#369 }
-.de { color:#B0B; }
-.df { color:#099; font-weight:bold }
-.di { color:#088; font-weight:bold }
-.dl { color:black }
-.do { color:#970 }
-.dt { color:#34b }
-.ds { color:#D42; font-weight:bold }
-.e  { color:#666; font-weight:bold }
-.en { color:#800; font-weight:bold }
-.er { color:#F00; background-color:#FAA }
-.ex { color:#C00; font-weight:bold }
-.fl { color:#60E; font-weight:bold }
-.fu { color:#06B; font-weight:bold }
-.gv { color:#d70; font-weight:bold }
-.hx { color:#058; font-weight:bold }
-.i  { color:#00D; font-weight:bold }
-.ic { color:#B44; font-weight:bold }
-
-.il { background: #ddd; color: black }
-.il .il { background: #ccc }
-.il .il .il { background: #bbb }
-.il .idl { background: #ddd; font-weight: bold; color: #666 }
-.idl { background-color: #bbb; font-weight: bold; color: #666; }
-
-.im { color:#f00; }
-.in { color:#B2B; font-weight:bold }
-.iv { color:#33B }
-.la { color:#970; font-weight:bold }
-.lv { color:#963 }
-.oc { color:#40E; font-weight:bold }
-.of { color:#000; font-weight:bold }
-.op { }
-.pc { color:#038; font-weight:bold }
-.pd { color:#369; font-weight:bold }
-.pp { color:#579; }
-.ps { color:#00C; font-weight:bold }
-.pt { color:#074; font-weight:bold }
-.r, .kw  { color:#080; font-weight:bold }
-
-.ke { color: #808; }
-.ke .dl { color: #606; }
-.ke .ch { color: #80f; }
-.vl { color: #088; }
-
-.rx { background-color:#fff0ff }
-.rx .k { color:#808 }
-.rx .dl { color:#404 }
-.rx .mod { color:#C2C }
-.rx .fu  { color:#404; font-weight: bold }
-
-.s { background-color:#fff0f0; color: #D20; }
-.s .s { background-color:#ffe0e0 }
-.s .s  .s { background-color:#ffd0d0 }
-.s .k { }
-.s .ch { color: #b0b; }
-.s .dl { color: #710; }
-
-.sh { background-color:#f0fff0; color:#2B2 }
-.sh .k { }
-.sh .dl { color:#161 }
-
-.sy { color:#A60 }
-.sy .k { color:#A60 }
-.sy .dl { color:#630 }
-
-.ta { color:#070 }
-.tf { color:#070; font-weight:bold }
-.ts { color:#D70; font-weight:bold }
-.ty { color:#339; font-weight:bold }
-.v  { color:#036 }
-.xt { color:#444 }
-
-.ins { background: #afa; }
-.del { background: #faa; }
-.chg { color: #aaf; background: #007; }
-.head { color: #f8f; background: #505 }
-
-.ins .ins { color: #080; font-weight:bold }
-.del .del { color: #800; font-weight:bold }
-.chg .chg { color: #66f; }
-.head .head { color: #f4f; }
-    TOKENS
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/styles/murphy.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-module CodeRay
-module Styles
-
-  class Murphy < Style
-
-    register_for :murphy
-
-    code_background = '#001129'
-    numbers_background = code_background
-    border_color = 'silver'
-    normal_color = '#C0C0C0'
-
-    CSS_MAIN_STYLES = <<-MAIN
-.CodeRay {
-  background-color: #{code_background};
-  border: 1px solid #{border_color};
-  font-family: 'Courier New', 'Terminal', monospace;
-  color: #{normal_color};
-}
-.CodeRay pre { margin: 0px; }
-
-div.CodeRay { }
-
-span.CodeRay { white-space: pre; border: 0px; padding: 2px; }
-
-table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px; }
-table.CodeRay td { padding: 2px 4px; vertical-align: top; }
-
-.CodeRay .line_numbers, .CodeRay .no {
-  background-color: #{numbers_background};
-  color: gray;
-  text-align: right;
-}
-.CodeRay .line_numbers tt { font-weight: bold; }
-.CodeRay .no { padding: 0px 4px; }
-.CodeRay .code { width: 100%; }
-
-ol.CodeRay { font-size: 10pt; }
-ol.CodeRay li { white-space: pre; }
-
-.CodeRay .code pre { overflow: auto; }
-    MAIN
-
-    TOKEN_COLORS = <<-'TOKENS'
-.af { color:#00C; }
-.an { color:#007; }
-.av { color:#700; }
-.aw { color:#C00; }
-.bi { color:#509; font-weight:bold; }
-.c  { color:#555; background-color: black; }
-
-.ch { color:#88F; }
-.ch .k { color:#04D; }
-.ch .dl { color:#039; }
-
-.cl { color:#e9e; font-weight:bold; }
-.co { color:#5ED; font-weight:bold; }
-.cr { color:#0A0; }
-.cv { color:#ccf; }
-.df { color:#099; font-weight:bold; }
-.di { color:#088; font-weight:bold; }
-.dl { color:black; }
-.do { color:#970; }
-.ds { color:#D42; font-weight:bold; }
-.e  { color:#666; font-weight:bold; }
-.er { color:#F00; background-color:#FAA; }
-.ex { color:#F00; font-weight:bold; }
-.fl { color:#60E; font-weight:bold; }
-.fu { color:#5ed; font-weight:bold; }
-.gv { color:#f84; }
-.hx { color:#058; font-weight:bold; }
-.i  { color:#66f; font-weight:bold; }
-.ic { color:#B44; font-weight:bold; }
-.il { }
-.in { color:#B2B; font-weight:bold; }
-.iv { color:#aaf; }
-.la { color:#970; font-weight:bold; }
-.lv { color:#963; }
-.oc { color:#40E; font-weight:bold; }
-.of { color:#000; font-weight:bold; }
-.op { }
-.pc { color:#08f; font-weight:bold; }
-.pd { color:#369; font-weight:bold; }
-.pp { color:#579; }
-.pt { color:#66f; font-weight:bold; }
-.r  { color:#5de; font-weight:bold; }
-.r, .kw  { color:#5de; font-weight:bold }
-
-.ke { color: #808; }
-
-.rx { background-color:#221133; }
-.rx .k { color:#f8f; }
-.rx .dl { color:#f0f; }
-.rx .mod { color:#f0b; }
-.rx .fu  { color:#404; font-weight: bold; }
-
-.s  { background-color:#331122; }
-.s  .s { background-color:#ffe0e0; }
-.s  .s  .s { background-color:#ffd0d0; }
-.s  .k { color:#F88; }
-.s  .dl { color:#f55; }
-
-.sh { background-color:#f0fff0; }
-.sh .k { color:#2B2; }
-.sh .dl { color:#161; }
-
-.sy { color:#Fc8; }
-.sy .k { color:#Fc8; }
-.sy .dl { color:#F84; }
-
-.ta { color:#070; }
-.tf { color:#070; font-weight:bold; }
-.ts { color:#D70; font-weight:bold; }
-.ty { color:#339; font-weight:bold; }
-.v  { color:#036; }
-.xt { color:#444; }
-
-.ins { background: #afa; }
-.del { background: #faa; }
-.chg { color: #aaf; background: #007; }
-.head { color: #f8f; background: #505 }
-
-.ins .ins { color: #080; font-weight:bold }
-.del .del { color: #800; font-weight:bold }
-.chg .chg { color: #66f; }
-.head .head { color: #f4f; }
-    TOKENS
-
-  end
-
-end
-end
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/token_classes.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-module CodeRay
-  class Tokens
-    ClassOfKind = Hash.new do |h, k|
-      h[k] = k.to_s
-    end
-    ClassOfKind.update with = {
-      :annotation => 'at',
-      :attribute_name => 'an',
-      :attribute_name_fat => 'af',
-      :attribute_value => 'av',
-      :attribute_value_fat => 'aw',
-      :bin => 'bi',
-      :char => 'ch',
-      :class => 'cl',
-      :class_variable => 'cv',
-      :color => 'cr',
-      :comment => 'c',
-      :complex => 'cm',
-      :constant => 'co',
-      :content => 'k',
-      :decorator => 'de',
-      :definition => 'df',
-      :delimiter => 'dl',
-      :directive => 'di',
-      :doc => 'do',
-      :doctype => 'dt',
-      :doc_string => 'ds',
-      :entity => 'en',
-      :error => 'er',
-      :escape => 'e',
-      :exception => 'ex',
-      :float => 'fl',
-      :function => 'fu',
-      :global_variable => 'gv',
-      :hex => 'hx',
-      :imaginary => 'cm',
-      :important => 'im',
-      :include => 'ic',
-      :inline => 'il',
-      :inline_delimiter => 'idl',
-      :instance_variable => 'iv',
-      :integer => 'i',
-      :interpreted => 'in',
-      :keyword => 'kw',
-      :key => 'ke',
-      :label => 'la',
-      :local_variable => 'lv',
-      :modifier => 'mod',
-      :oct => 'oc',
-      :operator_fat => 'of',
-      :pre_constant => 'pc',
-      :pre_type => 'pt',
-      :predefined => 'pd',
-      :preprocessor => 'pp',
-      :pseudo_class => 'ps',
-      :regexp => 'rx',
-      :reserved => 'r',
-      :shell => 'sh',
-      :string => 's',
-      :symbol => 'sy',
-      :tag => 'ta',
-      :tag_fat => 'tf',
-      :tag_special => 'ts',
-      :type => 'ty',
-      :variable => 'v',
-      :value => 'vl',
-      :xml_text => 'xt',
-      
-      :insert => 'ins',
-      :delete => 'del',
-      :change => 'chg',
-      :head => 'head',
-
-      :ident => :NO_HIGHLIGHT, # 'id'
-      #:operator => 'op',
-      :operator => :NO_HIGHLIGHT,  # 'op'
-      :space => :NO_HIGHLIGHT,  # 'sp'
-      :plain => :NO_HIGHLIGHT,
-    }
-    ClassOfKind[:method] = ClassOfKind[:function]
-    ClassOfKind[:open] = ClassOfKind[:close] = ClassOfKind[:delimiter]
-    ClassOfKind[:nesting_delimiter] = ClassOfKind[:delimiter]
-    ClassOfKind[:escape] = ClassOfKind[:delimiter]
-    #ClassOfKind.default = ClassOfKind[:error] or raise 'no class found for :error!'
-  end
-end
\ No newline at end of file
--- a/vendor/plugins/coderay-0.9.2/lib/coderay/tokens.rb	Thu Jan 20 09:59:02 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,388 +0,0 @@
-module CodeRay
-
-  # = Tokens
-  #
-  # The Tokens class represents a list of tokens returnd from
-  # a Scanner.
-  #
-  # A token is not a special object, just a two-element Array
-  # consisting of
-  # * the _token_ _kind_ (a Symbol representing the type of the token)
-  # * the _token_ _text_ (the original source of the token in a String)
-  #
-  # A token looks like this:
-  #
-  #   [:comment, '# It looks like this']
-  #   [:float, '3.1415926']
-  #   [:error, '$^']
-  #
-  # Some scanners also yield some kind of sub-tokens, represented by special
-  # token texts, namely :open and :close .
-  #
-  # The Ruby scanner, for example, splits "a string" into:
-  #
-  #  [
-  #   [:open, :string],
-  #   [:delimiter, '"'],
-  #   [:content, 'a string'],
-  #   [:delimiter, '"'],
-  #   [:close, :string]
-  #  ]
-  #
-  # Tokens is also the interface between Scanners and Encoders:
-  # The input is split and saved into a Tokens object. The Encoder
-  # then builds the output from this object.
-  #
-  # Thus, the syntax below becomes clear:
-  #
-  #   CodeRay.scan('price = 2.59', :ruby).html
-  #   # the Tokens object is here -------^
-  #
-  # See how small it is? ;)
-  #
-  # Tokens gives you the power to handle pre-scanned code very easily:
-  # You can convert it to a webpage, a YAML file, or dump it into a gzip'ed string
-  # that you put in your DB.
-  #
-  # Tokens' subclass TokenStream allows streaming to save memory.
-  class Tokens < Array
-    
-    # The Scanner instance that created the tokens.
-    attr_accessor :scanner
-    
-    # Whether the object is a TokenStream.
-    #
-    # Returns false.
-    def stream?
-      false
-    end
-
-    # Iterates over all tokens.
-    #
-    # If a filter is given, only tokens of that kind are yielded.
-    def each kind_filter = nil, &block
-      unless kind_filter
-        super(&block)
-      else
-        super() do |text, kind|
-          next unless kind == kind_filter
-          yield text, kind
-        end
-      end
-    end
-
-    # Iterates over all text tokens.
-    # Range tokens like [:open, :string] are left out.
-    #
-    # Example:
-    #   tokens.each_text_token { |text, kind| text.replace html_escape(text) }
-    def each_text_token
-      each do |text, kind|
-        next unless text.is_a? ::String
-        yield text, kind
-      end
-    end
-
-    # Encode the tokens using encoder.
-    #
-    # encoder can be
-    # * a symbol like :html oder :statistic
-    # * an Encoder class
-    # * an Encoder object
-    #
-    # options are passed to the encoder.
-    def encode encoder, options = {}
-      unless encoder.is_a? Encoders::Encoder
-        unless encoder.is_a? Class
-          encoder_class = Encoders[encoder]
-        end
-        encoder = encoder_class.new options
-      end
-      encoder.encode_tokens self, options
-    end
-
-
-    # Turn into a string using Encoders::Text.
-    #
-    # +options+ are passed to the encoder if given.
-    def to_s options = {}
-      encode :text, options
-    end
-
-    # Redirects unknown methods to encoder calls.
-    #
-    # For example, if you call +tokens.html+, the HTML encoder
-    # is used to highlight the tokens.
-    def method_missing meth, options = {}
-      Encoders[meth].new(options).encode_tokens self
-    end
-
-    # Returns the tokens compressed by joining consecutive
-    # tokens of the same kind.
-    #
-    # This can not be undone, but should yield the same output
-    # in most Encoders.  It basically makes the output smaller.
-    #
-    # Combined with dump, it saves space for the cost of time.
-    #
-    # If the scanner is written carefully, this is not required -
-    # for example, consecutive //-comment lines could already be
-    # joined in one comment token by the Scanner.
-    def optimize
-      last_kind = last_text = nil
-      new = self.class.new
-      for text, kind in self
-        if text.is_a? String
-          if kind == last_kind
-            last_text << text
-          else
-            new << [last_text, last_kind] if last_kind
-            last_text = text
-            last_kind = kind
-          end
-        else
-          new << [last_text, last_kind] if last_kind
-          last_kind = last_text = nil
-          new << [text, kind]
-        end
-      end
-      new << [last_text, last_kind] if last_kind
-      new
-    end
-
-    # Compact the object itself; see optimize.
-    def optimize!
-      replace optimize
-    end
-    
-    # Ensure that all :open tokens have a correspondent :close one.
-    #
-    # TODO: Test this!
-    def fix
-      tokens = self.class.new
-      # Check token nesting using a stack of kinds.
-      opened = []
-      for type, kind in self
-        case type
-        when :open
-          opened.push [:close, kind]
-        when :begin_line
-          opened.push [:end_line, kind]
-        when :close, :end_line
-          expected = opened.pop
-          if [type, kind] != expected
-            # Unexpected :close; decide what to do based on the kind:
-            # - token was never opened: delete the :close (just skip it)
-            next unless opened.rindex expected
-            # - token was opened earlier: also close tokens in between
-            tokens << token until (token = opened.pop) == expected
-          end
-        end
-        tokens << [type, kind]
-      end
-      # Close remaining opened tokens
-      tokens << token while token = opened.pop
-      tokens
-    end
-    
-    def fix!
-      replace fix
-    end
-    
-    # TODO: Scanner#split_into_lines
-    # 
-    # Makes sure that:
-    # - newlines are single tokens
-    #   (which means all other token are single-line)
-    # - there are no open tokens at the end the line
-    #
-    # This makes it simple for encoders that work line-oriented,
-    # like HTML with list-style numeration.
-    def split_into_lines
-      raise NotImplementedError
-    end
-
-    def split_into_lines!
-      replace split_into_lines
-    end
-
-    # Dumps the object into a String that can be saved
-    # in files or databases.
-    #
-    # The dump is created with Marshal.dump;
-    # In addition, it is gzipped using GZip.gzip.
-    #
-    # The returned String object includes Undumping
-    # so it has an #undump method. See Tokens.load.
-    #
-    # You can configure the level of compression,
-    # but the default value 7 should be what you want
-    # in most cases as it is a good compromise between
-    # speed and compression rate.
-    #
-    # See GZip module.
-    def dump gzip_level = 7
-      require 'coderay/helpers/gzip_simple'
-      dump = Marshal.dump self
-      dump = dump.gzip gzip_level
-      dump.extend Undumping
-    end
-
-    # The total size of the tokens.
-    # Should be equal to the input size before
-    # scanning.
-    def text_size
-      size = 0
-      each_text_token do |t, k|
-        size + t.size
-      end
-      size
-    end
-
-    # The total size of the tokens.
-    # Should be equal to the input size before
-    # scanning.
-    def text
-      map { |t, k| t if t.is_a? ::String }.join
-    end
-
-    # Include this module to give an object an #undump
-    # method.
-    #
-    # The string returned by Tokens.dump includes Undumping.
-    module Undumping
-      # Calls Tokens.load with itself.
-      def undump
-        Tokens.load self
-      end
-    end
-
-    # Undump the object using Marshal.load, then
-    # unzip it using GZip.gunzip.
-    #
-    # The result is commonly a Tokens object, but
-    # this is not guaranteed.
-    def Tokens.load dump
-      require 'coderay/helpers/gzip_simple'
-      dump = dump.gunzip
-      @dump = Marshal.load dump
-    end
-
-  end
-
-
-  # = TokenStream
-  #
-  # The TokenStream class is a fake Array without elements.
-  #
-  # It redirects the method << to a block given at creation.
-  #
-  # This allows scanners and Encoders to use streaming (no
-  # tokens are saved, the input is highlighted the same time it
-  # is scanned) with the same code.
-  #
-  # See CodeRay.encode_stream and CodeRay.scan_stream
-  class TokenStream < Tokens
-
-    # Whether the object is a TokenStream.
-    #
-    # Returns true.
-    def stream?
-      true
-    end
-
-    # The Array is empty, but size counts the tokens given by <<.
-    attr_reader :size
-
-    # Creates a new TokenStream that calls +block+ whenever
-    # its << method is called.
-    #
-    # Example:
-    #
-    #   require 'coderay'
-    #   
-    #   token_stream = CodeRay::TokenStream.new do |kind, text|
-    #     puts 'kind: %s, text size: %d.' % [kind, text.size]
-    #   end
-    #   
-    #   token_stream << [:regexp, '/\d+/']
-    #   #-> kind: rexpexp, text size: 5.
-    #
-    def initialize &block
-      raise ArgumentError, 'Block expected for streaming.' unless block
-      @callback = block
-      @size = 0
-    end
-
-    # Calls +block+ with +token+ and increments size.
-    #
-    # Returns self.
-    def << token
-      @callback.call(*token)
-      @size += 1
-      self
-    end
-
-    # This method is not implemented due to speed reasons. Use Tokens.
-    def text_size
-      raise NotImplementedError,
-        'This method is not implemented due to speed reasons.'
-    end
-
-    # A TokenStream cannot be dumped. Use Tokens.
-    def dump
-      raise NotImplementedError, 'A TokenStream cannot be dumped.'
-    end
-
-    # A TokenStream cannot be optimized. Use Tokens.
-    def optimize
-      raise NotImplementedError, 'A TokenStream cannot be optimized.'
-    end
-
-  end
-
-end
-
-if $0 == __FILE__
-  $VERBOSE = true
-  $: << File.join(File.dirname(__FILE__), '..')
-  eval DATA.read, nil, $0, __LINE__ + 4
-end
-
-__END__
-require 'test/unit'
-
-class TokensTest < Test::Unit::TestCase
-  
-  def test_creation
-    assert CodeRay::Tokens < Array
-    tokens = nil
-    assert_nothing_raised do
-      tokens = CodeRay::Tokens.new
-    end
-    assert_kind_of Array, tokens
-  end
-  
-  def test_adding_tokens
-    tokens = CodeRay::Tokens.new
-    assert_nothing_raised do
-      tokens << ['string', :type]
-      tokens << ['()', :operator]
-    end
-    assert_equal tokens.size, 2
-  end
-  
-  def test_dump_undump
-    tokens = CodeRay::Tokens.new
-    assert_nothing_raised do
-      tokens << ['string', :type]
-      tokens << ['()', :operator]
-    end
-    tokens2 = nil
-    assert_nothing_raised do
-      tokens2 = tokens.dump.undump
-    end
-    assert_equal tokens, tokens2
-  end
-  
-end
\ No newline at end of file
--- a/vendor/plugins/engines/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 b8328004b1bb94c84d90c0839cd7d41d
 2009-09-13T17:14:35.707881Z
 2887
@@ -72,7 +72,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 a523ea1465a566ae38fba96a99506ff3
 2008-07-12T10:17:14.809831Z
 1654
@@ -106,7 +106,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 f653a768811758cee11e21d4de00b381
 2009-10-07T16:43:50.656336Z
 2904
@@ -140,7 +140,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 e4f81ba26f0b10a838b3336ba263aaa5
 2009-09-13T17:14:35.707881Z
 2887
@@ -177,7 +177,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 41bb5eeb2864cd46438eefb1cb048c4d
 2009-02-21T11:04:50.579477Z
 2493
@@ -214,7 +214,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 6e112fd6d07885bef3fd5bd537fc1409
 2008-07-12T10:17:14.809831Z
 1654
@@ -248,7 +248,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 18cc761cb69b7735ecf0cdb0d9b6d640
 2009-09-13T17:14:35.707881Z
 2887
@@ -282,7 +282,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 7e25f2cbded59c24735a20510040bb74
 2008-07-12T10:17:14.809831Z
 1654
--- a/vendor/plugins/engines/generators/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/generators/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/generators
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/generators/plugin_migration/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/generators/plugin_migration/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/generators/plugin_migration
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators/plugin_migration
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-30T13:11:54.000000Z
+2011-03-03T11:05:12.000000Z
 3f4805cb1e4a8b8a3ed180f22d81c285
 2010-11-14T16:24:21.989522Z
 4406
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 d796f61555b36ef9941ea049c94df06b
 2008-07-12T10:17:14.809831Z
 1654
--- a/vendor/plugins/engines/generators/plugin_migration/templates/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/generators/plugin_migration/templates/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/generators/plugin_migration/templates
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/generators/plugin_migration/templates
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 0b30f95c4244242093ded274caf9e4a8
 2008-07-12T10:17:14.809831Z
 1654
--- a/vendor/plugins/engines/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 b9128ad79c06e8c2eb2474a7f9edf60d
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/lib/engines/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/lib/engines/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/lib/engines
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 f5e61f1312a19bdac20f06b7529eaa98
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 d084e8ccb3edfb9f481f2626ee9e57e1
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 a2cb2f3c517fbe62ab1277e44b0a05ed
 2009-02-21T11:04:50.579477Z
 2493
--- a/vendor/plugins/engines/lib/engines/plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/lib/engines/plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/lib/engines/plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines/plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 2adca63e7c7d7c38a91953458e893bb2
 2008-07-12T10:17:14.809831Z
 1654
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 21ac938bcf4f86e62ec21e9803cfd76e
 2009-02-21T11:04:50.579477Z
 2493
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 38eaf6e3b113f74daa0669c67261cc72
 2009-09-13T17:14:35.707881Z
 2887
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 d68941171066743dd63a174b5f270f66
 2008-07-12T10:17:14.809831Z
 1654
--- a/vendor/plugins/engines/lib/engines/rails_extensions/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/lib/engines/rails_extensions/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/lib/engines/rails_extensions
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/lib/engines/rails_extensions
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 3e26c9fe2cd009cb5e81f6ccea3f012c
 2009-02-21T11:04:50.579477Z
 2493
@@ -66,7 +66,7 @@
 
 
 
-2010-10-01T15:15:02.000000Z
+2011-03-03T11:05:12.000000Z
 c5a5e8b469c1e3fefcc5bedca9f4ac82
 2010-09-17T04:06:40.671348Z
 4094
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 6e29697f02c187c9033624422365044a
 2009-02-21T11:04:50.579477Z
 2493
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 f26da6a18ffcc7b846838f038a0abea4
 2008-07-12T10:17:14.809831Z
 1654
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 8f8e408b9f1a72af1cc5232ddb888266
 2009-02-21T11:04:50.579477Z
 2493
--- a/vendor/plugins/engines/tasks/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/tasks/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/tasks
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/tasks
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 10b9e5aacd9d0673e694f6ababd6ee3b
 2009-12-18T14:41:37.649419Z
 3186
--- a/vendor/plugins/engines/test/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/app/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/app/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/app
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/app/controllers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/app/controllers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/app/controllers
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/controllers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 8e2adc646126f3962ca1eaf16d663fa7
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/controllers/namespace/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/app/controllers/namespace/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/app/controllers/namespace
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/controllers/namespace
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 ed9f029690f9d77b31e0d68cff2f8ff3
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/helpers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/app/helpers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/app/helpers
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/helpers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 b3286b0384ccf10d15423a78b8a70c3a
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/models/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/app/models/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/app/models
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/models
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 53fd050b6dc2f5da77439ffab6e1dd6e
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 ffba288117364d8379bd2b6788e2fd2f
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/things/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/app/things/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/app/things
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/things
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 aaa0b6b1363b304ca66c8def3c543b13
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/views/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/app/views/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/app/views
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/app/views/app_and_plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/app/views/app_and_plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/app/views/app_and_plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/app_and_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 e6dca36d9e91414f1a520ffddb5202d7
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/views/namespace/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/app/views/namespace/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/app/views/namespace
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/namespace
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/app/views/namespace/app_and_plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/namespace/app_and_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 e6dca36d9e91414f1a520ffddb5202d7
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/views/notify_mail/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/app/views/notify_mail/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/app/views/notify_mail
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/notify_mail
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 8e367f8a525da2fddf6b32d5f874c6ba
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 50ed7a6afc64b4a326aa8b681a31b9a3
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 cb0d28ce47ca265d02f252970ac69194
 2009-09-13T17:14:35.707881Z
 2887
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 5a4f738dec733e5f4ad703495c5eb54a
 2009-09-13T17:14:35.707881Z
 2887
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:27.000000Z
+2011-03-03T11:05:12.000000Z
 3b779e7b00bfe0f9b876bfebd7905a4e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/app/views/plugin_mail/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/app/views/plugin_mail/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/app/views/plugin_mail
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/app/views/plugin_mail
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 d0e724c594c43b6db39389834f3c26e2
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 317dc13d851c827568f61def9b031803
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/functional/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/functional/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/functional
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/functional
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 53bf916868db17fcb64853aab45ce80b
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 03f318c931cb7d40733445e72a504c95
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 43b6ff22af92cc8988a51d1b50c4c587
 2009-09-13T17:14:35.707881Z
 2887
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 0ca8b6e7e4b7655c3633b11d4ff61cc6
 2009-09-13T17:14:35.707881Z
 2887
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 afcc79d3fa1c4f1615b271f65d982d8b
 2009-09-13T17:14:35.707881Z
 2887
@@ -202,7 +202,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 6bd25b9259dbf37b6d31e69f83a32fe0
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 1fde453d5263852d1ba9fc3dd90254fc
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 b00ea9b677cec76cd2fc19b1f66db3e2
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 52fd5b17adc2fec1950be496b5ff3a3d
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 b70de56fa165815bbab14f584b6fbdb4
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 9e56eb4864bc1877cc8a6e69ca873157
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 f9f42ac7db3bb715ff4f055162013aba
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 a24a7b9dd5706d2daef2456b1b1cac4c
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 b1c4a105ad8bfa7add28c583dbd9ef8a
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 43152818b40142db88dffe0192e66582
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/models
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/models
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 a661e69f87fead66873ac8cc162da128
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 01ab2dea5fd3e341bd082f2fc507f760
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 ae48cf4ce7068428c1525dba877a880c
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 eeb9900e088c367d06668e201e4be39e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 68deee946f4e81fafcae37d51f2e6bd5
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 3791a6748098d1382b11556ec47b6366
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 eeb9900e088c367d06668e201e4be39e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 eeb9900e088c367d06668e201e4be39e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 3bef9fe54ed08fd7ce454a189b2b3195
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 3bef9fe54ed08fd7ce454a189b2b3195
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 4799f34099980de6af0dc719c7f04845
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 e892323cf7ac415a30ca41b49ab96d1d
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/alpha_plugin/locales/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/alpha_plugin/locales
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/alpha_plugin/locales
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 8fb4d64b7ed263c84a6aa2974eb71f25
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/beta_plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/beta_plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -38,7 +38,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 cee45809cc705092eca4e13d3aa204f1
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/beta_plugin/app
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 6c633d0dcb606e532dd906bd2567bf57
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 df7f8bb84aa9fcbe07534d5aa59e11b8
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 a8bcbb79381d6db75a9ea6e2704828a9
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/models/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/models
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/models
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 c9a469b003eca7ac6627c41deeda1b4c
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/views
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 78db1a7e1a9f6216dfa3671e5d42c81b
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 78db1a7e1a9f6216dfa3671e5d42c81b
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/beta_plugin/locales/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/beta_plugin/locales
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/beta_plugin/locales
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 277816fa171800daec137e70993e39f6
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/not_a_plugin/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/not_a_plugin/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/not_a_plugin
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/not_a_plugin
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/not_a_plugin/public/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/not_a_plugin/public
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/not_a_plugin/public
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_assets
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets/app/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_assets/app
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/controllers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_assets/app/controllers
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/controllers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 ba97b09a04ada07aa57234ea8649c128
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_assets/app/views
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_assets/app/views/assets
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views/assets
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 5c22cfc5b27a3b2b869075baacf530a6
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 8a99331150683df5edbd645cb851de37
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets/public/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/public/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_assets/public
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/public
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets/public/subfolder/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_assets/public/subfolder
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets/public/subfolder
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_assets_directory/assets/subfolder
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:28.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_assets_with_no_subdirectory/assets
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_code_mixing/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_code_mixing/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_code_mixing
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_code_mixing
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 cee45809cc705092eca4e13d3aa204f1
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_code_mixing/app/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_code_mixing/app
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_code_mixing/app
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_code_mixing/app/things
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_code_mixing/app/things
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 3b8cfcd53b03ccc6db1aac5b542abaa4
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_load_path/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_load_path/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_load_path
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_load_path
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_migration/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_migration/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_migration
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_migration
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_migration/db/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_migration/db/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_migration/db
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_migration/db
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_migration/db/migrate/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_migration/db/migrate
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_migration/db/migrate
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 ba950e9dc666a42d09029148ae7e3234
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 de937ac5b434955daacc33306a5a1a2d
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 b9241da5bb8308bcea2f4cd5cbd32ff1
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_plugin_mailing
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_plugin_mailing/app
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 6bfa7a84bb26ae29617568896fec30ae
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 cf207341167ec099c0e0ffbe3935a4d4
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 c54772416c0a8c4f3d46880180299dd5
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 6f32fb0cf1bfbf4dcc8636f350a126e8
 2009-09-13T17:14:35.707881Z
 2887
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 6f32fb0cf1bfbf4dcc8636f350a126e8
 2009-09-13T17:14:35.707881Z
 2887
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 ededb32a08ab9582df24ce1572dc2a20
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_routing/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_routing/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_routing
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing
 http://redmine.rubyforge.org/svn
 
 
@@ -38,7 +38,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_routing/app/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_routing/app/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_routing/app
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/app
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_routing/app/controllers/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_routing/app/controllers
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/app/controllers
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 e5a27666b16bdff58054a3440cf14516
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 515669edfb53126155e911a1ae5149ec
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_routing/config/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_routing/config/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_routing/config
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_routing/config
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 47135f279d2e64a431d8604df1402ffb
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_testing/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_testing/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_testing
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing
 http://redmine.rubyforge.org/svn
 
 
@@ -38,7 +38,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_testing/app/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_testing/app/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_testing/app
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/app
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 9cbac832f86ac5e8cfbbc4c69811910e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_testing/test/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_testing/test/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_testing/test
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/test
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_testing/test/fixtures/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_testing/test/fixtures
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/test/fixtures
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 d41d8cd98f00b204e9800998ecf8427e
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/plugins/test_testing/test/unit/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/plugins/test_testing/test/unit
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/plugins/test_testing/test/unit
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 35e9fbc2fb32c9114a5d6cf531f41e8d
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/unit/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/unit/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/unit
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/unit
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 6724203a17cf765303c1f1cad440ec45
 2009-09-13T17:14:35.707881Z
 2887
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 45a0f490d23fbb62bab17f142ba7e3a6
 2009-09-13T17:14:35.707881Z
 2887
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 061b4ca6bf8ee79b149289ced48c0389
 2009-09-13T17:14:35.707881Z
 2887
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 caf5ed93e20f9675e13260049b591bcb
 2009-09-13T17:14:35.707881Z
 2887
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 d48da3c38e3e757d1649f48a25913284
 2009-09-13T17:14:35.707881Z
 2887
@@ -202,7 +202,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 ba3376b21f9304e1bc6dd06e88fb031f
 2009-09-13T17:14:35.707881Z
 2887
@@ -236,7 +236,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 7930dc88c66a78e10283af28694f9d75
 2009-09-13T17:14:35.707881Z
 2887
@@ -273,7 +273,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 da88ee34b7ad92288156f6dc33bc8945
 2009-09-13T17:14:35.707881Z
 2887
@@ -307,7 +307,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 749dec42d5f8db283afd40fa09a7a323
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/engines/test/unit/test_testing/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/engines/test/unit/test_testing/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/engines/test/unit/test_testing
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/engines/test/unit/test_testing
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 55340a07100e4eea865c224b450561d8
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/gravatar/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/gravatar/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/gravatar
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/gravatar
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-10-01T15:15:02.000000Z
+2011-03-03T11:05:12.000000Z
 dcfa5a7b3c1cc768b2c0e3ad1ab802d0
 2010-09-10T03:09:02.311267Z
 4072
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 3b03a1f4670e486bfc0a99ea42fcc661
 2009-08-02T04:19:44.367555Z
 2832
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 cd9b6943fc8fe58cdccef0b0215bf6bb
 2009-08-02T04:19:44.367555Z
 2832
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 7560c41dd1c4891e83f52d2855a6a4e9
 2008-10-30T02:58:04.259131Z
 1962
@@ -171,7 +171,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 b718f27e16d77b36a24720b5b902328f
 2008-10-30T02:58:04.259131Z
 1962
@@ -208,7 +208,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 e052390cb0624d4b81b7809e65db85f6
 2009-08-02T04:19:44.367555Z
 2832
--- a/vendor/plugins/gravatar/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/gravatar/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/gravatar/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/gravatar/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-11-30T13:11:54.000000Z
+2011-03-03T11:05:12.000000Z
 a25a3e98e0d582955ee8fd520f424273
 2010-11-14T16:24:21.989522Z
 4406
--- a/vendor/plugins/gravatar/spec/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/gravatar/spec/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/gravatar/spec
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/gravatar/spec
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-10-01T15:15:03.000000Z
+2011-03-03T11:05:12.000000Z
 26b23e5e988b11435e121bf53624d934
 2010-09-10T03:09:02.311267Z
 4072
--- a/vendor/plugins/open_id_authentication/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/open_id_authentication/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/open_id_authentication
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 b66b372df8374607d104228f41a06671
 2009-02-11T19:06:45.087605Z
 2438
@@ -72,7 +72,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 22579abfc9dc6a4cf475150e407e9a17
 2009-02-12T21:25:50.680468Z
 2458
@@ -109,7 +109,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 d23f4c2e6c00805d7172c76ad52ebe6f
 2009-02-11T19:06:45.087605Z
 2438
@@ -146,7 +146,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 45eb3e296a3591fca629d0c8eab71e4c
 2009-02-11T19:06:45.087605Z
 2438
--- a/vendor/plugins/open_id_authentication/generators/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/open_id_authentication/generators/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/open_id_authentication/generators
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 ee799e52b83b842fa2a879431195e9eb
 2009-02-11T19:06:45.087605Z
 2438
--- a/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/open_id_authentication_tables/templates
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 352b0b17c079fdf355c028a9b990b3b7
 2009-02-11T19:06:45.087605Z
 2438
--- a/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 f401bfd8b5d2dd3008d16bf79de8c1e4
 2009-02-11T19:06:45.087605Z
 2438
--- a/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/generators/upgrade_open_id_authentication_tables/templates
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 512b6bc6321e15e12a9eb5ef10317b73
 2009-02-11T19:06:45.087605Z
 2438
--- a/vendor/plugins/open_id_authentication/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/open_id_authentication/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/open_id_authentication/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-09-10T14:59:25.000000Z
+2011-03-03T11:05:12.000000Z
 c72f1bd48e8c2dfe4e84ba232fc40030
 2010-08-10T21:12:32.103531Z
 3933
--- a/vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/open_id_authentication/lib/open_id_authentication/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/open_id_authentication/lib/open_id_authentication
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/lib/open_id_authentication
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 1effe2a3ab6ff2cf3a4ffc288222b114
 2009-02-11T19:06:45.087605Z
 2438
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 9ed2aea6a3f0e76f21a84bf5bdb1bebe
 2009-02-11T19:06:45.087605Z
 2438
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 4aa743638f54375c2f1f25e62fa50bf3
 2009-02-11T19:06:45.087605Z
 2438
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 d05c8725996156d4cc153a2fc0891db8
 2009-02-11T19:06:45.087605Z
 2438
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 6a6fdfddabbc9ae4b8c11f69bc653107
 2009-02-11T19:06:45.087605Z
 2438
@@ -202,7 +202,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 42863e1d17d5af05e0e896d336def59c
 2009-02-11T19:06:45.087605Z
 2438
--- a/vendor/plugins/open_id_authentication/tasks/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/open_id_authentication/tasks/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/open_id_authentication/tasks
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/tasks
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 54b595ee92e0adb364a9086340b2af51
 2009-02-11T19:06:45.087605Z
 2438
--- a/vendor/plugins/open_id_authentication/test/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/open_id_authentication/test/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/open_id_authentication/test
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/open_id_authentication/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 9448478c6f6c999b3dfae03f9661a7a9
 2009-02-11T19:06:45.087605Z
 2438
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 218b9c429fce5d50a6de37d10d4c626a
 2009-02-11T19:06:45.087605Z
 2438
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 3ffcd8ee621212d3a963257c35cf565c
 2009-02-11T19:06:45.087605Z
 2438
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 26175162cebaa3962614100cac9726fc
 2009-02-11T19:06:45.087605Z
 2438
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 c3e483ae649f9324f093075331c26ed1
 2009-02-11T19:06:45.087605Z
 2438
--- a/vendor/plugins/prepend_engine_views/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/prepend_engine_views/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/prepend_engine_views
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/prepend_engine_views
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 720c397a2f5ed49f4436f5d9cbe0b5ec
 2009-09-13T17:14:35.707881Z
 2887
--- a/vendor/plugins/rfpdf/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/rfpdf/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/rfpdf
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 1da9fbada6119233134b3aab6c7d0edf
 2008-07-04T17:58:14.743502Z
 1623
@@ -72,7 +72,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 275a3dc6407eaf7c40f1d8f4e6b08803
 2006-11-21T18:34:04.275680Z
 49
@@ -106,7 +106,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 40cf182dab06e3de067375de5bbab322
 2006-11-21T18:34:04.275680Z
 49
@@ -140,7 +140,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 d58199e83ebcaa5d234764407c238bb2
 2006-11-21T18:34:04.275680Z
 49
--- a/vendor/plugins/rfpdf/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/rfpdf/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/rfpdf/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf/lib
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:29.000000Z
+2011-03-03T11:05:12.000000Z
 9667df0ee17c3893ec4025f214d990ee
 2006-11-21T18:34:04.275680Z
 49
--- a/vendor/plugins/rfpdf/lib/rfpdf/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/rfpdf/lib/rfpdf/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,7 +1,7 @@
 10
 
 dir
-4732
+4993
 http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf/lib/rfpdf
 http://redmine.rubyforge.org/svn
 
@@ -32,7 +32,7 @@
 
 
 
-2010-09-23T14:37:45.851779Z
+2011-03-03T11:05:12.000000Z
 ddaf6868455af432aac221e53aadc10a
 2008-06-07T08:39:06.277997Z
 1497
@@ -66,7 +66,7 @@
 
 
 
-2011-01-13T14:09:38.000000Z
+2011-03-03T11:05:12.000000Z
 a2f702c9c8177f01521aa9eb5d6f9313
 2011-01-01T11:45:12.617336Z
 4602
@@ -100,7 +100,7 @@
 
 
 
-2010-09-23T14:37:45.855835Z
+2011-03-03T11:05:12.000000Z
 61d6e8e3bc2a549b1adf12c8e5148019
 2010-02-07T12:30:44.486359Z
 3389
@@ -134,7 +134,7 @@
 
 
 
-2010-09-23T14:37:45.855835Z
+2011-03-03T11:05:12.000000Z
 f504607d615e4d100eb506daf3dfe038
 2006-11-21T18:34:04.275680Z
 49
@@ -168,7 +168,7 @@
 
 
 
-2010-09-23T14:37:45.855835Z
+2011-03-03T11:05:12.000000Z
 267f469d753d389beda7bb8d39ef5e79
 2007-02-18T10:33:22.252239Z
 248
@@ -202,7 +202,7 @@
 
 
 
-2010-09-23T14:37:45.851779Z
+2011-03-03T11:05:12.000000Z
 8b971319c65229a7075520cf5ce0fb84
 2006-11-21T18:34:04.275680Z
 49
@@ -236,7 +236,7 @@
 
 
 
-2010-09-23T14:37:45.851779Z
+2011-03-03T11:05:12.000000Z
 c11f99560b9b2e12cf9c679f8ef11c37
 2006-11-21T18:34:04.275680Z
 49
@@ -270,7 +270,7 @@
 
 
 
-2010-09-23T14:37:45.851779Z
+2011-03-03T11:05:12.000000Z
 48cd43d67257151aebb2e0aeee6f4cbf
 2007-03-01T19:49:04.518842Z
 287
@@ -304,7 +304,7 @@
 
 
 
-2010-09-23T14:37:45.855835Z
+2011-03-03T11:05:12.000000Z
 9bdec08cb98e4413cfb9c39877f3734d
 2008-07-04T17:58:14.743502Z
 1623
@@ -338,7 +338,7 @@
 
 
 
-2010-09-23T14:37:45.851779Z
+2011-03-03T11:05:12.000000Z
 e759935ac5ac9027073e9a2f3543b231
 2006-11-21T18:34:04.275680Z
 49
--- a/vendor/plugins/rfpdf/test/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/rfpdf/test/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/rfpdf/test
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/rfpdf/test
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 65b672e3025a6dc9ed22dc2cb1356061
 2006-11-21T18:34:04.275680Z
 49
--- a/vendor/plugins/ruby-net-ldap-0.0.4/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/ruby-net-ldap-0.0.4/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/ruby-net-ldap-0.0.4
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 100efd8d000514effa3709713ab85acb
 2007-01-02T08:48:40.736310Z
 134
@@ -72,7 +72,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 e951c712b462c2e6e01f12474d4a23c2
 2007-01-02T08:48:40.736310Z
 134
@@ -106,7 +106,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 ff6d66271209d878dbe3742d8061151e
 2007-01-02T08:48:40.736310Z
 134
@@ -140,7 +140,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 365281a5053e3232092adff0636600b3
 2007-01-02T08:48:40.736310Z
 134
--- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/ruby-net-ldap-0.0.4/lib/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/ruby-net-ldap-0.0.4/lib
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib
 http://redmine.rubyforge.org/svn
 
 
--- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/ruby-net-ldap-0.0.4/lib/net
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net
 http://redmine.rubyforge.org/svn
 
 
@@ -35,7 +35,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 bcd7fbc67923f3cc1491ca301a5c39cb
 2007-01-02T08:48:40.736310Z
 134
@@ -69,7 +69,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 47d5a9c76d96071a1de184dd49c09194
 2007-01-02T08:48:40.736310Z
 134
@@ -103,7 +103,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 40f7f978006674f2b916ce341e5ad684
 2008-02-15T17:22:21.293943Z
 1148
--- a/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 be6b5dd522a4532ceeda4ab5bddcb53e
 2007-01-02T08:48:40.736310Z
 134
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 dce002e156bf793b6219b50e5d4ede3a
 2007-01-02T08:48:40.736310Z
 134
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 39c1aa4a3ff36f2769b6855a4b56faa7
 2007-02-18T11:45:55.832750Z
 252
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 7acdae44250f47d4b177c0367865d5f7
 2007-01-02T08:48:40.736310Z
 134
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 7af528c0721148b904f82e64e523ee74
 2007-01-02T08:48:40.736310Z
 134
--- a/vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/entries	Thu Jan 20 09:59:02 2011 +0000
+++ b/vendor/plugins/ruby-net-ldap-0.0.4/tests/.svn/entries	Thu Mar 03 12:02:03 2011 +0000
@@ -1,8 +1,8 @@
 10
 
 dir
-4732
-http://redmine.rubyforge.org/svn/branches/1.1-stable/vendor/plugins/ruby-net-ldap-0.0.4/tests
+4993
+http://redmine.rubyforge.org/svn/trunk/vendor/plugins/ruby-net-ldap-0.0.4/tests
 http://redmine.rubyforge.org/svn
 
 
@@ -32,7 +32,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 d32a0d5d48658b30de358974dc588b6a
 2007-01-02T08:48:40.736310Z
 134
@@ -66,7 +66,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 9a4a1de4982131870bcc016b3062b563
 2007-01-02T08:48:40.736310Z
 134
@@ -100,7 +100,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 07fadb83b55212328945590db904016b
 2007-01-02T08:48:40.736310Z
 134
@@ -134,7 +134,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 f60b9471933a7a534097d3fd1fe38a18
 2007-01-02T08:48:40.736310Z
 134
@@ -168,7 +168,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 98e4a39b73665ed7c274457213d8e3d5
 2007-01-02T08:48:40.736310Z
 134
@@ -202,7 +202,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 a6eed10e89ba06f4ffa2da720bb1752f
 2007-01-02T08:48:40.736310Z
 134
@@ -236,7 +236,7 @@
 
 
 
-2010-08-12T15:03:30.000000Z
+2011-03-03T11:05:12.000000Z
 3dcbc8b4c3717fa97211a1d75a7fab4f
 2007-01-02T08:48:40.736310Z
 134